Merge branch 'master' of https://github.com/jackhumbert/qmk_firmware into modifier-release-fix

pull/182/head
Wojciech Siewierski 9 years ago
commit 47dd29513e

@ -1,9 +1,71 @@
@echo off
setx /M path "%PATH%;C:\MinGW\bin;C:\MinGW\msys\1.0\bin" > nul 2>&1
if NOT ["%errorlevel%"]==["0"] (
echo FAILED. Rerun with administrator privileges.
pause
) else (
echo Success!
pause
)
@SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
@ECHO OFF
SET CMDLINERUNSTR=%SystemRoot%\system32\cmd.exe
SET NEWPATH1="C:\MinGW\msys\1.0\bin"
SET NEWPATH2="C:\MinGW\bin"
:: Make sure paths exist
IF NOT EXIST !NEWPATH1! (ECHO Path not found: %NEWPATH1% && GOTO ExitBatch)
IF NOT EXIST !NEWPATH2! (ECHO Path not found: %NEWPATH2% && GOTO ExitBatch)
:: Add paths
CALL :AddPath %NEWPATH1%
CALL :AddPath %NEWPATH2%
:: Branch to UpdateEnv if we need to update
IF DEFINED UPDATE (GOTO UpdateEnv)
GOTO ExitBatch
:: -----------------------------------------------------------------------------
:UpdateEnv
ECHO Making updated PATH go live . . .
REG delete HKCU\Environment /F /V TEMPVAR > nul 2>&1
setx TEMPVAR 1 > nul 2>&1
REG delete HKCU\Environment /F /V TEMPVAR > nul 2>&1
IF NOT !cmdcmdline! == !CMDLINERUNSTR! (CALL :KillExplorer)
GOTO ExitBatch
:: -----------------------------------------------------------------------------
:ExitBatch
ENDLOCAL
PAUSE
EXIT /b
:: -----------------------------------------------------------------------------
:AddPath <pathToAdd>
ECHO %PATH% | FINDSTR /C:"%~1" > nul
IF ERRORLEVEL 1 (
REG add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v PATH /t REG_SZ /d "%PATH%;%~1" > nul 2>&1
IF ERRORLEVEL 0 (
ECHO Adding %1 . . . Success!
SET "PATH=%PATH%;%~1"
SET UPDATE=1
) ELSE (
ECHO Adding %1 . . . FAILED. Run this script with administrator privileges.
)
) ELSE (
ECHO Skipping %1 - Already in PATH
)
EXIT /b
:: -----------------------------------------------------------------------------
:KillExplorer
ECHO Your desktop is being restarted, please wait. . .
ping -n 5 127.0.0.1 > NUL 2>&1
ECHO Killing process Explorer.exe. . .
taskkill /f /im explorer.exe
ECHO.
ECHO Your desktop is now loading. . .
ping -n 5 127.0.0.1 > NUL 2>&1
ECHO.
ping -n 5 127.0.0.1 > NUL 2>&1
START explorer.exe
START explorer.exe %CD%
EXIT /b

@ -3,11 +3,13 @@
## Build Environment Setup
### Windows
1. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
2. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
3. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
4. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
5. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
1. If you have ever installed WinAVR, uninstall it.
2. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
3. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
4. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/jackhumbert/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
5. Right-click on the 1-setup-path-win batch script, select "Run as administrator", and accept the User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
6. Right-click on the 2-setup-environment-win batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
7. Future build commands should be run from the standard Windows command prompt, which you can find by searching for "command prompt" from the start menu or start screen. Ignore the "MHV AVR Shell".
### Mac
If you're using [homebrew,](http://brew.sh/) you can use the following commands:
@ -25,12 +27,12 @@ You can also try these instructions:
3. Install [DFU-Programmer][dfu-prog].
### Linux
Install AVR GCC and dfu-progammer with your favorite package manager.
Install AVR GCC, AVR libc, and dfu-progammer with your favorite package manager.
Debian/Ubuntu example:
sudo apt-get update
sudo apt-get install gcc-avr dfu-programmer
sudo apt-get install gcc-avr avr-libc dfu-programmer
### Vagrant
If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
@ -42,6 +44,9 @@ If you have any problems building the firmware, you can try using a tool called
4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process.
## Customizing, Building, and Deploying Your Firmware
Note: Some keyboard folders have non-standard organizations, and may not even support specifying alternate keymaps. Until these get reorganized, you will need to edit their default keymaps directly.
1. Running the `make` command from your keyboard's folder will generate a .hex file based on the default keymap. All keymaps for a particular keyboard live in the `keymaps` folder in that keyboard's folder. To create your own keymap, copy `keymaps/default/keymap.c` to the `keymaps` folder, and rename it with your name, for example jack.c. Or, if you don't care about the ability to share your keymap with the community via GitHub, you can just modify the default keymap itself. Details on how to program keymap files can be found in other guides.
2. To build a keymap other than the default, type `KEYMAP=<name>` after `make`. So if I've named my keymap jack.c, the full command would be `make KEYMAP=jack`.
3. How you deploy the firmware will depend on whether you are using a PCB or a Teensy. In both cases, you'll need to put the keyboard in bootloader mode, either by pressing a button on the PCB/Teensy or pressing the key with the `RESET` keycode. Then, if you're using a PCB, just run `make KEYMAP=<name> dfu` to both build and deploy the firmware. If you're using a Teensy, you'll probably need to take the <keyboardname>.hex file that make produces in the keyboard's folder, and deploy it using the [Teensy Loader.](https://www.pjrc.com/teensy/loader.html)

@ -290,7 +290,7 @@ For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring
RGBLIGHT_ENABLE = yes
Please note that the underglow is not compatible with MIDI functions. So you cannot enable both of them at the same time.
Please note that the underglow is not compatible with audio output. So you cannot enable both of them at the same time.
Please add the following options into your config.h, and set them up according your hardware configuration.

@ -0,0 +1,25 @@
#include "Bantam44.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
matrix_init_user();
}
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
}

@ -0,0 +1,29 @@
#ifndef BANTAM44_H
#define BANTAM44_H
#include "matrix.h"
#include "keymap_common.h"
#include "backlight.h"
#include <stddef.h>
// This a shortcut to help you visually see your layout.
// The following is an example using the Planck MIT layout
// 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, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
K30, K31, K32, K33, K34, K35, K36, K37, K38 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, K2A }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
{ K30, K31, K32, KC_NO, K33, KC_NO, K34, KC_NO, K35, K36, K37, K38 }, \
}
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -0,0 +1,139 @@
#----------------------------------------------------------------------------
# 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 = Bantam44
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = Bantam44.c
ifdef KEYMAP
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymaps/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=512
# 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
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# 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

@ -0,0 +1,24 @@
Bantam44 keyboard firmware
======================
## Quantum MK Firmware
For the full Quantum feature list, see [the parent README.md](/README.md).
## Building
Download or clone the whole firmware and navigate to the keyboard/Bantam44 folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

@ -0,0 +1,81 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER Bantam Keyboards
#define PRODUCT Bantam44
#define DESCRIPTION A custom keyboard
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 12
// Planck PCB default pin-out
// Change this to how you wired your keyboard
// COLS: Left to right, ROWS: Top to bottom
#define COLS (int []){ B0, B1, B2, B3, B7, D0, B6, F7, F6, F5, F4, F1 }
#define ROWS (int []){ F0, D6, D4, D5 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
#define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 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

@ -0,0 +1,30 @@
#include "Bantam44.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = { /* Base */
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
{KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_NO, KC_ENT },
{KC_CAPS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT },
{KC_LCTL, KC_LGUI, KC_LALT, KC_NO, MO(1), KC_NO, KC_SPC, KC_NO, MO(2), KC_SCLN, KC_QUOT, KC_SLSH }
},
[1] = { /* LOWER */
{KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT },
{KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_GRV, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_NO, KC_ENT },
{KC_CAPS, KC_LSFT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NO, KC_HOME, KC_PGUP, KC_RSFT },
{KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_TRNS, KC_NO, KC_SPC, KC_NO, KC_TRNS, KC_END, KC_PGDN, KC_EXLM }
},
[2] = { /* RAISE */
{KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT },
{KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_NO, KC_ENT },
{KC_CAPS, KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_UP, KC_RSFT },
{KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_TRNS, KC_NO, KC_SPC, KC_NO, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT }
}
};
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
{
return MACRO_NONE;
};

@ -53,9 +53,9 @@ SRC = keymap_common.c \
led.c
ifdef KEYMAP
SRC := keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymap_plain.c $(SRC)
SRC := keymaps/default.c $(SRC)
endif
CONFIG_H = config.h

@ -54,9 +54,9 @@ SRC = atomic.c \
backlight.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
SRC := keymaps/default.c $(SRC)
endif
CONFIG_H = config.h

@ -16,10 +16,10 @@ Depending on which keymap you would like to use, you will have to compile slight
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

@ -1,16 +1,16 @@
#include "atomic.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
@ -25,16 +25,12 @@ void * matrix_init_kb(void) {
DDRE |= (1<<6);
PORTE |= (1<<6);
if (matrix_init_user) {
(*matrix_init_user)();
}
};
matrix_init_user();
}
void * matrix_scan_kb(void) {
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
if (matrix_scan_user) {
(*matrix_scan_user)();
}
};
matrix_scan_user();
}

@ -24,7 +24,7 @@
{ K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -53,9 +53,9 @@ TARGET_DIR = .
SRC = atreus.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
SRC := keymaps/default.c $(SRC)
endif
ifdef TEENSY2

@ -177,10 +177,10 @@ Depending on which keymap you would like to use, you will have to compile slight
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

@ -1,16 +1,16 @@
#include "atreus.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
@ -19,7 +19,7 @@ void * matrix_init_kb(void) {
}
};
void * matrix_scan_kb(void) {
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)

@ -22,7 +22,7 @@
{ k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -0,0 +1,19 @@
#!/bin/bash
#a tool to fix broken keymaps as a result of pull request #190
#changing the declaration of matrix_scan_user() and matrix_init_user()
#
#This script will save a copy of the specified keymap as keymap.c.bak
#and then create a new keymap.c with the definion corrected.
#this script must be run from the ergodox_ez directory
if [ $# -ne 1 ]; then
echo $0: usage: ./190hotfix keymap_name
exit 1
fi
echo Saving backup as ./keymaps/$1/keymap.c.bak ...
mv ./keymaps/$1/keymap.c ./keymaps/$1/keymap.c.bak
echo Modifying ./keymaps/$1/keymap.c ...
cat ./keymaps/$1/keymap.c.bak | sed -r 's/^void \* matrix_/void matrix_/'>./keymaps/$1/keymap.c
echo Complete!

@ -5,16 +5,16 @@ bool i2c_initialized = 0;
uint8_t mcp23018_status = 0x20;
__attribute__ ((weak))
void * matrix_init_user(void) {
return NULL;
};
void matrix_init_user(void) {
}
__attribute__ ((weak))
void * matrix_scan_user(void) {
return NULL;
};
void matrix_scan_user(void) {
}
void * matrix_init_kb(void) {
void matrix_init_kb(void) {
// keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
TCCR1A = 0b10101001; // set and configure fast PWM
TCCR1B = 0b00001001; // set and configure fast PWM
@ -34,21 +34,12 @@ void * matrix_init_kb(void) {
ergodox_blink_all_leds();
if (matrix_init_user) {
(*matrix_init_user)();
}
return NULL;
};
void * matrix_scan_kb(void) {
if (matrix_scan_user) {
(*matrix_scan_user)();
}
matrix_init_user();
}
return NULL;
};
void matrix_scan_kb(void) {
matrix_scan_user();
}
void ergodox_blink_all_leds(void)

@ -123,8 +123,8 @@ inline void ergodox_led_all_set(uint8_t n)
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
void matrix_init_user(void);
void matrix_scan_user(void);

File diff suppressed because it is too large Load Diff

@ -158,12 +158,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -243,12 +243,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void)
void matrix_scan_user(void)
{
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 546 KiB

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 KiB

After

Width:  |  Height:  |  Size: 379 KiB

@ -3,8 +3,7 @@
#include "action_layer.h"
#define BASE 0 // default layer
#define QWERTY 1 // qwerty keys
#define FKEYS 2 // F keys + macros
#define FKEYS 1 // F keys + macros
#define MACRO_PUBLIC 10
#define MACRO_PRIVATE 11
@ -43,12 +42,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Tab~CL| < | > | | | & | | = | + | - | * | L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* |. ~L1 | , ~L2| |Home~L1| End~L2|
* ,------|------|------| |------+--------+------.
* |. ~L1 | , | |Home |End~L1|
* ,------|------|------| |------+------+------.
* | | | Copy | | UP | | |
* | Enter| Space|------| |------| Space |Enter |
* | ~LSFT| ~WIN | Past | | DOWN | ~WIN | ~LSFT|
* `--------------------' `----------------------'
* | Enter| Space|------| |------| Space|Enter |
* | ~WIN | ~LSFT| Past | | DOWN | ~LSFT| ~WIN |
* `--------------------' `--------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
@ -59,110 +58,68 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCBR, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_RCBR, ALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_SLASH,
CTL_T(KC_TAB), LSFT(KC_COMMA),LSFT(KC_DOT),KC_PIPE,KC_AMPR,
LT(1,KC_DOT), LT(2,KC_COMM),
LT(1,KC_DOT), KC_COMM,
LCTL(KC_C),
SFT_T(KC_ENTER),GUI_T(KC_SPACE),LCTL(KC_V),
GUI_T(KC_ENTER),SFT_T(KC_SPACE),LCTL(KC_V),
// right hand
LCTL(KC_S) , KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRACKET,
KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRACKET,
KC_H, KC_J, KC_K, KC_L, KC_UNDS,LCTL(KC_Y),
KC_SCOLON,KC_N, KC_M, KC_QUOTE ,KC_EXLM , LSFT(KC_SLASH), LCTL(KC_Z),
KC_EQUAL,KC_PLUS , KC_MINUS,KC_ASTR , TG(1),
LT(2,KC_HOME), LT(1,KC_END),
KC_HOME, LT(1,KC_END),
KC_UP,
KC_DOWN,GUI_T(KC_SPACE), SFT_T(KC_ENTER)
),
/* Keymap 1: QWERTY layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
* |--------+------+------+------+------+------| Tab | | Esc |------+------+------+------+------+--------|
* | LSHFT | Z | X | C | V | B | | | | N | M | , | . | / | \ |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | CTRL | WIN | ALT |ALT GR| Esc | | PgUp | PgDw | Ins | PtSc | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | Cut | | | |
* ,------|------|------| |------+--------+------.
* | | | | | | | |
* | | |------| |------| Left | Right|
* | | | | | | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[QWERTY] = KEYMAP( // layer 2 : QWERTY
// left hand
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINUS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS,
KC_ESCAPE, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TAB,
KC_LCTRL, KC_LGUI,KC_LALT, KC_RALT, KC_ESCAPE,
KC_TRNS, LCTL(KC_X),
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_EQUAL , KC_6, KC_7, KC_8, KC_9, KC_0, 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_SCOLON, KC_QUOTE,
KC_ESCAPE,KC_N, KC_M, KC_TRNS,KC_DOT , KC_SLASH, KC_NONUS_BSLASH,
KC_PGUP , KC_PGDOWN,KC_INSERT ,KC_PSCREEN, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS,KC_LEFT, KC_RIGHT
KC_DOWN,SFT_T(KC_SPACE), GUI_T(KC_ENTER)
),
/* Keymap 2: F keys + macros
/* Keymap 1: F keys + macros
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | Calc | F6 | F7 | F8 | F9 | F10 | F11 |
* | ESC | F1 | F2 | F3 | F4 | F5 | ` | | Calc | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | |Public|Static|string|int |return| | | |//TODO| | | | | F12 |
* | Tab |Public|Static|string|int |return| | | |//TODO| | | | | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | |Privat|Const |var |float |null |------| |------|new | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* |--------+------+------+------+------+------| \ | | ~ |------+------+------+------+------+--------|
* | | | |void |bool |break;| | | |(); | | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | Alt | | | | | | | | | |
* | | WIN | Alt | | | | PgUp | PgDw | Ins | PtSc | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | Cut | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | |------| |------| Left | Right|
* | | | | | | | |
* `--------------------' `--------------------'
*/
// FKEYS + MACROS
[FKEYS] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,M(MACRO_PUBLIC),M(MACRO_STATIC), M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
KC_ESCAPE,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_GRAVE,
KC_TAB,M(MACRO_PUBLIC),M(MACRO_STATIC), M(MACRO_STRING),M(MACRO_INT),M(MACRO_RETURN),KC_TRNS,
KC_TRNS,M(MACRO_PRIVATE),M(MACRO_CONST), M(MACRO_VAR),M(MACRO_FLOAT),M(MACRO_NULL),
KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_TRNS,
KC_TRNS,KC_LALT,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,M(MACRO_VOID),M(MACRO_BOOL),M(MACRO_BREAK),KC_BSLASH,
KC_TRNS,KC_LGUI,KC_LALT,KC_TRNS,KC_TRNS,
KC_TRNS,LCTL(KC_X),
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_CALCULATOR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, M(MACRO_TODO), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
M(MACRO_NEW), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(MACRO_PARENTHESE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TILD, M(MACRO_PARENTHESE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_PGUP,KC_PGDOWN, KC_INSERT, KC_PSCREEN, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
KC_TRNS, KC_LEFT, KC_RIGHT
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(QWERTY) // FN1 - Momentary Layer 1
[1] = ACTION_LAYER_TAP_TOGGLE(FKEYS) // FN1 - Momentary Layer 1
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@ -253,12 +210,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -4,6 +4,8 @@
* Feb 12, 2016 (V1):
* First version commit
* Mar 20, 2016 (V2):
* Removed "Classic QWERTY" layer, inverted GUI and SHIFT on Hold for Space and Enter
## About
This layout was conceived in an attempt to optimise keyboard layout for developers (C# more specifically, but it can work with most of other languages), and limit the keys required to perform the most frequent actions.
@ -38,7 +40,6 @@ Still there are many way to improve or iterate on this:
* Make it language agnostic
* Check and compile language's keyboard's heatmaps to statistically define keys priority (e.g. https://dzone.com/articles/most-pressed-keys-various )
* QWERTY is still not the most efficient typing layout, I would like to create a Dvorak based similar layout in a near futur
* Layout 1 is mainly here for safety, most of its unique keys could be transfered to Layout 2 and it could then be removed
## Issues
One of the issues encountered while creating this layout was that I did not find a way to have a key to send a modifier on hold, and a key combination while pressed (e.g. I can't set a Key to do Save (Ctrl + S) when pressed and Shift modifier when hold )

File diff suppressed because it is too large Load Diff

@ -154,12 +154,12 @@ 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) {
return NULL;
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
/* leds is a static array holding the current brightness of each of the
* three keyboard LEDs. It's 4 long simply to avoid the ugliness of +1s and
* -1s in the code below, and because wasting a byte really doesn't matter
@ -191,5 +191,5 @@ void * matrix_scan_user(void) {
}
}
return NULL;
};

File diff suppressed because it is too large Load Diff

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -158,12 +158,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -200,12 +200,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -0,0 +1,29 @@
# ErgoDox EZ Dvorak International Squisher
Dvorak layout adjusted with several (linux) applications in mind:
* Easier Escape for VIM
* Windows/Super key for awesome WM
* Alt+Shift for international characters
* PrintScreen for sys-rq
* Insert for the X11 clip-board
Major layer changes:
* Common multimedia keys are integrated into layer 0, less common into layer 1
* No mouse keys
* Layer 2 is qwerty (for easier gaming & less fortunate keyboard users)
Known issues:
* Alt+Shift does not work reliably (depends on the X11 kb layout? Not
entirely clear...)
![layer0](keyboard-layout0.png)
![layer1](keyboard-layout1.png)
![layer2](keyboard-layout2.png)
## Changelog
* 2016-03-29
* Initial release

@ -0,0 +1,1127 @@
:100000000C9465020C94AC020C94AC020C94AC02FF
:100010000C94AC020C94AC020C94AC020C94AC02A8
:100020000C94AC020C94AC020C94B50B0C94870CA1
:100030000C94AC020C94AC020C94AC020C94AC0288
:100040000C94AC020C943B210C94AC020C94AC02CA
:100050000C94AC020C94C71A0C94AC020C94AC0235
:100060000C94AC020C94AC020C94AC020C94AC0258
:100070000C94AC020C94AC020C94AC020C94AC0248
:100080000C94AC020C94AC020C94AC020C94AC0238
:100090000C94AC020C94AC020C94AC020C94AC0228
:1000A0000C94AC020C94AC020C94AC02F40C160D43
:1000B000040E160D040E5B0D7E0D040ED30DE60D21
:1000C000D110D11000110011431181119A139A130C
:1000D0009A119A139B129B126E139A139A138513FB
:1000E0000000F0A12E0029002A00E1003581000067
:1000F0001E00340004003371E2004D001F00360082
:1001000012001400E3002B002000370008000D004F
:1001100050002C002100130018000E004F004A0070
:1001200022001C000C001B0000006571B6004C0092
:100130000000007F00000154AE004900000000777D
:1001400000000254230009000700050000004600DB
:1001500024000A000B00100052004B00250006008E
:1001600017001A0051002800260015001100190080
:100170002F00E51427000F0016001D7130004E00FF
:10018000318238002D00E500C100000001000100AF
:1001900001000100010000003A001E0220022202BC
:1001A000010001003B001F022102230201000100A7
:1001B0003C002F0226022F00AC0001003D0030025F
:1001C00027023000AB0001003E003102350035024D
:1001D000000001000100010000000100000001001A
:1001E0000100010000000100000001003F0052007A
:1001F00051002402000001004000240021001E00E4
:100200000100A9004100250022001F003700010065
:1002100042002600230020002700A80043002502FA
:100220002E0231002E00AA0044004500010001000A
:1002300001000000010001000100010001000000B8
:100240000100140004001D710100010001001A00EA
:1002500016001B0001000100010008000700060055
:100260000100010001001500090019000100010052
:10027000010017000A000500000001000100010054
:100280000000010000000100010001000000010069
:100290000000010001001C000B0011000000010023
:1002A000010018000D0010000100010001000C0009
:1002B0000E00360001000100010012000F0037009F
:1002C00001000100010013003382387101000100B8
:1002D00001000100010001000100000016034500BB
:1002E000720067006F0044006F0078002000450036
:1002F0005A00000016034500720067006F004400BA
:100300006F007800200045005A0000000403090433
:1003100009026D00040100A0FA09040000010301B4
:100320000100092111010001223F00070581030896
:10033000000A090401000103010200092111010062
:1003400001224D000705820308000A09040200018A
:100350000300000009211101000122360007058376
:100360000308000A09040300010300000009211129
:100370000100012239000705840310000112011059
:100380000100000008EDFE07130100010200010555
:10039000010906A101050719E029E71500250195C6
:1003A0000875018102050819012905950575019156
:1003B000029501750391010507190029771500259C
:1003C00001957875018102C005010980A1018502AE
:1003D00016010026B7001A01002AB7007510950112
:1003E0008100C0050C0901A1018503160100269CAE
:1003F000021A01002A9C02751095018100C00501B6
:100400000902A1010901A100050919012905150029
:10041000250195057501810295017503810105018D
:10042000093009311581257F950275088106093843
:100430001581257F950175088106050C0A3802157E
:1004400081257F950175088106C0C005010906A1B7
:1004500001050719E029E7150025019508750181B7
:100460000295017508810105081901290595057591
:100470000191029501750391010507190029FF15E6
:100480000025FF950675088100C0000000000000EF
:100490000000000000010204060A0F17202C3A4A4F
:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
:1004B000B39D87715D4A3A2C20170F0A060402018A
:1004C0000000000000000000000011241FBECFEF5C
:1004D000DAE0DEBFCDBF04B603FE27C08091EF0196
:1004E0009091F001A091F101B091F2018730904B11
:1004F000A740B04BD1F41092EF011092F00110928E
:10050000F1011092F20114BE84B7877F84BF0FB649
:10051000F894A895809160008861809360001092A3
:1005200060000FBEE0E0FFE3099511E0A0E0B1E05C
:10053000E8E1F6E402C005900D92A433B107D9F7C3
:1005400021E0A4E3B1E001C01D92AF3EB207E1F7A4
:100550000E94F6080C940A230C94000061110BC051
:10056000FC018281882321F085EE0E94660F03C082
:1005700085EE0E942E1080E090E00895089560912D
:10058000B1017091B2018091B3019091B4010E94C8
:10059000F01956985E9825982D9826982E982798A9
: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
:10083000836F81BBA6E3B1E0E4E4F1E08EE08E0FCC
:1008400011921D928E13FCCF0C943603BF92CF925F
:10085000DF92EF92FF920F931F93CF93DF938091DC
:100860000001882379F0809135018F5F80933501F5
:10087000811108C00E944C0380930001811102C0C5
:100880000E94DE0206E311E0C0E0D0E0DD24D39454
:1008900082E0C82EEE24E394F12CC730D10500F598
:1008A00080910001811164C080E40E94A1038093C3
:1008B0000001811112C082E10E94CB0380930001EC
:1008C00081110BC0C7010C2E01C0880F0A94EAF7F2
:1008D00080950E94CB03809300010E94C30348C00F
:1008E000CA30A1F028F4C83059F0C93061F005C011
:1008F000CC3089F070F0CD3089F0209A289810C063
:10090000219A29980DC0229A2A980AC0239A2B98D6
:1009100007C0529A01C0539A5B9802C03E9A46980B
:1009200090EA9A95F1F79FB1799902C082E001C0EF
:1009300080E091709D25982B7C9902C084E001C0D5
:1009400080E0892B7D9902C038E001C030E0832B24
:100950007E9902C020E101C020E0822B9FB19095DA
:10096000991F9927991F9295990F907E892B0FC0F7
:1009700080910001811149C080E40E94A10380930D
:100980000001882379F1B12C0E94C3038B2DF8015B
:100990009081981719F08083C09201010E94E603AC
:1009A00021960F5F1F4FCE30D10509F076CF809191
:1009B0000101882361F1815080930101882339F07E
:1009C0008FE99FE00197F1F700C0000020C0A4E488
:1009D000B1E0E6E3F1E0CF01825F91919D938E1348
:1009E000FCCF15C083E10E94CB03809300018111ED
:1009F000CACF81E40E94A103809300018111C3CF7B
:100A00000E94DC03B82EB094BFCF80E0C0CF0E941C
:100A1000DC0281E0DF91CF911F910F91FF90EF9069
:100A2000DF90CF90BF900895E82FF0E0EC5BFE4F91
:100A30008081089508958B3B910578F4883A91055B
:100A400040F5853A9105D0F48430910508F0B1C0A5
:100A50008130910509F4ADC06BC0803E910508F46A
:100A600067C0883E910508F4A4C09C01205F31094D
:100A70002031310508F05CC090650895853A9105F4
:100A800009F459C0863A910509F058C082E890E40B
:100A90000895883A910509F454C0893A910509F4FA
:100AA00053C08A3A910509F452C08B3A910509F472
:100AB00051C08C3A910509F450C08D3A910509F462
:100AC0004FC0803B910509F44EC08E3A910509F460
:100AD0004DC08F3A910509F44CC0813B910509F452
:100AE0004BC0823B910509F44AC0833B910509F450
:100AF00049C0843B910509F448C0853B910509F440
:100B000047C0863B910509F446C0873B910509F42F
:100B100045C0883B910509F444C0893B910509F41F
:100B200043C08A3B910509F442C080E094E40895F3
:100B300080E090E0089581E890E4089583E890E4EF
:100B4000089582EE94E4089589EE94E408958AEE7F
:100B500094E4089585EB94E4089586EB94E4089575
:100B600087EB94E408958CEC94E408958DEC94E480
:100B7000089583E895E408958AE895E4089582E964
:100B800095E4089584E995E4089581E296E4089552
:100B900083E296E4089584E296E4089585E296E47B
:100BA000089586E296E4089587E296E408958AE23D
:100BB00096E40895089596E0799FF001112494E554
:100BC000899FE00DF11D1124E60FF11DEE0FFF1FAF
:100BD000EC51FF4F859194910895880F991FFC0166
:100BE000E05AF040859194910895880F991FFC0177
:100BF000E052FF4F85919491089526E0729FF00195
:100C0000112444E5849FE00DF11D1124E60FF11D30
:100C1000EE0FFF1FEC51FF4F859194919C013A9587
:100C200021154FE1340708F41CC13F512115304113
:100C300020F49F700E94F50508959C013053211502
:100C4000304118F49927906C0895811520E592079A
:100C500071F40E94BE134FEF84E39CE0415080404A
:100C60009040E1F700C000000E94EC1AFAC0813009
:100C700020E5920731F48091CD0181608093CD0110
:100C8000F0C09C0130552115304108F051C0292F8A
:100C900033272F70332721303105D9F4AC0143704D
:100CA000552702C0220F331F4A95E2F73C68AC017A
:100CB00064E0440F551F6A95E1F744275370242BD5
:100CC000352B73E0880F991F7A95E1F78076992785
:100CD0001DC02230310529F4982F8827816F906A32
:100CE000089523303105A9F4AC014370552721E064
:100CF00030E002C0220F331F4A95E2F73C6843E020
:100D0000880F991F4A95E1F7807E9770822B932B6D
:100D1000089524303105E1F4AC014370552721E0FA
:100D200030E002C0220F331F4A95E2F73A68E7CF5E
:100D30009C0130572115304118F49F70906208953E
:100D40009C0130582115304118F49F70906A089525
:100D5000803E9105E0F4803C910558F58133910582
:100D600009F46FC048F48932910509F463C08A32EE
:100D7000910509F46DC072C089339105E9F082389C
:100D80009105D1F08533910509F44DC067C0833ECC
:100D9000910581F138F4803E9105B9F0823E9105CC
:100DA000D9F05CC0863E910561F1873E9105A1F1C5
:100DB00055C00E94ED0508952091E00120FD02C07C
:100DC00021FF4CC080EE90E049C08091E00180FF9F
:100DD000F9CF89E390E042C08091E00182FF0EC02C
:100DE0008091E00184FF03C080E090E037C083EE93
:100DF00090E034C08091E00182FFF2CF82EE90E07B
:100E00002DC08091E00183FF0BC08091E00184FD43
:100E1000EBCF87EE90E022C08091E00183FFF5CF19
:100E200086EE90E01BC08091E00185FF07C089E25B
:100E300090E014C08091E00185FFF9CF85E390E058
:100E40000DC08091E00186FF07C08AE290E006C0F5
:100E50008091E00186FFF9CF81E390E00E941B05BD
:100E60000895089508950C943207809162010895C1
:100E7000CF93DF9300D01F92CDB7DEB79C01809156
:100E8000E601843019F593E099833B832A8390939C
:100E9000E9008FEF9091E800815095FD06C095ED37
:100EA0009A95F1F700008111F5CF8091E80085FF58
:100EB0000DC040E050E063E070E0CE0101960E947A
:100EC000A5098091E8008E778093E8000F900F903D
:100ED0000F90DF91CF910895CF93DF9300D01F92B1
:100EE000CDB7DEB72091E601243021F522E0298339
:100EF0009B838A8383E08093E9008FEF9091E800E1
:100F0000815095FD06C095ED9A95F1F7000081118D
:100F1000F5CF8091E80085FF0DC040E050E063E030
:100F200070E0CE0101960E94A5098091E8008E77BD
:100F30008093E8000F900F900F90DF91CF9108956C
:100F40002091E6012430F1F422E02093E9002FEF14
:100F50003091E800215035FD06C035ED3A95F1F7A6
:100F600000002111F5CF2091E80025FF0BC040E0E3
:100F700050E065E070E00E94A5098091E8008E775E
:100F80008093E8000895CF93DF93EC019091E60100
:100F9000943009F046C080910C018823D9F08091EB
:100FA0000D018823B9F09093E9008FEF9091E8004C
:100FB000815095FD06C095E19A95F1F700008111E9
:100FC000F5CF8091E80085FF2CC040E050E060E163
:100FD00070E017C081E08093E9008FEF9091E80006
:100FE000815095FD06C095ED9A95F1F700008111AD
:100FF000F5CF8091E80085FF14C040E050E068E044
:1010000070E0CE010E94A5098091E8008E77809360
:10101000E80080E1FE01A2E5B1E001900D928A9521
:10102000E1F7DF91CF9108958091E501811109C029
:101030000E943A0B0E94970B8091E200846080939B
:10104000E20008951092E501089508950C94282176
:101050000E94821A0E942E210E943D0E0C9433079A
:1010600042E061EC81E00E94B40A42E061EC82E07F
:101070000E94B40A42E061EC83E00E94B40A42E1BB
:1010800061EC84E00C94B40A8091E801833009F4A7
:1010900055C030F4813071F0823009F48EC008956B
:1010A0008A3009F47AC08B3009F460C0893009F0C5
:1010B0009CC020C08091E701813A09F096C08091E0
:1010C000E800877F8093E8008091EB019091EC012C
:1010D000892B21F460E182E591E003C060E080E0CB
:1010E00090E070E00E94F0098091E8008B77809397
:1010F000E80008958091E701813209F076C080917F
:10110000EB019091EC01009719F0039709F06DC085
:101110008091E800877F8093E8008091E80082FD5D
:1011200005C08091E6018111F8CF5FC08091F10088
:10113000809362018091E8008B7753C08091E70132
:10114000813A09F052C08091EB019091EC01892B1A
:1011500009F04BC08091E800877F8093E800809180
:10116000E80080FFFCCF80910C0136C08091E70140
:101170008132D9F58091EB019091EC01892BA9F591
:101180008091E800877F8093E8000E94E90A8091BF
:10119000E90180930C010C94BE138091E701813228
:1011A00021F58091E800877F8093E8000E94E90A9A
:1011B0008091EA018093630108958091E701813A6B
:1011C000A1F48091E800877F8093E8008091E80097
:1011D00080FFFCCF809163018093F1008091E80053
:1011E0008E778093E8000C94E90A089584B7877F8E
:1011F00084BF0FB6F894A8958091600088618093B1
:101200006000109260000FBE90E080E80FB6F89486
:1012100080936100909361000FBE0E948C0E0E942B
:101220003A0B0E94970B8091E20084608093E20069
:1012300078940E941D0E0E948E0E82E091E00E9422
:10124000380E0E9416218091E601853069F40E94D3
:10125000401A8091E4018823B1F30E946E1A88231A
:1012600091F30E948F09EFCF0E94940EECCF292FAB
:10127000332723303105C9F064F42130310581F082
:101280002230310509F043C08DE690E020E133E0E3
:1012900042C021323105F1F02232310541F137C02F
:1012A00082E190E02DE733E036C099278130910547
:1012B00041F08230910541F0892B49F5ECE0F3E0F3
:1012C00005C0E4EFF2E002C0ECEDF2E0849190E0C2
:1012D0009F0121C06430D8F4E62FF0E0EE0FFF1F2D
:1012E000EE5DFE4F2081318189E090E014C06430D2
:1012F00070F470E0FB01EE0FFF1FE65EFE4F2081F1
:101300003181FB01EA5EFE4F808190E004C080E005
:1013100090E020E030E0FA0131832083089580E1FD
:1013200089BD82E189BD09B400FEFDCF8091D8005E
:101330008F7D8093D8008091E00082608093E000F0
:101340008091E00081FDFCCF0895CF92DF92EF9273
:10135000FF920F931F93CF93DF93EC018B016A01F0
:101360000E94080B811133C0C114D10439F0F60179
:1013700080819181081B190BC80FD91FE12CF12C1A
:101380000115110519F18091E80085FD16C08091C5
:10139000E8008E778093E800C114D10449F0F6018B
:1013A00080819181E80EF91EF182E08285E00FC014
:1013B0000E94080B882321F30AC089918093F100D1
:1013C00001501109FFEFEF1AFF0ADACF80E0DF9139
:1013D000CF911F910F91FF90EF90DF90CF900895E4
:1013E0002091ED013091EE012617370748F0611585
:1013F000710539F42091E8002E772093E80001C0B0
:10140000B90140E061157105A9F12091E60122239F
:1014100009F443C0253009F442C02091E80023FDBF
:1014200040C02091E80022FD32C02091E80020FF5A
:10143000E9CF4091F3002091F20030E0342BFC0121
:10144000CF016115710559F02830310540F48191C3
:101450008093F100615071092F5F3F4FF1CF41E060
:101460002830310509F040E02091E8002E772093E4
:10147000E800C8CF4111C9CF0AC08091E601882396
:1014800061F0853061F08091E80083FD0AC08091B1
:10149000E80082FFF2CF80E0089582E0089583E0C3
:1014A000089581E008952091ED013091EE01261715
:1014B000370748F06115710539F42091E8002E775F
:1014C0002093E80001C0B901FC0120E0611571051D
:1014D00091F18091E601882309F440C0853009F438
:1014E0003FC08091E80083FD3DC08091E80082FD0F
:1014F0002FC08091E80080FFE9CF2091F300809118
:10150000F20090E0922B6115710559F08830910539
:1015100040F424912093F1003196615071090196B5
:10152000F2CF21E0089709F020E08091E8008E7763
:101530008093E800CBCF2111CCCF0AC08091E60187
:10154000882361F0853061F08091E80083FD0AC056
:101550008091E80082FFF2CF80E0089582E0089554
:1015600083E0089581E00895982F973058F590937F
:10157000E900981739F07091EC002091ED0050913E
:10158000F00003C0242F762F50E021FF19C03091C6
:10159000EB003E7F3093EB003091ED003D7F3093C8
:1015A000ED003091EB0031603093EB007093EC0074
:1015B0002093ED005093F0002091EE0027FF07C02C
:1015C0009F5FD3CF8F708093E90081E0089580E022
:1015D00008958091E70187FF11C08091E80082FDA6
:1015E00005C08091E6018111F8CF11C08091E8001B
:1015F0008B770BC08091E601882349F08091E80049
:1016000080FFF8CF8091E8008E778093E8000895FE
:101610002091E4003091E50095E64091EC00842FA4
:10162000817040FF22C08091E80080FD1CC0809145
:10163000E601882391F0853091F08091EB0085FDE3
:1016400010C04091E4005091E5004217530729F380
:101650009A01915011F784E0089582E0089583E0A3
:10166000089581E0089580E008954091E80042FFE8
:10167000DECF08950E94A80B0E94B00BE0EEF0E0D0
:10168000808181608083E8EDF0E080818F778083C6
:1016900019BCA7EDB0E08C918E7F8C9380818F7EFA
:1016A00080831092E50108950F931F93CF93DF93EA
:1016B0000E94A80B0E94B00BC8EDD0E088818F7704
:1016C000888388818068888388818F7D888319BC1E
:1016D0001092E6011092E2011092E4011092E301EF
:1016E00000EE10E0F80180818B7F8083888181602B
:1016F000888342E060E080E00E94B40AE1EEF0E01E
:1017000080818E7F8083E2EEF0E080818160808343
:10171000808188608083F80180818E7F80838881CA
:1017200080618883DF91CF911F910F910895E8ED3B
:10173000F0E080818F7E8083E7EDF0E08081816042
:10174000808384E082BF81E08093E5010C94540B98
:10175000E8EDF0E080818E7F80831092E2000895B2
:101760001092DA001092E10008951F920F920FB6C6
:101770000F9211242F933F934F935F936F937F9317
:101780008F939F93AF93BF93EF93FF938091E1006B
:1017900082FF0BC08091E20082FF07C08091E100D0
:1017A0008B7F8093E1000E941C0E8091DA0080FF05
:1017B0001FC08091D80080FF1BC08091DA008E7F0F
:1017C0008093DA008091D90080FF0DC080E189BD4F
:1017D00082E189BD09B400FEFDCF81E08093E6017E
:1017E0000E94140805C019BC1092E6010E9422084C
:1017F0008091E10080FF19C08091E20080FF15C058
:101800008091E2008E7F8093E2008091E20080610F
:101810008093E2008091D80080628093D80019BC48
:1018200085E08093E6010E9426088091E10084FF14
:1018300030C08091E20084FF2CC080E189BD82E14C
:1018400089BD09B400FEFDCF8091D8008F7D8093C3
:10185000D8008091E1008F7E8093E1008091E200CA
:101860008F7E8093E2008091E20081608093E200AD
:101870008091E201882311F084E007C08091E300A9
:1018800087FD02C081E001C083E08093E6010E94F1
:1018900028088091E10083FF29C08091E20083FF46
:1018A00025C08091E100877F8093E10082E08093F2
:1018B000E6011092E2018091E1008E7F8093E100C9
:1018C0008091E2008E7F8093E2008091E20080614F
:1018D0008093E20042E060E080E00E94B40A8091E0
:1018E000F00088608093F0000E942508FF91EF913E
:1018F000BF91AF919F918F917F916F915F914F9128
:101900003F912F910F900FBE0F901F9018951F922F
:101910000F920FB60F9211242F933F934F935F9323
:101920006F937F938F939F93AF93BF93CF93DF93E7
:10193000EF93FF93C091E900CF708091EC00D82F16
:10194000D17080FDD0E81092E9008091F000877F8F
:101950008093F00078940E94CB0C1092E900809163
:10196000F00088608093F000CD2BCF70C093E90029
:10197000FF91EF91DF91CF91BF91AF919F918F91A7
:101980007F916F915F914F913F912F910F900FBE7B
:101990000F901F9018951F93CF93DF93CDB7DEB7AD
:1019A000AA970FB6F894DEBF0FBECDBFE7EEF1E009
:1019B00088E08E0F9091F10091938E13FBCF0E94DF
:1019C00044088091E80083FF1FC18091E701909156
:1019D000E801492F50E04A30510508F015C1FA01DD
:1019E000EA5AFF4F0C94BF22803881F0823809F008
:1019F0000BC18091EB018F708093E9008091EB0027
:101A000085FB882780F91092E90006C08091E301E8
:101A10009091E401911182609091E800977F9093FA
:101A2000E8008093F1001092F100C8C0282F2D7FAC
:101A300009F0EAC0882319F0823061F0E5C0809196
:101A4000E901813009F0E0C0933009F080E0809333
:101A5000E4012BC08091E901811127C08091EB0145
:101A60008F7009F4D1C08093E9002091EB0020FF32
:101A70001CC0933021F48091EB00806214C09091DF
:101A8000EB0090619093EB0021E030E0A90102C0EF
:101A9000440F551F8A95E2F74093EA001092EA003E
:101AA0008091EB0088608093EB001092E9008091B8
:101AB000E800877F86C08111A7C01091E9011F77D8
:101AC0008091E3008078812B8093E3008091E8008F
:101AD000877F8093E8000E94E90A8091E80080FFF8
:101AE000FCCF8091E30080688093E300111102C075
:101AF00082E001C083E08093E60186C08058823096
:101B000008F082C08091E9019091EA018C3D53E098
:101B1000950779F583E08A838AE289834FB7F89441
:101B2000DE01139620E03EE051E2E32FF0E0509317
:101B30005700E49120FF03C0E295EF703F5FEF7024
:101B40008E2F90E0EA3010F0C79601C0C0968D93BA
:101B50009D932F5F243149F74FBF8091E800877F25
:101B60008093E8006AE270E0CE0101960E94F009DD
:101B700014C0AE014F5F5F4F6091EB010E943709C7
:101B8000BC01892B09F440C09091E800977F9093A5
:101B9000E80089819A810E94530A8091E8008B773E
:101BA0008093E80031C0803879F58091E800877F24
:101BB0008093E8008091E2018093F1008091E80039
:101BC0008E778093E8000E94E90A1EC081111CC034
:101BD0009091E9019230C0F48091E800877F809372
:101BE000E8009093E2010E94E90A8091E2018111EC
:101BF00006C08091E30087FD02C081E001C084E05F
:101C00008093E6010E9430088091E80083FF0AC0BB
:101C10008091E800877F8093E8008091EB008062EC
:101C20008093EB00AA960FB6F894DEBF0FBECDBF2F
:101C3000DF91CF911F9108950895CF938091E60190
:101C40008823A1F0C091E900CF709091EC00892F1A
:101C5000817090FD80E8C82B1092E9008091E80027
:101C600083FD0E94CB0CCF70C093E900CF91089503
:101C700090936901809368010895E0916801F09163
:101C80006901309721F00190F081E02D099480E006
:101C90000895E0916801F0916901309721F0028088
:101CA000F381E02D09940895E0916801F0916901B4
:101CB000309721F00480F581E02D0994089520915A
:101CC0006601309167018217930771F09093670165
:101CD00080936601E0916801F0916901309721F0ED
:101CE0000680F781E02D09940895209164013091D8
:101CF00065018217930771F09093650180936401E9
:101D0000E0916801F0916901309721F00084F1853C
:101D1000E02D0994089508950C948B0E0E94881A62
:101D20000E940E040C944E1BCF92DF92EF92FF9212
:101D30000F931F93CF93DF93CDB7DEB72B970FB6DB
:101D4000F894DEBF0FBECDBF0E9426048BE6C82EDE
:101D500081E0D82E00E010E0E02E802F0E941405D4
:101D6000F60141916F01F42EF826B1F40F5F1F4F79
:101D70000E30110589F78FEF89838A831B820E94B9
:101D8000911A8160782F9D838C8349815A816B8160
:101D90008D810E94370F40C09091CD0191FF04C00A
:101DA0008B870E941A058B8520E030E04F2D50E094
:101DB000922FBA01022E02C0759567950A94E2F738
:101DC00060FF24C02E83EF8221E030E0690102C071
:101DD000CC0CDD1C9A95E2F790E08C219D21892B9B
:101DE00009F420E028870E94911A8160782F9A8751
:101DF00089874E815F8168858A850E94370FF80147
:101E0000E559FE4F8081C826C08206C02F5F3F4F34
:101E10002630310569F6AACF0E94351E10916A015D
:101E20000E943D0E1817A1F00E943D0E80936A019A
:101E30002B960FB6F894DEBF0FBECDBFDF91CF91CA
:101E40001F910F91FF90EF90DF90CF900C9433078C
:101E50002B960FB6F894DEBF0FBECDBFDF91CF91AA
:101E60001F910F91FF90EF90DF90CF900895CF9347
:101E7000DF93CDB7DEB72B970FB6F894DEBF0FBE5A
:101E8000CDBF4F83588769877A878B87DE0111968C
:101E900086E0FD0111928A95E9F785E0FE0137960B
:101EA00001900D928A95E1F749815A816B817C817D
:101EB0008D819E810E9458162B960FB6F894DEBF36
:101EC0000FBECDBFDF91CF9108950895CF938823A2
:101ED00009F4C2C0C82F823859F40E943D0E81FD1A
:101EE000BBC089E30E94F4180E94C11989E30CC0A9
:101EF000833879F40E943D0E80FDAEC083E50E94D8
:101F0000F4180E94C11983E50E943619CF910C94F0
:101F1000C119843859F40E943D0E82FD9DC087E4AA
:101F20000E94F4180E94C11987E4EECF8CEF8C0F49
:101F3000813A48F48C2F0E947B2081118DC08C2F18
:101F40000E94F418E3CF80E28C0F883048F4C77009
:101F500081E001C0880FCA95EAF70E947A19D6CFAE
:101F60008BE58C0F833078F4C53A29F0C63A31F00E
:101F700083E890E005C081E890E002C082E890E04C
:101F8000CF910C945F0E88E58C0F833108F064C00C
:101F9000C83A39F1C93A41F1CA3A49F1CB3A51F15B
:101FA000CC3A59F1CD3A61F1C03B69F1CE3A71F1C9
:101FB000CF3A79F1C13B81F1C23B89F1C33B91F149
:101FC000C43B99F1C53BA1F1C63BA9F1C73BB1F1B7
:101FD000C83BB9F1C93BC1F1CA3BC9F180E090E00F
:101FE00038C082EE90E035C089EE90E032C08AEED3
:101FF00090E02FC085EB90E02CC086EB90E029C0EC
:1020000087EB90E026C08CEC90E023C08DEC90E054
:1020100020C083E891E01DC08AE891E01AC082E9FF
:1020200091E017C084E991E014C081E292E011C010
:1020300083E292E00EC084E292E00BC085E292E07F
:1020400008C086E292E005C087E292E002C08AE220
:1020500092E0CF910C94750ECF910895882309F4E6
:102060004BC0823859F40E943D0E81FF45C089E380
:102070000E94F4180E94C11989E30CC0833871F4DE
:102080000E943D0E80FF38C083E50E94F4180E9434
:10209000C11983E50E9436190C94C119843859F48A
:1020A0000E943D0E82FF28C087E40E94F4180E941F
:1020B000C11987E4EFCF9CEF980F913A58F390E263
:1020C000980F983050F4877091E001C0990F8A956D
:1020D000EAF7892F0E948019DFCF9BE5980F933094
:1020E00020F480E090E00C945F0E885A833120F455
:1020F00080E090E00C94750E0895882321F00E94F2
:102100007A190C94C1190895882321F00E9480192E
:102110000C94C1190895BF92CF92DF92EF92FF9273
:102120000F931F93CF93DF9300D000D000D0CDB793
:10213000DEB725E0FC01DE01119601900D922A9593
:10214000E1F7FC01D08011810281258122952F7059
:1021500043815481452B09F4EDC21F3F21F4FFEF69
:10216000DF1609F4E7C27C012E830E94650FD98235
:102170001A8389819A810E94B318182FB92E0E9460
:10218000B2180E9479172E81002319F00E94971926
:102190002E81EB2DE295EF70F0E0E05AFF4F0C94AA
:1021A000BF228B2D807F9B2D9F70F92E882319F0E5
:1021B000F29480EFF822002349F0FF2009F467C26F
:1021C0008F2D0E948A190E94C11961C2812F0E941D
:1021D0002E10FF2009F4AEC28F2D0E949019269672
:1021E0000FB6F894DEBF0FBECDBFDF91CF911F9128
:1021F0000F91FF90EF90DF90CF90BF900C94C1199A
:102200003B2D307F8B2D8F70303211F08295807F87
:10221000112319F0113021F12CC00023B9F0222331
:1022200009F4A0C1213009F09DC126960FB6F8949B
:10223000DEBF0FBECDBFDF91CF911F910F91FF90F9
:10224000EF90DF90CF90BF900C94AA19222319F041
:10225000213009F46FC28E830E94AD198E8196C120
:10226000002321F0223008F065C27CC1211162C236
:102270008DC1002321F0222309F474C108C2222356
:1022800009F484C119C22B2D26952695237030E0C0
:102290002115310521F021303105D1F04BC2002349
:1022A00021F0812F9B2D937002C080E090E0269654
:1022B0000FB6F894DEBF0FBECDBFDF91CF911F9157
:1022C0000F91FF90EF90DF90CF90BF900C945F0E36
:1022D000002321F0812F9B2D937002C080E090E0BD
:1022E00026960FB6F894DEBF0FBECDBFDF91CF911B
:1022F0001F910F91FF90EF90DF90CF90BF900C94C3
:10230000750E812F002319F00E943D1D02C00E940E
:10231000A51D26960FB6F894DEBF0FBECDBFDF9188
:10232000CF911F910F91FF90EF90DF90CF90BF90D2
:102330000C942A1E8B2D837009F07BC00111FAC109
:10234000812F829586958770880F880F912F9F70B7
:10235000C92ED12CE12CF12C082E04C0CC0CDD1C94
:10236000EE1CFF1C0A94D2F714FF12C04FE050E09D
:1023700060E070E004C0440F551F661F771F8A9508
:10238000D2F7CB01BA01609570958095909503C006
:1023900060E070E0CB012B2D269526952370422F0F
:1023A00050E042305105D9F04330510569F16C29B4
:1023B0007D298E299F294130510551F126960FB66E
:1023C000F894DEBF0FBECDBFDF91CF911F910F916B
:1023D000FF90EF90DF90CF90BF900C94A0176C29E6
:1023E0007D298E299F2926960FB6F894DEBF0FBE51
:1023F000CDBFDF91CF911F910F91FF90EF90DF90B4
:10240000CF90BF900C94BC170E94A017C701B601D3
:1024100026960FB6F894DEBF0FBECDBFDF91CF91E9
:102420001F910F91FF90EF90DF90CF90BF900C9491
:102430008417002319F08B2D817001C086958823A5
:1024400009F478C1812F829586958770880F880F4F
:10245000912F9F70C92ED12CE12CF12C082E04C095
:10246000CC0CDD1CEE1CFF1C0A94D2F714FF12C02A
:102470004FE050E060E070E004C0440F551F661F5D
:10248000771F8A95D2F7CB01BA0160957095809538
:10249000909503C060E070E0CB012B2D269526952A
:1024A0002370422F50E042305105D9F0433051059E
:1024B00069F16C297D298E299F294130510551F1FF
:1024C00026960FB6F894DEBF0FBECDBFDF91CF9139
:1024D0001F910F91FF90EF90DF90CF90BF900C94E1
:1024E0007A186C297D298E299F2926960FB6F89493
:1024F000DEBF0FBECDBFDF91CF911F910F91FF9037
:10250000EF90DF90CF90BF900C9496180E947A18AD
:10251000C701B60126960FB6F894DEBF0FBECDBF39
:10252000DF91CF911F910F91FF90EF90DF90CF90AF
:10253000BF900C945E18103FD1F118F4103E50F487
:10254000A1C0123F09F463C008F44CC0133F09F462
:1025500073C098C01F708B2D8F710023A1F00E9453
:10256000F717812F26960FB6F894DEBF0FBECDBFAA
:10257000DF91CF911F910F91FF90EF90DF90CF905F
:10258000BF900C947D100E941818812F26960FB6CC
:10259000F894DEBF0FBECDBFDF91CF911F910F9199
:1025A000FF90EF90DF90CF90BF900C9484100023A9
:1025B000A9F02111BFC08B2D8F7126960FB6F8940C
:1025C000DEBF0FBECDBFDF91CF911F910F91FF9066
:1025D000EF90DF90CF90BF900C943D18223008F020
:1025E000A9C0E9CF0023A9F08B2D8F7126960FB6D5
:1025F000F894DEBF0FBECDBFDF91CF911F910F9139
:10260000FF90EF90DF90CF90BF900C94F7170023CE
:1026100059F38B2D8F7126960FB6F894DEBF0FBE3F
:10262000CDBFDF91CF911F910F91FF90EF90DF9081
:10263000CF90BF900C941818002399F08B2D8F71B8
:1026400026960FB6F894DEBF0FBECDBFDF91CF91B7
:102650001F910F91FF90EF90DF90CF90BF900C945F
:10266000E21726960FB6F894DEBF0FBECDBFDF91FE
:10267000CF911F910F91FF90EF90DF90CF90BF907F
:102680000C94D8170023A9F0222309F4ADCF812F91
:1026900026960FB6F894DEBF0FBECDBFDF91CF9167
:1026A0001F910F91FF90EF90DF90CF90BF900C940F
:1026B000660F222309F4ADCF812F26960FB6F8942A
:1026C000DEBF0FBECDBFDF91CF911F910F91FF9065
:1026D000EF90DF90CF90BF900C942E104B2D4F7049
:1026E000612FC7010E94AE0226960FB6F894DEBF96
:1026F0000FBECDBFDF91CF911F910F91FF90EF9053
:10270000DF90CF90BF900C94FC164B2D4F70612F33
:10271000C70126960FB6F894DEBF0FBECDBFDF917E
:10272000CF911F910F91FF90EF90DF90CF90BF90CE
:102730000C94DA0526960FB6F894DEBF0FBECDBF17
:10274000DF91CF911F910F91FF90EF90DF90CF908D
:10275000BF9008950E9497190E94A7190E946C19B2
:102760000E94C1190E94DA1E0E942A1E80E090E099
:102770000E945F0E80E090E00C94750E0E94871915
:102780000C94AA130E94B318292F22952F7030E0C1
:102790002C3031054CF42A3031056CF422503109CB
:1027A0002230310588F407C02C30310549F02F3034
:1027B000310531F009C0803E48F0803F29F406C061
:1027C00093FB882780F9089580E0089581E00895BB
:1027D000CF93DF9300D000D01F92CDB7DEB70F901C
:1027E0000F900F900F900F90DF91CF910895CF939E
:1027F000DF9300D000D000D0CDB7DEB726960FB65D
:10280000F894DEBF0FBECDBFDF91CF9108951F9327
:10281000CF93DF93C091790116E080917A01C817B8
:1028200099F0D0E01C9FF0011D9FF00D1124E55898
:10283000FE4F4081518162817381848195810E9424
:10284000F7132196C770E9CFDF91CF911F910895BB
:102850004091AB015091AC016091AD017091AE011E
:102860008091AF019091B0010C94F7138091B00169
:1028700082958F7009F054C08091AD01882309F4CE
:102880004FC080917901A0917A016091AB01709164
:10289000AC014091AE015091AF01B6E08A1709F446
:1028A0003FC090E041155105C1F17F3F11F46F3FEA
:1028B000A1F1B89FF001B99FF00D1124E558FE4F2A
:1028C000218172132AC02081621327C02281211125
:1028D00024C0238134812417350710F42150310995
:1028E000241B350B283C3105C0F42091B0012F701A
:1028F00020612093B00126E0289FF001299FF00D70
:102900001124E058FE4F80818F70806180838BEAB4
:1029100091E00E948B100C94071401968770BECF33
:102920000895CF92DF92EF92FF920F931F93CF9370
:10293000DF93CDB7DEB762970FB6F894DEBF0FBE58
:10294000CDBF8C0185E0F801DE011D9601900D924E
:102950008A95E1F7D8014C9111965C9111971296E6
:102960006C9112971396CD90DC9014973091AB0137
:102970007091AC018091AE019091AF01009709F484
:102980006BC17F3F19F43F3F09F466C1E090AD0190
:10299000EE2009F4C0C02091B001C816D90628F075
:1029A000F601E81BF90BCF0104C0809590958C0DC2
:1029B0009D1DFF24F394883C910578F0F12C207F35
:1029C00009F0C6C07C2DD98AC88A89890E94E8137B
:1029D0008BEA91E00E948B10B1C0822F807F09F0BA
:1029E00046C0751314C0341312C0611110C02F708B
:1029F00020612093B0010E9428148BEA91E00E948C
:102A00008B108091B001D80115968C932EC0CD28E3
:102A100019F15F3F11F44F3FF9F0F62E61111CC020
:102A20008091790120917A0136E0821709F45AC029
:102A300090E0389FF001399FF00D1124E558FE4FCA
:102A40007181571306C07081471303C072817111E1
:102A500003C001968770E9CFF62E662309F418C1EA
:102A60008091B00181608093B001F12C11C1751388
:102A700008C0341306C0611104C08091B001D801B0
:102A8000C3C04D875E878D859E856A8B0E94C21369
:102A90006A898823E1F16623D1F12091B001822F68
:102AA00082958F7090E0029774F08091AB019091C5
:102AB000AC0198878F831986DB86CA862C87CE0166
:102AC00007960E948B1086E0F801ABEAB1E0019016
:102AD0000D928A95E1F70E9436140E942814FF2473
:102AE000F394D6C04D875E878D859E850E94B3186E
:102AF000292F22952F7030E0223031050CF0BCC018
:102B00009F7009F0B6C0805E883008F4C1C0C8016B
:102B10000E948B10E4CFC816D90608F453C0F60102
:102B2000E81BF90BCF01883C910508F450C0F12C4B
:102B30007C2DD98AC88A89890E94E813EBEAF1E0E2
:102B400086E0DF011D928A95E9F70E942814A0C053
:102B5000751314C0341312C0611110C08091B001FC
:102B6000F8018583C8010E948B1086E0EBEAF1E052
:102B7000DF011D928A95E9F7FE2C8AC04D875E879A
:102B80008D859E856A8B0E94C2136A89882309F409
:102B9000BECF662309F4BBCF2091B001822F82956E
:102BA0008F7090E002970CF48ECF8091AB019091E2
:102BB000AC019A8389831B82DD82CC822E83CE0175
:102BC00001967FCF809590958C0D9D1DACCFF62EF4
:102BD000662309F49CCF75132EC034132CC02091AA
:102BE000B00120FD1FC0822F82958F70D9F0D801CF
:102BF00015962C9315978F3049F08F5F982F9295EB
:102C0000907F822F8F70892B15968C93C8010E941C
:102C10008B1086E0F801ABEAB1E001900D928A9545
:102C2000E1F793CF86E0F801ABEAB1E001900D92B5
:102C30008A95E1F72DC04D875E878D859E850E9420
:102C4000C213811140CF8091B00181608093B001A7
:102C5000C8010E948B101CC0662309F458CF4D8711
:102C60005E878D859E850E94C213882309F44FCF0D
:102C70002ACF811148CF0CC0243031050CF047CF4A
:102C80009F7009F440CFF8019581907F09F03BCF08
:102C90008F2D62960FB6F894DEBF0FBECDBFDF91C9
:102CA000CF911F910F91FF90EF90DF90CF900895FB
:102CB0001F93CF93DF93CDB7DEB72C970FB6F89461
:102CC000DEBF0FBECDBF4F83588769877A878B875A
:102CD0009C87CE0107960E949114882369F08F810A
:102CE00098852A853B85232BF1F19F3F09F063C02E
:102CF0008F3F09F060C037C086E0FE013796DE01E5
:102D0000119601900D928A95E1F76F817885EA8599
:102D1000FB85309741F17F3F11F46F3F21F1209106
:102D20007A0130E0C90101968770992740917901B5
:102D300050E08417950709F447C069837A83FD83BF
:102D4000EC8396E0929FD001939FB00D1124A5587B
:102D5000BE4FFE01319601900D929A95E1F7809356
:102D60007A010E94071416E08091790190917A010E
:102D70008917C1F1189FC001112485589E4F0E94E8
:102D80009114882379F1E09179011E9FF0011124BB
:102D9000E558FE4F40815181628173818481958124
:102DA0000E94F7138091790190E00196877099272E
:102DB00080937901D9CF4F81588569857A858B8534
:102DC0009C850E94F713CFCF0E94BE1310927A0108
:102DD00010927901EBEAF1E086E0DF011D928A951D
:102DE000E9F7C1CF2C960FB6F894DEBF0FBECDBF6A
:102DF000DF91CF911F910895EF92FF920F931F9350
:102E0000CF93DF938C01892B09F46CC0F12CEE2455
:102E1000E394E8012196F8018491843740F48430EA
:102E200008F051C0813081F0823019F15BC08537E4
:102E300009F444C0A8F19CE7980F903708F052C0FD
:102E40008F770E942E1041C00E5F1F4FFE01C4916C
:102E500080E28C0F883048F4C7708E2D01C0880F37
:102E6000CA95EAF70E949A1914C08C2F0E94660F27
:102E70002DC00E5F1F4FFE01C49180E28C0F883081
:102E800058F4C7708E2D01C0880FCA95EAF70E94CA
:102E9000A0190E94C1191AC08C2F0E942E1016C0B2
:102EA0000E5F1F4FFE01C491CC2381F08FE99FE09C
:102EB0000197F1F700C00000C150F6CF0E5F1F4F21
:102EC000FE01F49003C00E94660F8E018F2D8823AF
:102ED00009F49FCFEFE9FFE03197F1F700C0000060
:102EE0008150F5CFDF91CF911F910F91FF90EF901F
:102EF000089508956093B5017093B6018093B7016A
:102F00009093B8010C94AA130F931F930091B501ED
:102F10001091B6012091B7013091B801DC01CB01CD
:102F2000802B912BA22BB32B8093B5019093B601EC
:102F3000A093B701B093B8011F910F910C94AA13FD
:102F40000F931F930091B5011091B6012091B70125
:102F50003091B801DC01CB0180239123A223B3235C
:102F60008093B5019093B601A093B701B093B801D7
:102F70001F910F910C94AA130F931F930091B50109
:102F80001091B6012091B7013091B801DC01CB015D
:102F900080279127A227B3278093B5019093B6018C
:102FA000A093B701B093B8011F910F910C94AA138D
:102FB0001092B1011092B2011092B3011092B401BB
:102FC0000C94AA1341E050E060E070E004C0440FAC
:102FD000551F661F771F8A95D2F74093B101509312
:102FE000B2016093B3017093B4010C94AA1341E051
:102FF00050E060E070E004C0440F551F661F771F6B
:103000008A95D2F78091B1019091B201A091B3015C
:10301000B091B401482B592B6A2B7B2B4093B10103
:103020005093B2016093B3017093B4010C94AA134E
:1030300041E050E060E070E004C0440F551F661F9F
:10304000771F8A95D2F7409550956095709580913D
:10305000B1019091B201A091B301B091B4014823A4
:1030600059236A237B234093B1015093B2016093AB
:10307000B3017093B4010C94AA1341E050E060E0F6
:1030800070E004C0440F551F661F771F8A95D2F762
:103090008091B1019091B201A091B301B091B401BE
:1030A000482759276A277B274093B1015093B201E3
:1030B0006093B3017093B4010C94AA130F931F9300
:1030C0000091B1011091B2012091B3013091B4018E
:1030D000DC01CB01802B912BA22BB32B8093B10170
:1030E0009093B201A093B301B093B4011F910F91DB
:1030F0000C94AA130F931F930091B1011091B20188
:103100002091B3013091B401DC01CB0180239123E4
:10311000A223B3238093B1019093B201A093B30192
:10312000B093B4011F910F910C94AA130F931F93A6
:103130000091B1011091B2012091B3013091B4011D
:10314000DC01CB0180279127A227B3278093B1010F
:103150009093B201A093B301B093B4011F910F916A
:103160000C94AA130895CF92DF92EF92FF920F93DF
:103170001F93CF93DF938C01C090B501D090B6011F
:10318000E090B701F090B8014091B1015091B201C7
:103190006091B3017091B401C42AD52AE62AF72AB6
:1031A000CFE1D0E0D701C6010C2E04C0B695A7959B
:1031B000979587950A94D2F780FF07C0B8018C2FA6
:1031C0000E94FD058130910531F4219758F7B8012F
:1031D00080E00E94FD05DF91CF911F910F91FF903C
:1031E000EF90DF90CF90089590910C01992321F0FA
:1031F00090910D01911109C020910E0130910F01A4
:10320000F90132969FEF40E01FC0982F9695969552
:1032100096959F3050F5E0910E01F0910F01E90F66
:10322000F11D877021E030E0A90102C0440F551F55
:103230008A95E2F7CA019181892B818308959F3F86
:1032400039F04F5F4E3041F051915813F8CF0DC017
:103250005111F7CF942FF5CF9F3F39F0F901E90FC6
:10326000F11D97FDFA9582830895089590910C01C0
:10327000992321F090910D01911109C020910E0127
:1032800030910F01F9013296205F3F4F1FC0982FF8
:103290009695969596959F30F0F4E0910E01F091F9
:1032A0000F01E90FF11D877021E030E0A90102C094
:1032B000440F551F8A95E2F7CA01809591818923B1
:1032C000818308953196E217F30729F090819813CE
:1032D000F9CF1082F7CF089581E090E0E0910E01E0
:1032E000F0910F01E80FF91F1082019680319105CE
:1032F000A9F708959091CC01892B8093CC01089572
:1033000080959091CC0189238093CC0108951092EF
:10331000CC0108959091CB01892B8093CB01089526
:1033200080959091CB0189238093CB0108951092D1
:10333000CB0108959091CA01892B8093CA01089509
:1033400080959091CA0189238093CA0108951092B3
:10335000CA0108958093B90108951092B9010895A2
:1033600080910E0190910F01FC0131969C01205F2C
:103370003F4F80E0919191118F5FE217F307D1F7F2
:103380000895E0910E01F0910F018091CC018083AE
:10339000E0910E01F0910F0190818091CB01892B7A
:1033A0008083E0910E01F0910F0190818091CA011C
:1033B000892B80838091B901882361F0E0910E010F
:1033C000F0910F019081892B80830E94B0198111A7
:1033D0001092B90180910E0190910F010C94490E49
:1033E000CF92DF92EF92FF926C01EE24FF24C11482
:1033F000D104E104F10421F0C701B60120E101C0CC
:1034000020E0C72ED82EE92EFF24C114D104E104F8
:10341000F10419F0285FC701B6016B017C0154E08B
:10342000F694E794D794C7945A95D1F7C114D10470
:10343000E104F10419F02C5FC701B6016B017C01B6
:1034400042E0F694E794D794C7944A95D1F7C11413
:10345000D104E104F10419F02E5FC701B601DC01CB
:10346000CB01B695A79597958795892B8A2B8B2BA2
:1034700009F02F5F822FFF90EF90DF90CF9008959B
:103480008091E601843039F11092CE0120E488E188
:1034900090E00FB6F894A895809360000FBE20933B
:1034A000600080E00E94330783B7817F846083BF20
:1034B00083B7816083BF7894889583B78E7F83BFFD
:1034C0000FB6F894A89580916000886180936000A1
:1034D000109260000FBE089508950895CF930E9442
:1034E0006C1A0E9426040E946D1AC0E08C2F0E9464
:1034F0001405811104C0CF5FCE30C1F701C081E057
:10350000CF9108950E94BE130E943D0E0C94330784
:1035100082E084BD93E095BD9AEF97BD80936E00E5
:1035200008952FB7F8948091CF019091D001A09188
:10353000D101B091D2012FBF0895CF92DF92EF92C7
:10354000FF920F931F932FB7F8944091CF015091A2
:10355000D0016091D1017091D2012FBF6A017B012E
:10356000EE24FF248C0120E030E0C016D106E206F4
:10357000F30610F4415051099A01281B390BC90177
:103580001F910F91FF90EF90DF90CF9008951F92C1
:103590000F920FB60F9211248F939F93AF93BF9307
:1035A0008091CF019091D001A091D101B091D20131
:1035B0000196A11DB11D8093CF019093D001A093DE
:1035C000D101B093D201BF91AF919F918F910F9094
:1035D0000FBE0F901F9018950E943A0BF8942FEF92
:1035E00087EA91E6215080409040E1F700C000005A
:1035F00087E090EBDC018093EF019093F001A093C2
:10360000F101B093F2019CE088E10FB6F894A8951F
:10361000809360000FBE90936000FFCFEF92FF9207
:103620000F931F93CF93DF93D82FC0E08C2F0E946E
:10363000140500E010E0E82EF12CC701002E02C0B6
:10364000959587950A94E2F780FD06C00F5F1F4F9E
:103650000630110591F709C0602F7C2F80E00E9491
:10366000DB05D813F3CF81E004C0CF5FCE30F1F695
:1036700080E0DF91CF911F910F91FF90EF9008951F
:10368000CF93C82F8CE20E940E1B882321F08C2F31
:10369000CF910C940E1B80E0CF910895CF930E94A0
:1036A000951C811102C00E947B1CC5E6C15049F0E7
:1036B0000E9426048FE39CE90197F1F700C0000007
:1036C000F5CF89E20E94401B811113C18AE20E945A
:1036D000401B81110E947B1C85E00E94401B8111D0
:1036E0000E94EC1A0E94A01C8093CD0187E00E94EA
:1036F000401B8823A9F18BE10E94401B882351F0D5
:103700008091CD0181FB222720F991E0922790FB47
:1037100081F90EC08EE00E94401B882361F08091E9
:10372000CD0182FB222720F991E0922790FB82F9BC
:103730008093CD0115C080E10E94401B9091CD0186
:10374000882341F093FB222720F981E0822780FB28
:1037500093F904C0892F809580FB90F99093CD0157
:103760008091CD010E94A41C0E94B21C8093E001B4
:1037700080EE0E94401B882341F08091E001982F49
:10378000909590FB80F98093E00189E30E94401BB3
:10379000882359F08091E00181FB222720F991E0F4
:1037A000922790FB81F98093E00182EE0E94401BFA
:1037B000882359F08091E00182FB222720F991E0D3
:1037C000922790FB82F98093E00186EE0E94401BD5
:1037D000882359F08091E00183FB222720F991E0B2
:1037E000922790FB83F98093E00183EE0E94401BB7
:1037F000882359F08091E00184FB222720F991E091
:10380000922790FB84F98093E00185E30E94401B9E
:10381000882359F08091E00185FB222720F991E06F
:10382000922790FB85F98093E00181E30E94401B81
:10383000882359F08091E00186FB222720F991E04E
:10384000922790FB86F98093E00181E10E94401B62
:10385000882359F08091E00187FB222720F991E02D
:10386000922790FB87F98093E0018091E0010E940C
:10387000B61C8091E00187FB882780F980930D01B9
:1038800087E20E94401BC82F8EE10E94401B8111DD
:10389000C2608FE10E94401B8111C46080E20E94DF
:1038A000401B8111C86081E20E94401B8111C061F0
:1038B00082E20E94401B8111C06283E20E94401B91
:1038C0008111C06484E20E94401B882311F0C0680B
:1038D00002C0CC2329F08C2F0E94AD1C6C2F03C09A
:1038E0000E94A91C682F70E080E090E0CF910C94BA
:1038F0007A17CF9108956DEE7EEF80E090E00E9400
:10390000F52260E082E090E00E94E72260E083E040
:1039100090E00E94E72260E084E090E00E94E722CD
:1039200060E085E090E00C94E72280E090E00E9467
:10393000E12221E08D3E9E4F09F020E0822F089584
:1039400082E090E00C94D922682F82E090E00C9401
:10395000E72283E090E00C94D922682F83E090E086
:103960000C94E72284E090E00C94D922682F84E044
:1039700090E00C94E7228091D50180FF0BC060910C
:10398000130185E0689FB0011124759567957595C1
:1039900067952BC081FF09C06091130185E0689F86
:1039A000B00111247595679520C082FF07C0609112
:1039B000130185E0689FB001112417C09091D601D2
:1039C0009923D1F060911201961788F72091130185
:1039D00085E0289F90011124929FA001939F500D94
:1039E000112470E0CA010E94AB226038710540F4D6
:1039F0006115710539F002C065E070E0862F089509
:103A00008FE7089581E008958091D50180FF08C077
:103A10006091110170E0759567957595679521C066
:103A200081FF06C06091110170E07595679519C01E
:103A300082FF04C06091110170E010C09091D60126
:103A40009923C1F0609110019617A0F780911101A0
:103A5000899FC001112470E00E94AB22603871057B
:103A600028F46115710521F0862F08958FE70895D8
:103A700081E0089561E070E0F4CF803F21F40E947E
:103A8000BB1C819504C0813F29F40E94BB1C80931C
:103A9000D9010895823F21F40E94BB1C819504C086
:103AA000833F29F40E94BB1C8093D8010895893F6D
:103AB00019F40E94041D05C08A3F31F40E94041DC0
:103AC00081958093DA0108958B3F21F40E94041DB3
:103AD000819504C08C3F29F40E94041D8093DB0172
:103AE0000895843F21F48091D701816017C0853FFC
:103AF00021F48091D701826011C0863F21F480912A
:103B0000D70184600BC0873F21F48091D701886082
:103B100005C0883F31F48091D70180618093D7013F
:103B200008958D3F21F48091D50181600BC08E3FB7
:103B300021F48091D501826005C08F3F29F48091E6
:103B4000D50184608093D5010895803F39F4809138
:103B5000D90187FF6CC01092D90169C0813F29F457
:103B60008091D9011816BCF362C09091D801823FB0
:103B700029F497FF5CC01092D80159C0833F19F413
:103B80001916CCF354C0893F41F48091DA0118161C
:103B90000CF04DC01092DA014AC08A3F29F480919E
:103BA000DA0187FF44C0F6CF8B3F39F48091DB0107
:103BB00087FF3DC01092DB013AC08C3F29F4809111
:103BC000DB011816BCF333C0843F21F48091D70188
:103BD0008E7F17C0853F21F48091D7018D7F11C062
:103BE000863F21F48091D7018B7F0BC0873F21F462
:103BF0008091D701877F05C0883F31F48091D7013C
:103C00008F7E8093D70113C08D3F21F48091D50121
:103C10008E7F0BC08E3F21F48091D5018D7F05C032
:103C20008F3F29F48091D5018B7F8093D5018091BE
:103C3000D80181110EC08091D90181110AC08091F3
:103C4000DA01811106C08091DB01811102C010925E
:103C5000D601089587ED91E00E94540E0E94911ABA
:103C60009093D4018093D30108951F93CF93DF9352
:103C70008091D3019091D4010E949D1AAC01909142
:103C8000D601992321F02091140130E006C0209143
:103C900015018AE0289F900111244217530708F468
:103CA00085C08091D801C091D901D091DA011091DD
:103CB000DB01811107C0C11175C0D11173C0111191
:103CC00071C074C09F3F19F09F5F9093D601181682
:103CD00024F40E94BB1C8093D8018091D80187FFF7
:103CE00005C00E94BB1C81958093D8011C1624F44A
:103CF0000E94BB1C8093D9018091D90187FF05C028
:103D00000E94BB1C81958093D9016091D8016623E4
:103D100031F1C091D901CC2311F1062E000C770BA3
:103D2000880B990B0E94B22123E333E343E35FE363
:103D30000E9416220E947A216093D8016C2FCC0F2A
:103D4000770B880B990B0E94B22123E333E343E303
:103D50005FE30E9416220E947A216093D9011D160A
:103D600024F40E94041D8093DA018091DA0187FF18
:103D700005C00E94041D81958093DA01111624F478
:103D80000E94041D8093DB018091DB0187FF05C049
:103D90000E94041D81958093DB01DF91CF911F91DB
:103DA0000C942A1E9F3F09F08FCF97CFDF91CF91C0
:103DB0001F910895E7EDF1E085E0DF011D928A95FE
:103DC000E9F71092D6011092D5010895833081F160
:103DD00028F4813059F08230D1F00895853009F40B
:103DE00049C0B8F1863009F456C008958091150194
:103DF000262F30E0280F311D2F3F310524F4680FA6
:103E00006093150108958FEF8093150108958091B7
:103E10001401262F30E0280F311D2F3F310524F4E7
:103E2000680F6093140108958FEF80931401089533
:103E300080911301262F30E0280F311D2F3F3105CF
:103E400024F4680F6093130108958FEF809313019A
:103E5000089580911201262F30E0280F311D2F3F49
:103E6000310524F4680F6093120108958FEF809359
:103E70001201089580911101262F30E0280F311D85
:103E80002F3F310524F4680F6093110108958FEFDF
:103E900080931101089580911001262F30E0280FA2
:103EA000311D2F3F310524F4680F609310010895F0
:103EB0008FEF809310010895833011F128F4813041
:103EC00049F0823091F00895853081F120F18630FB
:103ED000C1F1089580911501681720F4861B809325
:103EE0001501089510921501089580911401681725
:103EF00020F4861B809314010895109214010895F4
:103F000080911301681720F4861B80931301089594
:103F100010921301089580911201681720F4861BF6
:103F20008093120108951092120108958091110159
:103F3000681720F4861B80931101089510921101D7
:103F4000089580911001681720F4861B809310015A
:103F500008951092100108950F931F938D3109F465
:103F60006AC008F03FC08E3009F484C0C0F48730C6
:103F700009F46DC068F4863009F0B5C08091CD01B8
:103F8000817F8E7F8093CD0181E08093DD01ACC085
:103F9000883009F457C08B3009F46AC0A4C0863158
:103FA00009F466C078F4803109F477C0813109F0F2
:103FB0009AC00E94BE1390910D0181E089278093E1
:103FC0000D0156C0893109F453C08B3109F08BC003
:103FD0008091CD0181FB222720F991E0922790FB6F
:103FE00081F951C0853309F475C048F4873209F46A
:103FF00071C008F45EC0893209F46CC074C08334A7
:1040000030F48A3308F053C0883391F16CC08334A4
:1040100009F460C0883409F066C00E94BE130FEF37
:1040200013ED20E3015010402040E1F700C00000F4
:104030000E94EC1A1DC00E9434210E943D0E0E9475
:10404000330716C00E94A01C0E94B21C11C09091A0
:10405000CD01892F8095817080FB90F929F09660C1
:1040600098609093CD0140C0997F977F9093CD0148
:1040700081E03AC08091CD0182FB222720F991E0B6
:10408000922790FB82F98093CD01992389F3809147
:10409000CD0181608093CD01EBCF8091CD0183FB79
:1040A000222720F991E0922790FB83F9ECCF8953E6
:1040B00001C08D5141E050E060E070E08A019B0159
:1040C00004C0000F111F221F331F8A95D2F7C901A8
:1040D000B80104C061E070E080E090E00E947A17CF
:1040E0000E94BE13C5CF80E01F910F91089580E01C
:1040F000089580E00895CF93C82F8091DD0181302D
:1041000079F018F08230E9F187C0E0910E01F0916A
:104110000F018081813169F0823209F07FC009C0CE
:10412000E0910E01F0910F018081813111F0823216
:1041300061F48C2F0E947720811104C08C2F0E9483
:10414000AC1F1DC081E090E01AC08C2F0E94792026
:10415000811114C0C43179F048F4CB3079F0C0310A
:1041600009F060C082E08093DD0108C0C93219F017
:10417000C83321F057C01092DD0154C081E0817036
:1041800053C0C93289F118F5C43171F1A8F4C730B0
:1041900009F046C08AE08093150194E190931401E0
:1041A00093E0909313018093120188E080931101B2
:1041B00088E28093100134C0CE51C63088F5EC2FD0
:1041C000F0E0E65DFE4F80818093DC0129C0CE34B3
:1041D000E9F020F4CB3421F56AE013C0C13579F061
:1041E000C235F1F461E00DC08091DC01882319F043
:1041F0001092DC0115C081E08093DD0115C061E003
:1042000006C08091DC010E94E61E0AC06AE080912F
:10421000DC010E945C1F04C01092DD0180E004C03C
:1042200081E002C080E0ABCFCF910895E1E8F0E0FB
:104230008081886080838081816080838FB7F894DB
:1042400093E09093890090ED909388008FBF08953C
:10425000EFE6F0E08081826080830895EFE6F0E091
:1042600080818D7F80830895EFE6F0E0908182E089
:104270008927808308951F920F920FB60F92112401
:104280002F933F934F935F936F937F938F939F935E
:10429000AF93BF93EF93FF938091DE019091DF0185
:1042A00001969093DF018093DE01811103C082E0CB
:1042B0000E943307E091DF01E695E695F0E0E657CE
:1042C000FB4FE4918091DE018E1303C080E00E94D9
:1042D0003307FF91EF91BF91AF919F918F917F91A4
:1042E0006F915F914F913F912F910F900FBE0F9063
:1042F0001F9018950E9481216894B1110C9410228E
:1043000008950E94F52188F09F5798F0B92F9927BA
:10431000B751B0F0E1F0660F771F881F991F1AF0B0
:10432000BA95C9F714C0B13091F00E940F22B1E0E4
:1043300008950C940F22672F782F8827B85F39F0E3
:10434000B93FCCF3869577956795B395D9F73EF449
:1043500090958095709561957F4F8F4F9F4F0895F1
:10436000E89409C097FB3EF490958095709561950F
:104370007F4F8F4F9F4F9923A9F0F92F96E9BB27C5
:104380009395F695879577956795B795F111F8CF41
:10439000FAF4BB0F11F460FF1BC06F5F7F4F8F4FAC
:1043A0009F4F16C0882311F096E911C0772321F0A2
:1043B0009EE8872F762F05C0662371F096E8862F3A
:1043C00070E060E02AF09A95660F771F881FDAF791
:1043D000880F9695879597F9089557FD9058440F43
:1043E000551F59F05F3F71F04795880F97FB991F54
:1043F00061F09F3F79F08795089512161306140611
:10440000551FF2CF4695F1DF08C01616170618069D
:10441000991FF1CF86957105610508940895E89478
:10442000BB2766277727CB0197F908950E94292299
:104430000C949A220E948C2238F00E94932220F041
:10444000952311F00C9483220C94892211240C944E
:1044500010220E94ED2170F3959FC1F3950F50E05B
:10446000551F629FF001729FBB27F00DB11D639F26
:10447000AA27F00DB11DAA1F649F6627B00DA11DCC
:10448000661F829F2227B00DA11D621F739FB00D72
:10449000A11D621F839FA00D611D221F749F3327E2
:1044A000A00D611D231F849F600D211D822F762F7B
:1044B0006A2F11249F5750409AF0F1F088234AF058
:1044C000EE0FFF1FBB1F661F771F881F91505040C4
:1044D000A9F79E3F510580F00C9483220C94102282
:1044E0005F3FE4F3983ED4F3869577956795B7954B
:1044F000F795E7959F5FC1F7FE2B880F911D969565
:10450000879597F9089597F99F6780E870E060E0D4
:1045100008959FEF80EC089500240A94161617065C
:1045200018060906089500240A94121613061406A4
:1045300005060895092E0394000C11F4882352F007
:10454000BB0F40F4BF2B11F460FF04C06F5F7F4FBF
:104550008F4F9F4F089597FB072E16F4009407D0B6
:1045600077FD09D00E94C52207FC05D03EF4909546
:1045700081959F4F0895709561957F4F0895EE0F37
:10458000FF1F0590F491E02D0994AA1BBB1B51E17C
:1045900007C0AA1FBB1FA617B70710F0A61BB70BB3
:1045A000881F991F5A95A9F780959095BC01CD0158
:1045B0000895F999FECF92BD81BDF89A992780B5EB
:1045C0000895A8E1B0E042E050E00C94FC22262FD0
:1045D000F999FECF1FBA92BD81BD20BD0FB6F894E8
:1045E000FA9AF99A0FBE019608950E94E722272FA2
:1045F0000C94E822DC01CB01FC01F999FECF06C046
:10460000F2BDE1BDF89A319600B40D924150504090
:08461000B8F70895F894FFCFFC
:1046180020023507C307A0076C0738070101BA0154
:1046280028080A03140A3F4D36394B04FE03C80311
:104638008F0322033B0354036D03010203040506A1
:044648000708090056
:00000001FF

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

@ -0,0 +1,185 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | BrBck| | Play | 6 | 7 | 8 | 9 | 0 | \ / L2 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Esc | ' | , | . | P | Y | Del | | Ins | F | G | C | R | L | / |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | BkSp | A | O | E | U | I |------| |------| D | H | T | N | S | - |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |:/Ctrl| Q | J | K | X | | | | B | M | W | V |Z/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| LAlt | LGui | Left | Right| | Up | Down | [ | ] | ~L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,---------------.
* | App | L1 | | L2 |PrntScr |
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space| Tab |------| |------| AltShf |Enter |
* | | | End | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_WBAK,
KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_DELT,
KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I,
KC_LSFT, CTL_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, ALL_T(KC_NO),
LT(SYMB,KC_GRV),KC_LALT, KC_LGUI, KC_LEFT,KC_RGHT,
CTL_T(KC_APP), TG(1),
KC_HOME,
KC_SPC,KC_TAB,KC_END,
// right hand
KC_MPLY, KC_6, KC_7, KC_8, KC_9, KC_0, LT(MDIA, KC_BSLS),
KC_INS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
MEH_T(KC_NO),KC_B, KC_M, KC_W, KC_V, CTL_T(KC_Z), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
TG(2), KC_PSCREEN,
KC_PGUP,
KC_PGDN,RALT(KC_RSFT), KC_ENT
),
/* Keymap 1: Symbol & Media Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Prev | Next | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | |VolUp | | |
* | | |------| |------| Mute | |
* | | | | |VolDn | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_MPRV,KC_MNXT,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_VOLU,
KC_VOLD, KC_MUTE, KC_TRNS
),
/* Keymap 2: QWERTY Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | Q | W | E | R | T | | | | Y | U | I | O | P | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | A | S | D | F | G |------| |------| H | J | K | L | ; | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP( // layer 0 : default
// left hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS,
KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_TRNS, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_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, LT(MDIA, KC_SCLN),KC_TRNS,
KC_TRNS, KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), 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[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

File diff suppressed because it is too large Load Diff

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -156,12 +156,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -182,12 +182,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -0,0 +1,679 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Compiler for keymap.c files
This scrip will generate a keymap.c file from a simple
markdown file with a specific layout.
Usage:
python compile_keymap.py INPUT_PATH [OUTPUT_PATH]
"""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import
from __future__ import unicode_literals
import os
import io
import re
import sys
import json
import unicodedata
import collections
import itertools as it
PY2 = sys.version_info.major == 2
if PY2:
chr = unichr
KEYBOARD_LAYOUTS = {
# These map positions in the parsed layout to
# positions in the KEYMAP MATRIX
'ergodox_ez': [
[ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44],
[ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51],
[14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57],
[20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64],
[27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69],
[ 32, 33], [70, 71 ],
[ 34], [72 ],
[ 35, 36, 37], [73, 74, 75 ],
]
}
BLANK_LAYOUTS = [
# Compact Layout
"""
.------------------------------------.------------------------------------.
| | | | | | | | | | | | | | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | | | | | | | | | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | |-----!-----! | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | | | | | | | | | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
""",
# Wide Layout
"""
.---------------------------------------------. .---------------------------------------------.
| | | | | | | | ! | | | | | | |
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
| | | | | | | | ! | | | | | | |
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
| | | | | | |-------! !-------! | | | | | |
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
| | | | | | | | ! | | | | | | |
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
| | | | | | ! | | | | |
'------------------------------' '------------------------------'
.---------------. .---------------.
| | | ! | |
.-------+-------+-------! !-------+-------+-------.
! ! | | ! | ! !
! ! !-------! !-------! ! !
| | | | ! | | |
'-----------------------' '-----------------------'
""",
]
DEFAULT_CONFIG = {
"keymaps_includes": [
"keymap_common.h",
],
'filler': "-+.'!:x",
'separator': "|",
'default_key_prefix': ["KC_"],
}
SECTIONS = [
'layout_config',
'layers',
]
# Markdown Parsing
ONELINE_COMMENT_RE = re.compile(r"""
^ # comment must be at the start of the line
\s* # arbitrary whitespace
// # start of the comment
(.*) # the comment
$ # until the end of line
""", re.MULTILINE | re.VERBOSE
)
INLINE_COMMENT_RE = re.compile(r"""
([\,\"\[\]\{\}\d]) # anythig that might end a expression
\s+ # comment must be preceded by whitespace
// # start of the comment
\s # and succeded by whitespace
(?:[^\"\]\}\{\[]*) # the comment (except things which might be json)
$ # until the end of line
""", re.MULTILINE | re.VERBOSE)
TRAILING_COMMA_RE = re.compile(r"""
, # the comma
(?:\s*) # arbitrary whitespace
$ # only works if the trailing comma is followed by newline
(\s*) # arbitrary whitespace
([\]\}]) # end of an array or object
""", re.MULTILINE | re.VERBOSE)
def loads(raw_data):
if isinstance(raw_data, bytes):
raw_data = raw_data.decode('utf-8')
raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data)
raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data)
raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data)
return json.loads(raw_data)
def parse_config(path):
def reset_section():
section.update({
'name': section.get('name', ""),
'sub_name': "",
'start_line': -1,
'end_line': -1,
'code_lines': [],
})
def start_section(line_index, line):
end_section()
if line.startswith("# "):
name = line[2:]
elif line.startswith("## "):
name = line[3:]
else:
name = ""
name = name.strip().replace(" ", "_").lower()
if name in SECTIONS:
section['name'] = name
else:
section['sub_name'] = name
section['start_line'] = line_index
def end_section():
if section['start_line'] >= 0:
if section['name'] == 'layout_config':
config.update(loads("\n".join(
section['code_lines']
)))
elif section['sub_name'].startswith('layer'):
layer_name = section['sub_name']
config['layer_lines'][layer_name] = section['code_lines']
reset_section()
def amend_section(line_index, line):
section['end_line'] = line_index
section['code_lines'].append(line)
config = DEFAULT_CONFIG.copy()
config.update({
'layer_lines': collections.OrderedDict(),
'macro_ids': {'UM'},
'unicode_macros': {},
})
section = {}
reset_section()
with io.open(path, encoding="utf-8") as fh:
for i, line in enumerate(fh):
if line.startswith("#"):
start_section(i, line)
elif line.startswith(" "):
amend_section(i, line[4:])
else:
# TODO: maybe parse description
pass
end_section()
assert 'layout' in config
return config
# header file parsing
IF0_RE = re.compile(r"""
^
#if 0
$.*?
#endif
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
COMMENT_RE = re.compile(r"""
/\*
.*?
\*/"
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
def read_header_file(path):
with io.open(path, encoding="utf-8") as fh:
data = fh.read()
data, _ = COMMENT_RE.subn("", data)
data, _ = IF0_RE.subn("", data)
return data
def regex_partial(re_str_fmt, flags):
def partial(*args, **kwargs):
re_str = re_str_fmt.format(*args, **kwargs)
return re.compile(re_str, flags)
return partial
KEYDEF_REP = regex_partial(r"""
#define
\s
(
(?:{}) # the prefixes
(?:\w+) # the key name
) # capture group end
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
ENUM_RE = re.compile(r"""
(
enum
\s\w+\s
\{
.*? # the enum content
\}
;
) # capture group end
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
ENUM_KEY_REP = regex_partial(r"""
(
{} # the prefixes
\w+ # the key name
) # capture group end
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
def parse_keydefs(config, data):
prefix_options = "|".join(config['key_prefixes'])
keydef_re = KEYDEF_REP(prefix_options)
enum_key_re = ENUM_KEY_REP(prefix_options)
for match in keydef_re.finditer(data):
yield match.groups()[0]
for enum_match in ENUM_RE.finditer(data):
enum = enum_match.groups()[0]
for key_match in enum_key_re.finditer(enum):
yield key_match.groups()[0]
def parse_valid_keys(config, out_path):
basepath = os.path.abspath(os.path.join(os.path.dirname(out_path)))
dirpaths = []
subpaths = []
while len(subpaths) < 6:
path = os.path.join(basepath, *subpaths)
dirpaths.append(path)
dirpaths.append(os.path.join(path, "tmk_core", "common"))
dirpaths.append(os.path.join(path, "quantum"))
subpaths.append('..')
includes = set(config['keymaps_includes'])
includes.add("keycode.h")
valid_keycodes = set()
for dirpath, include in it.product(dirpaths, includes):
include_path = os.path.join(dirpath, include)
if os.path.exists(include_path):
header_data = read_header_file(include_path)
valid_keycodes.update(
parse_keydefs(config, header_data)
)
return valid_keycodes
# Keymap Parsing
def iter_raw_codes(layer_lines, filler, separator):
filler_re = re.compile("[" + filler + " ]")
for line in layer_lines:
line, _ = filler_re.subn("", line.strip())
if not line:
continue
codes = line.split(separator)
for code in codes[1:-1]:
yield code
def iter_indexed_codes(raw_codes, key_indexes):
key_rows = {}
key_indexes_flat = []
for row_index, key_indexes in enumerate(key_indexes):
for key_index in key_indexes:
key_rows[key_index] = row_index
key_indexes_flat.extend(key_indexes)
assert len(raw_codes) == len(key_indexes_flat)
for raw_code, key_index in zip(raw_codes, key_indexes_flat):
# we keep track of the row mostly for layout purposes
yield raw_code, key_index, key_rows[key_index]
LAYER_CHANGE_RE = re.compile(r"""
(DF|TG|MO)\(\d+\)
""", re.VERBOSE)
MACRO_RE = re.compile(r"""
M\(\w+\)
""", re.VERBOSE)
UNICODE_RE = re.compile(r"""
U[0-9A-F]{4}
""", re.VERBOSE)
NON_CODE = re.compile(r"""
^[^A-Z0-9_]$
""", re.VERBOSE)
def parse_uni_code(raw_code):
macro_id = "UC_" + (
unicodedata.name(raw_code)
.replace(" ", "_")
.replace("-", "_")
)
code = "M({})".format(macro_id)
uc_hex = "{:04X}".format(ord(raw_code))
return code, macro_id, uc_hex
def parse_key_code(raw_code, key_prefixes, valid_keycodes):
if raw_code in valid_keycodes:
return raw_code
for prefix in key_prefixes:
code = prefix + raw_code
if code in valid_keycodes:
return code
def parse_code(raw_code, key_prefixes, valid_keycodes):
if not raw_code:
return 'KC_TRNS', None, None
if LAYER_CHANGE_RE.match(raw_code):
return raw_code, None, None
if MACRO_RE.match(raw_code):
macro_id = raw_code[2:-1]
return raw_code, macro_id, None
if UNICODE_RE.match(raw_code):
hex_code = raw_code[1:]
return parse_uni_code(chr(int(hex_code, 16)))
if NON_CODE.match(raw_code):
return parse_uni_code(raw_code)
code = parse_key_code(raw_code, key_prefixes, valid_keycodes)
return code, None, None
def parse_keymap(config, key_indexes, layer_lines, valid_keycodes):
keymap = {}
raw_codes = list(iter_raw_codes(
layer_lines, config['filler'], config['separator']
))
indexed_codes = iter_indexed_codes(raw_codes, key_indexes)
key_prefixes = config['key_prefixes']
for raw_code, key_index, row_index in indexed_codes:
code, macro_id, uc_hex = parse_code(
raw_code, key_prefixes, valid_keycodes
)
# TODO: line numbers for invalid codes
err_msg = "Could not parse key '{}' on row {}".format(
raw_code, row_index
)
assert code is not None, err_msg
# print(repr(raw_code), repr(code), macro_id, uc_hex)
if macro_id:
config['macro_ids'].add(macro_id)
if uc_hex:
config['unicode_macros'][macro_id] = uc_hex
keymap[key_index] = (code, row_index)
return keymap
def parse_keymaps(config, valid_keycodes):
keymaps = collections.OrderedDict()
key_indexes = config.get(
'key_indexes', KEYBOARD_LAYOUTS[config['layout']]
)
# TODO: maybe validate key_indexes
for layer_name, layer_lines, in config['layer_lines'].items():
keymaps[layer_name] = parse_keymap(
config, key_indexes, layer_lines, valid_keycodes
)
return keymaps
# keymap.c output
USERCODE = """
// 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 L1:
ergodox_right_led_1_on();
break;
case L2:
ergodox_right_led_2_on();
break;
case L3:
ergodox_right_led_3_on();
break;
case L4:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
break;
case L5:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
break;
// case L6:
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
// case L7:
// ergodox_right_led_1_on();
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
default:
ergodox_board_led_off();
break;
}
};
"""
MACROCODE = """
#define UC_MODE_WIN 0
#define UC_MODE_LINUX 1
#define UC_MODE_OSX 2
// TODO: allow default mode to be configured
static uint16_t unicode_mode = UC_MODE_WIN;
uint16_t hextokeycode(uint8_t hex) {{
if (hex == 0x0) {{
return KC_P0;
}}
if (hex < 0xA) {{
return KC_P1 + (hex - 0x1);
}}
return KC_A + (hex - 0xA);
}}
void unicode_action_function(uint16_t hi, uint16_t lo) {{
switch (unicode_mode) {{
case UC_MODE_WIN:
register_code(KC_LALT);
register_code(KC_PPLS);
unregister_code(KC_PPLS);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LALT);
break;
case UC_MODE_LINUX:
register_code(KC_LCTL);
register_code(KC_LSFT);
register_code(KC_U);
unregister_code(KC_U);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LCTL);
unregister_code(KC_LSFT);
break;
case UC_MODE_OSX:
break;
}}
}}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{
if (!record->event.pressed) {{
return MACRO_NONE;
}}
// MACRODOWN only works in this function
switch(id) {{
case UM:
unicode_mode = (unicode_mode + 1) % 2;
break;
{macro_cases}
{unicode_macro_cases}
default:
break;
}}
return MACRO_NONE;
}};
"""
UNICODE_MACRO_TEMPLATE = """
case {macro_id}:
unicode_action_function(0x{hi:02x}, 0x{lo:02x});
break;
""".strip()
def unicode_macro_cases(config):
for macro_id, uc_hex in config['unicode_macros'].items():
hi = int(uc_hex, 16) >> 8
lo = int(uc_hex, 16) & 0xFF
unimacro_keys = ", ".join(
"T({})".format(
"KP_" + digit if digit.isdigit() else digit
) for digit in uc_hex
)
yield UNICODE_MACRO_TEMPLATE.format(
macro_id=macro_id, hi=hi, lo=lo
)
def iter_keymap_lines(keymap):
prev_row_index = None
for key_index in sorted(keymap):
code, row_index = keymap[key_index]
if row_index != prev_row_index:
yield "\n"
yield " {}".format(code)
if key_index < len(keymap) - 1:
yield ","
prev_row_index = row_index
def iter_keymap_parts(config, keymaps):
# includes
for include_path in config['keymaps_includes']:
yield '#include "{}"\n'.format(include_path)
yield "\n"
# definitions
for i, macro_id in enumerate(sorted(config['macro_ids'])):
yield "#define {} {}\n".format(macro_id, i)
yield "\n"
for i, layer_name in enumerate(config['layer_lines']):
yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name)
yield "\n"
# keymaps
yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n"
for i, layer_name in enumerate(config['layer_lines']):
# comment
layer_lines = config['layer_lines'][layer_name]
prefixed_lines = " * " + " * ".join(layer_lines)
yield "/*\n{}*/\n".format(prefixed_lines)
# keymap codes
keymap = keymaps[layer_name]
keymap_lines = "".join(iter_keymap_lines(keymap))
yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines)
yield "};\n\n"
# no idea what this is for
yield "const uint16_t PROGMEM fn_actions[] = {};\n"
# macros
yield MACROCODE.format(
macro_cases="",
unicode_macro_cases="\n".join(unicode_macro_cases(config)),
)
# TODO: dynamically create blinking lights
yield USERCODE
def main(argv=sys.argv[1:]):
if not argv or '-h' in argv or '--help' in argv:
print(__doc__)
return 0
in_path = os.path.abspath(argv[0])
if not os.path.exists(in_path):
print("No such file '{}'".format(in_path))
return 1
if len(argv) > 1:
out_path = os.path.abspath(argv[1])
else:
dirname = os.path.dirname(in_path)
out_path = os.path.join(dirname, "keymap.c")
config = parse_config(in_path)
valid_keys = parse_valid_keys(config, out_path)
keymaps = parse_keymaps(config, valid_keys)
with io.open(out_path, mode="w", encoding="utf-8") as fh:
for part in iter_keymap_parts(config, keymaps):
fh.write(part)
if __name__ == '__main__':
sys.exit(main())

@ -0,0 +1,1240 @@
:100000000C9412040C9456040C9456040C9456044C
:100010000C9456040C9456040C9456040C945604F8
:100020000C9456040C9456040C944F0F0C9421100D
:100030000C9456040C9456040C9456040C945604D8
:100040000C9456040C94D6240C9456040C94560428
:100050000C9456040C94751E0C9456040C9456047F
:100060000C9456040C9456040C9456040C945604A8
:100070000C9456040C9456040C9456040C94560498
:100080000C9456040C9456040C9456040C94560488
:100090000C9456040C9456040C9456040C94560478
:1000A0000C9456040C9456040C945604A305700545
:1000B0005B05B505DC050F06F105F7050C063A06EC
:1000C0002F06FA0532064605EB0523062C066D05BC
:1000D0006405B205A905910567052605BE05140648
:1000E0001D0629069705C705A60540051A06E5055C
:1000F00088059D0594057C0520068B053105E805DE
:100100008205C1052005AC055E054C057605730525
:10011000CA059A05060637058505AF052305B80506
:1001200003060906D3055505EE0543056A054F0587
:10013000C405F40535062905A005BB05FD05CD055B
:1001400052052606E2053D058E055805D9056105CF
:1001500000063A05D005DF052C0549053F061706C0
:1001600079053405D6057F0514058610A81093116E
:10017000A8109311EA100D119311621175116E14EC
:100180006E149C149C14DE141A151A171A173215C3
:100190001A1729162916F4161A171A1708170552CE
:1001A000045201520352010000001E001B001800FF
:1001B0002F00010029001F0013000C003300E30092
:1001C000E1002000090004003400E2002A002100C0
:1001D0001A0008000600E000650022000A00120074
:1001E0001900000049002E004A0000004D000000E8
:1001F00002542E02025400002B0000005E30230047
:100200000B001600050000004C0024000D0011003A
:100210001000E4004B0025000E0015003600E6003B
:100220002C0026000F001700370050002800270080
:1002300014000700520051004E0035001C002D0034
:100240001D004F000000010001000100010001003D
:1002500000001E02300238020100010001001F02EE
:10026000641438003000010001002002240223023F
:1002700027020100010001002414251401000100DF
:1002800001000100271426140100000001000100F4
:100290000100000001000000010001000100000059
:1002A0000100000001000100310021022D140000B6
:1002B000010001006400250222020100010001008A
:1002C0006402260236020100010001000100301420
:1002D00037023830010035021F023102553002303A
:1002E0000100010001002D0201003D30000001006D
:1002F000010001000100010000003A0001000100BE
:100300000100010001003B000100010001000100AB
:1003100001003C00010001000100010001003D005E
:10032000010001000100010001003E000100010088
:100330000100000001004400010000000100000075
:1003400001004500010000005300000001003F00D3
:100350000100010001000000010040005F005C009E
:10036000590062000100410060005D005A008500F4
:100370000100420061005E005B0063000100430079
:100380005500560057005800010067005400560001
:1003900057005800000001000100010001000100A9
:1003A00000004D30393001005B3001000100513058
:1003B00058303C303B300100010050300130141403
:1003C0005D30010001004A30593008145C300100F2
:1003D0000100493057300430003000000100053082
:1003E0000100000001000000010001000100000008
:1003F0000100000001004F305A3037301E0200006B
:1004000001004E3001004B30010001000100483076
:10041000563054305330010001004C30010003309D
:100420003A300100010052300100010001000100DA
:1004300001000100010001000100010000000100B5
:100440000100010001000100000042302030343082
:1004500001000100010046302E302630333001000B
:10046000010045302D301E300100010001004030F8
:100470002B3022300100010001003F3025302C30AC
:100480000100000001000100010000000100000067
:1004900001000100010000000100000001004430E3
:1004A000233031301F3000000100433035302A3016
:1004B0002930010001003E302730303001000100BA
:1004C0000100413028303230010001000100473086
:1004D000010021300100010001000100363024300C
:1004E0002F300100000001000100010001000100A7
:1004F0000000010008301B30010001000100010074
:1005000015300D301A3001000100010014300630A2
:10051000010001000100010012300A300100010059
:10052000010001000C301330010000000100010047
:1005300001000000010000000100010001000000B6
:1005400001000000010001000B30183007300000EE
:10055000010001001C3011301030010001000100C9
:100560000E30173001000100010001000F3019307A
:10057000010001000100010001000930010001003B
:10058000010001001D3001001630010000000100D3
:100590000100010001000100000001000100010054
:1005A0000100010001000100010001000100010043
:1005B0000100010001000100010001000100010033
:1005C0000100010001000100010001000100010023
:1005D0000100000001000100010000000100000016
:1005E0000100010001000000010000000100010005
:1005F00001000100010000000100010001000100F4
:1006000001000100010001000100010001000100E2
:1006100001000100010001000100010001000100D2
:1006200001000100010001000100010001000100C2
:1006300001000100000016034500720067006F0012
:1006400044006F007800200045005A0000001603A7
:100650004500720067006F0044006F0078002000C2
:1006600045005A0000000403090409026D0004015A
:1006700000A0FA0904000001030101000921110191
:100680000001223F000705810308000A0904010058
:100690000103010200092111010001224D0007059B
:1006A000820308000A090402000103000000092176
:1006B000110100012236000705830308000A09041E
:1006C000030001030000000921110100012239008B
:1006D000070584031000011201100100000008ED5D
:1006E000FE071301000102000105010906A1010531
:1006F0000719E029E7150025019508750181020514
:100700000819012905950575019102950175039157
:1007100001050719002977150025019578750181D4
:1007200002C005010980A101850216010026B7005B
:100730001A01002AB700751095018100C0050C0947
:1007400001A1018503160100269C021A01002A9CC2
:1007500002751095018100C005010902A10109017E
:10076000A100050919012905150025019505750147
:100770008102950175038101050109300931158157
:10078000257F95027508810609381581257F950119
:1007900075088106050C0A38021581257F950175BB
:1007A000088106C0C005010906A101050719E02955
:1007B000E7150025019508750181029501750881ED
:1007C0000105081901290595057501910295017525
:1007D0000391010507190029FF150025FF950675EE
:1007E000088100C0000000000000000000000001BF
:1007F0000204060A0F17202C3A4A5D71879DB3C781
:10080000DAE9F5FCFFFCF5E9DAC7B39D87715D4ACB
:100810003A2C20170F0A0604020100000000000015
:100820000000000011241FBECFEFDAE0DEBFCDBF15
:1008300004B603FE24C08091F1019091F201A091D1
:10084000F301B091F4018730904BA740B04BB9F45D
:100850001092F1011092F2011092F3011092F40142
:1008600014BE84B7877F84BF88E10FB6F894809365
:100870006000109260000FBEE0E0FFE3099511E018
:10088000A0E0B1E0E0E3FDE402C005900D92A433E6
:10089000B107D9F711E0A4E3B1E001C01D92A13F77
:1008A000B107E1F70E94950C0C9496260C94000079
:1008B000282F882341F090E02A3018F4885A9F4F5F
:1008C00008950697089582E690E008950F931F9388
:1008D000CF93DF938C01EB0180913401909135012E
:1008E000009709F448C0019709F089C080EE0E9482
:1008F000F71281EE0E94F71288E10E94F71288E158
:100900000E94BF13C801807F992724E096958795A0
:100910002A95E1F70E945804182F0E94F712812FA0
:100920000E94BF13802F8F700E945804182F0E94BE
:10093000F712812F0E94BF13CE01807F992734E0E8
:10094000969587953A95E1F70E945804D82F0E9412
:10095000F7128D2F0E94BF138C2F8F700E945804A6
:10096000C82F0E94F7128C2F0E94BF1380EE0E94A6
:10097000BF1381EE3EC082EE0E94F71287E50E940F
:10098000F71287E50E94BF13C801807F992744E0D2
:10099000969587954A95E1F70E945804182F0E9472
:1009A000F712812F0E94BF13802F8F700E9458046E
:1009B000182F0E94F712812F0E94BF13CE01807F53
:1009C000992754E0969587955A95E1F70E94580427
:1009D000D82F0E94F7128D2F0E94BF138C2F8F707B
:1009E0000E945804C82F0E94F7128C2F0E94BF1338
:1009F00082EEDF91CF911F910F910C94BF13DF9185
:100A0000CF911F910F910895FC018281882309F4F1
:100A10003CC1862F90E08F35910508F036C1FC016E
:100A2000EA5AFF4F0C944B26809134019091350186
:100A3000019681709927909335018093340125C1E7
:100A40006FEB70E019C160E970E008C061EA70E026
:100A500013C163E870E00BC16BE570E081E290E0E8
:100A600012C16BEB70E008C163E570E0F7CF6EEB8D
:100A700070E002C164E070E0D4C069EB70E001C1D5
:100A800062EB70E0F9C065E870E0F1C069E970E020
:100A9000F3C065E570E0E2CF68EC70E0EDC069E8B6
:100AA00070E0E5C064E770E0E2C062E970E0D6CFD4
:100AB00066E770E0DCC063E970E0D0CF60EC70E026
:100AC000DBC062EB70E0DDC069EA70E0D5C068EAC7
:100AD00070E0D2C064E870E0CAC06DE970E0CCC0DC
:100AE00067EF70E0CEC063EC70E0C6C061EC70E010
:100AF000C3C069E570E0B2CF63EB70E0BDC064E5F0
:100B000070E0ACCF6DEB70E0B7C066EB70E0B4C0E6
:100B100065EB70E0B1C06AEB70E0AEC067E770E013
:100B2000A6C060EA70E0A8C062EC70E0A5C06EE903
:100B300070E0A2C068EB70E09FC067EB70E09CC003
:100B400062E870E094C063E470E06BC061EB70E059
:100B500093C066EA70E090C066EC70E08DC06EE114
:100B600070E05FC06FE970E087C068E070E059C076
:100B700067ED70E086C060E870E079C063EA70E01D
:100B80007BC069EC70E078C061E870E070C066E935
:100B900070E072C064EC70E06FC065E770E067C041
:100BA00063E070E03EC061EB70E06BC06EEB70E044
:100BB00068C063EB70E065C065E070E032C061E979
:100BC00070E04CCF69E770E052C064EB70E054C055
:100BD0006CEB70E051C06AE970E04EC068E870E00C
:100BE00046C061E970E048C067E870E040C062E973
:100BF00070E042C067E970E03FC068E770E037C06E
:100C000060E770E034C069E070E00BC065EC70E054
:100C100033C060E670E005C067EA70E02DC060E0B8
:100C200070E082E290E02FC064EA70E025C06CEBD7
:100C300070E027C067EC70E01FC068E970E01CC07E
:100C400069EB70E019C06BE970E016C06FE770E007
:100C50000EC065EA70E010C06CE970E00DC065E997
:100C600070E00AC063E970E007C066E870E080E207
:100C700090E009C064E970E083E090E004C06DEBAF
:100C800070E080E090E00E94660480E090E00895CB
:100C900008956091B3017091B4018091B501909174
:100CA000B6010E94A11D56985E9825982D98269809
:100CB0002E9827982F988330A9F028F4813051F08E
:100CC000823069F012C0843041F0853071F4259A89
:100CD0002D9A08C0259A2D9A0895259A2D9A269A1C
:100CE0002E9A0895279A2F9A089556985E980895F7
:100CF0000C94490656985E9825982D9826982E981B
:100D000027982F988FEF90E0909389008093880028
:100D100090938B0080938A0090938D0080938C0039
:100D2000259A2D9A2FEF80E792E021508040904045
:100D3000E1F700C00000269A2E9A2FEF80E792E09C
:100D4000215080409040E1F700C00000279A2F9A80
:100D50002FEF80E792E0215080409040E1F700C003
:100D6000000025982D982FEF80E792E021508040D9
:100D70009040E1F700C0000026982E982FEF80E702
:100D800092E0215080409040E1F700C00000279899
:100D90002F9856985E9825982D9826982E982798E3
:100DA0002F98089589EA8093800089E080938100DC
:100DB00024982C983F988AB18F748AB96E98479A74
:100DC0008BB1806B8BB9769A0E947A060C94480698
:100DD00080E2809300018091360181110EC00E9453
:100DE000370781E0809336012FEF83ED90E32150A8
:100DF00080409040E1F700C0000080E40E943D0781
:100E00008093000181112EC00E946707809300012A
:100E1000811128C00E94670780930001811122C0C0
:100E20008FE30E9467078093000181111BC00E941D
:100E30005F0780E40E943D0780930001811112C08A
:100E40008CE00E9467078093000181110BC00E9413
:100E5000670780930001811105C08FE30E94670737
:100E6000809300010E945F07809100010895109215
:100E7000B9008AE08093B800089594EA9093BC008A
:100E80009091BC0097FFFCCF9091B900987F98306B
:100E900021F0903111F081E008958093BB0084E847
:100EA0008093BC008091BC0087FFFCCF8091B9008B
:100EB000887F883111F0803471F780E0089584E9EB
:100EC0008093BC008091BC0084FDFCCF089580938A
:100ED000BB0084E88093BC008091BC0087FFFCCFFE
:100EE0009091B900987F81E0983209F480E00895EC
:100EF00084E88093BC008091BC0087FFFCCF809188
:100F0000BB00089580910001811115C080E40E940A
:100F10003D078093000181110CC082E10E946707A8
:100F200080930001811105C08FEF0E9467078093B5
:100F300000010E945F0784B1807F84B985B1807F02
:100F400085B98AB1837F8AB98BB1837F8BB93E988B
:100F5000469808950E94E806809300010E94820747
:100F600080B38C7080BB81B3836F81BBE6E4F1E01A
:100F7000A8E3B1E011921D9281E0E435F807D1F7C2
:100F80000C94D206BF92CF92DF92EF92FF920F9312
:100F90001F93CF93DF9380910001882379F0809194
:100FA00037018F5F80933701811108C00E94E806E6
:100FB00080930001811102C00E947A0608E311E0CB
:100FC000C0E0D0E0DD24D39482E0C82EEE24E39488
:100FD000F12CC73000F580910001811162C080E4DE
:100FE0000E943D0780930001811112C082E10E949E
:100FF00067078093000181110BC0C7010C2E01C04F
:10100000880F0A94EAF780950E9467078093000191
:101010000E945F0746C0CA30A1F028F4C83059F0DA
:10102000C93061F005C0CC3089F070F0CD3089F066
:10103000209A289810C0219A29980DC0229A2A989F
:101040000AC0239A2B9807C0529A01C0539A5B9802
:1010500002C03E9A4698E0EAEA95F1F78FB1799995
:101060005AC092E081708D25892B7C9B02C090E054
:1010700001C094E0892B7D9B02C090E001C098E004
:10108000892B7E9B02C090E001C090E1892B9FB12B
:101090009095991F9927991F9295990F907E892B6A
:1010A0000FC08091000181114BC080E40E943D0778
:1010B00080930001882389F1B12C0E945F078B2D5A
:1010C000F8019081981719F08083C09201010E9465
:1010D000820721960F5F1F4FCE30D10509F079CFDF
:1010E00080910101882371F181508093010188234F
:1010F00039F08FE99FE00197F1F700C0000022C0AE
:10110000A6E4B1E0E8E3F1E081918D9391E0E6346B
:10111000F907D1F717C090E0A5CF83E10E946707D8
:10112000809300018111C8CF81E40E943D07809324
:1011300000018111C1CF0E947807B82EB094BDCFB5
:1011400080E0BECF0E94780681E0DF91CF911F91B1
:101150000F91FF90EF90DF90CF90BF900895E82F10
:10116000F0E0EA5BFE4F8081089508958B3B910586
:1011700078F4883A910540F5853A9105D0F48430A9
:10118000910508F0B1C08130910509F4ADC06BC084
:10119000803E910508F467C0883E910508F4A4C01C
:1011A0009C01205F31092031310508F05CC0906559
:1011B0000895853A910509F459C0863A910509F4D4
:1011C00058C083E890E40895883A910509F454C022
:1011D000893A910509F453C08A3A910509F452C03D
:1011E0008B3A910509F451C08C3A910509F450C02D
:1011F0008D3A910509F44FC0803B910509F44EC02A
:101200008E3A910509F44DC08F3A910509F44CC00E
:10121000813B910509F44BC0823B910509F44AC01A
:10122000833B910509F449C0843B910509F448C00A
:10123000853B910509F447C0863B910509F446C0FA
:10124000873B910509F445C0883B910509F444C0EA
:10125000893B910509F443C08A3B910509F042C0DE
:101260008AE296E4089580E090E0089581E890E4B1
:10127000089582E890E4089582EE94E4089589EE5A
:1012800094E408958AEE94E4089585EB94E4089537
:1012900086EB94E4089587EB94E408958CEC94E451
:1012A00008958DEC94E4089583E895E408958AE820
:1012B00095E4089582E995E4089584E995E4089514
:1012C00081E296E4089583E296E4089584E296E448
:1012D000089585E296E4089586E296E4089587E20B
:1012E00096E4089580E094E40895089596E0799F47
:1012F000F001112494E5899FE00DF11D1124E60F02
:10130000F11DEE0FFF1FE256FE4F85919491089557
:10131000880F991F825E9F4FFC01859194910895DB
:10132000880F991F82569E4FFC01859194910895D4
:1013300026E0729FF001112444E5849FE00DF11D29
:101340001124E60FF11DEE0FFF1FE256FE4F25910F
:101350003491C9019A9581159F4110F4C9010895EE
:10136000C90190528115904128F4C9019F700E94D3
:1013700090090895C90190538115904120F4C90145
:101380009927906C0895211580E5380769F40E942B
:101390003D179FEF24E34CE0915020404040E1F79F
:1013A00000C000000C949A1E213080E5380731F40B
:1013B0008091CF0181608093CF010895C90190553C
:1013C0008115904108F050C0832F99278F7099277D
:1013D00081309105D9F4A9014370552702C0880FC7
:1013E000991F4A95E2F79C68A90164E0440F551FD4
:1013F0006A95E1F744275370842B952B73E0220FF5
:10140000331F7A95E1F7207633271DC0823091058E
:1014100029F4922F8827816F906A0895833091056F
:10142000A9F4A9014370552781E090E002C0880F1C
:10143000991F4A95E2F79C6843E0220F331F4A95B3
:10144000E1F7207E3770822B932B08950497F1F4F7
:10145000A9014370552781E090E002C0880F991FD1
:101460004A95E2F79A68E8CFC901905781159041F3
:1014700020F4C9019F7090620895C90190588115A8
:10148000904120F4C9019F70906A0895203E310573
:10149000E0F4203C310558F52133310509F470C0E2
:1014A00048F42932310509F464C02A32310509F4BF
:1014B0006EC074C029333105F1F022383105D9F0FE
:1014C0002533310509F44EC069C0233E310589F149
:1014D00038F4203E3105C1F0223E3105E1F05EC016
:1014E000263E310569F1273E3105A9F157C0C901F2
:1014F0000E94880908958091E20180FD02C081FF69
:101500004DC080EE90E04BC08091E20180FFF9CFAA
:1015100089E390E044C08091E20182FF0EC0809197
:10152000E20184FF03C080E090E039C083EE90E0E8
:1015300036C08091E20182FFF2CF82EE90E02FC0B0
:101540008091E20183FF0BC08091E20184FDEBCF2B
:1015500087EE90E024C08091E20183FFF5CF86EE14
:1015600090E01DC08091E20185FF07C089E290E014
:1015700016C08091E20185FFF9CF85E390E00FC0AE
:101580008091E20186FF07C08AE290E008C0809166
:10159000E20186FFF9CF81E390E001C0C9010E941A
:1015A000B608089508950C94D20A809164010895B4
:1015B000CF93DF9300D01F92CDB7DEB72091E80123
:1015C000243019F523E029839B838A832093E90043
:1015D0008FEF9091E800815095FD06C095ED9A95AA
:1015E000F1F700008111F5CF8091E80085FF0DC073
:1015F00040E050E063E070E0CE0101960E94420DB1
:101600008091E8008E778093E8000F900F900F9004
:10161000DF91CF910895CF93DF9300D01F92CDB784
:10162000DEB72091E801243021F522E029839B8355
:101630008A8383E08093E9008FEF9091E8008150E6
:1016400095FD06C095ED9A95F1F700008111F5CF53
:101650008091E80085FF0DC040E050E063E070E05D
:10166000CE0101960E94420D8091E8008E77809312
:10167000E8000F900F900F90DF91CF910895209187
:10168000E8012430F1F422E02093E9002FEF3091BB
:10169000E800215035FD06C035ED3A95F1F7000020
:1016A0002111F5CF2091E80025FF0BC040E050E06C
:1016B00065E070E00E94420D8091E8008E77809393
:1016C000E8000895CF93DF93EC018091E801843026
:1016D00009F046C090910C019923D9F090910D0129
:1016E0009923B9F08093E9008FEF9091E800815041
:1016F00095FD06C095E19A95F1F700008111F5CFAF
:101700008091E80085FF2CC040E050E060E170E08F
:1017100017C081E08093E9008FEF9091E80081503D
:1017200095FD06C095ED9A95F1F700008111F5CF72
:101730008091E80085FF14C040E050E068E070E070
:10174000CE010E94420D8091E8008E778093E800E0
:1017500080E1FE01A4E5B1E001900D928A95E1F7E8
:10176000DF91CF9108958091E701811109C00E9416
:10177000D40E0E94310F8091E20084608093E200D9
:1017800008951092E701089508950C94C3240E94CF
:10179000311E0E94C9240E94CE110C94D30A42E04B
:1017A00061EC81E00E944E0E42E061EC82E00E941A
:1017B0004E0E42E061EC83E00E944E0E42E161EC8D
:1017C00084E00C944E0E8091EA01833009F455C0F8
:1017D00030F4813071F0823009F48EC008958A307F
:1017E00009F47AC08B3009F460C0893009F09CC0DC
:1017F00020C08091E901813A09F096C08091E8000B
:10180000877F8093E8008091ED019091EE01892B14
:1018100021F060E080E090E003C060E184E591E0C9
:1018200070E00E948B0D8091E8008B778093E80038
:1018300008958091E901813209F076C08091ED012F
:101840009091EE01009719F0039709F06DC0809117
:10185000E800877F8093E8008091E80082FD05C062
:101860008091E8018111F8CF5FC08091F1008093F1
:1018700064018091E8008B7753C08091E901813A3F
:1018800009F052C08091ED019091EE01892B09F091
:101890004BC08091E800877F8093E8008091E8004A
:1018A00080FFFCCF80910C0136C08091E90181322C
:1018B000D9F58091ED019091EE01892BA9F58091E8
:1018C000E800877F8093E8000E94830E8091EB01FF
:1018D00080930C010C943D178091E901813221F530
:1018E0008091E800877F8093E8000E94830E8091BA
:1018F000EC018093650108958091E901813AA1F49A
:101900008091E800877F8093E8008091E80080FF65
:10191000FCCF809165018093F1008091E8008E7783
:101920008093E8000C94830E089584B7877F84BF6A
:1019300088E10FB6F89480936000109260000FBEAB
:1019400090E080E80FB6F894809361009093610076
:101950000FBE0E941D120E94D40E0E94310F809172
:10196000E20084608093E20078940E94AC110E94AF
:101970001F1282E091E00E94C9110E94B12480915F
:10198000E801853069F40E94F41D8091E601882306
:10199000B1F30E941C1E882391F30E942C0DEFCFFF
:1019A0000E942512ECCF292F332723303105A9F0CF
:1019B0006CF42130310509F442C02230310509F0C0
:1019C00043C08DE690E02AE636E042C02132310580
:1019D000C9F02232310519F137C0992781309105BC
:1019E00041F08230910541F0892B71F5E6E6F6E091
:1019F00005C0EEE4F6E002C0E6E3F6E0849190E094
:101A00009F0126C0643000F5E62FF0E0EE0FFF1FC7
:101A1000EE5DFE4F2081318189E090E019C0643095
:101A200098F4E62FF0E0DF01AA0FBB1FA65EBE4FC1
:101A30002D913C91EA5EFE4F808190E009C082E1E9
:101A400090E027ED36E004C080E090E020E030E058
:101A5000FA0131832083089580E189BD82E189BD47
:101A600009B400FEFDCF8091D8008F7D8093D8000F
:101A70008091E00082608093E0008091E00081FD31
:101A8000FCCF0895CF92DF92EF92FF920F931F93B6
:101A9000CF93DF937C018B01EA010E94A40E811198
:101AA00031C0209731F088819981081B190BE80E0D
:101AB000F91EC12CD12C0115110519F18091E800F6
:101AC00085FD14C08091E8008E778093E800209710
:101AD00041F0888199818C0D9D1D9983888385E0D3
:101AE00011C00E94A40E882331F30CC0F70181912C
:101AF0007F018093F10001501109FFEFCF1ADF0A37
:101B0000DACF80E0DF91CF911F910F91FF90EF909E
:101B1000DF90CF9008952091EF013091F0012617CA
:101B2000370748F06115710539F42091E8002E77E8
:101B30002093E80001C0B901FC0120E061157105A6
:101B4000B9F18091E801882309F440C0853009F497
:101B50003FC08091E80083FD3DC08091E80082FF96
:101B600006C08091E80082FF26C080E00895809141
:101B7000E80080FFE3CF2091F3008091F20090E035
:101B8000922B6115710551F08830910538F421913F
:101B90002093F100615071090196F3CF21E008977D
:101BA00009F020E08091E8008E778093E800C6CFAE
:101BB0002111C7CFD6CF8091E801882339F0853035
:101BC00039F08091E80083FFCCCF04C082E0089513
:101BD00083E0089581E008952091EF013091F001B4
:101BE0002617370748F06115710539F42091E80090
:101BF0002E772093E80001C0B901FC0120E06115B7
:101C00007105C1F18091E801882309F441C0853054
:101C100009F440C08091E80083FD3EC08091E80057
:101C200082FF06C08091E80082FF27C080E008950F
:101C30008091E80080FFE3CF2091F3008091F200D3
:101C400090E0922B6115710559F08830910540F4B0
:101C500024912093F1003196615071090196F2CFE1
:101C600021E0089709F020E08091E8008E778093CA
:101C7000E800C5CF2111C6CFD5CF8091E8018823D8
:101C800039F0853039F08091E80083FFCBCF04C074
:101C900082E0089583E0089581E00895982F9730B9
:101CA00058F59093E900981739F07091EC00209165
:101CB000ED005091F00003C0242F762F50E021FF5B
:101CC00019C03091EB003E7F3093EB003091ED0076
:101CD0003D7F3093ED003091EB0031603093EB00AD
:101CE0007093EC002093ED005093F0002091EE00F3
:101CF00027FF07C09F5FD3CF8F708093E90081E0FB
:101D0000089580E008958091E90187FD05C08091E4
:101D1000E80080FF0EC012C08091E80082FD05C07F
:101D20008091E8018111F8CF08958091E8008B77C8
:101D300008C08091E8018111EACF08958091E80000
:101D40008E778093E80008958091E4009091E500FB
:101D500045E62091EC0020FF21C02091E80020FD05
:101D600021C02091E801222389F0253089F02091BB
:101D7000EB0025FD0FC02091E4003091E50028170D
:101D8000390739F3415041F0C901E3CF82E00895AA
:101D900083E0089581E0089584E008952091E800AB
:101DA00022FFDFCF80E008950E94420F0E944A0F79
:101DB000E0EEF0E0808181608083E8EDF0E08081FA
:101DC0008F77808319BCA7EDB0E08C918E7F8C93C8
:101DD00080818F7E80831092E70108950F931F9377
:101DE000CF93DF930E94420F0E944A0FC8EDD0E0CC
:101DF00088818F77888388818068888388818F7DB8
:101E0000888319BC1092E8011092E4011092E60157
:101E10001092E50100EE10E0F80180818B7F808355
:101E200088818160888342E060E080E00E944E0EFD
:101E3000E1EEF0E080818E7F8083E2EEF0E0808151
:101E400081608083808188608083F80180818E7FBB
:101E50008083888180618883DF91CF911F910F916A
:101E60000895E8EDF0E080818F7E8083E7EDF0E07B
:101E700080818160808384E082BF81E08093E7017C
:101E80000C94EE0EE8EDF0E080818E7F808310925E
:101E9000E20008951092DA001092E10008951F9276
:101EA0000F920FB60F9211242F933F934F935F938E
:101EB0006F937F938F939F93AF93BF93EF93FF9312
:101EC0008091E10082FF0BC08091E20082FF07C099
:101ED0008091E1008B7F8093E1000E94AB118091A3
:101EE000DA0080FF1FC08091D80080FF1BC0809166
:101EF000DA008E7F8093DA008091D90080FF0DC0D8
:101F000080E189BD82E189BD09B400FEFDCF81E099
:101F10008093E8010E94B30B05C019BC1092E80140
:101F20000E94C10B8091E10080FF19C08091E20006
:101F300080FF15C08091E2008E7F8093E200809147
:101F4000E20080618093E2008091D80080628093FB
:101F5000D80019BC85E08093E8010E94C50B8091F0
:101F6000E10084FF30C08091E20084FF2CC080E15A
:101F700089BD82E189BD09B400FEFDCF8091D80002
:101F80008F7D8093D8008091E1008F7E8093E10067
:101F90008091E2008F7E8093E2008091E200816078
:101FA0008093E2008091E401882311F084E007C06F
:101FB0008091E30087FF02C083E001C081E080934D
:101FC000E8010E94C70B8091E10083FF29C0809146
:101FD000E20083FF25C08091E100877F8093E100CC
:101FE00082E08093E8011092E4018091E1008E7F0D
:101FF0008093E1008091E2008E7F8093E2008091E7
:10200000E20080618093E20042E060E080E00E94B4
:102010004E0E8091F00088608093F0000E94C40B07
:10202000FF91EF91BF91AF919F918F917F916F91B0
:102030005F914F913F912F910F900FBE0F901F9086
:1020400018951F920F920FB60F9211242F933F9362
:102050004F935F936F937F938F939F93AF93BF93B0
:10206000CF93EF93FF93C091E900CF708091EC0084
:102070001092E9008091F000877F8093F0007894BF
:102080000E945D101092E9008091F00088608093BA
:10209000F000C093E900FF91EF91CF91BF91AF9114
:1020A0009F918F917F916F915F914F913F912F9170
:1020B0000F900FBE0F901F9018951F93CF93DF9333
:1020C000CDB7DEB7AA970FB6F894DEBF0FBECDBF6F
:1020D000E9EEF1E08091F100819321E0E13FF20728
:1020E000C9F70E94E30B8091E80083FF1CC1209197
:1020F000E9013091EA01832F90E08A30910508F0E0
:1021000012C1FC01EB54FF4F0C944B26203881F098
:10211000223809F008C18091ED018F708093E900A9
:102120008091EB0085FB882780F91092E90006C0BA
:102130008091E5019091E601911182609091E80013
:10214000977F9093E8008093F1001092F100C5C052
:10215000822F8D7F09F0E7C0222319F0223061F031
:10216000E2C08091EB01813009F0DDC0333009F02D
:1021700080E08093E60128C08091EB01811124C0AA
:102180002091ED012F7009F4CEC02093E9008091D9
:10219000EB0080FF19C08091EB00333011F48062B6
:1021A00011C080618093EB0081E090E0022E01C0BD
:1021B000880F0A94EAF78093EA001092EA0080916F
:1021C000EB0088608093EB001092E9008091E800BA
:1021D000877F86C02111A7C01091EB011F778091E6
:1021E000E3008078812B8093E3008091E800877F73
:1021F0008093E8000E94830E8091E80080FFFCCF6E
:102200008091E30080688093E300112311F083E064
:1022100001C082E08093E80186C02058223008F097
:1022200082C08091EB019091EC018C3D23E09207FC
:1022300079F583E08A838AE289834FB7F894DE01D7
:10224000139620E03EE051E2E32FF0E05093570078
:10225000E49120FF03C0E295EF703F5FEF708E2F97
:1022600090E0EA3010F0C79601C0C0968D939D9320
:102270002F5F243149F74FBF8091E800877F80931B
:10228000E8006AE270E0CE0101960E948B0D14C056
:10229000AE014F5F5F4F6091ED010E94D30C00973C
:1022A00009F441C02091E800277F2093E800BC0199
:1022B00089819A810E94EC0D8091E8008B77809350
:1022C000E80031C0203879F58091E800877F80935D
:1022D000E8008091E4018093F1008091E8008E771E
:1022E0008093E8000E94830E1EC021111CC09091B3
:1022F000EB019230C0F48091E800877F8093E80082
:102300009093E4010E94830E8091E401811104C046
:102310008091E30087FF02C084E001C081E08093E8
:10232000E8010E94CF0B8091E80083FF0AC08091F2
:10233000E800877F8093E8008091EB0080628093C3
:10234000EB00AA960FB6F894DEBF0FBECDBFDF91AB
:10235000CF911F9108950895CF938091E80188232C
:10236000B1F08091E9008F709091EC0090FF02C075
:1023700090E801C090E0C92FC82B1092E90080912D
:10238000E80083FD0E945D10CF70C093E900CF91FB
:10239000089590936B0180936A010895E0916A011A
:1023A000F0916B01309721F00190F081E02D0994BC
:1023B00080E00895E0916A01F0916B01309721F07F
:1023C0000280F381E02D09940895E0916A01F09173
:1023D0006B01309721F00480F581E02D0994089578
:1023E00020916801309169018217930771F09093F1
:1023F000690180936801E0916A01F0916B01309767
:1024000021F00680F781E02D09940895209166015E
:10241000309167018217930771F090936701809361
:102420006601E0916A01F0916B01309721F0008420
:10243000F185E02D0994089508950C941C120E94D2
:10244000371E0E94AA070C94FD1ECF92DF92EF92D6
:10245000FF920F931F93CF93DF93CDB7DEB72B97E8
:102460000FB6F894DEBF0FBECDBF0E94C2073DE697
:10247000E32E31E0F32E00E010E0C02E802F0E940A
:10248000AF08F701D1907F01D826B1F40F5F1F4F3D
:102490000E30110591F78FEF89838A831B820E948A
:1024A000401E8160782F9D838C8349815A816B8186
:1024B0008D810E94C81241C09091CF0191FF04C04C
:1024C0008B870E94B5088B8520E030E04D2D50E0D1
:1024D000922FBA01022E02C0759567950A94E2F711
:1024E00060FF25C02E83CF82EE24E394F12C02C03E
:1024F000EE0CFF1C9A95E2F790E08E219F2121E0DF
:10250000892B09F420E028870E94401E8160782FE3
:102510009A8789874E815F8168858A850E94C81263
:10252000F801E359FE4F80818E25808306C02F5F1E
:102530003F4F2630310561F6A9CF0E94E12110916D
:102540006C010E94CE111817A1F00E94CE11809349
:102550006C012B960FB6F894DEBF0FBECDBFDF9196
:10256000CF911F910F91FF90EF90DF90CF900C943F
:10257000D30A2B960FB6F894DEBF0FBECDBFDF9106
:10258000CF911F910F91FF90EF90DF90CF90089522
:10259000CF93DF93CDB7DEB72B970FB6F894DEBF9E
:1025A0000FBECDBF4F83588769877A878B87DE013F
:1025B000119686E0FD0111928A95E9F785E0FE010A
:1025C000379601900D928A95E1F749815A816B8186
:1025D0007C818D819E810E94091A2B960FB6F894FA
:1025E000DEBF0FBECDBFDF91CF9108950895CF9389
:1025F000C82F882309F4C1C0823859F40E94CE1133
:1026000081FDBBC089E30E94A81C0E94721D89E362
:102610000CC0833879F40E94CE1180FDAEC083E5F2
:102620000E94A81C0E94721D83E50E94E81CCF91A5
:102630000C94721D843859F40E94CE1182FD9DC005
:1026400087E40E94A81C0E94721D87E4EECF8CEFE5
:102650008C0F813A48F48C2F0E94192481118DC06F
:102660008C2F0E94A81CE3CF80E28C0F883048F4A6
:10267000C77081E001C0880FCA95EAF70E94291D42
:10268000D6CF8BE58C0F833078F4C53A29F0C63A63
:1026900031F482E890E005C081E890E002C083E870
:1026A00090E0CF910C94F01188E58C0F833108F005
:1026B00064C0C83A39F1C93A41F1CA3A49F1CB3A52
:1026C00051F1CC3A59F1CD3A61F1C03B69F1CE3AC2
:1026D00071F1CF3A79F1C13B81F1C23B89F1C33B42
:1026E00091F1C43B99F1C53BA1F1C63BA9F1C73BB0
:1026F000B1F1C83BB9F1C93BC1F1CA3BC9F58AE2A6
:1027000092E038C082EE90E035C089EE90E032C0B1
:102710008AEE90E02FC085EB90E02CC086EB90E035
:1027200029C087EB90E026C08CEC90E023C08DECB4
:1027300090E020C083E891E01DC08AE891E01AC0D3
:1027400082E991E017C084E991E014C081E292E04F
:1027500011C083E292E00EC084E292E00BC085E2F9
:1027600092E008C086E292E005C087E292E002C0F3
:1027700080E090E0CF910C940612CF9108958823C9
:1027800009F44BC0823859F40E94CE1181FF45C034
:1027900089E30E94A81C0E94721D89E30CC0833843
:1027A00071F40E94CE1180FF38C083E50E94A81CFE
:1027B0000E94721D83E50E94E81C0C94721D8438EF
:1027C00059F40E94CE1182FF28C087E40E94A81C01
:1027D0000E94721D87E4EFCF9CEF980F913A58F357
:1027E00090E2980F983050F4877091E001C0990FF3
:1027F0008A95EAF7892F0E942F1DDFCF9BE5980F5E
:10280000933020F480E090E00C94F011885A8331EA
:1028100020F480E090E00C9406120895882321F0C3
:102820000E94291D0C94721D0895882321F00E9496
:102830002F1D0C94721D0895CF92DF92EF92FF929C
:102840000F931F93CF93DF93CDB7DEB728970FB6C3
:10285000F894DEBF0FBECDBF8C0185E0F801DE012C
:10286000119601900D928A95E1F7F801D080E180F0
:10287000F280258122952F7083819481892B39F0F4
:10288000FFEFEF1206C081E0DF1203C003C081E05A
:1028900001C080E080FDCEC2C8012F830E94F612E5
:1028A000D982EA8289819A810E94661C9E838887E8
:1028B0000E94651C0E94381B2F814E816885FF2075
:1028C00029F00E94461D68854E812F81E42FE295F4
:1028D000EF70F0E0E154FF4F0C944B26842F807F83
:1028E000142F1F70882311F01295107FFF2059F0CC
:1028F000112309F454C2812F68870E94391D0E9458
:10290000721D68854CC2862F0E94BF13112309F4E3
:1029100091C2812F0E943F1D28960FB6F894DEBF0A
:102920000FBECDBFDF91CF911F910F91FF90EF9020
:10293000DF90CF900C94721D342F307F842F8F70D6
:10294000303211F08295807F662319F0613019F1E1
:102950002BC0FF20B1F0222309F493C1213009F0EC
:1029600090C128960FB6F894DEBF0FBECDBFDF91A1
:10297000CF911F910F91FF90EF90DF90CF900C942B
:10298000591D222319F0213009F454C28E830E946C
:102990005C1D8E8189C1FF2021F0223008F04AC2DF
:1029A00070C1211147C280C1FF2021F0222309F408
:1029B00068C1F5C1222309F477C105C2242F2695E9
:1029C0002695237030E02115310521F021303105A5
:1029D000C9F030C2FF2021F0862F942F937002C0DF
:1029E00080E090E028960FB6F894DEBF0FBECDBF12
:1029F000DF91CF911F910F91FF90EF90DF90CF90DB
:102A00000C94F011FF2021F0862F942F937002C0B8
:102A100080E090E028960FB6F894DEBF0FBECDBFE1
:102A2000DF91CF911F910F91FF90EF90DF90CF90AA
:102A30000C940612862FFF2019F00E94E92002C094
:102A40000E94512128960FB6F894DEBF0FBECDBF6D
:102A5000DF91CF911F910F91FF90EF90DF90CF907A
:102A60000C94D621842F837009F076C0F110E2C156
:102A7000262F229526952770220F220F862F8F70E2
:102A8000C82ED12CE12CF12C022E04C0CC0CDD1C64
:102A9000EE1CFF1C0A94D2F764FF10C06FE070E0D8
:102AA00080E090E004C0660F771F881F991F2A9569
:102AB000D2F7609570958095909503C060E070E0C6
:102AC000CB01242F269526952370422F50E04230CB
:102AD0005105D1F04330510559F16C297D298E29DA
:102AE0009F294130510541F128960FB6F894DEBF79
:102AF0000FBECDBFDF91CF911F910F91FF90EF904F
:102B0000DF90CF900C945D1B6C297D298E299F2925
:102B100028960FB6F894DEBF0FBECDBFDF91CF91E0
:102B20001F910F91FF90EF90DF90CF900C94771B47
:102B30000E945D1BC701B60128960FB6F894DEBF50
:102B40000FBECDBFDF91CF911F910F91FF90EF90FE
:102B5000DF90CF900C94431BFF2019F0842F8170DD
:102B600001C08695882309F465C1262F22952695F4
:102B70002770220F220F862F8F70C82ED12CE12CA8
:102B8000F12C022E04C0CC0CDD1CEE1CFF1C0A94A0
:102B9000D2F764FF10C06FE070E080E090E004C006
:102BA000660F771F881F991F2A95D2F76095709539
:102BB0008095909503C060E070E0CB01242F2695AE
:102BC00026952370422F50E042305105D1F043301A
:102BD000510559F16C297D298E299F2941305105D4
:102BE00041F128960FB6F894DEBF0FBECDBFDF913E
:102BF000CF911F910F91FF90EF90DF90CF900C94A9
:102C0000311C6C297D298E299F2928960FB6F894AE
:102C1000DEBF0FBECDBFDF91CF911F910F91FF900F
:102C2000EF90DF90CF900C944B1C0E94311CC70199
:102C3000B60128960FB6F894DEBF0FBECDBFDF9168
:102C4000CF911F910F91FF90EF90DF90CF900C9458
:102C5000171C603FC9F118F4603E50F49BC0623FFE
:102C600009F460C008F44AC0633F09F46FC092C021
:102C7000162F1F70842F8F71FF2099F00E94B01BB8
:102C8000812F28960FB6F894DEBF0FBECDBFDF911F
:102C9000CF911F910F91FF90EF90DF90CF900C9408
:102CA0000E140E94D11B812F28960FB6F894DEBF18
:102CB0000FBECDBFDF91CF911F910F91FF90EF908D
:102CC000DF90CF900C941514FF20A1F02111B2C019
:102CD000842F8F7128960FB6F894DEBF0FBECDBF3C
:102CE000DF91CF911F910F91FF90EF90DF90CF90E8
:102CF0000C94F61B223008F09DC0EACFFF20A1F013
:102D0000842F8F7128960FB6F894DEBF0FBECDBF0B
:102D1000DF91CF911F910F91FF90EF90DF90CF90B7
:102D20000C94B01BFF2061F3842F8F7128960FB68F
:102D3000F894DEBF0FBECDBFDF91CF911F910F91F1
:102D4000FF90EF90DF90CF900C94D11BFF2091F07B
:102D5000842F8F7128960FB6F894DEBF0FBECDBFBB
:102D6000DF91CF911F910F91FF90EF90DF90CF9067
:102D70000C949B1B28960FB6F894DEBF0FBECDBFF8
:102D8000DF91CF911F910F91FF90EF90DF90CF9047
:102D90000C94911BFF20A1F0222309F4B1CF862FC0
:102DA00028960FB6F894DEBF0FBECDBFDF91CF914E
:102DB0001F910F91FF90EF90DF90CF900C94F7123E
:102DC000222309F4B1CF862F28960FB6F894DEBFE0
:102DD0000FBECDBFDF91CF911F910F91FF90EF906C
:102DE000DF90CF900C94BF134F70C8010E94040570
:102DF00028960FB6F894DEBF0FBECDBFDF91CF91FE
:102E00001F910F91FF90EF90DF90CF900C94B61A26
:102E10004F70C80128960FB6F894DEBF0FBECDBF25
:102E2000DF91CF911F910F91FF90EF90DF90CF90A6
:102E30000C94750928960FB6F894DEBF0FBECDBF6F
:102E4000DF91CF911F910F91FF90EF90DF90CF9086
:102E500008950E94461D0E94561D0E941B1D0E943F
:102E6000721D0E9482220E94D62180E090E00E9482
:102E7000F01180E090E00C9406120E94361D0C9434
:102E800029170E94661C292F22952F7030E02C30C4
:102E900031054CF42A3031056CF4225031092230CE
:102EA000310590F407C02C30310551F02F30310539
:102EB00039F00AC0803E10F0803F31F481E008957F
:102EC00093FB882780F9089580E00895CF93DF93DE
:102ED00000D000D01F92CDB7DEB70F900F900F90AB
:102EE0000F900F90DF91CF910895CF93DF9300D093
:102EF00000D000D0CDB7DEB726960FB6F894DEBF6F
:102F00000FBECDBFDF91CF9108951F93CF93DF9375
:102F1000C0917B0116E080917C01C81799F0D0E048
:102F20001C9FF0011D9FF00D1124E358FE4F4081BE
:102F3000518162817381848195810E9475172196E8
:102F4000C770E9CFDF91CF911F9108954091AD01F6
:102F50005091AE016091AF017091B0018091B101CB
:102F60009091B2010C947517CF938091B201829524
:102F70008F7009F05FC08091AF01882309F45AC0B7
:102F800020917B01A0917C016091AD017091AE0117
:102F90008091B0019091B10131E06F3F09F030E0D4
:102FA000B32FC6E02A1709F445C0009721F07F3FF0
:102FB00021F44B2F03C041E001C040E030E040FD70
:102FC00035C0C29FF001C39FF00D1124E358FE4F9E
:102FD000418174132BC04081641328C04281411188
:102FE00025C0438154814817590710F441505109B5
:102FF000481B590B483C5105C8F48091B2018F70B1
:1030000080618093B20186E0829FF001839FF00D82
:103010001124EE57FE4F80818F70806180838DEA8E
:1030200091E00E941C14CF910C9485172F5F3F4FA5
:103030002770B8CFCF910895CF92DF92EF92FF9291
:103040000F931F93CF93DF93CDB7DEB762970FB681
:10305000F894DEBF0FBECDBF8C0185E0F801DE0124
:103060001D9601900D928A95E1F7D8014C91119629
:103070005C91119712966C9112971396ED90FC90BB
:1030800014977091AD01E091AE012091B0013091A3
:10309000B1012115310531F0EF3F31F481E07F3F7F
:1030A00019F403C081E001C080E0B82FB170CB2ECD
:1030B00080FD6CC1D090AF01DD2009F4F5C0F09126
:1030C000B201E216F30638F0C701821B930B883C6D
:1030D000910548F09BC0209530952E0D3F1D283C52
:1030E000310508F093C08F2F807F09F052C0E5139F
:1030F00014C0741312C0D62E61110FC0FF70F0619E
:10310000F093B2010E94A6178DEA91E00E941C1470
:103110008091B201F80185836CC1EF2831F05F3FE7
:1031200031F481E04F3F19F403C081E001C080E039
:1031300080FD03C081E0862701C080E0F82FF17098
:10314000FF2E80FF1CC080917B0120917C0136E026
:10315000821709F428C190E0389FF001399FF00DE3
:103160001124E358FE4F7181571306C07081471335
:1031700003C07281671303C001968770E9CFD62E12
:10318000662309F436C18091B20181608093B20157
:1031900053C0E51308C0741306C0611104C0D80100
:1031A0001596FC93AEC04D875E878D859E856A8B94
:1031B0000E9441176A89882329F1D62E662311F1CE
:1031C0002091B201822F82958F7090E002970CF4CB
:1031D00060C08091AD019091AE0198878F83198670
:1031E000FB86EA862C87CE01079651C0E51731F1A0
:1031F0004D875E878D859E856A8B0E9441176A89FF
:1032000081112EC0C8010E941C14A4C08F2F807F82
:1032100069F77E2DF98AE88A89890E9466178DEA06
:1032200091E00E941C14EDEAF1E086E0DF011D92BE
:103230008A95E9F70E94A617D12CDBC07413D8CF6A
:103240006111D6CFD8011596FC93C8010E941C14B9
:10325000EDEAF1E086E0DF011D928A95E9F7C9C049
:10326000D62E662379F22091B201822F82958F703B
:1032700090E0029774F08091AD019091AE019A8335
:1032800089831B82FD82EC822E83CE0101960E94EF
:103290001C1486E0F801ADEAB1E001900D928A9528
:1032A000E1F70E94B4176FC0E216F30628F0C701D9
:1032B000821B930B9C0104C0209530952E0D3F1D61
:1032C000283C310508F052C0D62E662309F49ACF67
:1032D000E5132CC074132AC08091B20180FD1DC07B
:1032E000982F92959F70C9F0D80115968C931597D9
:1032F0009F3039F09F5F9295907F8F70892B159644
:103300008C93C8010E941C1486E0F801ADEAB1E07C
:1033100001900D928A95E1F736C086E0F801ADEA9A
:10332000B1E001900D928A95E1F763C04D875E8709
:103330008D859E850E944117882379F086E0F801EB
:10334000ADEAB1E001900D928A95E1F70E94B417C1
:103350000E94A617DD24D3944CC08091B2018160F5
:103360008093B201C8010E941C1443C07E2DF98ACB
:10337000E88A89890E946617EDEAF1E086E0DF01BC
:103380001D928A95E9F70E94A61733C0662309F4B7
:1033900039CF4D875E878D859E850E944117882392
:1033A00009F430CFCBCF4D875E878D859E850E94F7
:1033B000661C292F22952F7030E0223031052CF425
:1033C0009F7041F0811106C00CC0243031052CF4EF
:1033D0009F7049F4805E883020F0C8010E941C1460
:1033E000CF2CDC2C06C0D80115969C91907F91F7CC
:1033F000F8CF8D2D62960FB6F894DEBF0FBECDBF0D
:10340000DF91CF911F910F91FF90EF90DF90CF90C0
:1034100008951F93CF93DF93CDB7DEB72C970FB6E8
:10342000F894DEBF0FBECDBF4F83588769877A8778
:103430008B879C87CE0107960E941C188823C1F0B9
:103440002F8138858A859B85892B31F03F3F11F08C
:1034500080E003C02F3FE1F781E0811147C04F8139
:10346000588569857A858B859C850E9475173EC035
:1034700086E0FE013796DE01119601900D928A9545
:10348000E1F7FF81E8854A855B854115510531F0FB
:10349000EF3F31F481E0FF3F19F403C081E001C048
:1034A00080E080FD23C020917C0130E0C9010196BD
:1034B0008770992760917B0170E086179707F1F17B
:1034C000F983EA835D834C8396E0929FD001939FBA
:1034D000B00D1124A358BE4FFE01319601900D92FC
:1034E0009A95E1F780937C010E94851716E0809100
:1034F0007B0190917C01891779F1189FC0011124FB
:1035000083589E4F0E941C18882331F1E0917B0163
:103510001E9FF0011124E358FE4F408151816281CA
:103520007381848195810E94751780917B0190E061
:1035300001968770992780937B01D9CF0E943D1710
:1035400010927C0110927B01EDEAF1E086E0DF0150
:103550001D928A95E9F7CACF2C960FB6F894DEBF74
:103560000FBECDBFDF91CF911F910895EF92FF92D3
:103570000F931F93CF93DF939C01009709F471C0C1
:10358000F12CEE24E394E9012196F901849184372A
:1035900040F4843008F056C0813081F0823021F14F
:1035A00060C0853709F449C0C0F19CE7980F903797
:1035B00008F057C08F770E94BF1346C089010E5F85
:1035C0001F4FFE01849190E2980F983050F487705D
:1035D000FE2D01C0FF0F8A95EAF78F2F0E94491D2B
:1035E00015C00E94F71214C089010E5F1F4FFE0123
:1035F000849190E2980F983068F48770FE2D01C096
:10360000FF0F8A95EAF78F2F0E944F1D0E94721DAF
:10361000E8011AC00E94BF13FBCF2E5F3F4FFE018F
:10362000C491CC2341F08FE99FE00197F1F700C0EE
:103630000000C150F6CFE90107C0FE01F490E90196
:10364000229602C00E94F7128F2D882341F0EFE9E5
:10365000FFE03197F1F700C000008150F6CF9E01E6
:1036600092CFDF91CF911F910F91FF90EF9008952E
:1036700008956093B7017093B8018093B901909356
:10368000BA010C9429170F931F930091B701109161
:10369000B8012091B9013091BA01062B172B282BC4
:1036A000392B0093B7011093B8012093B9013093DF
:1036B000BA011F910F910C9429170F931F9300913A
:1036C000B7011091B8012091B9013091BA010623D8
:1036D0001723282339230093B7011093B8012093AF
:1036E000B9013093BA011F910F910C9429170F93D0
:1036F0001F930091B7011091B8012091B901309149
:10370000BA0106271727282739270093B7011093F6
:10371000B8012093B9013093BA011F910F910C9415
:1037200029171092B3011092B4011092B5011092B2
:10373000B6010C94291741E050E060E070E004C04D
:10374000440F551F661F771F8A95D2F74093B30128
:103750005093B4016093B5017093B6010C9429178E
:1037600041E050E060E070E004C0440F551F661F68
:10377000771F8A95D2F78091B3019091B401A091FF
:10378000B501B091B601842B952BA62BB72B809356
:10379000B3019093B401A093B501B093B6010C941A
:1037A000291741E050E060E070E004C0440F551F6D
:1037B000661F771F8A95D2F7409550956095709552
:1037C0008091B3019091B401A091B501B091B6017F
:1037D00084239523A623B7238093B3019093B40148
:1037E000A093B501B093B6010C94291741E050E0C5
:1037F00060E070E004C0440F551F661F771F8A9574
:10380000D2F78091B3019091B401A091B501B0912C
:10381000B60184279527A627B7278093B3019093F5
:10382000B401A093B501B093B6010C9429170F937E
:103830001F930091B3011091B4012091B501309113
:10384000B601062B172B282B392B0093B3011093AD
:10385000B4012093B5013093B6011F910F910C94E0
:1038600029170F931F930091B3011091B401209178
:10387000B5013091B601062317232823392300937D
:10388000B3011093B4012093B5013093B6011F9199
:103890000F910C9429170F931F930091B30110916E
:1038A000B4012091B5013091B601062717272827CA
:1038B00039270093B3011093B4012093B5013093DD
:1038C000B6011F910F910C9429170895CF92DF92A2
:1038D000EF92FF920F931F93CF93DF93EC01C09071
:1038E000B701D090B801E090B901F090BA01809191
:1038F000B3019091B401A091B501B091B601C82A6D
:10390000D92AEA2AFB2A0FE110E0B701A601002E0E
:1039100004C076956795579547950A94D2F740FF6E
:1039200007C0BE01802F0E9498098130910539F4AB
:103930000150110950F7BE0180E00E949809DF9103
:10394000CF911F910F91FF90EF90DF90CF9008954E
:1039500090910C019923D9F090910D019923B9F020
:10396000982F9695969596959F3088F5E0910E0143
:10397000F0910F01E90FF11D877021E030E001C0E7
:10398000220F8A95EAF78181822B818308954091E5
:103990000E0150910F0120E030E09FEFFA01E20F9D
:1039A000F31F6281681799F09F3F19F4611101C0FC
:1039B000922F2F5F3F4F2E30310581F79F3F39F017
:1039C000FA01E90FF11D97FDFA9582830895089594
:1039D00090910C019923E1F090910D019923C1F090
:1039E000982F9695969596959F3020F5E0910E012B
:1039F000F0910F01E90FF11D877021E030E001C067
:103A0000220F8A95EAF72095818128232183089542
:103A100040910E0150910F0120E030E0FA01E20FD9
:103A2000F31F9281981301C012822F5F3F4F2E30F7
:103A30003105A1F7089581E090E0E0910E01F09149
:103A40000F01E80FF91F1082019680319105A9F747
:103A500008959091CE01982B9093CE010895809572
:103A60009091CE0198239093CE0108951092CE01AB
:103A700008959091CD01982B9093CD010895809554
:103A80009091CD0198239093CD0108951092CD018E
:103A900008959091CC01982B9093CC010895809536
:103AA0009091CC0198239093CC0108951092CC0171
:103AB00008958093BB0108951092BB010895409131
:103AC0000E0150910F0120E030E080E0FA01E20F9A
:103AD000F31F918191118F5F2F5F3F4F2F30310581
:103AE000A9F70895E0910E01F0910F018091CE01A8
:103AF0008083E0910E01F0910F0180819091CD01C2
:103B0000892B8083E0910E01F0910F0180819091CB
:103B1000CC01892B80839091BB01992361F0E091C6
:103B20000E01F0910F018081892B80830E945F1D1F
:103B300081111092BB0180910E0190910F010C94A4
:103B4000DA11CF92DF92EF92FF920F931F936C01E5
:103B5000EE24FF24C114D104E104F10421F46B012B
:103B60007C0180E001C080E133272F2D1E2D0D2D1B
:103B7000011511052105310519F0885F68017901EA
:103B800097018601A4E03695279517950795AA9584
:103B9000D1F7011511052105310519F08C5F680178
:103BA000790197018601F2E03695279517950795DB
:103BB000FA95D1F7011511052105310519F08E5F30
:103BC00068017901B701A6017695679557954795E4
:103BD000452B462B472B09F08F5F1F910F91FF90CC
:103BE000EF90DF90CF9008958091E801843009F143
:103BF0001092D00120E488E190E00FB6F894A895E7
:103C0000809360000FBE2093600083B7817F846043
:103C100083BF83B7816083BF7894889583B78E7F95
:103C200083BF88E10FB6F894809360001092600023
:103C30000FBE089508950895CF930E941A1E0E9402
:103C4000C2070E941B1EC0E08C2F0E94AF0881118A
:103C500005C0CF5FCE30C1F780E001C081E0CF91D9
:103C600008950E943D170E94CE110C94D30A82E061
:103C700084BD93E095BD9AEF97BD80936E00089543
:103C80002FB7F8948091D1019091D201A091D301E6
:103C9000B091D4012FBF0895CF92DF92EF92FF929F
:103CA0000F931F932FB7F8944091D1015091D201F7
:103CB0006091D3017091D4012FBF6A017B01EE2482
:103CC000FF248C0120E030E0C016D106E206F306A6
:103CD00010F441505109481B590BCA011F910F9113
:103CE000FF90EF90DF90CF9008951F920F920FB644
:103CF0000F9211248F939F93AF93BF938091D10123
:103D00009091D201A091D301B091D4010196A11D4F
:103D1000B11D8093D1019093D201A093D301B093B0
:103D2000D401BF91AF919F918F910F900FBE0F90D3
:103D30001F9018950E94D40EF8942FEF87EA91E611
:103D4000215080409040E1F700C0000087E090EBF8
:103D5000DC018093F1019093F201A093F301B09301
:103D6000F4012CE088E190E00FB6F894A8958093D8
:103D700060000FBE20936000FFCFEF92FF920F9381
:103D80001F93CF93DF93E82EF12C8F2D0E94AF0865
:103D9000C0E0D0E0082F10E098010C2E02C035954D
:103DA00027950A94E2F720FD05C02196C630D1057B
:103DB00099F709C06C2F7F2D80E00E947609E812E8
:103DC000F4CF81E005C0F3948EE0F812DECF80E0FE
:103DD000DF91CF911F910F91FF90EF900895CF93B6
:103DE000C82F8CE20E94BD1E882321F08C2FCF911A
:103DF0000C94BD1E80E0CF910895CF930E94422085
:103E0000811102C00E942820C5E6C15049F00E94DD
:103E1000C2078FE39CE90197F1F700C00000F5CFDE
:103E200089E20E94EF1E811111C18AE20E94EF1EF9
:103E300081110E94282085E00E94EF1E81110E94BE
:103E40009A1E0E944D208093CF0187E00E94EF1EB2
:103E5000882399F18BE10E94EF1E882351F0909105
:103E6000CF0191FB882780F921E0822780FB91F91F
:103E700022C08EE00E94EF1E882351F09091CF0166
:103E800092FB882780F921E0822780FB92F913C0FA
:103E900080E10E94EF1E9091CF01882341F093FBB7
:103EA000882780F921E0822780FB93F904C0892FBD
:103EB000809580FB90F99093CF018091CF010E9473
:103EC00051200E945F208093E20180EE0E94EF1E4D
:103ED000882341F08091E201982F909590FB80F922
:103EE0008093E20189E30E94EF1E882359F09091AC
:103EF000E20191FB882780F921E0822780FB91F97C
:103F00009093E20182EE0E94EF1E882359F0909177
:103F1000E20192FB882780F921E0822780FB92F959
:103F20009093E20186EE0E94EF1E882359F0909153
:103F3000E20193FB882780F921E0822780FB93F937
:103F40009093E20183EE0E94EF1E882359F0909136
:103F5000E20194FB882780F921E0822780FB94F915
:103F60009093E20185E30E94EF1E882359F090911F
:103F7000E20195FB882780F921E0822780FB95F9F3
:103F80009093E20181E30E94EF1E882359F0909103
:103F9000E20196FB882780F921E0822780FB96F9D1
:103FA0009093E20181E10E94EF1E882359F09091E5
:103FB000E20197FB882780F921E0822780FB97F9AF
:103FC0009093E2018091E2010E9463208091E201DE
:103FD00087FB882780F980930D0187E20E94EF1EFE
:103FE000C82F8EE10E94EF1E8111C2608FE10E94F6
:103FF000EF1E8111C46080E20E94EF1E8111C86033
:1040000081E20E94EF1E8111C06182E20E94EF1ED8
:104010008111C06283E20E94EF1E8111C06484E2BC
:104020000E94EF1E882311F0C06802C0CC2329F043
:104030008C2F0E945A206C2F03C00E945620682F9C
:1040400070E080E090E0CF910C94391BCF910895FF
:104050006DEE7EEF80E090E00E94812660E082E0DD
:1040600090E00E94732660E083E090E00E94732657
:1040700060E084E090E00E94732660E085E090E0DC
:104080000C94732680E090E00E946D2621E08D3E26
:104090009E4F09F020E0822F089582E090E00C947A
:1040A0006526682F82E090E00C94732683E090E010
:1040B0000C946526682F83E090E00C94732684E0CE
:1040C00090E00C946526682F84E090E00C947326B1
:1040D0008091D70180FF0BC06091130185E0689F3C
:1040E000B001112475956795759567952AC081FF74
:1040F00009C06091130185E0689FB0011124759596
:1041000067951FC082FF07C06091130185E0689F1B
:10411000B001112416C04091D8014423C9F0609128
:104120001201461788F72091130185E0289F90011E
:104130001124429FC001439F900D112470E00E9402
:1041400037266038710540F46115710539F002C0F9
:1041500065E070E0862F08958FE7089581E0089567
:104160008091D70180FF08C06091110170E07595C2
:1041700067957595679521C081FF06C06091110113
:1041800070E07595679519C082FF04C060911101B8
:1041900070E010C08091D8018823C1F060911001B7
:1041A0008617A0F790911101989FC001112470E02B
:1041B0000E9437266038710528F46115710521F0D9
:1041C000862F08958FE7089581E0089561E070E0FB
:1041D000F4CF803F21F40E946820819504C0813F84
:1041E00029F40E9468208093DB010895823F21F426
:1041F0000E946820819504C0833F29F40E946820B2
:104200008093DA010895893F19F40E94B02005C017
:104210008A3F31F40E94B02081958093DC0108959B
:104220008B3F21F40E94B020819504C08C3F29F47B
:104230000E94B0208093DD010895843F21F4809195
:10424000D901816017C0853F21F48091D901826036
:1042500011C0863F21F48091D90184600BC0873F53
:1042600021F48091D901886005C0883F31F48091A4
:10427000D90180618093D90108958D3F21F4809107
:10428000D70181600BC08E3F21F48091D7018260FD
:1042900005C08F3F29F48091D70184608093D701B6
:1042A0000895803F39F48091DB0187FF6CC0109244
:1042B000DB0169C0813F29F48091DB011816BCF352
:1042C00062C09091DA01823F29F497FF5CC010929E
:1042D000DA0159C0833F19F41916CCF354C0893F51
:1042E00041F48091DC0118160CF04DC01092DC01F5
:1042F0004AC08A3F29F48091DC0187FF44C0F6CF91
:104300008B3F39F48091DD0187FF3DC01092DD01C4
:104310003AC08C3F29F48091DD011816BCF333C0FC
:10432000843F21F48091D9018E7F17C0853F21F40D
:104330008091D9018D7F11C0863F21F48091D901F0
:104340008B7F0BC0873F21F48091D901877F05C007
:10435000883F31F48091D9018F7E8093D90113C0B9
:104360008D3F21F48091D7018E7F0BC08E3F21F4C9
:104370008091D7018D7F05C08F3F29F48091D701AF
:104380008B7F8093D7018091DA0181110EC08091DB
:10439000DB0181110AC08091DC01811106C080918E
:1043A000DD01811102C01092D801089589ED91E0DC
:1043B0000E94E5110E94401E9093D6018093D50182
:1043C00008951F93CF93DF938091D5019091D601EB
:1043D0000E944C1E4091D801442321F020911401E9
:1043E00030E006C0209115015AE0259F900111246C
:1043F0008217930708F482C08091DA011091DB01E3
:10440000D091DC01C091DD01811107C0111105C0FF
:10441000D11103C0CC2309F471C04F3F19F04F5F95
:104420004093D801181624F40E9468208093DA0182
:104430008091DA0187FF05C00E94682081958093F2
:10444000DA01111624F40E9468208093DB01809128
:10445000DB0187FF05C00E94682081958093DB0106
:104460006091DA01662339F11091DB01112319F112
:10447000772767FD7095872F972F0E94482523E3A4
:1044800033E343E35FE30E94AC250E94152560936C
:10449000DA01612F772767FD7095872F972F0E948C
:1044A000482523E333E343E35FE30E94AC250E9406
:1044B00015256093DB011D1624F40E94B020809323
:1044C000DC018091DC0187FF05C00E94B02081954E
:1044D0008093DC011C1624F40E94B0208093DD013F
:1044E0008091DD0187FF05C00E94B02081958093F7
:1044F000DD01DF91CF911F910C94D621DF91CF91F7
:104500001F910895E9EDF1E085E0DF011D928A95A4
:10451000E9F71092D8011092D7010895833081F104
:1045200028F4813059F08230D1F00895853009F4B3
:1045300049C0B8F1863009F456C00895209115019C
:10454000862F90E0820F911D8F3F910520F4620F1E
:104550006093150108958FEF8093150108952091C0
:104560001401862F90E0820F911D8F3F910520F45A
:10457000620F6093140108958FEF809314010895E2
:1045800020911301862F90E0820F911D8F3F91059E
:1045900020F4620F6093130108958FEF809313014D
:1045A000089520911201862F90E0820F911D8F3F78
:1045B000910520F4620F6093120108958FEF8093AC
:1045C0001201089520911101862F90E0820F911D14
:1045D0008F3F910520F4620F6093110108958FEFD2
:1045E00080931101089520911001862F90E0820F91
:1045F000911D8F3F910520F4620F60931001089583
:104600008FEF809310010895833011F128F48130E9
:1046100049F0823091F00895853081F120F18630A3
:10462000C1F1089580911501681720F4861B8093CD
:1046300015010895109215010895809114016817CD
:1046400020F4861B8093140108951092140108959C
:1046500080911301681720F4861B8093130108953D
:1046600010921301089580911201681720F4861B9F
:104670008093120108951092120108958091110102
:10468000681720F4861B8093110108951092110180
:10469000089580911001681720F4861B8093100103
:1046A00008951092100108958D3109F442C020F54B
:1046B0008E3009F47CC070F4873009F45EC020F4B9
:1046C000863009F442C033C08830D1F18B3009F410
:1046D000AAC02DC0863109F4A6C038F4803109F48F
:1046E00070C0813109F47EC022C0893109F49BC0B9
:1046F0008B3109F452C01BC0853309F48CC048F4D7
:10470000873209F488C008F478C0893209F483C07C
:104710000EC0833438F48A3308F06DC0883309F44E
:1047200082C005C0833409F476C08834C1F080E0CB
:1047300008950E94CF240E94CE110E94D30A73C014
:104740000E944D200E945F206EC08091CF01817F2A
:104750008E7F8093CF0181E08093DF0108950E94D6
:104760003D172FEF83ED90E3215080409040E1F71B
:1047700000C000000E949A1E56C09091CF01892F60
:104780008095817080FB90F919F09660986027C041
:10479000997F977F9093CF0146C09091CF0191FB75
:1047A000882780F921E0822780FB91F913C090913E
:1047B000CF0192FB882780F921E0822780FB92F9C4
:1047C00009C09091CF0193FB882780F921E08227CF
:1047D00080FB93F99093CF01882329F19160909306
:1047E000CF0108950E943D1780910D0191E0892726
:1047F00080930D0118C027EC01C023EE280F61E063
:1048000070E080E090E004C0660F771F881F991F5A
:104810002A95D2F704C061E070E080E090E00E9449
:10482000391B0E943D1781E0089580E0089580E0E3
:104830000895CF93C82F8091DF01813079F018F06F
:104840008230D1F184C0A0910E01B0910F018C9102
:10485000813169F0823209F07CC009C0A0910E015B
:10486000B0910F018C91813111F0823249F48C2F7B
:104870000E94152481111DC08C2F0E9454231AC040
:104880008C2F0E941724811114C0C43179F048F490
:10489000CB3079F0C03109F060C082E08093DF0155
:1048A00008C0C93219F0C83321F057C01092DF0197
:1048B00054C081E0817053C0C93289F118F5C43108
:1048C00071F1A8F4C73009F046C08AE08093150161
:1048D00094E19093140193E090931301809312015B
:1048E00088E08093110188E28093100134C0CE519A
:1048F000C63088F5EC2FF0E0E65DFE4F80818093B6
:10490000DE0129C0CE34E9F020F4CB3421F56AE091
:1049100013C0C13579F0C235F1F461E00DC080916A
:10492000DE01882319F01092DE0115C081E080932A
:10493000DF0115C061E006C08091DE010E948E2279
:104940000AC06AE08091DE010E94042304C0109234
:10495000DF0180E004C081E002C080E0ABCFCF91F6
:104960000895E1E8F0E08081886080838081816043
:1049700080838FB7F89493E09093890090ED9093A3
:1049800088008FBF0895EFE6F0E080818260808329
:104990000895EFE6F0E080818D7F80830895EFE653
:1049A000F0E0808192E08927808308951F920F9222
:1049B0000FB60F9211242F933F934F935F936F93F2
:1049C0007F938F939F93AF93BF93EF93FF938091C8
:1049D000E0019091E10101969093E1018093E00163
:1049E000811103C082E00E94D30AE091E101E695C3
:1049F000E695F0E0EC51F84FE4918091E0018E13E0
:104A000003C080E00E94D30AFF91EF91BF91AF9164
:104A10009F918F917F916F915F914F913F912F91D6
:104A20000F900FBE0F901F90189504D06894B1118D
:104A30008DC0089570D088F09F5790F0B92F9927B6
:104A4000B751A0F0D1F0660F771F881F991F1AF099
:104A5000BA95C9F712C0B13081F077D0B1E00895AE
:104A600074C0672F782F8827B85F39F0B93FCCF32F
:104A7000869577956795B395D9F73EF4909580958F
:104A8000709561957F4F8F4F9F4F0895E89409C0AF
:104A900097FB3EF490958095709561957F4F8F4F71
:104AA0009F4F9923A9F0F92F96E9BB279395F69587
:104AB000879577956795B795F111F8CFFAF4BB0F05
:104AC00011F460FF1BC06F5F7F4F8F4F9F4F16C069
:104AD000882311F096E911C0772321F09EE8872FF3
:104AE000762F05C0662371F096E8862F70E060E0AF
:104AF0002AF09A95660F771F881FDAF7880F969528
:104B0000879597F9089557FD9058440F551F59F010
:104B10005F3F71F04795880F97FB991F61F09F3FAA
:104B200079F087950895121613061406551FF2CFD3
:104B30004695F1DF08C0161617061806991FF1CF23
:104B400086957105610508940895E894BB2766274A
:104B50007727CB0197F908950BD078C069D028F05A
:104B60006ED018F0952309F05AC05FC01124EECF23
:104B7000CADFA0F3959FD1F3950F50E0551F629FB8
:104B8000F001729FBB27F00DB11D639FAA27F00DA6
:104B9000B11DAA1F649F6627B00DA11D661F829FCD
:104BA0002227B00DA11D621F739FB00DA11D621FB2
:104BB000839FA00D611D221F749F3327A00D611DCF
:104BC000231F849F600D211D822F762F6A2F1124B1
:104BD0009F5750408AF0E1F088234AF0EE0FFF1F04
:104BE000BB1F661F771F881F91505040A9F79E3F3B
:104BF000510570F014C0AACF5F3FECF3983EDCF390
:104C0000869577956795B795F795E7959F5FC1F777
:104C1000FE2B880F911D9695879597F9089597F922
:104C20009F6780E870E060E008959FEF80EC089552
:104C300000240A941616170618060906089500247B
:104C40000A9412161306140605060895092E0394F5
:104C5000000C11F4882352F0BB0F40F4BF2B11F469
:104C600060FF04C06F5F7F4F8F4F9F4F089597FB8A
:104C7000072E16F4009407D077FD09D00E94512624
:104C800007FC05D03EF4909581959F4F089570954F
:104C900061957F4F0895EE0FFF1F0590F491E02D71
:104CA0000994AA1BBB1B51E107C0AA1FBB1FA61773
:104CB000B70710F0A61BB70B881F991F5A95A9F7C5
:104CC00080959095BC01CD010895F999FECF92BDD4
:104CD00081BDF89A992780B50895A8E1B0E042E037
:104CE00050E00C948826262FF999FECF1FBA92BD6A
:104CF00081BD20BD0FB6F894FA9AF99A0FBE0196BD
:104D000008950E947326272F0C947426DC01CB0192
:104D1000FC01F999FECF06C0F2BDE1BDF89A3196CB
:104D200000B40D9241505040B8F70895F894FFCF69
:104D30002002D50A620B3F0B0B0BD80A0101BC0104
:104D400028080A03140A3F4D3639A50758072207D9
:104D5000E9067C069506AE06C706010203040506B1
:044D60000708090037
:00000001FF

@ -0,0 +1,783 @@
#include "ergodox_ez.h"
#include "action_layer.h"
#include "keymap_common.h"
#include "keymap_extras/keymap_german.h"
#define UC_ASYMPTOTICALLY_EQUAL_TO 0
#define UC_DIVISION_SIGN 1
#define UC_DOWNWARDS_ARROW 2
#define UC_ELEMENT_OF 3
#define UC_EMPTY_SET 4
#define UC_FOR_ALL 5
#define UC_GREEK_CAPITAL_LETTER_ALPHA 6
#define UC_GREEK_CAPITAL_LETTER_BETA 7
#define UC_GREEK_CAPITAL_LETTER_CHI 8
#define UC_GREEK_CAPITAL_LETTER_DELTA 9
#define UC_GREEK_CAPITAL_LETTER_EPSILON 10
#define UC_GREEK_CAPITAL_LETTER_ETA 11
#define UC_GREEK_CAPITAL_LETTER_GAMMA 12
#define UC_GREEK_CAPITAL_LETTER_IOTA 13
#define UC_GREEK_CAPITAL_LETTER_KAPPA 14
#define UC_GREEK_CAPITAL_LETTER_LAMDA 15
#define UC_GREEK_CAPITAL_LETTER_MU 16
#define UC_GREEK_CAPITAL_LETTER_NU 17
#define UC_GREEK_CAPITAL_LETTER_OMEGA 18
#define UC_GREEK_CAPITAL_LETTER_OMICRON 19
#define UC_GREEK_CAPITAL_LETTER_PHI 20
#define UC_GREEK_CAPITAL_LETTER_PI 21
#define UC_GREEK_CAPITAL_LETTER_PSI 22
#define UC_GREEK_CAPITAL_LETTER_RHO 23
#define UC_GREEK_CAPITAL_LETTER_SIGMA 24
#define UC_GREEK_CAPITAL_LETTER_TAU 25
#define UC_GREEK_CAPITAL_LETTER_THETA 26
#define UC_GREEK_CAPITAL_LETTER_UPSILON 27
#define UC_GREEK_CAPITAL_LETTER_XI 28
#define UC_GREEK_CAPITAL_LETTER_ZETA 29
#define UC_GREEK_SMALL_LETTER_ALPHA 30
#define UC_GREEK_SMALL_LETTER_BETA 31
#define UC_GREEK_SMALL_LETTER_CHI 32
#define UC_GREEK_SMALL_LETTER_DELTA 33
#define UC_GREEK_SMALL_LETTER_EPSILON 34
#define UC_GREEK_SMALL_LETTER_ETA 35
#define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36
#define UC_GREEK_SMALL_LETTER_GAMMA 37
#define UC_GREEK_SMALL_LETTER_IOTA 38
#define UC_GREEK_SMALL_LETTER_KAPPA 39
#define UC_GREEK_SMALL_LETTER_LAMDA 40
#define UC_GREEK_SMALL_LETTER_MU 41
#define UC_GREEK_SMALL_LETTER_NU 42
#define UC_GREEK_SMALL_LETTER_OMEGA 43
#define UC_GREEK_SMALL_LETTER_OMICRON 44
#define UC_GREEK_SMALL_LETTER_PHI 45
#define UC_GREEK_SMALL_LETTER_PI 46
#define UC_GREEK_SMALL_LETTER_PSI 47
#define UC_GREEK_SMALL_LETTER_RHO 48
#define UC_GREEK_SMALL_LETTER_SIGMA 49
#define UC_GREEK_SMALL_LETTER_TAU 50
#define UC_GREEK_SMALL_LETTER_THETA 51
#define UC_GREEK_SMALL_LETTER_UPSILON 52
#define UC_GREEK_SMALL_LETTER_XI 53
#define UC_GREEK_SMALL_LETTER_ZETA 54
#define UC_INFINITY 55
#define UC_LEFTWARDS_ARROW 56
#define UC_MULTIPLICATION_SIGN 57
#define UC_NOT_AN_ELEMENT_OF 58
#define UC_NOT_EQUAL_TO 59
#define UC_PLUS_MINUS_SIGN 60
#define UC_RIGHTWARDS_ARROW 61
#define UC_SUBSCRIPT_EIGHT 62
#define UC_SUBSCRIPT_FIVE 63
#define UC_SUBSCRIPT_FOUR 64
#define UC_SUBSCRIPT_NINE 65
#define UC_SUBSCRIPT_ONE 66
#define UC_SUBSCRIPT_SEVEN 67
#define UC_SUBSCRIPT_SIX 68
#define UC_SUBSCRIPT_THREE 69
#define UC_SUBSCRIPT_TWO 70
#define UC_SUBSCRIPT_ZERO 71
#define UC_SUPERSCRIPT_EIGHT 72
#define UC_SUPERSCRIPT_FIVE 73
#define UC_SUPERSCRIPT_FOUR 74
#define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75
#define UC_SUPERSCRIPT_NINE 76
#define UC_SUPERSCRIPT_ONE 77
#define UC_SUPERSCRIPT_SEVEN 78
#define UC_SUPERSCRIPT_SIX 79
#define UC_SUPERSCRIPT_THREE 80
#define UC_SUPERSCRIPT_TWO 81
#define UC_SUPERSCRIPT_ZERO 82
#define UC_THERE_DOES_NOT_EXIST 83
#define UC_THERE_EXISTS 84
#define UC_UPWARDS_ARROW 85
#define UC_VULGAR_FRACTION_ONE_EIGHTH 86
#define UC_VULGAR_FRACTION_ONE_FIFTH 87
#define UC_VULGAR_FRACTION_ONE_HALF 88
#define UC_VULGAR_FRACTION_ONE_QUARTER 89
#define UC_VULGAR_FRACTION_ONE_SIXTH 90
#define UC_VULGAR_FRACTION_ONE_THIRD 91
#define UC_VULGAR_FRACTION_THREE_QUARTERS 92
#define UC_VULGAR_FRACTION_TWO_THIRDS 93
#define UM 94
#define L0 0 // layer_0
#define L1 1 // layer_1
#define L2 2 // layer_2
#define L3 3 // layer_3
#define L4 4 // layer_4
#define L5 5 // layer_5
#define L6 6 // layer_6
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* .------------------------------------.------------------------------------.
* |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT|
* '------------------------' '------------------------'
* .-----------. .-----------.
* |INS |TG(2)| !M(UM)|DELT |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | APP | ! PGUP| ! !
* ! ! !-----! !-----! ! !
* |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
* '-----------------' '-----------------'
*/
[L0] = KEYMAP(
MO(5), DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT,
MO(4), DE_X, DE_P, DE_F, DE_W, DE_G, KC_HOME,
MO(1), DE_U, DE_I, DE_A, DE_E, DE_O,
MO(3), DE_UE, DE_OE, DE_AE, DE_C, DE_V, KC_END,
KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL,
KC_INS, TG(2),
KC_APP,
KC_BSPC, KC_LSFT, KC_ESC,
DE_GRV, DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC,
TG(2), DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z,
DE_S, DE_N, DE_R, DE_T, DE_D, DE_SS,
KC_TAB, DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y,
KC_RCTL, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT,
M(UM), KC_DELT,
KC_PGUP,
KC_PGDN, KC_ENTER, KC_SPACE
),
/*
* .------------------------------------.------------------------------------.
* | |EXLM|DQOT|PARA| | | | | | | | |RING| |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| | |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L1] = KEYMAP(
KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR, DE_RCBR, KC_TRNS,
KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC, DE_RBRC,
KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_RING, KC_TRNS,
KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS, DE_DQOT, KC_TRNS,
DE_DLR, DE_LPRN, DE_RPRN, DE_TILD, DE_QUOT, DE_QST,
KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN, M(UC_UPWARDS_ARROW), KC_TRNS,
KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW),
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! P0 |PCMM|PDOT|PENT|PENT|
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L2] = KEYMAP(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PEQL,
KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS,
KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PMNS,
KC_NLCK, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PPLS,
KC_P0, KC_PCMM, KC_PDOT, KC_PENT, KC_PENT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | ¹ | ² | ³ | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | × | ½ | ÷ | ¼ | | | | | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | ± | AT |EURO| |-----!-----! | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | ¾ | | | |EXLM| | | | | |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L3] = KEYMAP(
KC_TRNS, M(UC_SUPERSCRIPT_ONE), M(UC_SUPERSCRIPT_TWO), M(UC_SUPERSCRIPT_THREE), M(UC_SUPERSCRIPT_FOUR), M(UC_SUPERSCRIPT_FIVE), M(UC_FOR_ALL),
KC_TRNS, M(UC_MULTIPLICATION_SIGN), M(UC_VULGAR_FRACTION_ONE_HALF), M(UC_DIVISION_SIGN), M(UC_VULGAR_FRACTION_ONE_QUARTER), M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS,
KC_TRNS, KC_TRNS, M(UC_PLUS_MINUS_SIGN), DE_AT, DE_EURO, M(UC_EMPTY_SET),
KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO), M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_SUPERSCRIPT_SIX), M(UC_SUPERSCRIPT_SEVEN), M(UC_SUPERSCRIPT_EIGHT), M(UC_SUPERSCRIPT_NINE), M(UC_SUPERSCRIPT_ZERO), KC_TRNS,
KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS, M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS, KC_TRNS, KC_TRNS,
M(UC_INFINITY), M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS), M(UC_ELEMENT_OF), KC_TRNS, KC_TRNS,
KC_TRNS, DE_EXLM, KC_TRNS, M(UC_THERE_DOES_NOT_EXIST), M(UC_NOT_AN_ELEMENT_OF), KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | | | | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | θ | | | | | | β | μ | | | | ψ |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L4] = KEYMAP(
KC_TRNS, M(UC_SUBSCRIPT_ONE), M(UC_SUBSCRIPT_TWO), M(UC_SUBSCRIPT_THREE), M(UC_SUBSCRIPT_FOUR), M(UC_SUBSCRIPT_FIVE), KC_TRNS,
KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI), M(UC_GREEK_SMALL_LETTER_PI), M(UC_GREEK_SMALL_LETTER_PHI), M(UC_GREEK_SMALL_LETTER_OMEGA), M(UC_GREEK_SMALL_LETTER_GAMMA), KC_TRNS,
KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA), M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON),
KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_SUBSCRIPT_SIX), M(UC_SUBSCRIPT_SEVEN), M(UC_SUBSCRIPT_EIGHT), M(UC_SUBSCRIPT_NINE), M(UC_SUBSCRIPT_ZERO), KC_TRNS,
KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA), M(UC_GREEK_SMALL_LETTER_XI), M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_SMALL_LETTER_ZETA),
M(UC_GREEK_SMALL_LETTER_SIGMA), M(UC_GREEK_SMALL_LETTER_NU), M(UC_GREEK_SMALL_LETTER_RHO), M(UC_GREEK_SMALL_LETTER_TAU), M(UC_GREEK_SMALL_LETTER_DELTA), M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA),
KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA), M(UC_GREEK_SMALL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_PSI),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | | | | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | Θ | | | | | | Β | Μ | | | | Ψ |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L5] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI), M(UC_GREEK_CAPITAL_LETTER_PI), M(UC_GREEK_CAPITAL_LETTER_PHI), M(UC_GREEK_CAPITAL_LETTER_OMEGA), M(UC_GREEK_CAPITAL_LETTER_GAMMA), KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA), M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON),
KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA), M(UC_GREEK_CAPITAL_LETTER_XI), M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ZETA),
M(UC_GREEK_CAPITAL_LETTER_SIGMA), M(UC_GREEK_CAPITAL_LETTER_NU), M(UC_GREEK_CAPITAL_LETTER_RHO), M(UC_GREEK_CAPITAL_LETTER_TAU), M(UC_GREEK_CAPITAL_LETTER_DELTA), KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA), M(UC_GREEK_CAPITAL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_PSI),
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | | | | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | | | | | | | | | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | |-----!-----! | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | | | | | | | | | |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L6] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = {};
#define UC_MODE_WIN 0
#define UC_MODE_LINUX 1
#define UC_MODE_OSX 2
// TODO: allow default mode to be configured
static uint16_t unicode_mode = UC_MODE_WIN;
uint16_t hextokeycode(uint8_t hex) {
if (hex == 0x0) {
return KC_P0;
}
if (hex < 0xA) {
return KC_P1 + (hex - 0x1);
}
return KC_A + (hex - 0xA);
}
void unicode_action_function(uint16_t hi, uint16_t lo) {
switch (unicode_mode) {
case UC_MODE_WIN:
register_code(KC_LALT);
register_code(KC_PPLS);
unregister_code(KC_PPLS);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LALT);
break;
case UC_MODE_LINUX:
register_code(KC_LCTL);
register_code(KC_LSFT);
register_code(KC_U);
unregister_code(KC_U);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LCTL);
unregister_code(KC_LSFT);
break;
case UC_MODE_OSX:
break;
}
}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
if (!record->event.pressed) {
return MACRO_NONE;
}
// MACRODOWN only works in this function
switch(id) {
case UM:
unicode_mode = (unicode_mode + 1) % 2;
break;
case UC_GREEK_SMALL_LETTER_OMICRON:
unicode_action_function(0x03, 0xbf);
break;
case UC_LEFTWARDS_ARROW:
unicode_action_function(0x21, 0x90);
break;
case UC_GREEK_CAPITAL_LETTER_RHO:
unicode_action_function(0x03, 0xa1);
break;
case UC_SUBSCRIPT_THREE:
unicode_action_function(0x20, 0x83);
break;
case UC_VULGAR_FRACTION_ONE_EIGHTH:
unicode_action_function(0x21, 0x5b);
break;
case UC_GREEK_SMALL_LETTER_LAMDA:
unicode_action_function(0x03, 0xbb);
break;
case UC_VULGAR_FRACTION_ONE_THIRD:
unicode_action_function(0x21, 0x53);
break;
case UC_GREEK_SMALL_LETTER_XI:
unicode_action_function(0x03, 0xbe);
break;
case UC_THERE_DOES_NOT_EXIST:
unicode_action_function(0x22, 0x04);
break;
case UC_SUPERSCRIPT_ONE:
unicode_action_function(0x00, 0xb9);
break;
case UC_GREEK_SMALL_LETTER_BETA:
unicode_action_function(0x03, 0xb2);
break;
case UC_SUBSCRIPT_FIVE:
unicode_action_function(0x20, 0x85);
break;
case UC_GREEK_CAPITAL_LETTER_IOTA:
unicode_action_function(0x03, 0x99);
break;
case UC_VULGAR_FRACTION_ONE_FIFTH:
unicode_action_function(0x21, 0x55);
break;
case UC_GREEK_SMALL_LETTER_PSI:
unicode_action_function(0x03, 0xc8);
break;
case UC_SUBSCRIPT_NINE:
unicode_action_function(0x20, 0x89);
break;
case UC_SUPERSCRIPT_FOUR:
unicode_action_function(0x20, 0x74);
break;
case UC_RIGHTWARDS_ARROW:
unicode_action_function(0x21, 0x92);
break;
case UC_SUPERSCRIPT_SIX:
unicode_action_function(0x20, 0x76);
break;
case UC_DOWNWARDS_ARROW:
unicode_action_function(0x21, 0x93);
break;
case UC_GREEK_SMALL_LETTER_PI:
unicode_action_function(0x03, 0xc0);
break;
case UC_SUPERSCRIPT_TWO:
unicode_action_function(0x00, 0xb2);
break;
case UC_GREEK_CAPITAL_LETTER_OMEGA:
unicode_action_function(0x03, 0xa9);
break;
case UC_GREEK_CAPITAL_LETTER_PSI:
unicode_action_function(0x03, 0xa8);
break;
case UC_SUBSCRIPT_FOUR:
unicode_action_function(0x20, 0x84);
break;
case UC_GREEK_CAPITAL_LETTER_NU:
unicode_action_function(0x03, 0x9d);
break;
case UC_DIVISION_SIGN:
unicode_action_function(0x00, 0xf7);
break;
case UC_GREEK_SMALL_LETTER_SIGMA:
unicode_action_function(0x03, 0xc3);
break;
case UC_GREEK_SMALL_LETTER_RHO:
unicode_action_function(0x03, 0xc1);
break;
case UC_VULGAR_FRACTION_ONE_SIXTH:
unicode_action_function(0x21, 0x59);
break;
case UC_GREEK_SMALL_LETTER_GAMMA:
unicode_action_function(0x03, 0xb3);
break;
case UC_VULGAR_FRACTION_TWO_THIRDS:
unicode_action_function(0x21, 0x54);
break;
case UC_GREEK_SMALL_LETTER_NU:
unicode_action_function(0x03, 0xbd);
break;
case UC_GREEK_SMALL_LETTER_ZETA:
unicode_action_function(0x03, 0xb6);
break;
case UC_GREEK_SMALL_LETTER_EPSILON:
unicode_action_function(0x03, 0xb5);
break;
case UC_GREEK_SMALL_LETTER_KAPPA:
unicode_action_function(0x03, 0xba);
break;
case UC_SUPERSCRIPT_SEVEN:
unicode_action_function(0x20, 0x77);
break;
case UC_GREEK_CAPITAL_LETTER_PI:
unicode_action_function(0x03, 0xa0);
break;
case UC_GREEK_SMALL_LETTER_FINAL_SIGMA:
unicode_action_function(0x03, 0xc2);
break;
case UC_GREEK_CAPITAL_LETTER_XI:
unicode_action_function(0x03, 0x9e);
break;
case UC_GREEK_SMALL_LETTER_THETA:
unicode_action_function(0x03, 0xb8);
break;
case UC_GREEK_SMALL_LETTER_ETA:
unicode_action_function(0x03, 0xb7);
break;
case UC_SUBSCRIPT_TWO:
unicode_action_function(0x20, 0x82);
break;
case UC_ASYMPTOTICALLY_EQUAL_TO:
unicode_action_function(0x22, 0x43);
break;
case UC_GREEK_SMALL_LETTER_ALPHA:
unicode_action_function(0x03, 0xb1);
break;
case UC_GREEK_CAPITAL_LETTER_PHI:
unicode_action_function(0x03, 0xa6);
break;
case UC_GREEK_SMALL_LETTER_PHI:
unicode_action_function(0x03, 0xc6);
break;
case UC_INFINITY:
unicode_action_function(0x22, 0x1e);
break;
case UC_GREEK_CAPITAL_LETTER_OMICRON:
unicode_action_function(0x03, 0x9f);
break;
case UC_ELEMENT_OF:
unicode_action_function(0x22, 0x08);
break;
case UC_MULTIPLICATION_SIGN:
unicode_action_function(0x00, 0xd7);
break;
case UC_SUBSCRIPT_ZERO:
unicode_action_function(0x20, 0x80);
break;
case UC_GREEK_CAPITAL_LETTER_SIGMA:
unicode_action_function(0x03, 0xa3);
break;
case UC_GREEK_SMALL_LETTER_OMEGA:
unicode_action_function(0x03, 0xc9);
break;
case UC_SUBSCRIPT_ONE:
unicode_action_function(0x20, 0x81);
break;
case UC_GREEK_CAPITAL_LETTER_ZETA:
unicode_action_function(0x03, 0x96);
break;
case UC_GREEK_SMALL_LETTER_TAU:
unicode_action_function(0x03, 0xc4);
break;
case UC_SUPERSCRIPT_FIVE:
unicode_action_function(0x20, 0x75);
break;
case UC_THERE_EXISTS:
unicode_action_function(0x22, 0x03);
break;
case UC_PLUS_MINUS_SIGN:
unicode_action_function(0x00, 0xb1);
break;
case UC_VULGAR_FRACTION_THREE_QUARTERS:
unicode_action_function(0x00, 0xbe);
break;
case UC_SUPERSCRIPT_THREE:
unicode_action_function(0x00, 0xb3);
break;
case UC_EMPTY_SET:
unicode_action_function(0x22, 0x05);
break;
case UC_UPWARDS_ARROW:
unicode_action_function(0x21, 0x91);
break;
case UC_SUPERSCRIPT_NINE:
unicode_action_function(0x20, 0x79);
break;
case UC_GREEK_SMALL_LETTER_DELTA:
unicode_action_function(0x03, 0xb4);
break;
case UC_GREEK_SMALL_LETTER_MU:
unicode_action_function(0x03, 0xbc);
break;
case UC_GREEK_CAPITAL_LETTER_KAPPA:
unicode_action_function(0x03, 0x9a);
break;
case UC_SUBSCRIPT_EIGHT:
unicode_action_function(0x20, 0x88);
break;
case UC_GREEK_CAPITAL_LETTER_ALPHA:
unicode_action_function(0x03, 0x91);
break;
case UC_SUBSCRIPT_SEVEN:
unicode_action_function(0x20, 0x87);
break;
case UC_GREEK_CAPITAL_LETTER_BETA:
unicode_action_function(0x03, 0x92);
break;
case UC_GREEK_CAPITAL_LETTER_ETA:
unicode_action_function(0x03, 0x97);
break;
case UC_SUPERSCRIPT_EIGHT:
unicode_action_function(0x20, 0x78);
break;
case UC_SUPERSCRIPT_ZERO:
unicode_action_function(0x20, 0x70);
break;
case UC_NOT_AN_ELEMENT_OF:
unicode_action_function(0x22, 0x09);
break;
case UC_GREEK_SMALL_LETTER_UPSILON:
unicode_action_function(0x03, 0xc5);
break;
case UC_NOT_EQUAL_TO:
unicode_action_function(0x22, 0x60);
break;
case UC_GREEK_CAPITAL_LETTER_CHI:
unicode_action_function(0x03, 0xa7);
break;
case UC_FOR_ALL:
unicode_action_function(0x22, 0x00);
break;
case UC_GREEK_CAPITAL_LETTER_TAU:
unicode_action_function(0x03, 0xa4);
break;
case UC_VULGAR_FRACTION_ONE_QUARTER:
unicode_action_function(0x00, 0xbc);
break;
case UC_GREEK_SMALL_LETTER_CHI:
unicode_action_function(0x03, 0xc7);
break;
case UC_GREEK_CAPITAL_LETTER_THETA:
unicode_action_function(0x03, 0x98);
break;
case UC_GREEK_SMALL_LETTER_IOTA:
unicode_action_function(0x03, 0xb9);
break;
case UC_GREEK_CAPITAL_LETTER_LAMDA:
unicode_action_function(0x03, 0x9b);
break;
case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N:
unicode_action_function(0x20, 0x7f);
break;
case UC_GREEK_CAPITAL_LETTER_UPSILON:
unicode_action_function(0x03, 0xa5);
break;
case UC_GREEK_CAPITAL_LETTER_MU:
unicode_action_function(0x03, 0x9c);
break;
case UC_GREEK_CAPITAL_LETTER_EPSILON:
unicode_action_function(0x03, 0x95);
break;
case UC_GREEK_CAPITAL_LETTER_GAMMA:
unicode_action_function(0x03, 0x93);
break;
case UC_SUBSCRIPT_SIX:
unicode_action_function(0x20, 0x86);
break;
case UC_GREEK_CAPITAL_LETTER_DELTA:
unicode_action_function(0x03, 0x94);
break;
case UC_VULGAR_FRACTION_ONE_HALF:
unicode_action_function(0x00, 0xbd);
break;
default:
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
case L1:
ergodox_right_led_1_on();
break;
case L2:
ergodox_right_led_2_on();
break;
case L3:
ergodox_right_led_3_on();
break;
case L4:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
break;
case L5:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
break;
// case L6:
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
// case L7:
// ergodox_right_led_1_on();
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
default:
ergodox_board_led_off();
break;
}
};

@ -0,0 +1,188 @@
# ManuNeo Ergodox Keyboard Layout
Compile this file to a `keymap.c` file using `compile_keymap.py`
python compile_keymap.py keymaps/german-manuneo/keymap.md
Tested with python 2.7 and python 3.4
# Layout Config
{
"layout": "ergodox_ez",
"keymaps_includes": [
"ergodox_ez.h",
"action_layer.h",
"keymap_common.h",
"keymap_extras/keymap_german.h",
],
"key_prefixes": ["DE_", "KC_"],
"macros": {
// TODO: implement macros
// "MUC": "",
},
// TODO: implement default unicode mode
}
# Layers
## Layer 0
.------------------------------------.------------------------------------.
|MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
|MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
|MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
|MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT|
'------------------------' '------------------------'
.-----------. .-----------.
|INS |TG(2)| !M(UM)|DELT |
.-----+-----+-----! !-----+-----+-----.
! ! | APP | ! PGUP| ! !
! ! !-----! !-----! ! !
|BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
'-----------------' '-----------------'
## Layer 1
.------------------------------------.------------------------------------.
| |EXLM|DQOT|PARA| | | | | | | | |RING| |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | ← | ↓ | → |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 2
.------------------------------------.------------------------------------.
| | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | | | | | | | | | P7 | P8 | P9 |PAST|PSLS |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! P0 |PCMM|PDOT|PENT|PENT|
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 3
http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html
.------------------------------------.------------------------------------.
| | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 4
.------------------------------------.------------------------------------.
| | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | θ | | | | | | β | μ | | | | ψ |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 5
.------------------------------------.------------------------------------.
| | | | | | | | | | | | | | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | Θ | | | | | | Β | Μ | | | | Ψ |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 6
.------------------------------------.------------------------------------.
| | | | | | | | | | | | | | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | | | | | | | | | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | |-----!-----! | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | | | | | | | | | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'

File diff suppressed because it is too large Load Diff

@ -157,12 +157,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -157,12 +157,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -89,12 +89,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -244,12 +244,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -29,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* |--------+------+------+------+------+------| = | | - |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
@ -50,7 +50,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_F, KC_P, KC_G, TG(SYMB),
KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_EQL,
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
KC_LALT, F(LWIN),
KC_HOME,
@ -59,7 +59,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_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
MEH_T(KC_NO),KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_MINS, KC_K, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_NO),
KC_LALT, KC_RALT,
KC_PGUP,
@ -73,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Del | Q | W | F | P | G | L1 | | L1 | J | L | U | Y | ; | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Esc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* |--------+------+------+------+------+------| = | | - |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | K | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
@ -94,7 +94,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, CM_Q, CM_W, CM_F, CM_P, CM_G, TG(SYMB),
KC_ESC, CM_A, CM_R, CM_S, CM_T, CM_D,
KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, ALL_T(KC_NO),
KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, KC_EQL,
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
KC_LALT, F(LWIN),
KC_HOME,
@ -103,7 +103,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), CM_J, CM_L, CM_U, CM_Y, KC_P, /*CM_SCLN*/ KC_BSLS,
CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT,
MEH_T(KC_NO),CM_K, CM_M, CM_COMM,CM_DOT, CTL_T(CM_SLSH), KC_RSFT,
KC_MINS, CM_K, CM_M, CM_COMM,CM_DOT, CTL_T(CM_SLSH), KC_RSFT,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, LT(SYMB,KC_NO),
KC_LALT, KC_RALT,
KC_PGUP,
@ -222,33 +222,38 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
} else {
unregister_code(KC_LGUI);
}
break;
case PC1:
if (!record->event.pressed) {
return MACRO(T(SLCK), T(SLCK), T(1), T(ENT), END);
return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(1), W(50), T(ENT), END);
}
break;
case PC2:
if (!record->event.pressed) {
return MACRO(T(SLCK), T(SLCK), T(2), T(ENT), END);
return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(2), W(50), T(ENT), END);
}
break;
case PC3:
if (!record->event.pressed) {
return MACRO(T(SLCK), T(SLCK), T(3), T(ENT), END);
return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(3), W(50), T(ENT), END);
}
break;
case PC4:
if (!record->event.pressed) {
return MACRO(T(SLCK), T(SLCK), T(4), T(ENT), END);
return MACRO(T(SLCK), W(50), T(SLCK), W(50), T(4), W(50), T(ENT), END);
}
break;
}
return MACRO_NONE;
}
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
return NULL;
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

@ -0,0 +1,184 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | BkSp | A | S | D | F | G |------| |------| H | J | K | L | ; |' / Cmd |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | Cmd | Alt |AltShf| Left | Right| | Left | Down | Up |Right | L2 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | App | LGui | | Alt |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Space|Backsp|------| |------| Tab |Enter |
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
KC_DELT, 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),
KC_LGUI,KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
KC_SPC,KC_BSPC,KC_END,
// right hand
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, KC_J, KC_K, KC_L, KC_SCLN,GUI_T(KC_QUOT),
MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(MDIA),
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
KC_PGDN,KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | . | 0 | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | Mute | | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | Prev |VolDn |VolUp | Next | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
* | Lclk | Rclk |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_BTN1, KC_BTN2, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_WBAK
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,1118 @@
:100000000C9465020C94A9020C94A9020C94A90208
:100010000C94A9020C94A9020C94A9020C94A902B4
:100020000C94A9020C94A9020C94AD0B0C947F0CB7
:100030000C94A9020C94A9020C94A9020C94A90294
:100040000C94A9020C9404210C94A9020C94A9020A
:100050000C94A9020C94951A0C94A9020C94A90270
:100060000C94A9020C94A9020C94A9020C94A90264
:100070000C94A9020C94A9020C94A9020C94A90254
:100080000C94A9020C94A9020C94A9020C94A90244
:100090000C94A9020C94A9020C94A9020C94A90234
:1000A0000C94A9020C94A9020C94A902EC0C0E0D5C
:1000B000FC0D0E0DFC0D530D760DFC0DCB0DDE0D64
:1000C000C010C010EF10EF10321170118913891396
:1000D000891189138A128A125D1389138913741383
:1000E0000000F0A12E004C002A00E100E300000017
:1000F0001E00140004001D71E2004D001F001A00D4
:1001000016001B00E1042A0020000800070006007A
:1001100050002C0021001500090019004F004A0072
:10012000220017000A000500000065745000015409
:100130000000007F0000E3004F0001540000007742
:100140000000E20023001C000B00110000002971D8
:10015000240018000D00100050004B0025000C007A
:100160000E00360051002800260012000F00370054
:1001700052002B0027001300330038714F004E004F
:100180002D0031003478E500025400000100010028
:1001900001000100010000003A001E0220022202BC
:1001A000010001003B001F022102230201000100A7
:1001B0003C002F0226022F00010001003D0030020A
:1001C00027023000010001003E00310235003502F7
:1001D000000001000100010000000100000001001A
:1001E0000100010000000100000001003F0052007A
:1001F00051002402000001004000240021001E00E4
:10020000010001004100250022001F00370001000D
:1002100042002600230020002700010043002502A1
:100220002E0231002E0001004400450001000100B3
:1002300001000000010001000100010001000000B8
:1002400001000100010001000100010001000100A6
:10025000F20001000100F5000100F000F1000100D2
:100260000100F40001000100F300010001000100A1
:100270000100010001000100000001000100010077
:100280000000010000000100010001000000010069
:100290000000010001000100010001000000010058
:1002A000010001000100A800AC00010001000100F4
:1002B00001000100AA00B6000100010001000100D8
:1002C000A90001000100010001000100AB000100D4
:1002D00001000100AE00010001000000160345000E
:1002E000720067006F0044006F0078002000450036
:1002F0005A00000016034500720067006F004400BA
:100300006F007800200045005A0000000403090433
:1003100009026D00040100A0FA09040000010301B4
:100320000100092111010001223F00070581030896
:10033000000A090401000103010200092111010062
:1003400001224D000705820308000A09040200018A
:100350000300000009211101000122360007058376
:100360000308000A09040300010300000009211129
:100370000100012239000705840310000112011059
:100380000100000008EDFE07130100010200010555
:10039000010906A101050719E029E71500250195C6
:1003A0000875018102050819012905950575019156
:1003B000029501750391010507190029771500259C
:1003C00001957875018102C005010980A1018502AE
:1003D00016010026B7001A01002AB7007510950112
:1003E0008100C0050C0901A1018503160100269CAE
:1003F000021A01002A9C02751095018100C00501B6
:100400000902A1010901A100050919012905150029
:10041000250195057501810295017503810105018D
:10042000093009311581257F950275088106093843
:100430001581257F950175088106050C0A3802157E
:1004400081257F950175088106C0C005010906A1B7
:1004500001050719E029E7150025019508750181B7
:100460000295017508810105081901290595057591
:100470000191029501750391010507190029FF15E6
:100480000025FF950675088100C0000000000000EF
:100490000000000000010204060A0F17202C3A4A4F
:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
:1004B000B39D87715D4A3A2C20170F0A060402018A
:1004C0000000000000000000000011241FBECFEF5C
:1004D000DAE0DEBFCDBF04B603FE24C08091EE019A
:1004E0009091EF01A091F001B091F1018730904B14
:1004F000A740B04BB9F41092EE011092EF011092A8
:10050000F0011092F10114BE84B7877F84BF88E1A7
:100510000FB6F89480936000109260000FBEE0E088
:10052000FFE3099511E0A0E0B1E0ECE8F5E402C0DA
:1005300005900D92A433B107D9F711E0A4E3B1E01F
:1005400001C01D92AE3EB107E1F70E94F1080C9484
:10055000C4220C94000061110BC0FC01828188232D
:1005600021F085EE0E945D0F03C085EE0E942510EC
:1005700080E090E0089508956091B1017091B2011A
:100580008091B3019091B4010E94C41956985E986D
:1005900025982D9826982E9827982F98813019F015
:1005A000823021F00895259A2D9A0895269A2E9A40
:1005B00008950C94BC0256985E9825982D9826981C
:1005C0002E9827982F988FEF90E090938900809332
:1005D000880090938B0080938A0090938D00809385
:1005E0008C00259A2D9A2FEF80E792E021508040D1
:1005F0009040E1F700C00000269A2E9A2FEF80E786
:1006000092E0215080409040E1F700C00000279A1E
:100610002F9A2FEF80E792E0215080409040E1F741
:1006200000C0000025982D982FEF80E792E0215020
:1006300080409040E1F700C0000026982E982FEFF0
:1006400080E792E0215080409040E1F700C0000038
:1006500027982F9856985E9825982D9826982E982A
:1006600027982F98089589EA8093800089E08093E5
:10067000810024982C983F988AB18F748AB96E981B
:10068000479A8BB1806B8BB9769A0E94DB020C94EF
:10069000BB0280E2809300018091340181110EC081
:1006A0000E94980381E0809334012FEF83ED90E363
:1006B000215080409040E1F700C0000080E40E949B
:1006C0009E038093000181112EC00E94C803809375
:1006D0000001811128C00E94C8038093000181118C
:1006E00022C08FE30E94C8038093000181111BC0C8
:1006F0000E94C00380E40E949E0380930001811148
:1007000012C08CE00E94C8038093000181110BC0CD
:100710000E94C80380930001811105C08FE30E94ED
:10072000C803809300010E94C003809100010895D6
:100730001092B9008AE08093B800089594EA9093EB
:10074000BC009091BC0097FFFCCF9091B900987FBE
:10075000983021F0903111F081E008958093BB0032
:1007600084E88093BC008091BC0087FFFCCF80911F
:10077000B900887F883111F0803471F780E00895E6
:1007800084E98093BC008091BC0084FDFCCF089577
:100790008093BB0084E88093BC008091BC0087FFFD
:1007A000FCCF9091B900987F81E0983209F480E005
:1007B000089584E88093BC008091BC0087FFFCCF43
:1007C0008091BB00089580910001811115C080E4E3
:1007D0000E949E038093000181110CC082E10E945F
:1007E000C80380930001811105C08FEF0E94C803E8
:1007F000809300010E94C00384B1807F84B985B1D9
:10080000807F85B98AB1837F8AB98BB1837F8BB9A9
:100810003E98469808950E944903809300010E94E3
:10082000E30380B38C7080BB81B3836F81BBA6E38D
:10083000B1E0E4E4F1E08EE08E0F11921D928E1390
:10084000FCCF0C943303BF92CF92DF92EF92FF92D2
:100850000F931F93CF93DF9380910001882379F04A
:10086000809135018F5F80933501811108C00E940E
:10087000490380930001811102C00E94DB0206E35C
:1008800011E0C0E0D0E0DD24D39482E0C82EEE2455
:10089000E394F12CC730D10500F58091000181115E
:1008A00064C080E40E949E0380930001811112C005
:1008B00082E10E94C8038093000181110BC0C7012F
:1008C0000C2E01C0880F0A94EAF780950E94C80395
:1008D000809300010E94C00348C0CA30A1F028F4F0
:1008E000C83059F0C93061F005C0CC3089F070F0E3
:1008F000CD3089F0209A289810C0219A29980DC0EF
:10090000229A2A980AC0239A2B9807C0529A01C0AB
:10091000539A5B9802C03E9A469890EA9A95F1F7EE
:100920009FB1799902C082E001C080E091709D255D
:10093000982B7C9902C084E001C080E0892B7D99CE
:1009400002C038E001C030E0832B7E9902C020E174
:1009500001C020E0822B9FB19095991F9927991F84
:100960009295990F907E892B0FC080910001811183
:1009700049C080E40E949E0380930001882379F19E
:10098000B12C0E94C0038B2DF8019081981719F0AB
:100990008083C09201010E94E30321960F5F1F4FE5
:1009A000CE30D10509F076CF80910101882361F125
:1009B000815080930101882339F08FE99FE00197EE
:1009C000F1F700C0000020C0A4E4B1E0E6E3F1E0EC
:1009D000CF01825F91919D938E13FCCF15C083E16F
:1009E0000E94C803809300018111CACF81E40E9454
:1009F0009E03809300018111C3CF0E94D903B82EBA
:100A0000B094BFCF80E0C0CF0E94D90281E0DF91D7
:100A1000CF911F910F91FF90EF90DF90CF90BF90FB
:100A20000895E82FF0E0EC5BFE4F80810895089573
:100A30008B3B910578F4883A910540F5853A91050C
:100A4000D0F48430910508F0B1C08130910509F4EB
:100A5000ADC06BC0803E910508F467C0883E91052B
:100A600008F4A4C09C01205F31092031310508F051
:100A70005CC090650895853A910509F459C0863A9D
:100A8000910509F058C082E890E40895883A9105EC
:100A900009F454C0893A910509F453C08A3A910582
:100AA00009F452C08B3A910509F451C08C3A910572
:100AB00009F450C08D3A910509F44FC0803B91056F
:100AC00009F44EC08E3A910509F44DC08F3A910554
:100AD00009F44CC0813B910509F44BC0823B910560
:100AE00009F44AC0833B910509F449C0843B910550
:100AF00009F448C0853B910509F447C0863B910540
:100B000009F446C0873B910509F445C0883B91052F
:100B100009F444C0893B910509F443C08A3B91051F
:100B200009F442C080E094E4089580E090E00895E4
:100B300081E890E4089583E890E4089582EE94E4D7
:100B4000089589EE94E408958AEE94E4089585EB7F
:100B500094E4089586EB94E4089587EB94E4089573
:100B60008CEC94E408958DEC94E4089583E895E486
:100B700008958AE895E4089582E995E4089584E962
:100B800095E4089581E296E4089583E296E4089559
:100B900084E296E4089585E296E4089586E296E478
:100BA000089587E296E408958AE296E40895089508
:100BB00096E0799FF001112494E5899FE00DF11DE5
:100BC0001124E60FF11DEE0FFF1FEC51FF4F859131
:100BD00094910895880F991FFC01E05AF040859187
:100BE00094910895880F991FFC01E052FF4F859161
:100BF0009491089526E0729FF001112444E5849FAA
:100C0000E00DF11D1124E60FF11DEE0FFF1FEC5159
:100C1000FF4F859194919C013A9521154FE134073E
:100C200008F41AC13F512115304120F49F700E94F1
:100C3000F20508959C0130532115304118F499278D
:100C4000906C0895811520E5920769F40E94AB131A
:100C50004FEF84E39CE0415080409040E1F700C0BA
:100C600000000C94BA1A813020E5920731F480918B
:100C7000CC0181608093CC0108959C0130552115F1
:100C8000304108F051C0292F33272F7033272130EE
:100C90003105D9F4AC014370552702C0220F331F30
:100CA0004A95E2F73C68AC0164E0440F551F6A9531
:100CB000E1F744275370242B352B73E0880F991FDD
:100CC0007A95E1F7807699271DC02230310529F405
:100CD000982F8827816F906A089523303105A9F4F1
:100CE000AC014370552721E030E002C0220F331FD2
:100CF0004A95E2F73C6843E0880F991F4A95E1F76F
:100D0000807E9770822B932B089524303105E1F477
:100D1000AC014370552721E030E002C0220F331FA1
:100D20004A95E2F73A68E7CF9C01305721153041E8
:100D300018F49F70906208959C013058211530413D
:100D400018F49F70906A0895803E9105E0F4803C0D
:100D5000910558F58133910509F46FC048F4893243
:100D6000910509F463C08A32910509F46DC072C01F
:100D700089339105E9F082389105D1F085339105E9
:100D800009F44DC067C0833E910581F138F4803E7F
:100D90009105B9F0823E9105D9F05CC0863E91057F
:100DA00061F1873E9105A1F155C00E94EA050895C1
:100DB0002091DF0120FD02C021FF4CC080EE90E0B9
:100DC00049C08091DF0180FFF9CF89E390E042C004
:100DD0008091DF0182FF0EC08091DF0184FF03C09C
:100DE00080E090E037C083EE90E034C08091DF0176
:100DF00082FFF2CF82EE90E02DC08091DF0183FF71
:100E00000BC08091DF0184FDEBCF87EE90E022C024
:100E10008091DF0183FFF5CF86EE90E01BC08091CB
:100E2000DF0185FF07C089E290E014C08091DF01F7
:100E300085FFF9CF85E390E00DC08091DF0186FF4B
:100E400007C08AE290E006C08091DF0186FFF9CFFB
:100E500081E390E00E941805089508950C942D07F1
:100E6000809162010895CF93DF9300D01F92CDB798
:100E7000DEB79C018091E501843019F593E09983F8
:100E80003B832A839093E9008FEF9091E800815093
:100E900095FD06C095ED9A95F1F700008111F5CF0B
:100EA0008091E80085FF0DC040E050E063E070E015
:100EB000CE0101960E949D098091E8008E77809373
:100EC000E8000F900F900F90DF91CF910895CF938E
:100ED000DF9300D01F92CDB7DEB72091E50124301B
:100EE00021F522E029839B838A8383E08093E900B4
:100EF0008FEF9091E800815095FD06C095ED9A9591
:100F0000F1F700008111F5CF8091E80085FF0DC059
:100F100040E050E063E070E0CE0101960E949D0940
:100F20008091E8008E778093E8000F900F900F90EB
:100F3000DF91CF9108952091E5012430F1F422E072
:100F40002093E9002FEF3091E800215035FD06C0D5
:100F500035ED3A95F1F700002111F5CF2091E80029
:100F600025FF0BC040E050E065E070E00E949D0965
:100F70008091E8008E778093E8000895CF93DF9307
:100F8000EC019091E501943009F046C080910C018C
:100F90008823D9F080910D018823B9F09093E9005E
:100FA0008FEF9091E800815095FD06C095E19A95EC
:100FB000F1F700008111F5CF8091E80085FF2CC08A
:100FC00040E050E060E170E017C081E08093E9000C
:100FD0008FEF9091E800815095FD06C095ED9A95B0
:100FE000F1F700008111F5CF8091E80085FF14C072
:100FF00040E050E068E070E0CE010E949D098091E1
:10100000E8008E778093E80080E1FE01A2E5B1E080
:1010100001900D928A95E1F7DF91CF91089580912B
:10102000E401811109C00E94320B0E948F0B809154
:10103000E20084608093E20008951092E401089534
:1010400008950C94F1200E94501A0E94F7200E94EB
:10105000350E0C942E0742E061EC81E00E94AC0A50
:1010600042E061EC82E00E94AC0A42E061EC83E085
:101070000E94AC0A42E161EC84E00C94AC0A8091DD
:10108000E701833009F455C030F4813071F08230CB
:1010900009F48EC008958A3009F47AC08B3009F4BF
:1010A00060C0893009F09CC020C08091E601813A7F
:1010B00009F096C08091E800877F8093E8008091D6
:1010C000EA019091EB01892B21F460E182E591E046
:1010D00003C060E080E090E070E00E94E809809149
:1010E000E8008B778093E80008958091E6018132D3
:1010F00009F076C08091EA019091EB01009719F018
:10110000039709F06DC08091E800877F8093E80025
:101110008091E80082FD05C08091E5018111F8CF42
:101120005FC08091F100809362018091E8008B772D
:1011300053C08091E601813A09F052C08091EA01E2
:101140009091EB01892B09F04BC08091E800877FDB
:101150008093E8008091E80080FFFCCF80910C0133
:1011600036C08091E6018132D9F58091EA019091F3
:10117000EB01892BA9F58091E800877F8093E80037
:101180000E94E10A8091E80180930C010C94AB135A
:101190008091E601813221F58091E800877F80937C
:1011A000E8000E94E10A8091E901809363010895BB
:1011B0008091E601813AA1F48091E800877F8093D5
:1011C000E8008091E80080FFFCCF8091630180936C
:1011D000F1008091E8008E778093E8000C94E10A9A
:1011E000089584B7877F84BF88E10FB6F894809311
:1011F0006000109260000FBE90E080E80FB6F89497
:1012000080936100909361000FBE0E94840E0E9443
:10121000320B0E948F0B8091E20084608093E20089
:1012200078940E94150E0E94860E82E091E00E9442
:10123000300E0E94DF208091E501853069F40E9424
:10124000141A8091E3018823B1F30E943C1A882389
:1012500091F30E948709EFCF0E948C0EECCF292FCB
:10126000332723303105C9F064F42130310581F092
:101270002230310509F043C08DE690E020E133E0F3
:1012800042C021323105F1F02232310541F137C03F
:1012900082E190E02DE733E036C099278130910557
:1012A00041F08230910541F0892B49F5ECE0F3E003
:1012B00005C0E4EFF2E002C0ECEDF2E0849190E0D2
:1012C0009F0121C06430D8F4E62FF0E0EE0FFF1F3D
:1012D000EE5DFE4F2081318189E090E014C06430E2
:1012E00070F470E0FB01EE0FFF1FE65EFE4F208101
:1012F0003181FB01EA5EFE4F808190E004C080E016
:1013000090E020E030E0FA0131832083089580E10D
:1013100089BD82E189BD09B400FEFDCF8091D8006E
:101320008F7D8093D8008091E00082608093E00000
:101330008091E00081FDFCCF0895CF92DF92EF9283
:10134000FF920F931F93CF93DF93EC018B016A0100
:101350000E94000B811133C0C114D10439F0F60191
:1013600080819181081B190BC80FD91FE12CF12C2A
:101370000115110519F18091E80085FD16C08091D5
:10138000E8008E778093E800C114D10449F0F6019B
:1013900080819181E80EF91EF182E08285E00FC024
:1013A0000E94000B882321F30AC089918093F100E9
:1013B00001501109FFEFEF1AFF0ADACF80E0DF9149
:1013C000CF911F910F91FF90EF90DF90CF900895F4
:1013D0002091EC013091ED012617370748F0611597
:1013E000710539F42091E8002E772093E80001C0C0
:1013F000B90140E061157105A9F12091E5012223B1
:1014000009F443C0253009F442C02091E80023FDCF
:1014100040C02091E80022FD32C02091E80020FF6A
:10142000E9CF4091F3002091F20030E0342BFC0131
:10143000CF016115710559F02830310540F48191D3
:101440008093F100615071092F5F3F4FF1CF41E070
:101450002830310509F040E02091E8002E772093F4
:10146000E800C8CF4111C9CF0AC08091E5018823A7
:1014700061F0853061F08091E80083FD0AC08091C1
:10148000E80082FFF2CF80E0089582E0089583E0D3
:10149000089581E008952091EC013091ED01261727
:1014A000370748F06115710539F42091E8002E776F
:1014B0002093E80001C0B901FC0120E0611571052D
:1014C00091F18091E501882309F440C0853009F449
:1014D0003FC08091E80083FD3DC08091E80082FD1F
:1014E0002FC08091E80080FFE9CF2091F300809128
:1014F000F20090E0922B6115710559F0883091054A
:1015000040F424912093F1003196615071090196C5
:10151000F2CF21E0089709F020E08091E8008E7773
:101520008093E800CBCF2111CCCF0AC08091E50198
:10153000882361F0853061F08091E80083FD0AC066
:101540008091E80082FFF2CF80E0089582E0089564
:1015500083E0089581E00895982F973058F590938F
:10156000E900981739F07091EC002091ED0050914E
:10157000F00003C0242F762F50E021FF19C03091D6
:10158000EB003E7F3093EB003091ED003D7F3093D8
:10159000ED003091EB0031603093EB007093EC0084
:1015A0002093ED005093F0002091EE0027FF07C03C
:1015B0009F5FD3CF8F708093E90081E0089580E032
:1015C00008958091E60187FF11C08091E80082FDB7
:1015D00005C08091E5018111F8CF11C08091E8002C
:1015E0008B770BC08091E501882349F08091E8005A
:1015F00080FFF8CF8091E8008E778093E80008950F
:101600002091E4003091E50095E64091EC00842FB4
:10161000817040FF22C08091E80080FD1CC0809155
:10162000E501882391F0853091F08091EB0085FDF4
:1016300010C04091E4005091E5004217530729F390
:101640009A01915011F784E0089582E0089583E0B3
:10165000089581E0089580E008954091E80042FFF8
:10166000DECF08950E94A00B0E94A80BE0EEF0E0F0
:10167000808181608083E8EDF0E080818F778083D6
:1016800019BCA7EDB0E08C918E7F8C9380818F7E0A
:1016900080831092E40108950F931F93CF93DF93FB
:1016A0000E94A00B0E94A80BC8EDD0E088818F7724
:1016B000888388818068888388818F7D888319BC2E
:1016C0001092E5011092E1011092E3011092E20103
:1016D00000EE10E0F80180818B7F8083888181603B
:1016E000888342E060E080E00E94AC0AE1EEF0E036
:1016F00080818E7F8083E2EEF0E080818160808354
:10170000808188608083F80180818E7F80838881DA
:1017100080618883DF91CF911F910F910895E8ED4B
:10172000F0E080818F7E8083E7EDF0E08081816052
:10173000808384E082BF81E08093E4010C944C0BB1
:10174000E8EDF0E080818E7F80831092E2000895C2
:101750001092DA001092E10008951F920F920FB6D6
:101760000F9211242F933F934F935F936F937F9327
:101770008F939F93AF93BF93EF93FF938091E1007B
:1017800082FF0BC08091E20082FF07C08091E100E0
:101790008B7F8093E1000E94140E8091DA0080FF1D
:1017A0001FC08091D80080FF1BC08091DA008E7F1F
:1017B0008093DA008091D90080FF0DC080E189BD5F
:1017C00082E189BD09B400FEFDCF81E08093E5018F
:1017D0000E940F0805C019BC1092E5010E941D0867
:1017E0008091E10080FF19C08091E20080FF15C068
:1017F0008091E2008E7F8093E2008091E200806120
:101800008093E2008091D80080628093D80019BC58
:1018100085E08093E5010E9421088091E10084FF2A
:1018200030C08091E20084FF2CC080E189BD82E15C
:1018300089BD09B400FEFDCF8091D8008F7D8093D3
:10184000D8008091E1008F7E8093E1008091E200DA
:101850008F7E8093E2008091E20081608093E200BD
:101860008091E101882311F084E007C08091E300BA
:1018700087FD02C081E001C083E08093E5010E9402
:1018800023088091E10083FF29C08091E20083FF5B
:1018900025C08091E100877F8093E10082E0809302
:1018A000E5011092E1018091E1008E7F8093E100DB
:1018B0008091E2008E7F8093E2008091E20080615F
:1018C0008093E20042E060E080E00E94AC0A8091F8
:1018D000F00088608093F0000E942008FF91EF9153
:1018E000BF91AF919F918F917F916F915F914F9138
:1018F0003F912F910F900FBE0F901F9018951F9240
:101900000F920FB60F9211242F933F934F935F9333
:101910006F937F938F939F93AF93BF93CF93DF93F7
:10192000EF93FF93C091E900CF708091EC00D82F26
:10193000D17080FDD0E81092E9008091F000877F9F
:101940008093F00078940E94C30C1092E90080917B
:10195000F00088608093F000CD2BCF70C093E90039
:10196000FF91EF91DF91CF91BF91AF919F918F91B7
:101970007F916F915F914F913F912F910F900FBE8B
:101980000F901F9018951F93CF93DF93CDB7DEB7BD
:10199000AA970FB6F894DEBF0FBECDBFE6EEF1E01A
:1019A00088E08E0F9091F10091938E13FBCF0E94EF
:1019B0003F088091E80083FF1FC18091E60190916C
:1019C000E701492F50E04A30510508F015C1FA01EE
:1019D000EA5AFF4F0C947922803881F0823809F05E
:1019E0000BC18091EA018F708093E9008091EB0038
:1019F00085FB882780F91092E90006C08091E201FA
:101A00009091E301911182609091E800977F90930B
:101A1000E8008093F1001092F100C8C0282F2D7FBC
:101A200009F0EAC0882319F0823061F0E5C08091A6
:101A3000E801813009F0E0C0933009F080E0809344
:101A4000E3012BC08091E801811127C08091EA0158
:101A50008F7009F4D1C08093E9002091EB0020FF42
:101A60001CC0933021F48091EB00806214C09091EF
:101A7000EB0090619093EB0021E030E0A90102C0FF
:101A8000440F551F8A95E2F74093EA001092EA004E
:101A90008091EB0088608093EB001092E9008091C8
:101AA000E800877F86C08111A7C01091E8011F77E9
:101AB0008091E3008078812B8093E3008091E8009F
:101AC000877F8093E8000E94E10A8091E80080FF10
:101AD000FCCF8091E30080688093E300111102C085
:101AE00082E001C083E08093E50186C080588230A7
:101AF00008F082C08091E8019091E9018C3D53E0AB
:101B0000950779F583E08A838AE289834FB7F89451
:101B1000DE01139620E03EE051E2E32FF0E0509327
:101B20005700E49120FF03C0E295EF703F5FEF7034
:101B30008E2F90E0EA3010F0C79601C0C0968D93CA
:101B40009D932F5F243149F74FBF8091E800877F35
:101B50008093E8006AE270E0CE0101960E94E809F5
:101B600014C0AE014F5F5F4F6091EA010E942F09E0
:101B7000BC01892B09F440C09091E800977F9093B5
:101B8000E80089819A810E944B0A8091E8008B7756
:101B90008093E80031C0803879F58091E800877F34
:101BA0008093E8008091E1018093F1008091E8004A
:101BB0008E778093E8000E94E10A1EC081111CC04C
:101BC0009091E8019230C0F48091E800877F809383
:101BD000E8009093E1010E94E10A8091E101811106
:101BE00006C08091E30087FD02C081E001C084E06F
:101BF0008093E5010E942B088091E80083FF0AC0D2
:101C00008091E800877F8093E8008091EB008062FC
:101C10008093EB00AA960FB6F894DEBF0FBECDBF3F
:101C2000DF91CF911F9108950895CF938091E501A1
:101C30008823A1F0C091E900CF709091EC00892F2A
:101C4000817090FD80E8C82B1092E9008091E80037
:101C500083FD0E94C30CCF70C093E900CF9108951B
:101C600090936901809368010895E0916801F09173
:101C70006901309721F00190F081E02D099480E016
:101C80000895E0916801F0916901309721F0028098
:101C9000F381E02D09940895E0916801F0916901C4
:101CA000309721F00480F581E02D0994089520916A
:101CB0006601309167018217930771F09093670175
:101CC00080936601E0916801F0916901309721F0FD
:101CD0000680F781E02D09940895209164013091E8
:101CE00065018217930771F09093650180936401F9
:101CF000E0916801F0916901309721F00084F1854D
:101D0000E02D0994089508950C94830E0E94561AAC
:101D10000E940B040C941C1BCF92DF92EF92FF9257
:101D20000F931F93CF93DF93CDB7DEB72B970FB6EB
:101D3000F894DEBF0FBECDBF0E9423048BE6C82EF1
:101D400081E0D82E00E010E0E02E802F0E941105E7
:101D5000F60141916F01F42EF826B1F40F5F1F4F89
:101D60000E30110589F78FEF89838A831B820E94C9
:101D70005F1A8160782F9D838C8349815A816B81A2
:101D80008D810E942F0F40C09091CC0191FF04C023
:101D90008B870E9417058B8520E030E04F2D50E0A7
:101DA000922FBA01022E02C0759567950A94E2F748
:101DB00060FF24C02E83EF8221E030E0690102C081
:101DC000CC0CDD1C9A95E2F790E08C219D21892BAB
:101DD00009F420E028870E945F1A8160782F9A8793
:101DE00089874E815F8168858A850E942F0FF8015F
:101DF000E559FE4F8081C826C08206C02F5F3F4F45
:101E00002630310569F6AACF0E94031E10916A019F
:101E10000E94350E1817A1F00E94350E80936A01BA
:101E20002B960FB6F894DEBF0FBECDBFDF91CF91DA
:101E30001F910F91FF90EF90DF90CF900C942E07A1
:101E40002B960FB6F894DEBF0FBECDBFDF91CF91BA
:101E50001F910F91FF90EF90DF90CF900895CF9357
:101E6000DF93CDB7DEB72B970FB6F894DEBF0FBE6A
:101E7000CDBF4F83588769877A878B87DE0111969C
:101E800086E0FD0111928A95E9F785E0FE0137961B
:101E900001900D928A95E1F749815A816B817C818D
:101EA0008D819E810E9445162B960FB6F894DEBF59
:101EB0000FBECDBFDF91CF910895CF93882309F452
:101EC000C2C0C82F823859F40E94350E81FDBBC0B4
:101ED00089E30E94E1180E949E1989E30CC08338AF
:101EE00079F40E94350E80FDAEC083E50E94E118B2
:101EF0000E949E1983E50E942319CF910C949E198C
:101F0000843859F40E94350E82FD9DC087E40E94FA
:101F1000E1180E949E1987E4EECF8CEF8C0F813A76
:101F200048F48C2F0E94442081118DC08C2F0E9478
:101F3000E118E3CF80E28C0F883048F4C77081E06D
:101F400001C0880FCA95EAF70E946719D6CF8BE5C2
:101F50008C0F833078F4C53A29F0C63A31F083E823
:101F600090E005C081E890E002C082E890E0CF9167
:101F70000C94570E88E58C0F833108F064C0C83A82
:101F800039F1C93A41F1CA3A49F1CB3A51F1CC3A67
:101F900059F1CD3A61F1C03B69F1CE3A71F1CF3AD6
:101FA00079F1C13B81F1C23B89F1C33B91F1C43B63
:101FB00099F1C53BA1F1C63BA9F1C73BB1F1C83BC3
:101FC000B9F1C93BC1F1CA3BC9F180E090E038C02A
:101FD00082EE90E035C089EE90E032C08AEE90E06B
:101FE0002FC085EB90E02CC086EB90E029C087EBFA
:101FF00090E026C08CEC90E023C08DEC90E020C0F7
:1020000083E891E01DC08AE891E01AC082E991E07E
:1020100017C084E991E014C081E292E011C083E22C
:1020200092E00EC084E292E00BC085E292E008C02C
:1020300086E292E005C087E292E002C08AE292E086
:10204000CF910C946D0ECF910895882309F44BC065
:10205000823859F40E94350E81FF45C089E30E9401
:10206000E1180E949E1989E30CC0833871F40E9424
:10207000350E80FF38C083E50E94E1180E949E194A
:1020800083E50E9423190C949E19843859F40E9408
:10209000350E82FF28C087E40E94E1180E949E1935
:1020A00087E4EFCF9CEF980F913A58F390E2980FA6
:1020B000983050F4877091E001C0990F8A95EAF743
:1020C000892F0E946D19DFCF9BE5980F933020F484
:1020D00080E090E00C94570E885A833120F480E021
:1020E00090E00C946D0E0895882321F00E946719EA
:1020F0000C949E190895882321F00E946D190C9468
:102100009E190895BF92CF92DF92EF92FF920F93A4
:102110001F93CF93DF9300D000D000D0CDB7DEB7B0
:1021200025E0FC01DE01119601900D922A95E1F760
:10213000FC01408131810281258122952F706381CC
:102140007481672B09F4E5C23F3F19F44F3F09F44E
:10215000E0C27C0149833A8389819A812E830E945F
:10216000A018182FB92E0E949F180E946617EB2DF9
:10217000E295EF70F0E0E05AFF4F2E810C94792247
:102180008B2D807F9B2D9F70F92E882319F0F29460
:1021900080EFF822002349F0FF2009F467C28F2D59
:1021A0000E9477190E949E1961C2812F0E942510FA
:1021B000FF2009F4AEC28F2D0E947D1926960FB61E
:1021C000F894DEBF0FBECDBFDF91CF911F910F916D
:1021D000FF90EF90DF90CF90BF900C949E193B2D15
:1021E000307F8B2D8F70303211F08295807F1123DC
:1021F00019F0113021F12CC00023B9F0222309F489
:10220000A0C1213009F09DC126960FB6F894DEBF1B
:102210000FBECDBFDF91CF911F910F91FF90EF9037
:10222000DF90CF90BF900C948719222319F02130B2
:1022300009F46FC28E830E948A198E8196C1002391
:1022400021F0223008F065C27CC1211162C28DC12B
:10225000002321F0222309F474C108C2222309F4C7
:1022600084C119C22B2D26952695237030E02115A7
:10227000310521F021303105D1F04BC2002321F08E
:10228000812F9B2D937002C080E090E026960FB6C0
:10229000F894DEBF0FBECDBFDF91CF911F910F919C
:1022A000FF90EF90DF90CF90BF900C94570E0023DB
:1022B00021F0812F9B2D937002C080E090E0269644
:1022C0000FB6F894DEBF0FBECDBFDF91CF911F9147
:1022D0000F91FF90EF90DF90CF90BF900C946D0E18
:1022E000812F002319F00E940B1D02C00E94731D54
:1022F00026960FB6F894DEBF0FBECDBFDF91CF910B
:102300001F910F91FF90EF90DF90CF90BF900C94B2
:10231000F81D8B2D837009F07BC00111FAC1812F4C
:10232000829586958770880F880F912F9F70C92E90
:10233000D12CE12CF12C082E04C0CC0CDD1CEE1CA1
:10234000FF1C0A94D2F714FF12C04FE050E060E087
:1023500070E004C0440F551F661F771F8A95D2F79F
:10236000CB01BA01609570958095909503C060E0AF
:1023700070E0CB012B2D269526952370422F50E03F
:1023800042305105D9F04330510569F16C297D295E
:102390008E299F294130510551F126960FB6F894A8
:1023A000DEBF0FBECDBFDF91CF911F910F91FF9088
:1023B000EF90DF90CF90BF900C948D176C297D2902
:1023C0008E299F2926960FB6F894DEBF0FBECDBF8B
:1023D000DF91CF911F910F91FF90EF90DF90CF9001
:1023E000BF900C94A9170E948D17C701B6012696BD
:1023F0000FB6F894DEBF0FBECDBFDF91CF911F9116
:102400000F91FF90EF90DF90CF90BF900C947117D9
:10241000002319F08B2D817001C08695882309F463
:1024200078C1812F829586958770880F880F912FAC
:102430009F70C92ED12CE12CF12C082E04C0CC0C9D
:10244000DD1CEE1CFF1C0A94D2F714FF12C04FE0F3
:1024500050E060E070E004C0440F551F661F771F16
:102460008A95D2F7CB01BA016095709580959095C9
:1024700003C060E070E0CB012B2D269526952370DC
:10248000422F50E042305105D9F04330510569F1F7
:102490006C297D298E299F294130510551F12696BD
:1024A0000FB6F894DEBF0FBECDBFDF91CF911F9165
:1024B0000F91FF90EF90DF90CF90BF900C94671832
:1024C0006C297D298E299F2926960FB6F894DEBFA8
:1024D0000FBECDBFDF91CF911F910F91FF90EF9075
:1024E000DF90CF90BF900C9483180E946718C701AB
:1024F000B60126960FB6F894DEBF0FBECDBFDF91B2
:10250000CF911F910F91FF90EF90DF90CF90BF90F0
:102510000C944B18103FD1F118F4103E50F4A1C0A8
:10252000123F09F463C008F44CC0133F09F473C0B0
:1025300098C01F708B2D8F710023A1F00E94E417AB
:10254000812F26960FB6F894DEBF0FBECDBFDF9168
:10255000CF911F910F91FF90EF90DF90CF90BF90A0
:102560000C9474100E940518812F26960FB6F894CB
:10257000DEBF0FBECDBFDF91CF911F910F91FF90B6
:10258000EF90DF90CF90BF900C947B100023A9F0C8
:102590002111BFC08B2D8F7126960FB6F894DEBF28
:1025A0000FBECDBFDF91CF911F910F91FF90EF90A4
:1025B000DF90CF90BF900C942A18223008F0A9C069
:1025C000E9CF0023A9F08B2D8F7126960FB6F894D2
:1025D000DEBF0FBECDBFDF91CF911F910F91FF9056
:1025E000EF90DF90CF90BF900C94E417002359F345
:1025F0008B2D8F7126960FB6F894DEBF0FBECDBF20
:10260000DF91CF911F910F91FF90EF90DF90CF90CE
:10261000BF900C940518002399F08B2D8F7126968E
:102620000FB6F894DEBF0FBECDBFDF91CF911F91E3
:102630000F91FF90EF90DF90CF90BF900C94CF1749
:1026400026960FB6F894DEBF0FBECDBFDF91CF91B7
:102650001F910F91FF90EF90DF90CF90BF900C945F
:10266000C5170023A9F0222309F4ADCF812F2696A8
:102670000FB6F894DEBF0FBECDBFDF91CF911F9193
:102680000F91FF90EF90DF90CF90BF900C945D0F73
:10269000222309F4ADCF812F26960FB6F894DEBF22
:1026A0000FBECDBFDF91CF911F910F91FF90EF90A3
:1026B000DF90CF90BF900C9425104B2D4F70612F61
:1026C000C7010E94AB0226960FB6F894DEBF0FBE7C
:1026D000CDBFDF91CF911F910F91FF90EF90DF90D1
:1026E000CF90BF900C94E9164B2D4F70612FC7010E
:1026F00026960FB6F894DEBF0FBECDBFDF91CF9107
:102700001F910F91FF90EF90DF90CF90BF900C94AE
:10271000D70526960FB6F894DEBF0FBECDBFDF916A
:10272000CF911F910F91FF90EF90DF90CF90BF90CE
:1027300008950E9484190E9459190E949E190E94AE
:10274000A91E0E94F81D80E090E00E94570E80E0D4
:1027500090E00C946D0E0E9474190C9499130E94D1
:10276000A018292F22952F7030E02C3031054CF421
:102770002A3031056CF4225031092230310588F4B9
:1027800007C02C30310549F02F30310531F009C038
:10279000803E48F0803F29F406C093FB882780F9EB
:1027A000089580E0089581E00895CF93DF9300D0ED
:1027B00000D01F92CDB7DEB70F900F900F900F9003
:1027C0000F90DF91CF910895CF93DF9300D000D089
:1027D00000D0CDB7DEB726960FB6F894DEBF0FBE99
:1027E000CDBFDF91CF9108951F93CF93DF93C09119
:1027F000790116E080917A01C81799F0D0E01C9F0A
:10280000F0011D9FF00D1124E558FE4F40815181CC
:1028100062817381848195810E94E4132196C7703F
:10282000E9CFDF91CF911F9108954091AB01509175
:10283000AC016091AD017091AE018091AF019091BA
:10284000B0010C94E4138091B00182958F7009F06F
:1028500054C08091AD01882309F44FC08091790163
:10286000A0917A016091AB017091AC014091AE01F1
:102870005091AF01B6E08A1709F43FC090E04115CE
:102880005105C1F17F3F11F46F3FA1F1B89FF001F5
:10289000B99FF00D1124E558FE4F218172132AC013
:1028A0002081621327C02281211124C02381348119
:1028B0002417350710F421503109241B350B283C0F
:1028C0003105C0F42091B0012F7020612093B00138
:1028D00026E0289FF001299FF00D1124E058FE4FBB
:1028E00080818F70806180838BEA91E00E948210EA
:1028F0000C94F41301968770BECF0895CF92DF92A7
:10290000EF92FF920F931F93CF93DF93CDB7DEB774
:1029100062970FB6F894DEBF0FBECDBF8C0185E085
:10292000F801DE011D9601900D928A95E1F7D8011C
:102930004C9111965C91119712966C911297139687
:10294000CD90DC9014973091AB017091AC018091E7
:10295000AE019091AF01009709F46BC17F3F19F46C
:102960003F3F09F466C1E090AD01EE2009F4C0C01C
:102970002091B001C816D90628F0F601E81BF90B22
:10298000CF0104C0809590958C0D9D1DFF24F3947C
:10299000883C910578F0F12C207F09F0C6C07C2D91
:1029A000D98AC88A89890E94D5138BEA91E00E944E
:1029B0008210B1C0822F807F09F046C0751314C009
:1029C000341312C0611110C02F7020612093B00128
:1029D0000E9415148BEA91E00E9482108091B00150
:1029E000D80115968C932EC0CD2819F15F3F11F4B4
:1029F0004F3FF9F0F62E61111CC0809179012091B2
:102A00007A0136E0821709F45AC090E0389FF0014D
:102A1000399FF00D1124E558FE4F7181571306C000
:102A20007081471303C07281711103C001968770D2
:102A3000E9CFF62E662309F418C18091B0018160B8
:102A40008093B001F12C11C1751308C0341306C076
:102A5000611104C08091B001D801C3C04D875E8769
:102A60008D859E856A8B0E94AF136A898823E1F168
:102A70006623D1F12091B001822F82958F7090E072
:102A8000029774F08091AB019091AC0198878F838D
:102A90001986DB86CA862C87CE0107960E94821093
:102AA00086E0F801ABEAB1E001900D928A95E1F77A
:102AB0000E9423140E941514FF24F394D6C04D875E
:102AC0005E878D859E850E94A018292F22952F70E4
:102AD00030E0223031050CF0BCC09F7009F0B6C068
:102AE000805E883008F4C1C0C8010E948210E4CF23
:102AF000C816D90608F453C0F601E81BF90BCF013C
:102B0000883C910508F450C0F12C7C2DD98AC88AE4
:102B100089890E94D513EBEAF1E086E0DF011D927E
:102B20008A95E9F70E941514A0C0751314C03413D8
:102B300012C0611110C08091B001F8018583C801F5
:102B40000E94821086E0EBEAF1E0DF011D928A9597
:102B5000E9F7FE2C8AC04D875E878D859E856A8B3E
:102B60000E94AF136A89882309F4BECF662309F453
:102B7000BBCF2091B001822F82958F7090E0029799
:102B80000CF48ECF8091AB019091AC019A83898334
:102B90001B82DD82CC822E83CE0101967FCF809571
:102BA00090958C0D9D1DACCFF62E662309F49CCF1D
:102BB00075132EC034132CC02091B00120FD1FC00E
:102BC000822F82958F70D9F0D80115962C93159786
:102BD0008F3049F08F5F982F9295907F822F8F7062
:102BE000892B15968C93C8010E94821086E0F8010B
:102BF000ABEAB1E001900D928A95E1F793CF86E0C0
:102C0000F801ABEAB1E001900D928A95E1F72DC091
:102C10004D875E878D859E850E94AF13811140CFC1
:102C20008091B00181608093B001C8010E94821040
:102C30001CC0662309F458CF4D875E878D859E851D
:102C40000E94AF13882309F44FCF2ACF811148CFB8
:102C50000CC0243031050CF047CF9F7009F440CFF1
:102C6000F8019581907F09F03BCF8F2D62960FB6CA
:102C7000F894DEBF0FBECDBFDF91CF911F910F91B2
:102C8000FF90EF90DF90CF9008951F93CF93DF9345
:102C9000CDB7DEB72C970FB6F894DEBF0FBECDBF11
:102CA0004F83588769877A878B879C87CE010796E1
:102CB0000E947E14882369F08F8198852A853B8540
:102CC000232BF1F19F3F09F063C08F3F09F060C0F3
:102CD00037C086E0FE013796DE01119601900D9215
:102CE0008A95E1F76F817885EA85FB85309741F118
:102CF0007F3F11F46F3F21F120917A0130E0C9014B
:102D00000196877099274091790150E084179507C3
:102D100009F447C069837A83FD83EC8396E0929F30
:102D2000D001939FB00D1124A558BE4FFE013196DE
:102D300001900D929A95E1F780937A010E94F41325
:102D400016E08091790190917A018917C1F1189F5D
:102D5000C001112485589E4F0E947E14882379F16A
:102D6000E09179011E9FF0011124E558FE4F40814A
:102D7000518162817381848195810E94E4138091E5
:102D8000790190E001968770992780937901D9CFD6
:102D90004F81588569857A858B859C850E94E413CF
:102DA000CFCF0E94AB1310927A0110927901EBEA17
:102DB000F1E086E0DF011D928A95E9F7C1CF2C96FC
:102DC0000FB6F894DEBF0FBECDBFDF91CF911F913C
:102DD0000895EF92FF920F931F93CF93DF938C018F
:102DE000892B09F46CC0F12CEE24E394E8012196C0
:102DF000F8018491843740F4843008F051C0813068
:102E000081F0823019F15BC0853709F444C0A8F124
:102E10009CE7980F903708F052C08F770E942510DA
:102E200041C00E5F1F4FFE01C49180E28C0F8830BD
:102E300048F4C7708E2D01C0880FCA95EAF70E942A
:102E4000771914C08C2F0E945D0F2DC00E5F1F4F8D
:102E5000FE01C49180E28C0F883058F4C7708E2D2B
:102E600001C0880FCA95EAF70E947D190E949E1939
:102E70001AC08C2F0E94251016C00E5F1F4FFE0136
:102E8000C491CC2381F08FE99FE00197F1F700C056
:102E90000000C150F6CF0E5F1F4FFE01F49003C03B
:102EA0000E945D0F8E018F2D882309F49FCFEFE9DB
:102EB000FFE03197F1F700C000008150F5CFDF91BE
:102EC000CF911F910F91FF90EF9008950895609317
:102ED000B5017093B6018093B7019093B8010C943B
:102EE00099130F931F930091B5011091B601209192
:102EF000B7013091B801DC01CB01802B912BA22BC3
:102F0000B32B8093B5019093B601A093B701B09312
:102F1000B8011F910F910C9499130F931F93009177
:102F2000B5011091B6012091B7013091B801DC01D3
:102F3000CB0180239123A223B3238093B5019093E7
:102F4000B601A093B701B093B8011F910F910C94F3
:102F500099130F931F930091B5011091B601209121
:102F6000B7013091B801DC01CB0180279127A2275E
:102F7000B3278093B5019093B601A093B701B093A6
:102F8000B8011F910F910C9499131092B1011092F6
:102F9000B2011092B3011092B4010C94991341E064
:102FA00050E060E070E004C0440F551F661F771FBB
:102FB0008A95D2F74093B1015093B2016093B30167
:102FC0007093B4010C94991341E050E060E070E01C
:102FD00004C0440F551F661F771F8A95D2F7809152
:102FE000B1019091B201A091B301B091B401482B0D
:102FF000592B6A2B7B2B4093B1015093B201609304
:10300000B3017093B4010C94991341E050E060E077
:1030100070E004C0440F551F661F771F8A95D2F7D2
:1030200040955095609570958091B1019091B20155
:10303000A091B301B091B401482359236A237B23A3
:103040004093B1015093B2016093B3017093B40106
:103050000C94991341E050E060E070E004C0440F2C
:10306000551F661F771F8A95D2F78091B101909105
:10307000B201A091B301B091B401482759276A2742
:103080007B274093B1015093B2016093B3017093D9
:10309000B4010C9499130F931F930091B1011091F7
:1030A000B2012091B3013091B401DC01CB01802B3E
:1030B000912BA22BB32B8093B1019093B201A093DB
:1030C000B301B093B4011F910F910C9499130F9316
:1030D0001F930091B1011091B2012091B301309181
:1030E000B401DC01CB0180239123A223B32380937D
:1030F000B1019093B201A093B301B093B4011F91B9
:103100000F910C9499130F931F930091B10110919B
:10311000B2012091B3013091B401DC01CB018027D1
:103120009127A227B3278093B1019093B201A09376
:10313000B301B093B4011F910F910C9499130895AA
:10314000CF92DF92EF92FF920F931F93CF93DF9373
:103150008C01C090B501D090B601E090B701F0901D
:10316000B8014091B1015091B2016091B3017091E9
:10317000B401C42AD52AE62AF72ACFE1D0E0D70144
:10318000C6010C2E04C0B695A795979587950A940D
:10319000D2F780FF07C0B8018C2F0E94FA0581305A
:1031A000910531F4219758F7B80180E00E94FA05A3
:1031B000DF91CF911F910F91FF90EF90DF90CF9013
:1031C000089590910C01992321F090910D01911196
:1031D00009C020910E0130910F01F90132969FEF45
:1031E00040E01FC0982F9695969596959F3050F584
:1031F000E0910E01F0910F01E90FF11D877021E0C0
:1032000030E0A90102C0440F551F8A95E2F7CA01B8
:103210009181892B818308959F3F39F04F5F4E3014
:1032200041F051915813F8CF0DC05111F7CF942FA1
:10323000F5CF9F3F39F0F901E90FF11D97FDFA95A0
:1032400082830895089590910C01992321F0909123
:103250000D01911109C020910E0130910F01F9016A
:103260003296205F3F4F1FC0982F96959695969562
:103270009F30F0F4E0910E01F0910F01E90FF11D84
:10328000877021E030E0A90102C0440F551F8A95E4
:10329000E2F7CA018095918189238183089531964F
:1032A000E217F30729F090819813F9CF1082F7CF36
:1032B000089581E090E0E0910E01F0910F01E80F98
:1032C000F91F1082019680319105A9F70895909118
:1032D000CB01892B8093CB01089580959091CB01F0
:1032E00089238093CB0108951092CB01089590918A
:1032F000CA01892B8093CA01089580959091CA01D3
:1033000089238093CA0108951092CA010895809379
:10331000B90108951092B901089580910E0190911C
:103320000F01FC0131969C01205F3F4F80E091919D
:1033300091118F5FE217F307D1F70895E0910E0125
:10334000F0910F018091CB018083E0910E01F0910B
:103350000F0190818091CA01892B80838091B901EE
:10336000882361F0E0910E01F0910F019081892B8B
:1033700080830E948D1981111092B90180910E01F4
:1033800090910F010C94410ECF92DF92EF92FF9239
:103390006C01EE24FF24C114D104E104F10421F0F6
:1033A000C701B60120E101C020E0C72ED82EE92ECA
:1033B000FF24C114D104E104F10419F0285FC7010E
:1033C000B6016B017C0154E0F694E794D794C7945E
:1033D0005A95D1F7C114D104E104F10419F02C5F1E
:1033E000C701B6016B017C0142E0F694E794D794E3
:1033F000C7944A95D1F7C114D104E104F10419F03E
:103400002E5FC701B601DC01CB01B695A795979554
:103410008795892B8A2B8B2B09F02F5F822FFF90AA
:10342000EF90DF90CF9008958091E501843009F10D
:103430001092CD0120E488E190E00FB6F894A895B1
:10344000809360000FBE2093600083B7817F84600B
:1034500083BF83B7816083BF7894889583B78E7F5D
:1034600083BF88E10FB6F8948093600010926000EB
:103470000FBE089508950895CF930E943A1A0E94AE
:1034800023040E943B1AC0E08C2F0E941105811179
:1034900004C0CF5FCE30C1F701C081E0CF91089565
:1034A0000E94AB130E94350E0C942E0782E084BD5F
:1034B00093E095BD9AEF97BD80936E0008952FB766
:1034C000F8948091CE019091CF01A091D001B0915C
:1034D000D1012FBF0895CF92DF92EF92FF920F9309
:1034E0001F932FB7F8944091CE015091CF01609176
:1034F000D0017091D1012FBF6A017B01EE24FF241E
:103500008C0120E030E0C016D106E206F30610F48C
:10351000415051099A01281B390BC9011F910F9184
:10352000FF90EF90DF90CF9008951F920F920FB60B
:103530000F9211248F939F93AF93BF938091CE01ED
:103540009091CF01A091D001B091D1010196A11D20
:10355000B11D8093CE019093CF01A093D001B09381
:10356000D101BF91AF919F918F910F900FBE0F909E
:103570001F9018950E94320BF8942FEF87EA91E67E
:10358000215080409040E1F700C0000087E090EBC0
:10359000DC018093EE019093EF01A093F001B093D2
:1035A000F1019CE088E10FB6F894A8958093600043
:1035B0000FBE90936000FFCFEF92FF920F931F9387
:1035C000CF93DF93D82FC0E08C2F0E94110500E02D
:1035D00010E0E82EF12CC701002E02C095958795CA
:1035E0000A94E2F780FD06C00F5F1F4F06301105F9
:1035F00091F709C0602F7C2F80E00E94D805D81376
:10360000F3CF81E004C0CF5FCE30F1F680E0DF91F0
:10361000CF911F910F91FF90EF900895CF93C82FF6
:103620008CE20E94DC1A882321F08C2FCF910C941D
:10363000DC1A80E0CF910895CF930E94631C811122
:1036400002C00E94491CC5E6C15049F00E942304F3
:103650008FE39CE90197F1F700C00000F5CF89E204
:103660000E940E1B811113C18AE20E940E1B811160
:103670000E94491C85E00E940E1B81110E94BA1A0B
:103680000E946E1C8093CC0187E00E940E1B882351
:10369000A9F18BE10E940E1B882351F08091CC018F
:1036A00081FB222720F991E0922790FB81F90EC03F
:1036B0008EE00E940E1B882361F08091CC0182FB7A
:1036C000222720F991E0922790FB82F98093CC0188
:1036D00015C080E10E940E1B9091CC01882341F01F
:1036E00093FB222720F981E0822780FB93F904C015
:1036F000892F809580FB90F99093CC018091CC012B
:103700000E94721C0E94801C8093DF0180EE0E9448
:103710000E1B882341F08091DF01982F909590FB3C
:1037200080F98093DF0189E30E940E1B882359F002
:103730008091DF0181FB222720F991E0922790FB05
:1037400081F98093DF0182EE0E940E1B882359F0DD
:103750008091DF0182FB222720F991E0922790FBE4
:1037600082F98093DF0186EE0E940E1B882359F0B8
:103770008091DF0183FB222720F991E0922790FBC3
:1037800083F98093DF0183EE0E940E1B882359F09A
:103790008091DF0184FB222720F991E0922790FBA2
:1037A00084F98093DF0185E30E940E1B882359F082
:1037B0008091DF0185FB222720F991E0922790FB81
:1037C00085F98093DF0181E30E940E1B882359F065
:1037D0008091DF0186FB222720F991E0922790FB60
:1037E00086F98093DF0181E10E940E1B882359F046
:1037F0008091DF0187FB222720F991E0922790FB3F
:1038000087F98093DF018091DF010E94841C809101
:10381000DF0187FB882780F980930D0187E20E94F2
:103820000E1BC82F8EE10E940E1B8111C2608FE11A
:103830000E940E1B8111C46080E20E940E1B811148
:10384000C86081E20E940E1B8111C06182E20E9469
:103850000E1B8111C06283E20E940E1B8111C064A5
:1038600084E20E940E1B882311F0C06802C0CC23A2
:1038700029F08C2F0E947B1C6C2F03C00E94771CA8
:10388000682F70E080E090E0CF910C946717CF91A3
:1038900008956DEE7EEF80E090E00E94AF2260E040
:1038A00082E090E00E94A12260E083E090E00E942C
:1038B000A12260E084E090E00E94A12260E085E027
:1038C00090E00C94A12280E090E00E949B2221E0F5
:1038D0008D3E9E4F09F020E0822F089582E090E017
:1038E0000C949322682F82E090E00C94A12283E054
:1038F00090E00C949322682F83E090E00C94A12236
:1039000084E090E00C949322682F84E090E00C9483
:10391000A1228091D40180FF0BC06091130185E04A
:10392000689FB001112475956795759567952BC0B3
:1039300081FF09C06091130185E0689FB0011124E7
:103940007595679520C082FF07C06091130185E0DF
:10395000689FB001112417C09091D5019923D1F02F
:1039600060911201961788F72091130185E0289F36
:1039700090011124929FA001939F500D112470E09B
:10398000CA010E9465226038710540F46115710515
:1039900039F002C065E070E0862F08958FE7089542
:1039A00081E008958091D40180FF08C060911101E9
:1039B00070E0759567957595679521C081FF06C084
:1039C0006091110170E07595679519C082FF04C080
:1039D0006091110170E010C09091D5019923C1F060
:1039E000609110019617A0F780911101899FC00185
:1039F000112470E00E9465226038710528F4611579
:103A0000710521F0862F08958FE7089581E00895CC
:103A100061E070E0F4CF803F21F40E94891C819521
:103A200004C0813F29F40E94891C8093D801089525
:103A3000823F21F40E94891C819504C0833F29F4B0
:103A40000E94891C8093D7010895893F19F40E9430
:103A5000D21C05C08A3F31F40E94D21C819580930C
:103A6000D90108958B3F21F40E94D21C819504C096
:103A70008C3F29F40E94D21C8093DA010895843F80
:103A800021F48091D601816017C0853F21F4809197
:103A9000D601826011C0863F21F48091D6018460F6
:103AA0000BC0873F21F48091D601886005C0883F14
:103AB00031F48091D60180618093D60108958D3FC5
:103AC00021F48091D40181600BC08E3F21F480915C
:103AD000D401826005C08F3F29F48091D4018460B5
:103AE0008093D4010895803F39F48091D80187FFF5
:103AF0006CC01092D80169C0813F29F48091D8012F
:103B00001816BCF362C09091D701823F29F497FF49
:103B10005CC01092D70159C0833F19F41916CCF339
:103B200054C0893F41F48091D90118160CF04DC062
:103B30001092D9014AC08A3F29F48091D90187FFA8
:103B400044C0F6CF8B3F39F48091DA0187FF3DC046
:103B50001092DA013AC08C3F29F48091DA011816EC
:103B6000BCF333C0843F21F48091D6018E7F17C00F
:103B7000853F21F48091D6018D7F11C0863F21F4CD
:103B80008091D6018B7F0BC0873F21F48091D601B5
:103B9000877F05C0883F31F48091D6018F7E809366
:103BA000D60113C08D3F21F48091D4018E7F0BC0CC
:103BB0008E3F21F48091D4018D7F05C08F3F29F481
:103BC0008091D4018B7F8093D4018091D7018111A2
:103BD0000EC08091D80181110AC08091D901811154
:103BE00006C08091DA01811102C01092D5010895BA
:103BF00086ED91E00E944C0E0E945F1A9093D301D3
:103C00008093D20108951F93CF93DF938091D201C7
:103C10009091D3010E946B1AAC019091D501992328
:103C200021F02091140130E006C0209115018AE0B6
:103C3000289F900111244217530708F486C08091F1
:103C4000D701C091D801D091D9011091DA01811129
:103C500007C0C11176C0D11174C0111172C075C0F6
:103C60009F3F19F09F5F9093D501181624F40E948E
:103C7000891C8093D7018091D70187FF05C00E94DE
:103C8000891C81958093D7011C1624F40E94891CFD
:103C90008093D8018091D80187FF05C00E94891CBC
:103CA00081958093D8016091D701662339F1C09145
:103CB000D801CC2319F1772767FD7095872F972FAF
:103CC0000E94762123E333E343E35FE30E94DA219A
:103CD0000E9443216093D7016C2F772767FD709571
:103CE000872F972F0E94762123E333E343E35FE39B
:103CF0000E94DA210E9443216093D8011D1624F40A
:103D00000E94D21C8093D9018091D90187FF05C000
:103D10000E94D21C81958093D901111624F40E942F
:103D2000D21C8093DA018091DA0187FF05C00E94DE
:103D3000D21C81958093DA01DF91CF911F910C9471
:103D4000F81D9F3F09F08ECF96CFDF91CF911F9145
:103D50000895E6EDF1E085E0DF011D928A95E9F72F
:103D60001092D5011092D4010895833081F128F486
:103D7000813059F08230D1F00895853009F449C07E
:103D8000B8F1863009F456C0089580911501262FA8
:103D900030E0280F311D2F3F310524F4680F609368
:103DA000150108958FEF80931501089580911401F6
:103DB000262F30E0280F311D2F3F310524F4680FE6
:103DC0006093140108958FEF8093140108958091FA
:103DD0001301262F30E0280F311D2F3F310524F429
:103DE000680F6093130108958FEF80931301089576
:103DF00080911201262F30E0280F311D2F3F310511
:103E000024F4680F6093120108958FEF80931201DC
:103E1000089580911101262F30E0280F311D2F3F8A
:103E2000310524F4680F6093110108958FEF80939A
:103E30001101089580911001262F30E0280F311DC7
:103E40002F3F310524F4680F6093100108958FEF20
:103E5000809310010895833011F128F4813049F0E6
:103E6000823091F00895853081F120F18630C1F1E2
:103E7000089580911501681720F4861B8093150121
:103E8000089510921501089580911401681720F487
:103E9000861B809314010895109214010895809157
:103EA0001301681720F4861B809313010895109264
:103EB0001301089580911201681720F4861B8093E6
:103EC000120108951092120108958091110168174E
:103ED00020F4861B8093110108951092110108951A
:103EE00080911001681720F4861B809310010895BB
:103EF0001092100108950F931F938D3109F46BC038
:103F000008F03FC08E3009F47DC0C0F4873009F45A
:103F10006EC068F4863009F0AFC08091CC01817F1B
:103F20008E7F8093CC0181E08093DC01A6C0883035
:103F300009F458C08B3009F49BC09EC0863109F447
:103F400097C078F4803109F470C0813109F094C0D1
:103F50000E94AB1390910D0181E0892780930D01A0
:103F600087C0893109F484C08B3109F085C0809104
:103F7000CC0181FB222720F991E0922790FB81F967
:103F80004AC0853309F45BC048F4873209F457C04E
:103F900008F45AC0893209F452C06EC0833438F430
:103FA0008A3308F067C0883309F462C065C083347F
:103FB00009F445C0883409F05FC00E94AB130FEFCD
:103FC00013ED20E3015010402040E1F700C0000055
:103FD0000E94BA1A4DC00E94FD200E94350E0E9418
:103FE0002E0746C00E946E1C0E94801C41C090910A
:103FF000CC01892F817090FF12C0917F9E7F90939A
:10400000CC013BC08091CC0182FB222720F991E0BA
:10401000922790FB82F98093CC01992349F18091FA
:10402000CC0181608093CC0123C08091CC0183FBC3
:10403000222720F991E0922790FB83F9ECCF61E0F1
:1040400070E080E090E010C08D5141E050E060E011
:1040500070E08A019B0104C0000F111F221F331F53
:104060008A95D2F7C901B8010E9467170E94AB1365
:1040700081E003C08953E9CF80E01F910F9108953B
:1040800080E0089580E00895CF93C82F8091DC01EF
:10409000813079F018F08230E9F187C0E0910E01AB
:1040A000F0910F018081813169F0823209F07FC087
:1040B00009C0E0910E01F0910F018081813111F072
:1040C000823261F48C2F0E944020811104C08C2F19
:1040D0000E947B1F1DC081E090E01AC08C2F0E94BF
:1040E0004220811114C0C43179F048F4CB3079F00A
:1040F000C03109F060C082E08093DC0108C0C932A1
:1041000019F0C83321F057C01092DC0154C081E08F
:10411000817053C0C93289F118F5C43171F1A8F426
:10412000C73009F046C08AE08093150194E190936E
:10413000140193E0909313018093120188E080931F
:10414000110188E28093100134C0CE51C63088F549
:10415000EC2FF0E0E65DFE4F80818093DB0129C00B
:10416000CE34E9F020F4CB3421F56AE013C0C13538
:1041700079F0C235F1F461E00DC08091DB01882354
:1041800019F01092DB0115C081E08093DC0115C0AD
:1041900061E006C08091DB010E94B51E0AC06AE0A2
:1041A0008091DB010E942B1F04C01092DC0180E093
:1041B00004C081E002C080E0ABCFCF910895E1E878
:1041C000F0E08081886080838081816080838FB708
:1041D000F89493E09093890090ED909388008FBFBE
:1041E0000895EFE6F0E08081826080830895EFE635
:1041F000F0E080818D7F80830895EFE6F0E090818C
:1042000082E08927808308951F920F920FB60F9244
:1042100011242F933F934F935F936F937F938F93CB
:104220009F93AF93BF93EF93FF938091DD019091A4
:10423000DE0101969093DE018093DD01811103C0C0
:1042400082E00E942E07E091DE01E695E695F0E01F
:10425000E657FB4FE4918091DD018E1303C080E0AF
:104260000E942E07FF91EF91BF91AF919F918F9187
:104270007F916F915F914F913F912F910F900FBE62
:104280000F901F90189504D06894B1118DC00895B7
:1042900070D088F09F5790F0B92F9927B751A0F0B0
:1042A000D1F0660F771F881F991F1AF0BA95C9F7CA
:1042B00012C0B13081F077D0B1E0089574C0672F9B
:1042C000782F8827B85F39F0B93FCCF3869577957A
:1042D0006795B395D9F73EF4909580957095619563
:1042E0007F4F8F4F9F4F0895E89409C097FB3EF48E
:1042F00090958095709561957F4F8F4F9F4F992333
:10430000A9F0F92F96E9BB279395F69587957795B0
:104310006795B795F111F8CFFAF4BB0F11F460FF70
:104320001BC06F5F7F4F8F4F9F4F16C0882311F0C8
:1043300096E911C0772321F09EE8872F762F05C0DC
:10434000662371F096E8862F70E060E02AF09A9577
:10435000660F771F881FDAF7880F9695879597F96C
:10436000089557FD9058440F551F59F05F3F71F065
:104370004795880F97FB991F61F09F3F79F08795CC
:104380000895121613061406551FF2CF4695F1DF55
:1043900008C0161617061806991FF1CF86957105E5
:1043A000610508940895E894BB2766277727CB0119
:1043B00097F908950BD078C069D028F06ED018F026
:1043C000952309F05AC05FC01124EECFCADFA0F3D5
:1043D000959FD1F3950F50E0551F629FF001729F9A
:1043E000BB27F00DB11D639FAA27F00DB11DAA1FB9
:1043F000649F6627B00DA11D661F829F2227B00D06
:10440000A11D621F739FB00DA11D621F839FA00D90
:10441000611D221F749F3327A00D611D231F849FE0
:10442000600D211D822F762F6A2F11249F57504037
:104430008AF0E1F088234AF0EE0FFF1FBB1F661FD2
:10444000771F881F91505040A9F79E3F510570F08B
:1044500014C0AACF5F3FECF3983EDCF386957795C6
:104460006795B795F795E7959F5FC1F7FE2B880F86
:10447000911D9695879597F9089597F99F6780E81C
:1044800070E060E008959FEF80EC089500240A94A6
:104490001616170618060906089500240A9412161F
:1044A0001306140605060895092E0394000C11F452
:1044B000882352F0BB0F40F4BF2B11F460FF04C0FF
:1044C0006F5F7F4F8F4F9F4F089597FB072E16F416
:1044D000009407D077FD09D00E947F2207FC05D009
:1044E0003EF4909581959F4F0895709561957F4F0B
:1044F0000895EE0FFF1F0590F491E02D0994AA1B7B
:10450000BB1B51E107C0AA1FBB1FA617B70710F0BE
:10451000A61BB70B881F991F5A95A9F780959095F0
:10452000BC01CD010895F999FECF92BD81BDF89AE5
:10453000992780B50895A8E1B0E042E050E00C94DE
:10454000B622262FF999FECF1FBA92BD81BD20BD9C
:104550000FB6F894FA9AF99A0FBE019608950E9440
:10456000A122272F0C94A222DC01CB01FC01F99996
:10457000FECF06C0F2BDE1BDF89A319600B40D92AF
:0C45800041505040B8F70895F894FFCF68
:10458C0020023007BE079B07670733070101BA01FA
:10459C0028080A03140A3F4D36394B04FE03C8039E
:1045AC008F0322033B0354036D030102030405062E
:0445BC0007080900E3
:00000001FF

@ -0,0 +1,32 @@
# MSC Configuration
### Based mostly on the ErgoDox EZ default layout with optimizations for coding on osx.
#### Expecting the user to rely on Coder Layer this keymap removes some of the duplicate symbol keys in the lower portions of the board and replaces them with arrow keys and modifiers. The Media Layer is also updated to match the change in the arrow keys and the left and right click buttons are moved under the thumb position. The Media layer is now reached with toggle button in the lower right.
### Main Layer
![Main Layer](img/main_layer.png)
### Code Layer
![Code Layer](img/code_layer.png)
### Media Layer
![Media Layer](img/media_layer.png)
## Changelog
Version 1.0
- Changed the temp code layer key in the bottom right to toggle media layer
- Changed the temp media key to only be ";"
- Changed right hand bottom row to match vim home row nav directions
- Changed media keys to match arrow key changes
- Changed media left and right click to spacebar and backspace locations
- Changed bottom left to Cmd
- Changed single quote on left bottom row to alt
#### Coming Soon:
- A new layer for Blender editing with a focus on left hand shortcut and a righthand num pad to control the view in Blender.

@ -0,0 +1,29 @@
# ErgoDox EZ naps62 Configuration
## Motivation
I wanted a layout that suited my Linux & Vim usage. I also didn't like the lack of efficient access to some of the more common special characters used in programming.
## Key features / changes
### Base Layer (L1)
* **No `MT(mod, kc)` keys (modifier when pressed, key when tapped).** Those keys work with a global timeout. When a key press is shorter than the timeout, it's considered a tap, otherwise it's a hold. I couldn't find any particular timeout that would work for me. I need to use mods extremely fast, but also want the confort of using them more slowly in other occasions. So I gave up on this feature altogether.
* **Direct access to `{}[]`.** When programming, these are used extremely often. I was still getting used to the coder layer, and I prefer the arrows on the home row, so I used the bottom-right keys for this.
* **Layer keys everywhere.** I either use my little finger or my index finger to go to L1, whichever is more confortable in any given situation. L2 is not used while coding/writing, so I don't need an extremely-optimized access to it.
* **Lang key.** This is nothing more than `Super-Space` combo, which in my systems (both Linux & Windows) is the shortcut to change the keyboard language. I'm Portuguese, so I often cycle between US layout for coding, and PT layout for writing.
* **Special chars on the right-most column.** I only use Ctrl & Shift keys on the left side, so I used the right keys to include some of the more useful special characters as well.
### Coder Layer (L2)
* The `=` and `-` signs where nowhere to be found. `-` was already on the base layer, but it's still useful to have a fully-featured NumPad on the coder layer.
### Media Layer (L3)
* **Better media keys**. Why was Play/Pause so far away? And where was Mute? I put all my media keys close to each other, including the missing ones
* **Arrow keys on home row.** I use vim, so I'm always on my home row. I use this sometimes to get around, but not as often as to need them on the base row. I'm fine with them here
* I don't use mouse keys. They're still set up, and I made some changes as an experiment, but I mostly forgot they exist by now.
## Author
[Miguel Palhas](https://github.com/naps62)

@ -0,0 +1,1474 @@
:100000000C9402070C9449070C9449070C94490777
:100010000C9449070C9449070C9449070C94490720
:100020000C9449070C9449070C9472120C944413D5
:100030000C9449070C9449070C9449070C94490700
:100040000C9449070C94082C0C9449070C9449070C
:100050000C9449070C9401220C9449070C9449070D
:100060000C9449070C9449070C9449070C944907D0
:100070000C9449070C9449070C9449070C944907C0
:100080000C9449070C9449070C9449070C944907B0
:100090000C9449070C9449070C9449070C944907A0
:1000A0000C9449070C9449070C944907B113D313D6
:1000B000C614D313C61418143B14C6149014A314F6
:1000C000F117F1172018201863189D18AA1AAA1AF8
:1000D000B618AA1AAB19AB197E1AAA1AAA1A951A37
:1000E0000000F0A12D002B002971E100C1000000EB
:1000F0001E00140004001D003500E2001F001A005D
:1001000016001B003400E000200008000700060075
:1001100050002C0021001500090019004F82E30057
:10012000220017000A00050000004A812C08015433
:100130000000007F00004D8249000254000000775B
:1001400000004B8223001C000B00110000004E81B8
:10015000240018000D0010002F024C0025000C0098
:100160000E00360030022C00260012000F0037006F
:100170002F002800270013003300380030002A0029
:100180002D00310034712D72C1000000010001000A
:1001900001000100010000003A001E0220022202BC
:1001A000010001003B001F022102230201000100A7
:1001B0003C002F0226022F00010001003D0030020A
:1001C00027023000010001003E00310235003502F7
:1001D000000001000100010000000100000001001A
:1001E0000100010000000100000001003F0052007A
:1001F00051002402000001004000240021001E00E4
:100200002E0001004100250022001F0037000100E0
:1002100042002600230020002700010043002502A1
:100220002E0231002D0001004400450001000100B4
:100230000100000000500100010001000100000069
:1002400001000100040801000100010001001A087A
:10025000160801000100F500010008080708010068
:100260000100F4000100F400F100010001000100B0
:1002700001001708F3000100000001000100010067
:100280000000010000000100010001000000010069
:100290000000010001000100F20001000000010067
:1002A0000100F400F100AA00AE0001000100F50019
:1002B000F000A900AC00B70001000100F300A800A5
:1002C000AB00B600010001000100010001000100C7
:1002D0000100010001000100010000000A002530BA
:1002E000313662003A200025303258000A722F63FE
:1002F0002030313233343536373839414243444582
:10030000460A000A002530325800626F756E636538
:10031000213A20006C6566742073696465206174FD
:100320007461636865640A006C656674207369644F
:1003300065206E6F7420726573706F6E64696E678E
:100340000A00747279696E6720746F207265736534
:1003500074206D637032333031380A000A444542EC
:1003600055473A20656E61626C65642E0A005B73C6
:100370005D004B6579626F617264207374617274A1
:100380002E0A005B575D005B535D005B525D005BB6
:10039000445D005B435D0016034500720067006F1B
:1003A0000044006F007800200045005A000000164D
:1003B000034500720067006F0044006F0078002062
:1003C0000045005A0000000403090409028D0005DD
:1003D0000100A0FA09040000010301010009211134
:1003E000010001223F000705810308000A090401FA
:1003F000000103010200092111010001224D000743
:1004000005820308000A0904020001030000000934
:1004100021110100012236000705830308000A09A3
:100420000403000203000000092111010001222041
:1004300000070584032000010705040320000109CB
:100440000404000103000000092111010001223908
:1004500000070585031000011201100100000008CB
:10046000EDFE071301000102000105010906A101CB
:10047000050719E029E71500250195087501810296
:100480000508190129059505750191029501750366
:100490009101050719002977150025019578750147
:1004A0008102C00631FF0974A1010975150025FFFD
:1004B0009520750881020976150025FF952075089D
:1004C0009102C005010980A101850216010026B72D
:1004D000001A01002AB700751095018100C0050CB3
:1004E0000901A1018503160100269C021A01002AB8
:1004F0009C02751095018100C005010902A1010946
:1005000001A10005091901290515002501950575A9
:100510000181029501750381010501093009311539
:1005200081257F95027508810609381581257F95FB
:100530000175088106050C0A38021581257F950191
:1005400075088106C0C005010906A101050719E06B
:1005500029E71500250195087501810295017508A7
:10056000810105081901290595057501910295017B
:10057000750391010507190029FF150025FF950650
:1005800075088100C00A002530325820006B65795B
:10059000626F6172645F7265706F72743A20000AF4
:1005A0000025303258006B6579626F6172645F7349
:1005B00065745F6C65643A200064656C5F6B657997
:1005C0005F6269743A2063616E27742064656C3AD7
:1005D00020253032580A006164645F6B65795F6280
:1005E00069743A2063616E2774206164643A20253F
:1005F0003032580A00646F6E652E0A00626F6F67B2
:100600006D61676963207363616E3A202E2E2E2020
:1006100000290A002575002F002575005D2800259A
:10062000640020002564002000256400200025646B
:10063000007C0025303258006D6F7573656B6579ED
:10064000205B62746E7C782079207620685D287249
:1006500065702F61636C293A205B006D6B5F776872
:1006600065656C5F74696D655F746F5F6D6178203F
:100670003D2025640A006D6B5F776865656C5F6D72
:1006800061785F7370656564203D2025640A006DA4
:100690006B5F74696D655F746F5F6D6178203D207D
:1006A00025640A006D6B5F6D61785F7370656564CA
:1006B000203D2025640A006D6B5F696E746572765B
:1006C000616C203D2025640A006D6B5F64656C6180
:1006D00079203D2025640A006D6B5F776865656C45
:1006E0005F74696D655F746F5F6D6178203D202573
:1006F000640A006D6B5F776865656C5F6D61785F3C
:100700007370656564203D2025640A006D6B5F741D
:10071000696D655F746F5F6D6178203D2025640AA7
:10072000006D6B5F6D61785F7370656564203D205F
:1007300025640A006D6B5F696E74657276616C206A
:100740003D2025640A006D6B5F64656C6179203D16
:100750002025640A000A00257500363A207768656E
:10076000656C5F74696D655F746F5F6D61783A2069
:10077000000A00257500353A20776865656C5F6D65
:1007800061785F73706565643A20000A0025750022
:10079000343A2074696D655F746F5F6D61783A20DB
:1007A000000A00257500333A206D61785F7370652B
:1007B00065643A20000A00257500323A20696E749B
:1007C000657276616C286D73293A20000A002575E0
:1007D00000313A2064656C6179282A31306D7329C3
:1007E0003A20000A092D2056616C756573202D0A88
:1007F000004D3E004D25643E20003F00736574208F
:1008000064656661756C740A00433E200077686514
:1008100072652064656C74613A20637572736F72DF
:100820003D25642C20776865656C3D25640A536519
:100830006520687474703A2F2F656E2E77696B6926
:1008400070656469612E6F72672F77696B692F4DD0
:100850006F7573655F6B6579730A000A092D204D0A
:100860006F7573656B6579202D0A4553432F713A77
:1008700009717569740A313A0964656C6179282ACD
:1008800031306D73290A323A09696E746572766186
:100890006C286D73290A333A096D61785F7370654E
:1008A00065640A343A0974696D655F746F5F6D61E0
:1008B000780A353A09776865656C5F6D61785F73B2
:1008C000706565640A363A09776865656C5F7469B6
:1008D0006D655F746F5F6D61780A0A703A097072B6
:1008E000696E742076616C7565730A643A09736584
:1008F000742064656661756C74730A75703A092BAF
:10090000310A646F776E3A092D310A706775703A53
:10091000092B31300A7067646F776E3A092D3130D8
:100920000A0A7370656564203D2064656C746120FB
:100930002A206D61785F7370656564202A202872B3
:100940006570656174202F2074696D655F746F5FD9
:100950006D6178290A003F004D3E2000433E200093
:100960004C25640A000A092D20436F6E736F6C6575
:10097000202D0A4553432F713A09717569740A6D28
:100980003A096D6F7573656B65790A000A092D2048
:100990004D61676963202D0A643A09646562756771
:1009A0000A783A096465627567206D6174726978C6
:1009B0000A6B3A096465627567206B6579626F61DD
:1009C00072640A6D3A096465627567206D6F7573AC
:1009D000650A763A0976657273696F6E0A733A0929
:1009E0007374617475730A633A09636F6E736F6C25
:1009F00065206D6F64650A302D343A096C61796544
:100A000072302D34284631302D4634290A50617514
:100A1000733A09626F6F746C6F616465720A653A4C
:100A200009656570726F6D0A6E3A094E4B524F0A36
:100A30007A3A09736C656570204C4544207465737F
:100A4000740A000A002575002E6E6B726F3A200042
:100A50000A002575002E737761705F6261636B73A6
:100A60006C6173685F6261636B73706163653A2088
:100A7000000A002575002E737761705F67726176DA
:100A8000655F6573633A20000A002575002E6E6F5E
:100A90005F6775693A20000A002575002E7377613B
:100AA000705F72616C745F726775693A20000A004A
:100AB0002575002E737761705F6C616C745F6C6775
:100AC00075693A20000A002575002E636170736C09
:100AD0006F636B5F746F5F636F6E74726F6C3A20DD
:100AE000000A002575002E737761705F636F6E7466
:100AF000726F6C5F636170736C6F636B3A20000A96
:100B00000025303258006B65796D61705F636F6EE0
:100B10006669672E7261773A20000A002575002EFB
:100B20006D6F7573653A20000A002575002E6B65A0
:100B300079626F6172643A20000A002575002E6D9B
:100B400061747269783A20000A002575002E656E7E
:100B500061626C653A20000A0025303258006465F5
:100B60006275675F636F6E6669672E7261773A20A0
:100B7000000A0025750064656661756C745F6C61C0
:100B80007965723A20003F004E4B524F3A206F6613
:100B9000660A004E4B524F3A206F6E0A0074696D20
:100BA00065725F636F756E743A202530346C580A35
:100BB000006B6579626F6172645F6E6B726F3A2071
:100BC00025580A006B6579626F6172645F69646CB5
:100BD000653A2025580A006B6579626F6172645F1F
:100BE00070726F746F636F6C3A2025580A00686FDB
:100BF00073745F6B6579626F6172645F6C65647357
:100C000028293A2025580A000A092D2053746174B6
:100C10007573202D0A004743433A20352E332E307A
:100C2000204156522D4C4942433A20312E382E3124
:100C300073766E204156525F415243483A206176A6
:100C400072350A004F5054494F4E533A204C554686
:100C50004120424F4F544D41474943204D4F55533A
:100C6000454B45592045585452414B455920434F17
:100C70004E534F4C4520434F4D4D414E44204E4B1B
:100C8000524F203531320A004255494C443A203601
:100C9000386366663764202832323A33323A303568
:100CA000204A616E2033302032303136290A005616
:100CB00049443A20307846454544284572676F4498
:100CC0006F7820455A29205049443A2030783133F2
:100CD0003037284572676F446F7820455A2920566F
:100CE00045523A203078303030310A004445534381
:100CF0003A20742E6D2E6B2E206B6579626F6172B7
:100D000064206669726D7761726520666F72204536
:100D100072676F646F780A000A092D205665727336
:100D2000696F6E202D0A000A6D6F7573653A206F2A
:100D300066660A000A6D6F7573653A206F6E0A0069
:100D40000A6B6579626F6172643A206F66660A00A9
:100D50000A6B6579626F6172643A206F6E0A000AED
:100D60006D61747269783A206F66660A000A6D6177
:100D7000747269783A206F6E0A000A64656275675A
:100D80003A206F6E0A000A64656275673A206F66E2
:100D9000660A000A0A626F6F746C6F616465722E76
:100DA0002E2E2000433E20006565636F6E666967E6
:100DB0003A0A00536C656570204C45442074657395
:100DC000740A0000000000000000000000000102A2
:100DD00004060A0F17202C3A4A5D71879DB3C7DAC3
:100DE000E9F5FCFFFCF5E9DAC7B39D87715D4A3A86
:100DF0002C20170F0A06040201000000000000006A
:100E00000000000011241FBECFEFDAE0DEBFCDBF2F
:100E100004B603FE27C08091F8019091F901A091DA
:100E2000FA01B091FB018730904BA740B04BD1F451
:100E30001092F8011092F9011092FA011092FB0140
:100E400014BE84B7877F84BF0FB6F894A8958091AD
:100E50006000886180936000109260000FBEE0E047
:100E6000FFE3099511E0A0E0B1E0EAECFBE502C088
:100E700005900D92AA33B107D9F721E0AAE3B1E0BA
:100E800001C01D92A83FB207E1F70E94AD0F0C947C
:100E9000E32D0C940000FF93EF93E0913A01F09161
:100EA0003B01309709F00995EF91FF910895FC01FE
:100EB0008591803011F0EFDFFBCF0895FF27E0E24E
:100EC00030E247FF0CC0419597FF09C0EDE2609505
:100ED000709580959095611D711D811D911D27FF55
:100EE00002C0219530E350E2AA27660F771F881FC2
:100EF000991FAA1FA41710F0A41B63955A95A9F770
:100F0000AA3008F0A95FA05DAF93F3956115710554
:100F10008105910541F7ED3211F4EF93F395F21746
:100F200018F43F93F395FBCF8F91B5DFFA95E1F776
:100F30000895E991F9918591803021F0853219F079
:100F4000AADFF9CF089520E0E89455915532C1F316
:100F5000503311F4689455915A3348F4505390F338
:100F6000220F022E220F220F200D250FF4CF0EF498
:100F7000219589919991533619F3533729F15335B6
:100F800059F1BC0188279927E8945C3621F48991AE
:100F9000999168945591543639F446EF7EF077FF75
:100FA0000DC08FEF9FEF0AC055374AE039F0583532
:100FB00040E121F0523642E009F00895FF93EF93AB
:100FC0007DDFEF91FF91B7CFFF93EF93FC0181910C
:100FD0008030B9F360DFFBCFFF93EF9368DFF1CF91
:100FE000DF93CF93CDB7DEB72596A3DFCF91DF9107
:100FF000089561110BC0FC018281882321F085EEE8
:101000000E948B1603C085EE0E94531780E090E08B
:10101000089508956091BC017091BD018091BE0159
:101020009091BF010E94022156985E9825982D98B4
:1010300026982E9827982F98813019F0823021F029
:101040000895259A2D9A0895269A2E9A08958AE051
:1010500098E0892B11F00E940A0880E090E0089542
:1010600056985E9825982D9826982E9827982F9810
:101070008FEF90E0909389008093880090938B008D
:1010800080938A0090938D0080938C00259A2D9AEE
:101090002FEF80E792E0215080409040E1F700C0C0
:1010A0000000269A2E9A2FEF80E792E02150804090
:1010B0009040E1F700C00000279A2F9A2FEF80E7B9
:1010C00092E0215080409040E1F700C00000259858
:1010D0002D982FEF80E792E0215080409040E1F77B
:1010E00000C0000026982E982FEF80E792E0215054
:1010F00080409040E1F700C0000027982F98569854
:101100005E9825982D9826982E9827982F980895C0
:1011100089EA8093800089E08093810024982C984C
:101120003F988AB18F748AB96E98479A8BB1806B59
:101130008BB9769A0E94300889E098E0892B11F0EB
:101140000E94090880E090E0089580E28093000109
:1011500080913C0181110EC00E94F40881E08093CF
:101160003C012FEF83ED90E3215080409040E1F768
:1011700000C0000080E40E94FA0880930001811101
:101180002EC00E94240980930001811128C00E9472
:10119000240980930001811122C08FE30E94240959
:1011A0008093000181111BC00E941C0980E40E94F1
:1011B000FA0880930001811112C08CE00E9424097A
:1011C0008093000181110BC00E94240980930001CB
:1011D000811105C08FE30E942409809300010E94C1
:1011E0001C098091000108951092B9008AE0809353
:1011F000B800089594EA9093BC009091BC0097FFCA
:10120000FCCF9091B900987F983021F0903111F087
:1012100081E008958093BB0084E88093BC008091B6
:10122000BC0087FFFCCF8091B900887F883111F026
:10123000803471F780E0089584E98093BC00809148
:10124000BC0084FDFCCF08958093BB0084E88093AC
:10125000BC008091BC0087FFFCCF9091B900987FC3
:1012600081E0983209F480E0089584E88093BC001E
:101270008091BC0087FFFCCF8091BB0008958091D6
:101280000001811115C080E40E94FA0880930001DA
:1012900081110CC082E10E94240980930001811118
:1012A00005C08FEF0E942409809300010E941C0951
:1012B00084B1807F84B985B1807F85B98AB1837F0D
:1012C0008AB98BB1837F8BB93E98469808950E9466
:1012D000A508809300010E943F0980B38C7080BBF9
:1012E00081B3836F81BBECE4F1E0AEE3B1E0119236
:1012F0001D9281E0EA35F807D1F788E898E0892B5C
:1013000011F00C94880808957F928F929F92AF926B
:10131000BF92CF92DF92EF92FF920F931F93CF93E2
:10132000DF93809100018823E1F080913D018F5F80
:1013300080933D01811115C082E493E00E9457071C
:101340000E94A50880930001882329F088E293E099
:101350000E94570706C084E193E00E9457070E944D
:1013600030088EE3E82E81E0F82E8701C0E0D0E05F
:101370009924939492E0892EAA24A394B12C35E069
:10138000C32E33E0D32EC730D10500F58091000184
:10139000811164C080E40E94FA08809300018111E9
:1013A00012C082E10E9424098093000181110BC0C8
:1013B000C5010C2E01C0880F0A94EAF780950E949F
:1013C0002409809300010E941C0948C0CA30A1F082
:1013D00028F4C83059F0C93061F005C0CC3089F02C
:1013E00070F0CD3089F0209A289810C0219A299861
:1013F0000DC0229A2A980AC0239A2B9807C0529AA5
:1014000001C0539A5B9802C03E9A4698E0EAEA957A
:10141000F1F78FB181708925799902C032E001C05E
:1014200030E0832B7C9902C034E001C030E0832B94
:101430007D9902C028E001C020E0822B7E9902C085
:1014400090E101C090E0892B9FB19095991F992759
:10145000991F9295990F907E892B10C08091000161
:10146000811175C080E40E94FA08809300018823EE
:1014700009F45AC0712C0E941C09872DD8019C9137
:10148000981739F18C9380910101882301F18091A3
:10149000D70180FF04C08AE093E00E945707809143
:1014A000D70180FF0CC0809101011F928F93DF92C2
:1014B000CF920E94F0070F900F900F900F908091A5
:1014C000D70180FF04C083E093E00E945707809219
:1014D00001010E943F0921960F5F1F4FCE30D105B9
:1014E00009F051CF809101018823B9F08150809398
:1014F0000101882339F0EFE9FFE03197F1F700C0EF
:1015000000000BC0ECE4F1E0D7018D917D018193E7
:10151000BCE4EB16B1E0FB06B9F787E298E0892B53
:10152000C1F00E94270815C083E10E94240980931E
:10153000000181119FCF81E40E94FA08809300018D
:10154000811198CF0E943509782E709494CF80E055
:1015500095CF81E0DF91CF911F910F91FF90EF9098
:10156000DF90CF90BF90AF909F908F907F90089525
:10157000E82FF0E0E45BFE4F80810895CF92DF9288
:10158000EF92FF920F931F93CF93DF938CEE92E035
:101590000E9457078CE4E82E81E0F82EC0E0D0E0EE
:1015A00097EEC92E92E0D92E0EED12E0DF93CF9385
:1015B000DF92CF920E94F00784EE92E00E945707DC
:1015C000F70181917F0190E00E9464219F938F93A6
:1015D0001F930F930E94F0078CED92E00E94570733
:1015E00021968DB79EB708960FB6F8949EBF0FBE92
:1015F0008DBFCE30D105D1F6DF91CF911F910F91E4
:10160000FF90EF90DF90CF9008958B3B910580F491
:10161000883A910548F5853A9105D8F484309105CA
:1016200008F0B2C0019709F06EC081E090E0089523
:10163000803E910508F467C0883E910508F4A4C077
:101640009C01205F31092031310508F05CC09065B4
:101650000895853A910509F459C0863A910509F033
:1016600058C082E890E40895883A910509F454C07E
:10167000893A910509F453C08A3A910509F452C098
:101680008B3A910509F451C08C3A910509F450C088
:101690008D3A910509F44FC0803B910509F44EC085
:1016A0008E3A910509F44DC08F3A910509F44CC06A
:1016B000813B910509F44BC0823B910509F44AC076
:1016C000833B910509F449C0843B910509F448C066
:1016D000853B910509F447C0863B910509F446C056
:1016E000873B910509F445C0883B910509F444C046
:1016F000893B910509F443C08A3B910509F442C036
:1017000080E094E4089580E090E0089581E890E41A
:10171000089583E890E4089582EE94E4089589EEB4
:1017200094E408958AEE94E4089585EB94E4089592
:1017300086EB94E4089587EB94E408958CEC94E4AC
:1017400008958DEC94E4089583E895E408958AE87B
:1017500095E4089582E995E4089584E995E408956F
:1017600081E296E4089583E296E4089584E296E4A3
:10177000089585E296E4089586E296E4089587E266
:1017800096E408958AE296E40895089524E5829FF8
:10179000C0011124FC0126E0729FE00DF11D11240F
:1017A000E60FF11DEE0FFF1FEC51FF4F8591949155
:1017B0000895880F991FFC01E05AF040859194919B
:1017C0000895880F991FFC01E052FF4F8591949175
:1017D000089524E5829FC0011124FC0146E0749F16
:1017E000E00DF11D1124E60FF11DEE0FFF1FEC516E
:1017F000FF4F859194919C013A9521154FE1340753
:1018000008F429C13F512115304120F49F700E94F6
:10181000E10B08959C0130532115304118F49927AC
:10182000906C0895811520E5920769F40E94CC1A06
:101830004FEF84E39CE0415080409040E1F700C0CE
:1018400000000C942622813020E5920751F48CE5AB
:1018500093E00E9457078091D70181608093D70160
:1018600008959C0130552115304108F05CC0292FA6
:1018700033272F70332721303105E9F4AC0164E0C0
:10188000440F551F6A95E1F744275370BC016370FC
:10189000772702C0220F331F6A95E2F73C68242B9A
:1018A000352B73E0880F991F7A95E1F78076992799
:1018B000822B932B08952230310529F4982F882705
:1018C000816F906A089523303105A1F4AC0133E0B3
:1018D000440F551F3A95E1F7407E57708370992762
:1018E00021E030E002C0220F331F8A95E2F7C901E0
:1018F0009C6816C02430310531F5AC0123E0440F5B
:10190000551F2A95E1F7407E57708370992721E093
:1019100030E002C0220F331F8A95E2F7C9019A68AE
:10192000842B952B08959C0130572115304118F4D4
:101930009F70906208959C0130582115304118F431
:101940009F70906A0895803E9105E0F4803C910577
:1019500058F58133910509F46FC048F48932910537
:1019600009F463C08A32910509F46DC072C08933ED
:101970009105E9F082389105D1F08533910509F49C
:101980004DC067C0833E910581F138F4803E9105DA
:10199000B9F0823E9105D9F05CC0863E910561F1B7
:1019A000873E9105A1F155C00E94D90B0895209161
:1019B000E90120FD02C021FF4CC080EE90E049C04B
:1019C0008091E90180FFF9CF89E390E042C08091E6
:1019D000E90182FF0EC08091E90184FF03C080E02D
:1019E00090E037C083EE90E034C08091E90182FF3F
:1019F000F2CF82EE90E02DC08091E90183FF0BC011
:101A00008091E90184FDEBCF87EE90E022C08091C8
:101A1000E90183FFF5CF86EE90E01BC08091E901DC
:101A200085FF07C089E290E014C08091E90185FF3D
:101A3000F9CF85E390E00DC08091E90186FF07C0F2
:101A40008AE290E006C08091E90186FFF9CF81E348
:101A500090E00E94050B0895089580916D0108950E
:101A60009FB7F89410925C019FBF9091EF01943062
:101A700009F057C09091E9009F703091EC00232F3E
:101A8000217030FD20E8922B24E02093E900209182
:101A9000EB0020FF43C02091EE0027FF3FC02091C4
:101AA0005A01222321F02091E80025FF37C010922F
:101AB0005A0126E03091E80035FD15C03091EF0164
:101AC000343061F53091EB0035FD28C0215021F410
:101AD00081E080935A0122C0EFE9FFE03197F1F7EE
:101AE00000C00000E7CF8093F1008091E80085FD01
:101AF0000AC08091E80080FFFCCF8091E8008E77DB
:101B00008093E80006C08FB7F89421E020935C0131
:101B10008FBF9F709093E90080E008959F7090932D
:101B2000E9008FEF0895CF93DF9300D01F92CDB7D8
:101B3000DEB79C018091EF01843019F593E0998321
:101B40003B832A839093E9008FEF9091E8008150C6
:101B500095FD06C095ED9A95F1F700008111F5CF3E
:101B60008091E80085FF0DC040E050E063E070E048
:101B7000CE0101960E9466108091E8008E778093D6
:101B8000E8000F900F900F90DF91CF910895CF93C1
:101B9000DF9300D01F92CDB7DEB72091EF01243044
:101BA00021F522E029839B838A8383E08093E900E7
:101BB0008FEF9091E800815095FD06C095ED9A95C4
:101BC000F1F700008111F5CF8091E80085FF0DC08D
:101BD00040E050E063E070E0CE0101960E946610A4
:101BE0008091E8008E778093E8000F900F900F901F
:101BF000DF91CF9108959C018091EF018430F9F439
:101C000082E08093E9009FEF8091E800915085FD8C
:101C100006C085ED8A95F1F700009111F5CF80910E
:101C2000E80085FF0CC040E050E065E070E0C901CD
:101C30000E9466108091E8008E778093E8000895F6
:101C4000CF93DF93EC018091EF01843009F047C01E
:101C500080910C018823E1F080910D018823C1F06F
:101C600085E08093E9008FEF9091E800815095FD29
:101C700006C095E19A95F1F700008111F5CF8091AA
:101C8000E80085FF2CC040E050E060E170E017C044
:101C900081E08093E9008FEF9091E800815095FDFD
:101CA00006C095ED9A95F1F700008111F5CF80916E
:101CB000E80085FF14C040E050E068E070E0CE012D
:101CC0000E9466108091E8008E778093E80080E1A2
:101CD000FE01ADE5B1E001900D928A95E1F7DF914B
:101CE000CF91089583E993E00E9457078091EE0118
:101CF000811109C00E94F7110E9454128091E200E4
:101D000084608093E20008958FE893E00E94570773
:101D10001092EE0108958BE893E00C94570787E842
:101D200093E00E9457070C94F52B83E893E00E9400
:101D300057070E94BC210E94FB2B0E94FE140C94AA
:101D40002C0D20915B012F5F822F62E30E94782D82
:101D5000992319F020935B01089510925B01809103
:101D60005C01882371F18091EF01843041F580910D
:101D7000E9008F702091EC00922F917020FD90E887
:101D8000892B94E09093E9009091EB0090FF14C0B0
:101D90009091EE0097FF10C09091E80095FF03C06E
:101DA0001092F100F9CF9091E80090FF05C090915A
:101DB000E8009E779093E8008F708093E90010927E
:101DC0005C01089542E061EC81E00E94701142E004
:101DD00061EC82E00E94701142E061EC83E00E94BD
:101DE000701142E261EC84E00E94701142E161EC0A
:101DF00085E00C9470118091F101833009F455C095
:101E000030F4813071F0823009F48EC008958A3048
:101E100009F47AC08B3009F460C0893009F09CC0A5
:101E200020C08091F001813A09F096C08091E800CD
:101E3000877F8093E8008091F4019091F501892BD0
:101E400021F460E18DE591E003C060E080E090E086
:101E500070E00E94B1108091E8008B778093E800D9
:101E600008958091F001813209F076C08091F401EB
:101E70009091F501009719F0049709F06DC08091D9
:101E8000E800877F8093E8008091E80082FD05C02C
:101E90008091EF018111F8CF5FC08091F1008093B4
:101EA0006D018091E8008B7753C08091F001813AF9
:101EB00009F052C08091F4019091F501892B09F04D
:101EC0004BC08091E800877F8093E8008091E80014
:101ED00080FFFCCF80910C0136C08091F0018132EF
:101EE000D9F58091F4019091F501892BA9F58091A4
:101EF000E800877F8093E8000E94A5118091F2019D
:101F000080930C010C94CC1A8091F001813221F560
:101F10008091E800877F8093E8000E94A51180915E
:101F2000F30180936E0108958091F001813AA1F44C
:101F30008091E800877F8093E8008091E80080FF2F
:101F4000FCCF80916E018093F1008091E8008E7744
:101F50008093E8000C94A511089584B7877F84BF0F
:101F60000FB6F894A8958091600088618093600016
:101F7000109260000FBE90E080E80FB6F894809356
:101F80006100909361000FBE0E948A150E94F711B4
:101F90000E9454128091E20084608093E20080E30A
:101FA0009DE00E94FD2078940E94DE140E948C1512
:101FB00082E091E00E94F9140E94E32B82E793E013
:101FC0000E9457078091EF01853089F48EE693E0F7
:101FD0000E9457070E947E218091ED01882391F392
:101FE0000E94A821882371F30E945010EBCF0E9419
:101FF000BA15E8CF292F332723303105C9F060F413
:102000002130310581F02230310509F041C08DE8E1
:1020100090E02BEC33E040C021323105E1F0223278
:10202000310531F135C082E190E028E534E034C07B
:1020300099278130910549F028F0029749F5E7E9A1
:10204000F3E005C0E7ECF3E002C0EFEAF3E08491CF
:1020500090E09F0121C06530D8F4E62FF0E0EE0F4C
:10206000FF1FEB5DFE4F2081318189E090E014C0BD
:10207000653070F470E0FB01EE0FFF1FE55EFE4F70
:1020800020813181FB01EA5EFE4F808190E004C037
:1020900080E090E020E030E0FA0131832083089571
:1020A00080E189BD82E189BD09B400FEFDCF809148
:1020B000D8008F7D8093D8008091E000826080936B
:1020C000E0008091E00081FDFCCF0895CF92DF9287
:1020D000EF92FF920F931F93CF93DF93EC018B014D
:1020E0006A010E94C411811133C0C114D10439F0B6
:1020F000F60180819181081B190BC80FD91FE12CB3
:10210000F12C0115110519F18091E80085FD16C02B
:102110008091E8008E778093E800C114D10449F0E3
:10212000F60180819181E80EF91EF182E08285E05E
:102130000FC00E94C411882321F30AC089918093A3
:10214000F10001501109FFEFEF1AFF0ADACF80E02A
:10215000DF91CF911F910F91FF90EF90DF90CF9083
:1021600008952091F6013091F7012617370748F0BE
:102170006115710539F42091E8002E772093E8006D
:1021800001C0B901FC0120E06115710579F1809170
:10219000EF018823F1F18530F1F18091E80083FDB2
:1021A0003CC08091E80082FD2EC08091E80080FF55
:1021B000EBCF2091F3008091F20090E0922B61151B
:1021C000710551F08830910538F421912093F10088
:1021D000615071090196F3CF21E0089709F020E0E2
:1021E0008091E8008E778093E800CECF2111CFCF89
:1021F0000AC08091EF01882361F0853061F0809101
:10220000E80083FD0AC08091E80082FFF2CF80E001
:10221000089582E0089583E0089581E00895209173
:10222000F6013091F7012617370748F0611571055F
:1022300039F42091E8002E772093E80001C0B9011D
:10224000FC0120E06115710591F18091EF01882377
:1022500009F440C0853009F43FC08091E80083FD57
:102260003DC08091E80082FD2FC08091E80080FF92
:10227000E9CF2091F3008091F20090E0922B61155C
:10228000710559F08830910540F424912093F100B4
:102290003196615071090196F2CF21E0089709F05B
:1022A00020E08091E8008E778093E800CBCF211169
:1022B000CCCF0AC08091EF01882361F0853061F0B6
:1022C0008091E80083FD0AC08091E80082FFF2CF90
:1022D00080E0089582E0089583E0089581E0089504
:1022E000982F973068F59093E900981739F070911E
:1022F000EC002091ED005091F00003C0242F762FC8
:1023000050E021FD02C09F5FECCF3091EB003E7F9B
:102310003093EB003091ED003D7F3093ED00309134
:10232000EB0031603093EB007093EC002093ED00F4
:102330005093F0002091EE0027FDE5CF80E0089556
:102340008F708093E90081E008958091F00187FF0C
:1023500011C08091E80082FD05C08091EF018111DC
:10236000F8CF11C08091E8008B770BC08091EF010E
:10237000882349F08091E80080FFF8CF8091E80041
:102380008E778093E80008952091E4003091E50075
:1023900095E64091EC00842F817040FF23C080912E
:1023A000E80080FD1DC08091EF01882399F0853001
:1023B00099F08091EB0085FD11C04091E4005091AF
:1023C000E5002417350729F3915011F09A01E1CF68
:1023D00084E0089582E0089583E0089581E00895FF
:1023E00080E008954091E80042FFDDCF08950E940B
:1023F00065120E946D12E0EEF0E0808181608083C2
:10240000E8EDF0E080818F77808319BCA7EDB0E024
:102410008C918E7F8C9380818F7E80831092EE01D1
:1024200008950F931F93CF93DF930E9465120E942C
:102430006D12C8EDD0E088818F77888388818068AD
:10244000888388818F7D888319BC1092EF01109258
:10245000EB011092ED011092EC0100EE10E0F8019A
:1024600080818B7F808388818160888342E060E007
:1024700080E00E947011E1EEF0E080818E7F808329
:10248000E2EEF0E0808181608083808188608083DB
:10249000F80180818E7F8083888180618883DF91CD
:1024A000CF911F910F910895E8EDF0E080818F7E2C
:1024B0008083E7EDF0E080818160808384E082BFEB
:1024C00081E08093EE010C941112E8EDF0E0808140
:1024D0008E7F80831092E20008951092DA001092AD
:1024E000E10008951F920F920FB60F9211242F93BF
:1024F0003F934F935F936F937F938F939F93AF938C
:10250000BF93EF93FF938091E10082FF0BC0809116
:10251000E20082FF07C08091E1008B7F8093E100A1
:102520000E94A10E8091DA0080FF1FC08091D80028
:1025300080FF1BC08091DA008E7F8093DA0080914B
:10254000D90080FF0DC080E189BD82E189BD09B459
:1025500000FEFDCF81E08093EF010E94720E05C066
:1025600019BC1092EF010E94840E8091E10080FF5F
:1025700019C08091E20080FF15C08091E2008E7F3B
:102580008093E2008091E20080618093E20080917C
:10259000D80080628093D80019BC85E08093EF0159
:1025A0000E948F0E8091E10084FF30C08091E20094
:1025B00084FF2CC080E189BD82E189BD09B400FEA1
:1025C000FDCF8091D8008F7D8093D8008091E1006D
:1025D0008F7E8093E1008091E2008F7E8093E20005
:1025E0008091E20081608093E2008091EB0188237A
:1025F00011F084E007C08091E30087FD02C081E014
:1026000001C083E08093EF010E94950E8091E1006C
:1026100083FF29C08091E20083FF25C08091E10003
:10262000877F8093E10082E08093EF011092EB01BD
:102630008091E1008E7F8093E1008091E2008E7FA7
:102640008093E2008091E20080618093E20042E0AA
:1026500060E080E00E9470118091F00088608093BB
:10266000F0000E948B0EFF91EF91BF91AF919F916F
:102670008F917F916F915F914F913F912F910F902B
:102680000FBE0F901F9018951F920F920FB60F92CA
:1026900011242F933F934F935F936F937F938F9367
:1026A0009F93AF93BF93CF93DF93EF93FF93C0912B
:1026B000E900CF708091EC00D82FD17080FDD0E878
:1026C0001092E9008091F000877F8093F000789469
:1026D0000E9488131092E9008091F0008860809336
:1026E000F000CD2BCF70C093E900FF91EF91DF9107
:1026F000CF91BF91AF919F918F917F916F915F919A
:102700004F913F912F910F900FBE0F901F901895F2
:102710001F93CF93DF93CDB7DEB7AA970FB6F89488
:10272000DEBF0FBECDBFE0EFF1E08091F1008193FD
:1027300021E0E83FF207C9F70E94FB0E8091E80014
:1027400083FF24C18091F0019091F101492F50E065
:102750004A30510508F01AC1FA01EA5AFF4F0C94A9
:10276000982D803881F0823809F010C18091F401F1
:102770008F708093E9008091EB0085FB882780F9BA
:102780001092E90006C08091EC019091ED01911149
:1027900082609091E800977F9093E8008093F10029
:1027A0001092F100C8C0282F2D7F09F0EFC08823B8
:1027B00019F0823061F0EAC08091F201813009F0B5
:1027C000E5C0933009F080E08093ED012BC080914B
:1027D000F201811127C08091F4018F7009F4D6C0F5
:1027E0008093E9002091EB0020FF1CC0933021F47E
:1027F0008091EB00806214C09091EB009061909307
:10280000EB0021E030E0A90102C0440F551F8A957A
:10281000E2F74093EA001092EA008091EB008860B2
:102820008093EB001092E9008091E800877F86C0DA
:102830008111ACC01091F2011F778091E300807884
:10284000812B8093E3008091E800877F8093E800EC
:102850000E94A5118091E80080FFFCCF8091E300E9
:1028600080688093E300111102C082E001C083E020
:102870008093EF018BC08058823008F087C0809130
:10288000F2019091F3018C3D53E0950779F583E0D7
:102890008A838AE289834FB7F894DE01139620E099
:1028A0003EE051E2E32FF0E050935700E49120FF27
:1028B00003C0E295EF703F5FEF708E2F90E0EA303B
:1028C00010F0C79601C0C0968D939D932F5F243161
:1028D00049F74FBF8091E800877F8093E8006AE264
:1028E00070E0CE0101960E94B11014C0AE014F5F9E
:1028F0005F4F6091F4010E94FA0FBC01892B09F42B
:1029000045C09091E800977F9093E80089819A8173
:102910000E940F118091E8008B778093E80036C009
:102920008038A1F58091E800877F8093E80080914E
:10293000EB018093F1008091E8008E778093E800AE
:102940000E94A51123C0811121C08091F2019091B4
:10295000F30199270297D4F48091E800877F809350
:10296000E8008091F2018093EB010E94A511809113
:10297000EB01811106C08091E30087FD02C081E078
:1029800001C084E08093EF010E94E20E8091E80094
:1029900083FF0AC08091E800877F8093E8008091E0
:1029A000EB0080628093EB00AA960FB6F894DEBF2E
:1029B0000FBECDBFDF91CF911F910895CF9380912E
:1029C000EF018823A1F0C091E900CF709091EC0055
:1029D000892F817090FD80E8C82B1092E9008091CA
:1029E000E80083FD0E948813CF70C093E900CF9167
:1029F000089590937401809373010895E091730199
:102A0000F0917401309721F00190F081E02D09944C
:102A100080E00895EF92FF921F93CF93DF93F82EFB
:102A2000192FE0917301F09174013097A9F10280A0
:102A3000F381E02D09958091D70182FF2DC080FFA1
:102A400004C08DE895E00E945707CF2DD12F10E1EB
:102A500087E8E82E85E0F82E8091D70180FF0BC033
:102A600088811F928F93FF92EF920E94F0070F9040
:102A70000F900F900F90115021961111EDCF809172
:102A8000D70180FF09C085E895E0DF91CF911F91C4
:102A9000FF90EF900C945707DF91CF911F91FF901B
:102AA000EF900895E0917301F0917401309721F057
:102AB0000480F581E02D09940895209171013091F1
:102AC00072012817390771F0909372018093710198
:102AD000E0917301F0917401309721F00680F78145
:102AE000E02D0994089520916F013091700128170D
:102AF000390771F09093700180936F01E091730139
:102B0000F0917401309721F00084F185E02D099453
:102B1000089508950C9489150E94C2210E946709A6
:102B20000C948822CF93C82F8091D70182FF1EC0BA
:102B300080FF04C086EA95E00E9457078091D70184
:102B400080FF0CC01F92CF9381EA95E09F938F93F3
:102B50000E94F0070F900F900F900F908091D70177
:102B600080FF04C08FE995E00E9457078C2FCF911A
:102B70000C942C0DCF92DF92EF92FF920F931F9344
:102B8000CF93DF93CDB7DEB72B970FB6F894DEBFA8
:102B90000FBECDBF0E94840986E7C82E81E0D82EE3
:102BA00000E010E0E02E802F0E94B80AF60141916B
:102BB0006F01F82EF426B1F40F5F1F4F0E30110590
:102BC00089F78FEF89838A831B820E94CB218160E2
:102BD000782F9D838C8349815A816B818D810E94DE
:102BE0005D1640C09091D70191FF04C08B870E9471
:102BF000BE0A8B8520E030E04F2D50E0922FBA01C5
:102C0000022E02C0759567950A94E2F760FF24C012
:102C10002E83EF8221E030E0690102C0CC0CDD1C84
:102C20009A95E2F790E08C219D21892B09F420E010
:102C300028870E94CB218160782F9A8789874E81CF
:102C40005F8168858A850E945D16F801EA58FE4F0B
:102C50008081C826C08206C02F5F3F4F26303105D5
:102C600069F6AACF0E94F9250E94FE149091750181
:102C70008917A1F00E94FE14809375012B960FB660
:102C8000F894DEBF0FBECDBFDF91CF911F910F91A2
:102C9000FF90EF90DF90CF900C9492152B960FB68B
:102CA000F894DEBF0FBECDBFDF91CF911F910F9182
:102CB000FF90EF90DF90CF900895CF93DF93CDB743
:102CC000DEB72B970FB6F894DEBF0FBECDBF4F8394
:102CD000588769877A878B87DE01119686E0FD0128
:102CE00011928A95E9F785E0FE01379601900D92E1
:102CF0008A95E1F749815A816B817C818D819E8122
:102D00000E94601D2B960FB6F894DEBF0FBECDBF9C
:102D1000DF91CF910895CF93C82F882309F4C1C0C4
:102D2000823859F40E94FE1481FDBBC089E30E94E1
:102D3000FD1F0E94D72089E30CC0833879F40E94DC
:102D4000FE1480FDAEC083E50E94FD1F0E94D720C7
:102D500083E50E944D20CF910C94D720843859F4FC
:102D60000E94FE1482FD9DC087E40E94FD1F0E9408
:102D7000D72087E4EECF8CEF8C0F813A48F48C2F6C
:102D80000E948B2A81118DC08C2F0E94FD1FE3CFE2
:102D900080E28C0F883048F4C77081E001C0880F52
:102DA000CA95EAF70E94A020D6CF8BE58C0F83301E
:102DB00078F4C53A29F0C63A31F083E890E005C0CE
:102DC00081E890E002C082E890E0CF910C945D151C
:102DD00088E58C0F833108F064C0C83A39F1C93AEC
:102DE00041F1CA3A49F1CB3A51F1CC3A59F1CD3AD5
:102DF00061F1C03B69F1CE3A71F1CF3A79F1C13B53
:102E000081F1C23B89F1C33B91F1C43B99F1C53BD0
:102E1000A1F1C63BA9F1C73BB1F1C83BB9F1C93B30
:102E2000C1F1CA3BC9F180E090E038C082EE90E089
:102E300035C089EE90E032C08AEE90E02FC085EB7D
:102E400090E02CC086EB90E029C087EB90E026C094
:102E50008CEC90E023C08DEC90E020C083E891E002
:102E60001DC08AE891E01AC082E991E017C084E9A8
:102E700091E014C081E292E011C083E292E00EC0C2
:102E800084E292E00BC085E292E008C086E292E024
:102E900005C087E292E002C08AE292E0CF910C94F2
:102EA0007315CF910895882309F44BC0823859F4E3
:102EB0000E94FE1481FF45C089E30E94FD1F0E940D
:102EC000D72089E30CC0833871F40E94FE1480FF80
:102ED00038C083E50E94FD1F0E94D72083E50E9431
:102EE0004D200C94D720843859F40E94FE1482FFA0
:102EF00028C087E40E94FD1F0E94D72087E4EFCFFF
:102F00009CEF980F913A58F390E2980F983050F454
:102F1000877091E001C0990F8A95EAF7892F0E9486
:102F2000A620DFCF9BE5980F933020F480E090E05F
:102F30000C945D15885A833120F480E090E00C9465
:102F400073150895882321F00E94A0200C94D720A7
:102F50000895882321F00E94A6200C94D72008957C
:102F6000BF92CF92DF92EF92FF920F931F93CF9376
:102F7000DF9300D000D000D0CDB7DEB77C0185E074
:102F8000F701DE01119601900D928A95E1F7F701A4
:102F900083819481892B09F4DDC2908181818F3FE7
:102FA00019F49F3F09F4D6C2F701028125812295C9
:102FB0002F7099838A8389819A812E830E94BC1FF6
:102FC000182FB92E0E94BB1F0E94821EEB2DE29586
:102FD000EF704E2F50E0FA01E05AFF4F2E810C9413
:102FE000982D8B2D807F9B2D9F70F92E882319F0B3
:102FF000F29480EFF822002349F0FF2009F457C231
:103000008F2D0E94B0200E94D72051C2812F0E9494
:103010005317FF2009F49EC28F2D0E94B6202696DA
:103020000FB6F894DEBF0FBECDBFDF91CF911F91D9
:103030000F91FF90EF90DF90CF90BF900C94D7202E
:103040003B2D307F8B2D8F70303211F08295807F39
:10305000112319F0113021F12CC00023B9F02223E3
:1030600009F490C1213009F08DC126960FB6F8946D
:10307000DEBF0FBECDBFDF91CF911F910F91FF90AB
:10308000EF90DF90CF90BF900C94C020222319F0D6
:10309000213009F45FC28E830E94C3208E8186C1D5
:1030A000002321F0223008F055C26CC1211152C218
:1030B0007DC1002321F0222309F464C1F8C1222339
:1030C00009F474C109C28B2D86958695837019F019
:1030D0008130D1F03FC2002321F0812F9B2D9370CE
:1030E00002C080E090E026960FB6F894DEBF0FBED7
:1030F000CDBFDF91CF911F910F91FF90EF90DF90A7
:10310000CF90BF900C945D15002321F0812F9B2D53
:10311000937002C080E090E026960FB6F894DEBF70
:103120000FBECDBFDF91CF911F910F91FF90EF9018
:10313000DF90CF90BF900C947315812F002319F06E
:103140000E947F2402C00E94E72426960FB6F894BE
:10315000DEBF0FBECDBFDF91CF911F910F91FF90CA
:10316000EF90DF90CF90BF900C946C258B2D8370E7
:1031700009F075C00111EEC1812F82958695877087
:10318000880F880F912F9F70C92ED12CE12CF12C24
:10319000082E04C0CC0CDD1CEE1CFF1C0A94D2F7D8
:1031A00014FF12C00FE010E020E030E004C0000F78
:1031B000111F221F331F8A95D2F7C901B8016095EC
:1031C00070958095909503C060E070E0CB014B2D29
:1031D0004695469543704230C1F060F56C297D29D3
:1031E0008E299F29413051F126960FB6F894DEBF03
:1031F0000FBECDBFDF91CF911F910F91FF90EF9048
:10320000DF90CF90BF900C94A91E6C297D298E2948
:103210009F2926960FB6F894DEBF0FBECDBFDF9173
:10322000CF911F910F91FF90EF90DF90CF90BF90C3
:103230000C94C51E0E94A91EC701B60126960FB6A2
:10324000F894DEBF0FBECDBFDF91CF911F910F91DC
:10325000FF90EF90DF90CF90BF900C948D1E0023D5
:1032600019F08B2D817001C08695882309F472C1F5
:10327000812F829586958770880F880F912F9F7078
:10328000C92ED12CE12CF12C082E04C0CC0CDD1C55
:10329000EE1CFF1C0A94D2F714FF12C00FE010E0DE
:1032A00020E030E004C0000F111F221F331F8A9559
:1032B000D2F7C901B801609570958095909503C0CB
:1032C00060E070E0CB014B2D46954695437042304F
:1032D000C1F060F56C297D298E299F29413051F17B
:1032E00026960FB6F894DEBF0FBECDBFDF91CF910B
:1032F0001F910F91FF90EF90DF90CF90BF900C94B3
:10330000831F6C297D298E299F2926960FB6F89454
:10331000DEBF0FBECDBFDF91CF911F910F91FF9008
:10332000EF90DF90CF90BF900C949F1F0E94831F5F
:10333000C701B60126960FB6F894DEBF0FBECDBF0B
:10334000DF91CF911F910F91FF90EF90DF90CF9081
:10335000BF900C94671F103FD1F118F4103E50F449
:10336000A1C0123F09F463C008F44CC0133F09F434
:1033700073C098C01F708B2D8F710023A1F00E9425
:10338000001F812F26960FB6F894DEBF0FBECDBF6B
:10339000DF91CF911F910F91FF90EF90DF90CF9031
:1033A000BF900C94A2170E94211F812F26960FB662
:1033B000F894DEBF0FBECDBFDF91CF911F910F916B
:1033C000FF90EF90DF90CF90BF900C94A91700234F
:1033D000A9F02111BFC08B2D8F7126960FB6F894DE
:1033E000DEBF0FBECDBFDF91CF911F910F91FF9038
:1033F000EF90DF90CF90BF900C94461F223008F0E2
:10340000A9C0E9CF0023A9F08B2D8F7126960FB6A6
:10341000F894DEBF0FBECDBFDF91CF911F910F910A
:10342000FF90EF90DF90CF90BF900C94001F00238F
:1034300059F38B2D8F7126960FB6F894DEBF0FBE11
:10344000CDBFDF91CF911F910F91FF90EF90DF9053
:10345000CF90BF900C94211F002399F08B2D8F717A
:1034600026960FB6F894DEBF0FBECDBFDF91CF9189
:103470001F910F91FF90EF90DF90CF90BF900C9431
:10348000EB1E26960FB6F894DEBF0FBECDBFDF91C0
:10349000CF911F910F91FF90EF90DF90CF90BF9051
:1034A0000C94E11E0023A9F0222309F4ADCF812F53
:1034B00026960FB6F894DEBF0FBECDBFDF91CF9139
:1034C0001F910F91FF90EF90DF90CF90BF900C94E1
:1034D0008B16222309F4ADCF812F26960FB6F894D0
:1034E000DEBF0FBECDBFDF91CF911F910F91FF9037
:1034F000EF90DF90CF90BF900C9453174B2D4F70EF
:10350000612FC7010E94F90726960FB6F894DEBF17
:103510000FBECDBFDF91CF911F910F91FF90EF9024
:10352000DF90CF90BF900C94051E4B2D4F70612FF4
:10353000C70126960FB6F894DEBF0FBECDBFDF9150
:10354000CF911F910F91FF90EF90DF90CF90BF90A0
:103550000C94C50B26960FB6F894DEBF0FBECDBFF8
:10356000DF91CF911F910F91FF90EF90DF90CF905F
:10357000BF9008950E94BD200E9492200E94D720F3
:103580000E949E260E946C2580E090E00E945D15BE
:1035900080E090E00C9473150E94AD200C94BA1A50
:1035A0000E94BC1F292F22952F702C3030F42A3016
:1035B00048F42250223078F405C02C3041F02F30EE
:1035C00031F009C0803E48F0803F29F406C093FBEB
:1035D000882780F9089580E0089581E00895CF93C9
:1035E000DF9300D000D01F92CDB7DEB70F900F90C1
:1035F0000F900F900F90DF91CF910895CF93DF93AD
:1036000000D000D000D0CDB7DEB726960FB6F89424
:10361000DEBF0FBECDBFDF91CF9108951F93CF9333
:10362000DF93C091840116E080918501C81799F05D
:10363000D0E01C9FF0011D9FF00D1124EA57FE4FB2
:103640004081518162817381848195810E94FE1A3B
:103650002196C770E9CFDF91CF911F9108954091D6
:10366000B6015091B7016091B8017091B901809194
:10367000BA019091BB010C94FE1A8091BB01829516
:103680008F7009F054C08091B801882309F44FC0AD
:1036900080918401A09185014091B9015091BA01B6
:1036A0006091B6017091B701B6E08A1709F43FC086
:1036B00090E041155105C1F17F3F11F46F3FA1F139
:1036C000B89FF001B99FF00D1124EA57FE4F2181F8
:1036D00027132AC02081261327C02281211124C04C
:1036E000238134812417350710F421503109241B1C
:1036F000350B283C3105C0F42091BB012F702061AF
:103700002093BB0126E0289FF001299FF00D112492
:10371000E557FE4F80818F708061808386EB91E05A
:103720000E94B0170C940E1B01968770BECF0895AF
:10373000CF92DF92EF92FF920F931F93CF93DF937D
:10374000CDB7DEB762970FB6F894DEBF0FBECDBF20
:103750008C0185E0F801DE011D9601900D928A959D
:10376000E1F7D8014C9111965C91119712966C91EA
:103770008091B9019091BA01009709F475C1309117
:10378000B6017091B7017F3F19F43F3F09F46CC156
:10379000F801C380D480E090B801EE2009F4BEC0E7
:1037A0002091BB01C816D90628F0D601A81BB90B79
:1037B000CD0104C0809590958C0D9D1DFF24F39440
:1037C000883C910578F0F12C207F09F0C4C07C2D55
:1037D000D98AC88A89890E94EF1A86EB91E00E94F3
:1037E000B017AFC0822F807F09F045C0571313C0B8
:1037F000431311C061110FC02F7020612093BB01D2
:103800000E942F1B86EB91E00E94B0178091BB01B4
:10381000F80185832EC0CD2819F15F3F11F44F3F89
:10382000F9F0F62E61111CC0809184012091850170
:1038300036E0821709F45BC090E0389FF001399FB1
:10384000F00D1124EA57FE4F7181571306C07081A5
:10385000471303C07281711103C001968770E9CFCD
:10386000F62E662309F41CC18091BB018160809310
:10387000BB01F12C15C1571309C0431307C06111D7
:1038800005C08091BB01F8018583C8C04D875E8764
:103890008D859E856A8B0E94D01A6A898823D1F112
:1038A0006623C1F12091BB01822F82958F7090E039
:1038B000029774F08091B6019091B70198878F8339
:1038C0001986DB86CA862C87CE0107960E94B01720
:1038D00086E0F801A6EBB1E001900D928A95E1F740
:1038E0000E943D1B0E942F1BFF24F394D9C04D87DB
:1038F0005E878D859E850E94BC1F292F22952F7083
:10390000223008F0C1C09F7009F0BBC0805E8830D3
:1039100008F4C6C0C8010E94B017E6CFC816D90681
:1039200008F453C0F601E81BF90BCF01883C910560
:1039300008F450C0F12C7C2DD98AC88A89890E944C
:10394000EF1AE6EBF1E086E0DF011D928A95E9F7D8
:103950000E942F1BA5C0571314C0431312C061113E
:1039600010C08091BB01F8018583C8010E94B01787
:1039700086E0E6EBF1E0DF011D928A95E9F7FE2C87
:103980008FC04D875E878D859E856A8B0E94D01A79
:103990006A89882309F4BECF662309F4BBCF20913E
:1039A000BB01822F82958F7090E002970CF490CF2C
:1039B0008091B6019091B7019A8389831B82DD8241
:1039C000CC822E83CE01019681CF809590958C0D6F
:1039D0009D1DACCFF62E662309F49CCF571333C040
:1039E000431331C02091BB0120FD24C0822F82955A
:1039F0008F70482F50E041155105E1F0D801159620
:103A00002C9315974F30510549F08F5F982F929561
:103A1000907F822F8F70892B15968C93C8010E94FE
:103A2000B01786E0F801A6EBB1E001900D928A95FF
:103A3000E1F78ECF86E0F801A6EBB1E001900D92A0
:103A40008A95E1F72DC04D875E878D859E850E9402
:103A5000D01A81113DCF8091BB0181608093BB0161
:103A6000C8010E94B0171CC0662309F453CF4D87CC
:103A70005E878D859E850E94D01A882309F44ACFDF
:103A800027CF811143CF0CC0243008F043CF9F7063
:103A900009F43CCFD80115969C91907F09F036CF60
:103AA0008F2D62960FB6F894DEBF0FBECDBFDF91AB
:103AB000CF911F910F91FF90EF90DF90CF900895DD
:103AC0001F93CF93DF93CDB7DEB72C970FB6F89443
:103AD000DEBF0FBECDBF4F83588769877A878B873C
:103AE0009C87CE0107960E94981B882371F08A85D7
:103AF0009B85892B09F441C088858F3F09F065C0FB
:103B00008F818F3F09F061C038C086E0FE01379693
:103B1000DE01119601900D928A95E1F76A857B8509
:103B20006115710551F1FF81E885EF3F11F4FF3F09
:103B300021F12091850130E0C90101968770992714
:103B40004091840150E08417950709F447C0F98338
:103B5000EA837D836C8396E0929FD001939FB00DA2
:103B60001124AA57BE4FFE01319601900D929A95ED
:103B7000E1F7809385010E940E1B16E0809184017D
:103B8000909185018917B9F1189FC00111248A57B6
:103B90009E4F0E94981B882371F1E09184011E9F23
:103BA000F0011124EA57FE4F4081518162817381F7
:103BB000848195810E94FE1A8091840190E0019693
:103BC0008770992780938401D9CF4F815885698563
:103BD0007A858B859C850E94FE1ACFCF0E94CC1AD5
:103BE0001092850110928401E6EBF1E086E0DF019E
:103BF0001D928A95E9F72C960FB6F894DEBF0FBE9A
:103C0000CDBFDF91CF911F910895EF92FF920F9357
:103C10001F93CF93DF938C01892B09F46CC0F12C97
:103C2000EE24E394E8012196F8018491843740F46E
:103C3000843008F051C0813081F0823019F15BC0CE
:103C4000853709F444C0A8F19CE7980F903708F035
:103C500052C08F770E94531741C00E5F1F4FFE0165
:103C6000849190E2980F983050F48770FE2D01C037
:103C7000FF0F8A95EAF78F2F0E94B02014C00E9490
:103C80008B162DC00E5F1F4FFE01849190E2980F9E
:103C9000983060F48770FE2D01C0FF0F8A95EAF717
:103CA0008F2F0E94B6200E94D72019C00E94531760
:103CB00016C00E5F1F4FFE01C491CC2381F08FE927
:103CC0009FE00197F1F700C00000C150F6CF0E5FF2
:103CD0001F4FFE01F49003C00E948B168E018F2DA2
:103CE000882309F49FCFEFE9FFE03197F1F700C097
:103CF00000008150F5CFDF91CF911F910F91FF9080
:103D0000EF90089508956093C0017093C10180936E
:103D1000C2019093C3010C94BA1A0F931F930091A0
:103D2000C0011091C1012091C2013091C301DC0199
:103D3000CB01802B912BA22BB32B8093C0019093AE
:103D4000C101A093C201B093C3011F910F910C94C4
:103D5000BA1A0F931F930091C0011091C1012091D5
:103D6000C2013091C301DC01CB0180239123A22346
:103D7000B3238093C0019093C101A093C201B0937B
:103D8000C3011F910F910C94BA1A0F931F930091C6
:103D9000C0011091C1012091C2013091C301DC0129
:103DA000CB0180279127A227B3278093C00190934E
:103DB000C101A093C201B093C3011F910F910C9454
:103DC000BA1A1092BC011092BD011092BE0110925D
:103DD000BF010C94BA1A41E050E060E070E004C00A
:103DE000440F551F661F771F8A95D2F74093BC0179
:103DF0005093BD016093BE017093BF010C94BA1A39
:103E000041E050E060E070E004C0440F551F661FC1
:103E1000771F8A95D2F78091BC019091BD01A09146
:103E2000BE01B091BF01482B592B6A2B7B2B4093CD
:103E3000BC015093BD016093BE017093BF010C940F
:103E4000BA1A41E050E060E070E004C0440F551F32
:103E5000661F771F8A95D2F74095509560957095AB
:103E60008091BC019091BD01A091BE01B091BF01B4
:103E7000482359236A237B234093BC015093BD01FF
:103E80006093BE017093BF010C94BA1A41E050E0F8
:103E900060E070E004C0440F551F661F771F8A95CD
:103EA000D2F78091BC019091BD01A091BE01B0916B
:103EB000BF01482759276A277B274093BC015093AD
:103EC000BD016093BE017093BF010C94BA1A0F93A9
:103ED0001F930091BC011091BD012091BE01309152
:103EE000BF01DC01CB01802B912BA22BB32B809344
:103EF000BC019093BD01A093BE01B093BF011F917F
:103F00000F910C94BA1A0F931F930091BC0110915A
:103F1000BD012091BE013091BF01DC01CB018023A6
:103F20009123A223B3238093BC019093BD01A0935E
:103F3000BE01B093BF011F910F910C94BA1A0F9359
:103F40001F930091BC011091BD012091BE013091E1
:103F5000BF01DC01CB0180279127A227B3278093E3
:103F6000BC019093BD01A093BE01B093BF011F910E
:103F70000F910C94BA1A0895CF92DF92EF92FF92AC
:103F80000F931F93CF93DF938C01C090BC01D0900F
:103F9000BD01E090BE01F090BF018091C001909101
:103FA000C101A091C201B091C301C82AD92AEA2A4D
:103FB000FB2ACFE1D0E0D701C6010C2E04C0B69594
:103FC000A795979587950A94D2F780FF07C0B80107
:103FD0008C2F0E94E90B8130910531F4219758F71D
:103FE000B80180E00E94E90BDF91CF911F910F9102
:103FF000FF90EF90DF90CF90089590910C0199235E
:1040000079F190910D01992359F1982F96959695F4
:1040100096959F30A0F4E0910E01F0910F01E90F09
:10402000F11D877021E030E0A90102C0440F551F47
:104030008A95E2F7CA019181892B81830895909135
:10404000D70190FF29C01F928F9387ED95E09F9332
:104050008F930E94F0070F900F900F900F9008958C
:1040600020910E0130910F01F90132969FEF40E04F
:104070005191851789F09F3F19F4511101C0942F78
:104080004F5F4E30A9F79F3F39F0F901E90FF11D5D
:1040900097FDFA9582830895089590910C019923D4
:1040A00081F190910D01992361F1982F9695969544
:1040B00096959F30A8F4E0910E01F0910F01E90F61
:1040C000F11D877021E030E0A90102C0440F551FA7
:1040D0008A95E2F7CA0180959181892381830895A9
:1040E0009091D70190FF1DC01F928F9389EB95E0AF
:1040F0009F938F930E94F0070F900F900F900F9057
:10410000089520910E0130910F01F9013296205F40
:104110003F4F9081891301C010823196E217F30757
:10412000C1F7089581E090E0E0910E01F0910F0158
:10413000E80FF91F1082019680319105A9F70895C3
:104140009091D601892B8093D60108958095909106
:10415000D60189238093D60108951092D60108953F
:104160009091D501892B8093D501089580959091E8
:10417000D50189238093D50108951092D501089522
:104180008093C40108951092C401089580910E0196
:1041900090910F01FC0131969C01205F3F4F80E020
:1041A000919191118F5FE217F307D1F70895E09194
:1041B0000E01F0910F018091D6018083E0910E01F4
:1041C000F0910F0190818091D501892B808380919E
:1041D000C401882361F0E0910E01F0910F019081FC
:1041E000892B80830E94C62081111092C401809186
:1041F0000E0190910F010C940A1590933B0180934E
:104200003A010895CF92DF92EF92FF926C01EE2473
:10421000FF24C114D104E104F10421F0C701B60167
:1042200020E101C020E0C72ED82EE92EFF24C114C2
:10423000D104E104F10419F0285FC701B6016B0154
:104240007C0154E0F694E794D794C7945A95D1F73B
:10425000C114D104E104F10419F02C5FC701B601C7
:104260006B017C0142E0F694E794D794C7944A9599
:10427000D1F7C114D104E104F10419F02E5FC70194
:10428000B601DC01CB01B695A79597958795892B4B
:104290008A2B8B2B09F02F5F822FFF90EF90DF90FE
:1042A000CF9008958295982F937344E0949F900146
:1042B00011248C7C86958695282B822F8575880FF6
:1042C0002A7A2695822B08951F93CF93DF931F920E
:1042D000CDB7DEB799830E945221182F9981892F7B
:1042E0000E945221212F30E0322F2227A901482B92
:1042F000CA010F90DF91CF911F9108958091EF0136
:10430000843011F120E488E190E00FB6F894A8958C
:10431000809360000FBE2093600083B7817F84602C
:1043200083BF83B7816083BF7894889583B78E7F7E
:1043300083BF0FB6F894A895809160008861809340
:104340006000109260000FBE089508950C94A5219E
:10435000CF930E94A6210E9484090E94A521C0E05B
:104360008C2F0E94B80A811104C0CF5FCE30C1F7F4
:1043700001C081E0CF9108950E94CC1A0E94FE14E2
:104380000C942C0D82E084BD93E095BD9AEF97BD0F
:1043900080936E0008952FB7F8948091D801909182
:1043A000D901A091DA01B091DB012FBF0895CF921E
:1043B000DF92EF92FF920F931F932FB7F8944091E3
:1043C000D8015091D9016091DA017091DB012FBFC2
:1043D0006A017B01EE24FF248C0120E030E0C0164E
:1043E000D106E206F30610F4415051099A01281B48
:1043F000390BC9011F910F91FF90EF90DF90CF9083
:1044000008951F920F920FB60F9211248F939F93CE
:10441000AF93BF938091D8019091D901A091DA0117
:10442000B091DB010196A11DB11D8093D80190933D
:10443000D901A093DA01B093DB01BF91AF919F91B5
:104440008F910F900FBE0F901F9018950E94F7113B
:10445000F8942FEF87EA91E6215080409040E1F7F1
:1044600000C0000087E090EBDC018093F80190939E
:10447000F901A093FA01B093FB019CE088E10FB62B
:10448000F894A895809360000FBE90936000FFCFD2
:10449000EF92FF920F931F93CF93DF93D82FC0E03B
:1044A0008C2F0E94B80A00E010E0E82EF12CC70122
:1044B000002E02C0959587950A94E2F780FD06C00C
:1044C0000F5F1F4F0630110591F709C0602F7C2F39
:1044D00080E00E94C60B8D13F3CF81E004C0CF5F54
:1044E000CE30F1F680E0DF91CF911F910F91FF90D8
:1044F000EF900895CF93C82F8CE20E944822882322
:1045000021F08C2FCF910C94482280E0CF91089518
:10451000CF930E94D723811102C00E94BD238CEF4C
:1045200095E00E945707C5E6C15049F00E948409F2
:104530008FE39CE90197F1F700C00000F5CF85EF0C
:1045400095E00E94570789E20E947A22811113C1E7
:104550008AE20E947A2281110E94BD2385E00E9496
:104560007A2281110E9426220E94E2238093D701A1
:1045700087E00E947A228823A9F18BE10E947A22A7
:10458000882351F08091D70181FB222720F991E007
:10459000922790FB81F90EC08EE00E947A22882338
:1045A00061F08091D70182FB222720F991E09227C8
:1045B00090FB82F98093D70115C080E10E947A2296
:1045C0009091D701882341F093FB222720F981E0C5
:1045D000822780FB93F904C0892F809580FB90F996
:1045E0009093D7018091D7010E94E6230E94F42383
:1045F0008093E90180EE0E947A22882341F0809125
:10460000E901982F909590FB80F98093E90189E367
:104610000E947A22882359F08091E90181FB2227A8
:1046200020F991E0922790FB81F98093E90182EED5
:104630000E947A22882359F08091E90182FB222787
:1046400020F991E0922790FB82F98093E90186EEB0
:104650000E947A22882359F08091E90183FB222766
:1046600020F991E0922790FB83F98093E90183EE92
:104670000E947A22882359F08091E90184FB222745
:1046800020F991E0922790FB84F98093E90185E37A
:104690000E947A22882359F08091E90185FB222724
:1046A00020F991E0922790FB85F98093E90181E35D
:1046B0000E947A22882359F08091E90186FB222703
:1046C00020F991E0922790FB86F98093E90181E13E
:1046D0000E947A22882359F08091E90187FB2227E2
:1046E00020F991E0922790FB87F98093E90180916E
:1046F000E9010E94F8238091E90187FB882780F96E
:1047000080930D0187E20E947A22C82F8EE10E94D9
:104710007A228111C2608FE10E947A228111C460E5
:1047200080E20E947A228111C86081E20E947A228E
:104730008111C06182E20E947A228111C06283E20B
:104740000E947A228111C06484E20E947A22882326
:1047500011F0C06802C0CC2329F08C2F0E94EF23F7
:104760006C2F03C00E94EB23682F70E080E090E084
:10477000CF910C94831ECF9108956DEE7EEF80E073
:1047800090E00E94CE2D60E082E090E00E94C02D7B
:1047900060E083E090E00E94C02D60E084E090E063
:1047A0000E94C02D60E085E090E00C94C02D80E078
:1047B00090E00E94BA2D21E08D3E9E4F09F020E04E
:1047C000822F089582E090E00C94B22D682F82E051
:1047D00090E00C94C02D83E090E00C94B22D682FF3
:1047E00083E090E00C94C02D84E090E00C94B22D16
:1047F000682F84E090E00C94C02D8091DE0180FF52
:104800000BC06091130185E0689FB001112475957C
:104810006795759567952BC081FF09C0609113015D
:1048200085E0689FB00111247595679520C082FFCF
:1048300007C06091130185E0689FB001112417C083
:104840009091DF019923D1F060911201961788F7BA
:104850002091130185E0289F90011124929FA001CF
:10486000939F500D112470E0CA010E94842D60387E
:10487000710540F46115710519F406C065E070E03A
:10488000862F08958FE7089581E008958091DE01D5
:1048900080FF08C06091110170E07595679575956E
:1048A000679521C081FF06C06091110170E0759588
:1048B000679519C082FF04C06091110170E010C0BB
:1048C0009091DF01992399F0609110019617A0F75C
:1048D00080911101899FC001112470E00E94842DF4
:1048E0006038710540F46115710519F406C061E086
:1048F00070E0862F08958FE7089581E00895803F46
:1049000021F40E94FD23819504C0813F29F40E9477
:10491000FD238093E2010895823F21F40E94FD234C
:10492000819504C0833F29F40E94FD238093E10117
:104930000895893F19F40E94462405C08A3F31F446
:104940000E94462481958093E30108958B3F21F4D2
:104950000E944624819504C08C3F29F40E9446247D
:104960008093E4010895843F21F48091E001816007
:1049700017C0853F21F48091E001826011C0863F1D
:1049800021F48091E00184600BC0873F21F4809185
:10499000E001886005C0883F31F48091E0018061CA
:1049A0008093E00108958D3F21F48091DE018160C4
:1049B0000BC08E3F21F48091DE01826005C08F3FE5
:1049C00029F48091DE0184608093DE010895803FA8
:1049D00039F48091E20187FF6CC01092E20169C056
:1049E000813F29F48091E2011816BCF362C09091D6
:1049F000E101823F29F497FF5CC01092E10159C0A8
:104A0000833F19F41916CCF354C0893F41F48091C7
:104A1000E30118160CF04DC01092E3014AC08A3F22
:104A200029F48091E30187FF44C0F6CF8B3F39F42E
:104A30008091E40187FF3DC01092E4013AC08C3FB1
:104A400029F48091E4011816BCF333C0843F21F4AB
:104A50008091E0018E7F17C0853F21F48091E001B5
:104A60008D7F11C0863F21F48091E0018B7F0BC0C8
:104A7000873F21F48091E001877F05C0883F31F4B2
:104A80008091E0018F7E8093E00113C08D3F21F47F
:104A90008091DE018E7F0BC08E3F21F48091DE017C
:104AA0008D7F05C08F3F29F48091DE018B7F80933D
:104AB000DE018091E10181110EC08091E20181113E
:104AC0000AC08091E301811106C08091E401811147
:104AD00002C01092DF0108958091D70183FF7EC04C
:104AE00088E396E00E9457078091E0011F928F9320
:104AF00083E396E09F938F930E94F00781E396E013
:104B00000E9457078091E101282F082E000C330BDB
:104B10003F938F938EE296E09F938F930E94F007CE
:104B20008CE296E00E9457078091E201282F082E20
:104B3000000C330B3F938F9389E296E09F938F9302
:104B40000E94F00787E296E00E9457078091E301F8
:104B5000282F082E000C330B3F938F9384E296E0AE
:104B60009F938F930E94F00782E296E00E9457077E
:104B70008091E401282F082E000C330B3F938F9374
:104B80008FE196E09F938F930E94F0078CE196E06F
:104B90000E9457078091DF011F928F9389E196E071
:104BA0009F938F930E94F00787E196E00E9457073A
:104BB0008091DE011F928F9384E196E09F938F9303
:104BC0000E94F00781E196E00E9457078DB79EB7DB
:104BD0004C960FB6F8949EBF0FBE8DBF80EE91E04D
:104BE0000E9452150E94CB219093DD018093DC013D
:104BF00008951F93CF93DF938091DC019091DD01A5
:104C00000E94D721AC019091DF01992321F02091DE
:104C1000140130E006C0209115018AE0289F900120
:104C200011244217530708F485C08091E101C09117
:104C3000E201D091E3011091E401811107C0C1119B
:104C400075C0D11173C0111171C074C09F3F19F0AC
:104C50009F5F9093DF01181624F40E94FD23809338
:104C6000E1018091E10187FF05C00E94FD2381954C
:104C70008093E1011C1624F40E94FD238093E2013D
:104C80008091E20187FF05C00E94FD2381958093FA
:104C9000E2016091E101662331F1C091E201CC2390
:104CA00011F1062E000C770B880B990B0E947F2CBC
:104CB00023E333E343E35FE30E94E32C0E94472CAA
:104CC0006093E1016C2FCC0F770B880B990B0E943E
:104CD0007F2C23E333E343E35FE30E94E32C0E9452
:104CE000472C6093E2011D1624F40E944624809311
:104CF000E3018091E30187FF05C00E94462481956E
:104D00008093E301111624F40E9446248093E40169
:104D10008091E40187FF05C00E944624819580931D
:104D2000E401DF91CF911F910C946C259F3F09F016
:104D30008FCFA0CFDF91CF911F910895E0EEF1E0EA
:104D400085E0DF011D928A95E9F71092DF0110924C
:104D5000DE0108958BE598E00E9457071F9281E0DD
:104D60008F931F9285E08F938DE098E09F938F93B0
:104D70000E94F0070F900F900F900F900F900F90E0
:104D800008958330E9F128F4813061F0823009F12F
:104D90000895853009F462C008F449C0863009F4EA
:104DA00074C0089580911501262F30E0280F311D21
:104DB0002F3F310524F4680F6093150103C08FEF76
:104DC00080931501809115011F928F9386E497E0DF
:104DD00072C080911401262F30E0280F311D2F3F23
:104DE000310524F4680F6093140103C08FEF8093A2
:104DF0001401809114011F928F9384E397E05BC0AC
:104E000080911301262F30E0280F311D2F3F3105EF
:104E100024F4680F6093130103C08FEF8093130194
:104E2000809113011F928F9381E297E044C080919B
:104E30001201262F30E0280F311D2F3F310524F4B9
:104E4000680F6093120103C08FEF8093120180916D
:104E500012011F928F938CE097E02DC08091110179
:104E6000262F30E0280F311D2F3F310524F4680F25
:104E70006093110103C08FEF8093110180911101A4
:104E80001F928F9383EF96E016C080911001262F1A
:104E900030E0280F311D2F3F310524F4680F609357
:104EA000100103C08FEF80931001809110011F92B9
:104EB0008F9388ED96E09F938F930E94F0070F9059
:104EC0000F900F900F900895833081F128F4813076
:104ED00059F08230D1F00895853009F449C0B8F115
:104EE000863009F456C0089580911501681720F4A2
:104EF000861B8093150102C0109215018091150147
:104F00001F928F9389EC96E054C08091140168172A
:104F100020F4861B8093140102C01092140180912A
:104F200014011F928F9387EB96E043C08091130189
:104F3000681720F4861B8093130102C0109213019E
:104F4000809113011F928F9384EA96E032C0809182
:104F50001201681720F4861B8093120102C0109280
:104F60001201809112011F928F938FE896E021C069
:104F700080911101681720F4861B8093110102C0F3
:104F800010921101809111011F928F9386E796E094
:104F900010C080911001681720F4861B80931001C7
:104FA00002C010921001809110011F928F938BE527
:104FB00096E09F938F930E94F0070F900F900F90B1
:104FC0000F900895CF93C82F1F928F9380E699E09A
:104FD0009F938F930E94F00781E090E0A0E0B0E003
:104FE000BC01CD0104C0660F771F881F991FCA95A9
:104FF000D2F70E94831E0F900F900F900F90CF91C9
:105000000C94CC1ACF938D3109F465C0B0F58E3075
:1050100009F4CCC100F5873009F49BC1A8F48630AF
:1050200009F06DC28091D701817F8E7F8093D70177
:1050300085E699E00E94570784EA9DE00E945707A1
:1050400081E08093E60180C1883009F44FC08B3045
:1050500009F47CC154C2863109F4F0C138F48031BE
:1050600009F4B8C1813109F430C249C2893109F467
:10507000CEC18B3109F486C142C2853309F437C2EF
:1050800048F4873209F433C208F433C2893209F490
:105090002EC235C2833438F48A3308F02CC28833E8
:1050A00009F454C12CC2833409F421C2883409F0B4
:1050B00026C20E94CC1A83E99DE00E9457079FEF09
:1050C00023ED80E3915020408040E1F700C00000D4
:1050D0000E94262239C183EB9DE00E9457070E945F
:1050E000012C0E94FE140E942C0D2EC188EA9DE026
:1050F0000E94570786E79BE00E9457070E94EB2318
:105100001F928F9383E79BE09F938F930E94F007FA
:1051100081E79BE00E9457070E94E223C82F8EE59B
:105120009BE00E9457071F92CF9389E59BE09F93D6
:105130008F930E94F00787E59BE00E9457078DE45C
:105140009BE00E9457078C2F81701F928F938AE4F7
:105150009BE09F938F930E94F00788E49BE00E945E
:1051600057078EE39BE00E945707C1FB882780F911
:105170001F928F938BE39BE09F938F930E94F00786
:1051800089E39BE00E9457078DE29BE00E9457074E
:10519000C2FB882780F91F928F938AE29BE09F933E
:1051A0008F930E94F00788E29BE00E9457078FE1EF
:1051B0009BE00E945707C3FBCC27C0F91F92CF93F7
:1051C0008CE19BE09F938F930E94F0078AE19BE024
:1051D0000E9457070E94F423C82F86E09BE00E949C
:1051E00057071F92CF9381E09BE09F938F930E947C
:1051F000F0078FEF9AE00E94570786EE9AE00E9430
:1052000057078C2F81701F928F9383EE9AE09F93A4
:105210008F930E94F0078DB79EB780960FB6F894D3
:105220009EBF0FBE8DBF81EE9AE00E9457078AECA9
:105230009AE00E945707C1FB882780F91F928F933D
:1052400087EC9AE09F938F930E94F00785EC9AE099
:105250000E94570783EB9AE00E945707C2FB8827FA
:1052600080F91F928F9380EB9AE09F938F930E9417
:10527000F0078EEA9AE00E9457078CE99AE00E94B4
:105280005707C3FB882780F91F928F9389E99AE01B
:105290009F938F930E94F00787E99AE00E94570737
:1052A0008DE89AE00E945707C4FB882780F91F9277
:1052B0008F938AE89AE09F938F930E94F00788E883
:1052C0009AE00E94570786E79AE00E945707C5FBBD
:1052D000882780F91F928F9383E79AE09F938F939B
:1052E0000E94F00781E79AE00E94570785E59AE05F
:1052F0000E945707C6FB882780F91F928F9382E58B
:105300009AE09F938F930E94F00780E59AE00E94B5
:10531000570788E49AE00E945707C7FBCC27C0F9DB
:105320001F92CF9385E49AE09F938F930E94F0079A
:1053300083E49AE00E9457078DB79EB74C960FB64C
:10534000F8949EBF0FBE8DBFC1E0DEC08CE899E02F
:105350005BC08091D701C82FC17080FF09C086E86B
:105360009DE00E9457078091D701817F8E7F47C0C3
:105370008AE79DE00E9457078091D7018160809362
:10538000D701E2CF9091D70191FBCC27C0F981E002
:10539000C827892FC0FB81F98093D701CC2319F04E
:1053A0008DE69DE027C08FE59DE02EC09091D7014E
:1053B00092FBCC27C0F981E0C827892FC0FB82F976
:1053C0008093D701CC2319F080E59DE013C080E4E1
:1053D0009DE01AC09091D70193FBCC27C0F981E0E2
:1053E000C827892FC0FB83F98093D701CC2351F0C4
:1053F00084E39DE00E9457078091D70181608093EC
:10540000D70182C087E29DE00E9457079DCF88E1C7
:105410009DE00E9457078CEE9CE00E9457078FEAA0
:105420009CE00E94570788E89CE00E94570784E4AC
:105430009CE00E94570786E19CE0E6CF88E09CE074
:105440000E9457070E94FE141F928F938EEE9BE0DE
:105450009F938F930E94F00780910C011F928F936E
:1054600087ED9BE09F938F930E94F00780916E01E0
:105470001F928F9384EC9BE09F938F930E94F00781
:1054800080910D011F928F9381EB9BE09F938F93EF
:105490000E94F0078091D8019091D901A091DA0182
:1054A000B091DB01BF93AF939F938F938DE99BE006
:1054B0009F938F930E94F0078DB79EB746960FB6C5
:1054C000F8949EBF0FBE8DBF3FCF0E94CC1AC091F3
:1054D0000D0181E0C827C0930D01CC2329F083E999
:1054E0009BE00E94570710C088E89BE08DCF80E0CA
:1054F00003C08D5101C089530E94E22725CF86E861
:105500009BE00E945707C0E08C2FCF91089580E068
:1055100008950C94872ACF93C82F8091E60181309B
:1055200081F020F0823009F44FC045C1E0910E01B6
:10553000F0910F018081813169F0823209F03DC123
:1055400009C0E0910E01F0910F018081813111F0CD
:10555000823261F48C2F0E94892A811104C08C2F21
:105560000E9402282FC081E090E02CC08C2F0E9466
:10557000872A811126C0C431E1F070F4CB3081F06C
:10558000C031D1F40E94AA2688E599E00E9457070D
:1055900082E08093E60115C0C93259F0C83361F446
:1055A00085E699E00E9457078CE599E00E9457072D
:1055B00008C01092E60103C186E599E00E945707F2
:1055C000FEC081E08170FDC0C43220F5CE3108F00C
:1055D000C0C0CB3099F1C8F4C73009F0D2C08AE01E
:1055E0008093150194E19093140193E0909313013B
:1055F0008093120188E08093110188E2809310016A
:105600008CEF97E00E945707BFC0C33149F1C43106
:10561000C1F0B7C0CB3409F4A9C028F4C93289F06D
:10562000C83361F0AEC0C13509F49EC0C23509F47B
:1056300099C0CE3409F0A5C06AE09EC00E94AA2697
:10564000A3C08091E501882319F01092E5019CC068
:1056500089E098E00E94570781E08093E601B1C09D
:1056600083EE97E00E94570781ED97E00E9457076D
:10567000809115011F928F938EEC97E09F938F93EB
:105680000E94F0078CEC97E00E9457078AEB97E0A6
:105690000E945707809114011F928F9387EB97E028
:1056A0009F938F930E94F00785EB97E00E94570726
:1056B00086EA97E00E945707809113011F928F930B
:1056C00083EA97E09F938F930E94F00781EA97E027
:1056D0000E94570780E997E00E94570780911201C6
:1056E0001F928F938DE897E09F938F930E94F0070E
:1056F0008BE897E00E94570786E797E00E945707DC
:10570000809111011F928F9383E797E09F938F936E
:105710000E94F00781E797E00E9457078AE597E02B
:105720000E945707809110011F928F9387E597E0A1
:105730009F938F930E94F00785E597E00E9457079B
:105740008DB79EB748960FB6F8949EBF0FBE8DBF1B
:105750001BC0CE51EC2FF0E0E15DFE4F80818093C5
:10576000E50112C061E003C061E006C06AE080911B
:10577000E5010E94C12608C08091E5010E946427CE
:1057800003C08AEF97E013C08091E501882369F098
:105790001F928F9384EF97E09F938F930E94F0075F
:1057A0000F900F900F900F9004C081EF97E00E9430
:1057B000570781E006C01092E60180E002C080E059
:1057C00001CFCF910895E1E8F0E080818860808387
:1057D0008081816080838FB7F89493E090938900F3
:1057E00090ED909388008FBF0895EFE6F0E0808100
:1057F000826080830895EFE6F0E080818D7F808372
:105800000895EFE6F0E0908182E089278083089593
:105810001F920F920FB60F9211242F933F934F9325
:105820005F936F937F938F939F93AF93BF93EF9308
:10583000FF938091E7019091E80101969093E80130
:105840008093E701811103C082E00E942C0DE0915A
:10585000E801E695E695F0E0ED53F24FE491809192
:10586000E7018E1303C080E00E942C0DFF91EF91A1
:10587000BF91AF919F918F917F916F915F914F9168
:105880003F912F910F900FBE0F901F9018950E947F
:105890004E2C6894B1110C94DD2C08950E94C22CFA
:1058A00088F09F5798F0B92F9927B751B0F0E1F0E1
:1058B000660F771F881F991F1AF0BA95C9F714C091
:1058C000B13091F00E94DC2CB1E008950C94DC2CF6
:1058D000672F782F8827B85F39F0B93FCCF38695CA
:1058E00077956795B395D9F73EF490958095709527
:1058F00061957F4F8F4F9F4F0895E89409C097FBA4
:105900003EF490958095709561957F4F8F4F9F4F96
:105910009923A9F0F92F96E9BB279395F6958795DA
:1059200077956795B795F111F8CFFAF4BB0F11F49D
:1059300060FF1BC06F5F7F4F8F4F9F4F16C0882344
:1059400011F096E911C0772321F09EE8872F762F7A
:1059500005C0662371F096E8862F70E060E02AF0BB
:105960009A95660F771F881FDAF7880F96958795A7
:1059700097F9089557FD9058440F551F59F05F3F10
:1059800071F04795880F97FB991F61F09F3F79F061
:1059900087950895121613061406551FF2CF4695E3
:1059A000F1DF08C0161617061806991FF1CF869565
:1059B0007105610508940895E894BB276627772749
:1059C000CB0197F908950E94F62C0C94672D0E9444
:1059D000592D38F00E94602D20F0952311F00C9481
:1059E000502D0C94562D11240C94DD2C0E94BA2CB1
:1059F00070F3959FC1F3950F50E0551F629FF00122
:105A0000729FBB27F00DB11D639FAA27F00DB11D3A
:105A1000AA1F649F6627B00DA11D661F829F2227C3
:105A2000B00DA11D621F739FB00DA11D621F839F4A
:105A3000A00D611D221F749F3327A00D611D231F20
:105A4000849F600D211D822F762F6A2F11249F576E
:105A500050409AF0F1F088234AF0EE0FFF1FBB1F71
:105A6000661F771F881F91505040A9F79E3F510530
:105A700080F00C94502D0C94DD2C5F3FE4F3983EA5
:105A8000D4F3869577956795B795F795E7959F5FDA
:105A9000C1F7FE2B880F911D9695879597F908956C
:105AA00097F99F6780E870E060E008959FEF80ECD1
:105AB000089500240A941616170618060906089574
:105AC00000240A9412161306140605060895092EDA
:105AD0000394000C11F4882352F0BB0F40F4BF2B49
:105AE00011F460FF04C06F5F7F4F8F4F9F4F089589
:105AF000991B79E004C0991F961708F0961B881F20
:105B00007A95C9F78095089597FB072E16F40094AF
:105B100007D077FD09D00E949E2D07FC05D03EF4EA
:105B2000909581959F4F0895709561957F4F089549
:105B3000EE0FFF1F0590F491E02D0994AA1BBB1BEB
:105B400051E107C0AA1FBB1FA617B70710F0A61B7D
:105B5000B70B881F991F5A95A9F780959095BC019E
:105B6000CD010895F999FECF92BD81BDF89A99278C
:105B700080B50895A8E1B0E042E050E00C94D52D46
:105B8000262FF999FECF1FBA92BD81BD20BD0FB659
:105B9000F894FA9AF99A0FBE019608950E94C02DC2
:105BA000272F0C94C12DDC01CB01FC01F999FECF0C
:105BB00006C0F2BDE1BDF89A319600B40D92415095
:0A5BC0005040B8F70895F894FFCFA5
:105BCA0020022D0D200EFB0DC70D930D0101C501FD
:105BDA0028080A03140A3F4D3620394605F904C33A
:105BEA0004A3046A04DD03F6030F0428044804012D
:0A5BFA000203040506070809000075
:00000001FF

@ -0,0 +1,187 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | 1 ! | 2 @ | 3 # | 4 $ | 5 % | Lang | | Esc | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | Bckspc |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | L2 | | L2 | Y | U | I | O | P | \ | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | Ctrl | A | S | D | F | G |------| |------| H | J | K | L | ; : | ' " |
* |--------+------+------+------+------+------| L1 | | L1 |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | | | | N | M | , < | . > | / ? | - _ |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | L1 | ` ~ | ' " | \ | | L2 | | { | } | [ { | ] } | L1 |
* `----------------------------------' `----------------------------------'
* ,--------------. ,---------------.
* | Home | End | | PgUp |Insert |
* ,------|-------|------| |-------+-------+------.
* | | | LGui | | Del | | |
* | Space| Alt |------| |-------| Enter |Space |
* | | | LGui | | Bcsp | | |
* `---------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LGUI(KC_SPC),
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(2),
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1),
MO(1), KC_GRV, KC_QUOT, KC_BSLS, MO(2),
KC_HOME, KC_END,
KC_LGUI,
KC_SPC, KC_LALT, KC_LGUI,
// right hand
KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
MO(2), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
MO(1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, MO(1),
KC_PGUP, KC_INS,
KC_DEL,
KC_BSPC, KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | = | . | 0 | - | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
KC_EQL,KC_DOT, KC_0, KC_MINS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | |GuiUp | Expl | | Term | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | |GuiLft|GuiDwn|GuiRgt| | |------| |------| Left | Down | Up |Right | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | |Browsr| | | | |VolDwn|VolUp | Mute | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | | Play | Prev | Next | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | |Brwser|Brwser|
* | Lclk | Rclk |------| |------|Fwd |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, LGUI(KC_W), LGUI(KC_E), KC_BTN1, LGUI(KC_T), KC_TRNS,
KC_TRNS, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), KC_MS_D, KC_MS_R,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_BTN1, KC_BTN2, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_WBAK, KC_WFWD
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void * matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

@ -0,0 +1,192 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
/*
* Ordinary Ergodox EZ keyboard layout, v2
* modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
* Details: http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | MDIA \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | SYMB | A | S | D | F | G |------| |------| H | J | K | L | ; | SYMB ' |
* |--------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl |
* `----------------------------------' `----------------------------------'
* ,---------------. ,---------------.
* | Home | End | | Left | Right |
* ,------|--------|------| |------+--------+------.
* | | | PgUp | | Up | | |
* |Backsp| Del |------| |------| Enter | Space|
* | | | PgDn | | Down | | |;
* `----------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
MO(SYMB), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LSFT(KC_TAB),
KC_LCTL, MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI,
KC_HOME, KC_END,
KC_PGUP,
KC_BSPC, KC_DEL, KC_PGDN,
// right hand
KC_MINS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, LT(MDIA, KC_BSLS),
KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(SYMB, KC_QUOT),
KC_TAB, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH),KC_RSFT,
KC_RGUI, KC_RALT, ALL_T(KC_NO),MEH_T(KC_NO), KC_RCTL,
KC_LEFT, KC_RGHT,
KC_UP,
KC_DOWN, KC_ENT, KC_SPC
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | MDIA | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
* |--------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | CAPS |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | 0 | . | = | + | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Left | Right| | Home | End |
* ,------|------|------| |------+------+------.
* | | | Up | | PgUp | | |
* |Space |Enter |------| |------|BackSp| Del |
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
MO(MDIA), KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_AMPR,LSFT(KC_COMM),
KC_TRNS, KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS, KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TAB,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_LEFT,KC_RGHT,
KC_UP,
KC_SPC,KC_ENT,KC_DOWN,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
LSFT(KC_DOT), KC_PIPE, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_F12,
KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PAST, KC_TRNS,
LSFT(KC_TAB), KC_BSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_CAPS,
KC_P0, KC_DOT, KC_PEQL, KC_PPLS, KC_PENT,
KC_HOME, KC_END,
KC_PGUP,
KC_PGDN, KC_BSPC, KC_DEL
),
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc |ShutDn| Sleep| Mute |Vol Dn|Vol Up| | | | |PrtSc | PgUp |MyComp| Mail | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp |ScrlUp| |ScrlUp| |ScrlUp| |ScrlUp| Up | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| Home | Left | Down | Right| End | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | |MsDown|ScrlDn| |ScrlDn| |ScrlDn| |ScrlDn| Down | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | | | PgDn | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
* ,------|------|------| |------+------+------.
* |Brwser|Brwser|Search| |VolUp | | |
* |Back | Fwd |------| |------| Stop | Play-|
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
KC_ESC, KC_PWR, KC_SLEP, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS,
MO(MDIA), KC_TRNS, KC_TRNS, KC_MS_U, KC_WH_U, KC_TRNS, KC_WH_U,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_D, KC_TRNS, KC_TRNS, KC_WH_D,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_WH_D,
KC_WSTP, KC_WREF,
KC_WSCH,
KC_WBAK, KC_TRNS, KC_WHOM,
// right hand
KC_TRNS, KC_TRNS, KC_PSCR, KC_PGUP, KC_MYCM, KC_MAIL, KC_TRNS,
KC_WH_U, KC_TRNS, KC_WH_U, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT,KC_END, KC_TRNS,
KC_WH_D, KC_TRNS, KC_WH_D, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_PGDN, KC_TRNS,KC_TRNS, KC_TRNS,
KC_MPRV, KC_MNXT,
KC_VOLU,
KC_VOLD, KC_MSTP, KC_MPLY
),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
// TODO: Make this relevant to the ErgoDox EZ.
case 1:
ergodox_right_led_1_on();
break;
case 2:
ergodox_right_led_2_on();
break;
default:
// none
break;
}
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

@ -0,0 +1,27 @@
[{x:3.5},"#\n3",{x:10.5},"*\n8"],
[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"],
[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"],
[{y:-0.875,c:"#73ab6a",w:1.5},"~\n\n\n\n\n\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{t:"#000000\n\n\n\n#0000ff",w:1.5},"+\n\n\n\n\n\n="],
[{y:-0.375,x:3.5,t:"#000000"},"E",{x:10.5},"I"],
[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"],
[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
[{y:-0.875,c:"#73ab6a",w:1.5},"Tab",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",fa:[0,0,0,1],w:1.5},"|\n\\\nMedia\nL2"],
[{y:-0.375,x:3.5,c:"#cccccc"},"D",{x:10.5},"K"],
[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"],
[{y:-0.875,x:5.5},"G",{x:6.5},"H"],
[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\nL1",{c:"#cccccc"},"A",{x:14.5},":\n;",{c:"#2277ff",w:1.5},"\"\n'\nSymbols\nL1"],
[{y:-0.625,x:6.5,c:"#bfbf67",h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\nShift",{c:"#cccccc"},"Z\n\nCtrl",{x:14.5},"?\n/\nCtrl",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift"],
[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bfbf67"},"Home","End"],
[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"],
[{x:2},"Page\n\n\n\n\n\nDown"],
[{r:-30,rx:13,y:-1,x:-3},"Left","Right"],
[{x:-3},"Up",{h:2},"Enter",{h:2},"Space"],
[{x:-3},"Down"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

@ -0,0 +1,27 @@
[{x:3.5,c:"#9988bb"},"Vol\n\n\n\n\n\nMute",{x:10.5,c:"#ccffff"},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5,c:"#9988bb"},"Sleep",{x:1},"Vol\n\n\n\n\n\nDown",{x:8.5},"Print\n\n\n\n\n\nScreen",{x:1},"Home\n\n\n\n\n\nDir"],
[{y:-0.875,x:5.5},"Vol\n\n\n\n\n\nUp",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
[{y:-0.875,c:"#ff4444",a:4,w:1.5},"Esc",{c:"#9988bb"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Email",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.375,x:3.5,c:"#ccffff",a:4},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#99ffff",a:4},"Scroll\n\n\n\n\n\nUp",{x:8.5},"Scroll\n\n\n\n\n\nUp",{x:1,c:"#cccccc",a:7},""],
[{y:-0.875,x:5.5},"",{c:"#99ffff",a:4,h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#cccccc",a:7},""],
[{y:-0.875,c:"#000000",t:"#ff0000",a:4,fa:[0,0,0,1],w:1.5},"Media\n\n\nL2",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#000000",t:"#ff0000",a:4,w:1.5},"\n\nMedia\nL2"],
[{y:-0.375,x:3.5,c:"#ccffff",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5,c:"#ccffff",a:4},"Home"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\nL1",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5,c:"#ccffff",a:4},"End",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.625,x:6.5,c:"#99ffff",a:4,h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
[{y:-0.75,x:3.5,c:"#ccffff"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#99ffff",a:4},"Scroll\n\n\n\n\n\nDown",{x:8.5},"Scroll\n\n\n\n\n\nDown",{x:1,c:"#cccccc",a:7},""],
[{y:-0.875,x:5.5},"",{x:6.5},""],
[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
[{y:-0.375,x:3.5,c:"#ccffff",a:4},"Left\n\n\n\n\n\nClick",{x:10.5},"Page\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#ccffff",a:4},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#cccccc",a:7},"",{x:1},""],
[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bbaacc",a:4},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
[{x:2},"Home\n\n\nBrowser"],
[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
[{x:-3,c:"#9988bb"},"Vol\n\n\n\n\n\nUp",{c:"#bbaacc",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
[{x:-3,c:"#9988bb"},"Vol\n\n\n\n\n\nDown"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

@ -0,0 +1,27 @@
[{x:3.5,c:"#a3a3a3"},"F3",{x:10.5},"F8"],
[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#a3a3a3",a:4},"F6"],
[{y:-0.875,c:"#ff4444",w:1.5},"Esc",{c:"#a3a3a3"},"F1",{x:14.5},"F10",{w:1.5},"F11"],
[{y:-0.375,x:3.5,c:"#bbc6ed"},"{",{x:10.5,c:"#bed4ba"},"8"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"@",{x:1},"}",{x:8.5,c:"#bed4ba"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
[{y:-0.875,c:"#2277ff",fa:[0,0,0,1],w:1.5},"Media\n\n\nL2",{c:"#bbc6ed"},"!",{x:14.5,c:"#bed4ba"},"/",{c:"#a3a3a3",w:1.5},"F12"],
[{y:-0.375,x:3.5,c:"#bbc6ed"},"(",{x:10.5,c:"#bed4ba"},"5"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"$",{x:1},")",{x:8.5,c:"#bed4ba"},"4",{x:1},"6"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"`",{x:6.5},"/"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\nL1",{c:"#bbc6ed",t:"#000000"},"#",{x:14.5,c:"#bed4ba"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\nL1"],
[{y:-0.625,x:6.5,c:"#bfbf67",t:"#000000",h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
[{y:-0.75,x:3.5,c:"#bbc6ed"},"[",{x:10.5,c:"#bed4ba"},"2"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"^",{x:1},"]",{x:8.5,c:"#bed4ba"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"~",{x:6.5},"\\"],
[{y:-0.875,c:"#cccccc",a:7,w:1.5},"",{c:"#bbc6ed",a:4},"%",{x:14.5,c:"#bed4ba"},"-",{c:"#2277ff",w:1.5},"\n\nCaps Lock"],
[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5,c:"#bed4ba",a:4},"."],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#bed4ba",a:4},"0",{x:1},"="],
[{y:-0.75,x:0.5,c:"#cccccc",a:7},"","",{x:14.5,c:"#bed4ba",a:4},"+","Enter"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bfbf67"},"Left","Right"],
[{h:2},"Space",{h:2},"Enter","Up"],
[{x:2},"Down"],
[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
[{x:-3},"Page\n\n\n\n\n\nDown"]

@ -0,0 +1,1119 @@
:100000000C9465020C94A9020C94A9020C94A90208
:100010000C94A9020C94A9020C94A9020C94A902B4
:100020000C94A9020C94A9020C94B00B0C94820CB1
:100030000C94A9020C94A9020C94A9020C94A90294
:100040000C94A9020C940B210C94A9020C94A90203
:100050000C94A9020C94AD1A0C94A9020C94A90258
:100060000C94A9020C94A9020C94A9020C94A90264
:100070000C94A9020C94A9020C94A9020C94A90254
:100080000C94A9020C94A9020C94A9020C94A90244
:100090000C94A9020C94A9020C94A9020C94A90234
:1000A0000C94A9020C94A9020C94A902E70C090D66
:1000B000F40D090DF40D4B0D6E0DF40DC30DD60DA1
:1000C000C310C310F110F11033116F116F136F13C0
:1000D00087116F137E127E1249136F136F135D1316
:1000E0000000F0A135002B000152E100E00000000B
:1000F0001E00140004001D7100774E001F001A003E
:1001000016001B00007F4C002000080007000600BE
:10011000E2002A002100150009001900E3004B004D
:10012000220017000A00050000004A0029002F00E5
:1001300000002B0200004D002D00300000002B00BD
:100140000000500023001C000B00110000004F00B5
:10015000240018000D001000E700520025000C00DC
:100160000E003600E6002C00260012000F003700BB
:10017000007F2800270013003300387100775100FA
:100180002E0031823481E500E40000002900025293
:1001900001000100010000003A001E0220022202BC
:1001A000010051003B001F02210223020100280030
:1001B0003C002F0226022F0001002C003D003002DF
:1001C00027023000010052003E00240235003502B3
:1001D000000050000100360200002B0000004F001C
:1001E0000100370200002B0200004A003F003102EC
:1001F0003800310000004D0040005F005C005900F5
:1002000062004B00410060005D005A0037004C0066
:10021000420061005E005B0067002A00430054005A
:100220005500560057004E004400450001003900BB
:1002300058000000290002520100010001000000E6
:10024000A5000100010001000100B500A6000100A9
:10025000F200010001000100A800F000F100F1002F
:10026000F400B600AA00F900F3000100FA00B4009F
:10027000A9000100010001000000B8000100F90020
:100280000000FA000000B9000100F9000000FA00C7
:100290000000AC00010001004A0001000000AB00BA
:1002A0004600F9005000FA000100A9004B0052007E
:1002B000510051004E00AE00B30001004F0001009C
:1002C0000100AD00B10001004D0001000100AA00D5
:1002D00001000100010001000100000016034500BB
:1002E000720067006F0044006F0078002000450036
:1002F0005A00000016034500720067006F004400BA
:100300006F007800200045005A0000000403090433
:1003100009026D00040100A0FA09040000010301B4
:100320000100092111010001223F00070581030896
:10033000000A090401000103010200092111010062
:1003400001224D000705820308000A09040200018A
:100350000300000009211101000122360007058376
:100360000308000A09040300010300000009211129
:100370000100012239000705840310000112011059
:100380000100000008EDFE07130100010200010555
:10039000010906A101050719E029E71500250195C6
:1003A0000875018102050819012905950575019156
:1003B000029501750391010507190029771500259C
:1003C00001957875018102C005010980A1018502AE
:1003D00016010026B7001A01002AB7007510950112
:1003E0008100C0050C0901A1018503160100269CAE
:1003F000021A01002A9C02751095018100C00501B6
:100400000902A1010901A100050919012905150029
:10041000250195057501810295017503810105018D
:10042000093009311581257F950275088106093843
:100430001581257F950175088106050C0A3802157E
:1004400081257F950175088106C0C005010906A1B7
:1004500001050719E029E7150025019508750181B7
:100460000295017508810105081901290595057591
:100470000191029501750391010507190029FF15E6
:100480000025FF950675088100C0000000000000EF
:100490000000000000010204060A0F17202C3A4A4F
:1004A0005D71879DB3C7DAE9F5FCFFFCF5E9DAC7B2
:1004B000B39D87715D4A3A2C20170F0A060402018A
:1004C0000000000000000000000011241FBECFEF5C
:1004D000DAE0DEBFCDBF04B603FE24C08091EE019A
:1004E0009091EF01A091F001B091F1018730904B14
:1004F000A740B04BB9F41092EE011092EF011092A8
:10050000F0011092F10114BE84B7877F84BF88E1A7
:100510000FB6F89480936000109260000FBEE0E088
:10052000FFE3099511E0A0E0B1E0EAE9F5E402C0DB
:1005300005900D92A433B107D9F721E0A4E3B1E00F
:1005400001C01D92AE3EB207E1F70E94F6080C947E
:10055000CB220C94000061110BC0FC018281882326
:1005600021F085EE0E94570F03C085EE0E941F10F8
:1005700080E090E0089508956091B1017091B2011A
:100580008091B3019091B4010E94D91956985E9858
:1005900025982D9826982E9827982F98813019F015
:1005A000823021F00895259A2D9A0895269A2E9A40
:1005B00008950C94BC0256985E9825982D9826981C
:1005C0002E9827982F988FEF90E090938900809332
:1005D000880090938B0080938A0090938D00809385
:1005E0008C00259A2D9A2FEF80E792E021508040D1
:1005F0009040E1F700C00000269A2E9A2FEF80E786
:1006000092E0215080409040E1F700C00000279A1E
:100610002F9A2FEF80E792E0215080409040E1F741
:1006200000C0000025982D982FEF80E792E0215020
:1006300080409040E1F700C0000026982E982FEFF0
:1006400080E792E0215080409040E1F700C0000038
:1006500027982F9856985E9825982D9826982E982A
:1006600027982F98089589EA8093800089E08093E5
:10067000810024982C983F988AB18F748AB96E981B
:10068000479A8BB1806B8BB9769A0E94DB020C94EF
:10069000BB0280E2809300018091340181110EC081
:1006A0000E94980381E0809334012FEF83ED90E363
:1006B000215080409040E1F700C0000080E40E949B
:1006C0009E038093000181112EC00E94C803809375
:1006D0000001811128C00E94C8038093000181118C
:1006E00022C08FE30E94C8038093000181111BC0C8
:1006F0000E94C00380E40E949E0380930001811148
:1007000012C08CE00E94C8038093000181110BC0CD
:100710000E94C80380930001811105C08FE30E94ED
:10072000C803809300010E94C003809100010895D6
:100730001092B9008AE08093B800089594EA9093EB
:10074000BC009091BC0097FFFCCF9091B900987FBE
:10075000983021F0903111F081E008958093BB0032
:1007600084E88093BC008091BC0087FFFCCF80911F
:10077000B900887F883111F0803471F780E00895E6
:1007800084E98093BC008091BC0084FDFCCF089577
:100790008093BB0084E88093BC008091BC0087FFFD
:1007A000FCCF9091B900987F81E0983209F480E005
:1007B000089584E88093BC008091BC0087FFFCCF43
:1007C0008091BB00089580910001811115C080E4E3
:1007D0000E949E038093000181110CC082E10E945F
:1007E000C80380930001811105C08FEF0E94C803E8
:1007F000809300010E94C00384B1807F84B985B1D9
:10080000807F85B98AB1837F8AB98BB1837F8BB9A9
:100810003E98469808950E944903809300010E94E3
:10082000E30380B38C7080BB81B3836F81BBE4E44E
:10083000F1E0A6E3B1E011921D9281E0E235F80704
:10084000D1F70C943303BF92CF92DF92EF92FF92D5
:100850000F931F93CF93DF9380910001882379F04A
:10086000809135018F5F80933501811108C00E940E
:10087000490380930001811102C00E94DB0206E35C
:1008800011E0C0E0D0E0DD24D39482E0C82EEE2455
:10089000E394F12CC73000F580910001811162C012
:1008A00080E40E949E0380930001811112C082E1C6
:1008B0000E94C8038093000181110BC0C7010C2E58
:1008C00001C0880F0A94EAF780950E94C8038093BC
:1008D00000010E94C00346C0CA30A1F028F4C8300D
:1008E00059F0C93061F005C0CC3089F070F0CD30DE
:1008F00089F0209A289810C0219A29980DC0229A30
:100900002A980AC0239A2B9807C0529A01C0539A7A
:100910005B9802C03E9A4698E0EAEA95F1F78FB1FB
:1009200079995AC092E081708D25892B7C9B02C0F9
:1009300090E001C094E0892B7D9B02C090E001C053
:1009400098E0892B7E9B02C090E001C090E1892B4A
:100950009FB19095991F9927991F9295990F907E15
:10096000892B0FC08091000181114BC080E40E944F
:100970009E0380930001882389F1B12C0E94C0035B
:100980008B2DF8019081981719F08083C092010196
:100990000E94E30321960F5F1F4FCE30D10509F06F
:1009A00079CF80910101882371F1815080930101F9
:1009B000882339F08FE99FE00197F1F700C000002C
:1009C00022C0A4E4B1E0E6E3F1E081918D9391E0EF
:1009D000E434F907D1F717C090E0A5CF83E10E9476
:1009E000C803809300018111C8CF81E40E949E0357
:1009F000809300018111C1CF0E94D903B82EB09419
:100A0000BDCF80E0BECF0E94D90281E0DF91CF91BF
:100A10001F910F91FF90EF90DF90CF90BF900895BE
:100A2000E82FF0E0EC5BFE4F8081089508958B3B4A
:100A3000910578F4883A910540F5853A9105D0F40E
:100A40008430910508F0B1C08130910509F4ADC042
:100A50006BC0803E910508F467C0883E910508F49C
:100A6000A4C09C01205F31092031310508F05CC031
:100A700090650895853A910509F459C0863A910523
:100A800009F458C083E890E40895883A910509F480
:100A900054C0893A910509F453C08A3A910509F482
:100AA00052C08B3A910509F451C08C3A910509F472
:100AB00050C08D3A910509F44FC0803B910509F46F
:100AC0004EC08E3A910509F44DC08F3A910509F454
:100AD0004CC0813B910509F44BC0823B910509F460
:100AE0004AC0833B910509F449C0843B910509F450
:100AF00048C0853B910509F447C0863B910509F440
:100B000046C0873B910509F445C0883B910509F42F
:100B100044C0893B910509F443C08A3B910509F023
:100B200042C08AE296E4089580E090E0089581E86A
:100B300090E4089582E890E4089582EE94E40895A4
:100B400089EE94E408958AEE94E4089585EB94E4A4
:100B5000089586EB94E4089587EB94E408958CEC73
:100B600094E408958DEC94E4089583E895E4089561
:100B70008AE895E4089582E995E4089584E995E486
:100B8000089581E296E4089583E296E4089584E26C
:100B900096E4089585E296E4089586E296E4089541
:100BA00087E296E4089580E094E40895089596E03D
:100BB000799FF001112494E5899FE00DF11D112426
:100BC000E60FF11DEE0FFF1FEC51FF4F8591949141
:100BD0000895880F991F805A9040FC018591949147
:100BE0000895880F991F80529F4FFC018591949121
:100BF000089526E0729FF001112444E5849FE00DE2
:100C0000F11D1124E60FF11DEE0FFF1FEC51FF4FF8
:100C100025913491C9019A9581159F4110F4C9011C
:100C20000895C90190528115904128F4C9019F701F
:100C30000E94F1050895C90190538115904120F457
:100C4000C9019927906C0895211580E5380769F44A
:100C50000E9490139FEF24E34CE0915020404040CD
:100C6000E1F700C000000C94D21A213080E538076B
:100C700031F48091CC0181608093CC010895C90149
:100C800090558115904108F050C0832F99278F709F
:100C9000992781309105D9F4A9014370552702C0E5
:100CA000880F991F4A95E2F79C68A90164E0440FF8
:100CB000551F6A95E1F744275370842B952B73E0F9
:100CC000220F331F7A95E1F7207633271DC082303B
:100CD000910529F4922F8827816F906A08958330B7
:100CE0009105A9F4A9014370552781E090E002C065
:100CF000880F991F4A95E2F79C6843E0220F331F43
:100D00004A95E1F7207E3770822B932B0895049744
:100D1000F1F4A9014370552781E090E002C0880FEB
:100D2000991F4A95E2F79A68E8CFC9019057811553
:100D3000904120F4C9019F7090620895C9019058B4
:100D40008115904120F4C9019F70906A0895203E5A
:100D50003105E0F4203C310558F52133310509F423
:100D600070C048F42932310509F464C02A323105D3
:100D700009F46EC074C029333105F1F02238310511
:100D8000D9F02533310509F44EC069C0233E310541
:100D900089F138F4203E3105C1F0223E3105E1F001
:100DA0005EC0263E310569F1273E3105A9F157C0E5
:100DB000C9010E94E90508958091DF0180FD02C00C
:100DC00081FF4DC080EE90E04BC08091DF0180FF3D
:100DD000F9CF89E390E044C08091DF0182FF0EC02B
:100DE0008091DF0184FF03C080E090E039C083EE92
:100DF00090E036C08091DF0182FFF2CF82EE90E07A
:100E00002FC08091DF0183FF0BC08091DF0184FD43
:100E1000EBCF87EE90E024C08091DF0183FFF5CF18
:100E200086EE90E01DC08091DF0185FF07C089E25A
:100E300090E016C08091DF0185FFF9CF85E390E057
:100E40000FC08091DF0186FF07C08AE290E008C0F2
:100E50008091DF0186FFF9CF81E390E001C0C901F5
:100E60000E941705089508950C943307809162013C
:100E70000895CF93DF9300D01F92CDB7DEB72091B6
:100E8000E501243019F523E029839B838A8320938D
:100E9000E9008FEF9091E800815095FD06C095ED37
:100EA0009A95F1F700008111F5CF8091E80085FF58
:100EB0000DC040E050E063E070E0CE0101960E947A
:100EC000A3098091E8008E778093E8000F900F903F
:100ED0000F90DF91CF910895CF93DF9300D01F92B1
:100EE000CDB7DEB72091E501243021F522E029833A
:100EF0009B838A8383E08093E9008FEF9091E800E1
:100F0000815095FD06C095ED9A95F1F7000081118D
:100F1000F5CF8091E80085FF0DC040E050E063E030
:100F200070E0CE0101960E94A3098091E8008E77BF
:100F30008093E8000F900F900F90DF91CF9108956C
:100F40002091E5012430F1F422E02093E9002FEF15
:100F50003091E800215035FD06C035ED3A95F1F7A6
:100F600000002111F5CF2091E80025FF0BC040E0E3
:100F700050E065E070E00E94A3098091E8008E7760
:100F80008093E8000895CF93DF93EC018091E50111
:100F9000843009F046C090910C019923D9F09091CA
:100FA0000D019923B9F08093E9008FEF9091E8004B
:100FB000815095FD06C095E19A95F1F700008111E9
:100FC000F5CF8091E80085FF2CC040E050E060E163
:100FD00070E017C081E08093E9008FEF9091E80006
:100FE000815095FD06C095ED9A95F1F700008111AD
:100FF000F5CF8091E80085FF14C040E050E068E044
:1010000070E0CE010E94A3098091E8008E77809362
:10101000E80080E1FE01A2E5B1E001900D928A9521
:10102000E1F7DF91CF9108958091E401811109C02A
:101030000E94350B0E94920B8091E20084608093A5
:10104000E20008951092E401089508950C94F820A8
:101050000E94691A0E94FE200E942F0E0C943407F1
:1010600042E061EC81E00E94AF0A42E061EC82E084
:101070000E94AF0A42E061EC83E00E94AF0A42E1C5
:1010800061EC84E00C94AF0A8091E701833009F4AD
:1010900055C030F4813071F0823009F48EC008956B
:1010A0008A3009F47AC08B3009F460C0893009F0C5
:1010B0009CC020C08091E601813A09F096C08091E1
:1010C000E800877F8093E8008091EA019091EB012E
:1010D000892B21F060E080E090E003C060E182E5D0
:1010E00091E070E00E94EC098091E8008B7780939A
:1010F000E80008958091E601813209F076C0809180
:10110000EA019091EB01009719F0039709F06DC087
:101110008091E800877F8093E8008091E80082FD5D
:1011200005C08091E5018111F8CF5FC08091F10089
:10113000809362018091E8008B7753C08091E60133
:10114000813A09F052C08091EA019091EB01892B1C
:1011500009F04BC08091E800877F8093E800809180
:10116000E80080FFFCCF80910C0136C08091E60141
:101170008132D9F58091EA019091EB01892BA9F593
:101180008091E800877F8093E8000E94E40A8091C4
:10119000E80180930C010C9490138091E601813258
:1011A00021F58091E800877F8093E8000E94E40A9F
:1011B0008091E9018093630108958091E601813A6D
:1011C000A1F48091E800877F8093E8008091E80097
:1011D00080FFFCCF809163018093F1008091E80053
:1011E0008E778093E8000C94E40A089584B7877F93
:1011F00084BF88E10FB6F89480936000109260007D
:101200000FBE90E080E80FB6F89480936100909351
:1012100061000FBE0E947E0E0E94350B0E94920B51
:101220008091E20084608093E20078940E940D0E29
:101230000E94800E82E091E00E942A0E0E94E62029
:101240008091E501853069F40E942C1A8091E301B8
:101250008823B1F30E94541A882391F30E948D09C8
:10126000EFCF0E94860EECCF292F33272330310594
:10127000A9F06CF42130310509F442C02230310567
:1012800009F043C08DE690E020E133E042C0213216
:101290003105C9F02232310519F137C09927813063
:1012A000910541F08230910541F0892B71F5ECE018
:1012B000F3E005C0E4EFF2E002C0ECEDF2E084916F
:1012C00090E09F0126C0643000F5E62FF0E0EE0FBD
:1012D000FF1FEE5DFE4F2081318189E090E019C053
:1012E000643098F4E62FF0E0DF01AA0FBB1FA65E82
:1012F000BE4F2D913C91EA5EFE4F808190E009C087
:1013000082E190E02DE733E004C080E090E020E04F
:1013100030E0FA0131832083089580E189BD82E1C4
:1013200089BD09B400FEFDCF8091D8008F7D8093E8
:10133000D8008091E00082608093E0008091E0001E
:1013400081FDFCCF0895CF92DF92EF92FF920F9331
:101350001F93CF93DF937C018B01EA010E94050B61
:10136000811131C0209731F088819981081B190BB8
:10137000E80EF91EC12CD12C0115110519F180912F
:10138000E80085FD14C08091E8008E778093E80026
:10139000209741F0888199818C0D9D1D99838883C8
:1013A00085E011C00E94050B882331F30CC0F701C2
:1013B00081917F018093F10001501109FFEFCF1A55
:1013C000DF0ADACF80E0DF91CF911F910F91FF907C
:1013D000EF90DF90CF9008952091EC013091ED01D6
:1013E0002617370748F06115710539F42091E80098
:1013F0002E772093E80001C0B901FC0120E06115BF
:101400007105B9F18091E501882309F440C0853068
:1014100009F43FC08091E80083FD3DC08091E80061
:1014200082FF06C08091E80082FF26C080E0089518
:101430008091E80080FFE3CF2091F3008091F200DB
:1014400090E0922B6115710551F08830910538F4C8
:1014500021912093F100615071090196F3CF21E0B1
:10146000089709F020E08091E8008E778093E800EB
:10147000C6CF2111C7CFD6CF8091E501882339F09F
:10148000853039F08091E80083FFCCCF04C082E042
:10149000089583E0089581E008952091EC01309152
:1014A000ED012617370748F06115710539F42091D1
:1014B000E8002E772093E80001C0B901FC0120E08C
:1014C00061157105C1F18091E501882309F441C0DE
:1014D000853009F440C08091E80083FD3EC08091D2
:1014E000E80082FF06C08091E80082FF27C080E00C
:1014F00008958091E80080FFE3CF2091F300809170
:10150000F20090E0922B6115710559F08830910539
:1015100040F424912093F1003196615071090196B5
:10152000F2CF21E0089709F020E08091E8008E7763
:101530008093E800C5CF2111C6CFD5CF8091E501BA
:10154000882339F0853039F08091E80083FFCBCFD4
:1015500004C082E0089583E0089581E00895982F03
:10156000973058F59093E900981739F07091EC0096
:101570002091ED005091F00003C0242F762F50E011
:1015800021FF19C03091EB003E7F3093EB0030918A
:10159000ED003D7F3093ED003091EB0031603093F2
:1015A000EB007093EC002093ED005093F00020913D
:1015B000EE0027FF07C09F5FD3CF8F708093E900B5
:1015C00081E0089580E008958091E60187FD05C0DF
:1015D0008091E80080FF0EC012C08091E80082FD7B
:1015E00005C08091E5018111F8CF08958091E80050
:1015F0008B7708C08091E5018111EACF0895809131
:10160000E8008E778093E80008958091E40090913F
:10161000E50045E62091EC0020FF21C02091E80084
:1016200020FD21C02091E501222389F0253089F099
:101630002091EB0025FD0FC02091E4003091E500E2
:101640002817390739F3415041F0C901E3CF82E04F
:10165000089583E0089581E0089584E0089520913D
:10166000E80022FFDFCF80E008950E94A30B0E94D4
:10167000AB0BE0EEF0E0808181608083E8EDF0E08C
:1016800080818F77808319BCA7EDB0E08C918E7F2D
:101690008C9380818F7E80831092E40108950F9354
:1016A0001F93CF93DF930E94A30B0E94AB0BC8ED57
:1016B000D0E088818F77888388818068888388815B
:1016C0008F7D888319BC1092E5011092E101109280
:1016D000E3011092E20100EE10E0F80180818B7FBF
:1016E000808388818160888342E060E080E00E949E
:1016F000AF0AE1EEF0E080818E7F8083E2EEF0E0E1
:10170000808181608083808188608083F80180810E
:101710008E7F8083888180618883DF91CF911F9144
:101720000F910895E8EDF0E080818F7E8083E7EDF2
:10173000F0E080818160808384E082BF81E08093DB
:10174000E4010C944F0BE8EDF0E080818E7F808304
:101750001092E20008951092DA001092E1000895CC
:101760001F920F920FB60F9211242F933F934F9316
:101770005F936F937F938F939F93AF93BF93EF93F9
:10178000FF938091E10082FF0BC08091E20082FF15
:1017900007C08091E1008B7F8093E1000E940C0ED6
:1017A0008091DA0080FF1FC08091D80080FF1BC0AD
:1017B0008091DA008E7F8093DA008091D90080FFDB
:1017C0000DC080E189BD82E189BD09B400FEFDCF75
:1017D00081E08093E5010E94140805C019BC1092B5
:1017E000E5010E9422088091E10080FF19C08091EC
:1017F000E20080FF15C08091E2008E7F8093E200BE
:101800008091E20080618093E2008091D800806244
:101810008093D80019BC85E08093E5010E942608DA
:101820008091E10084FF30C08091E20084FF2CC0F1
:1018300080E189BD82E189BD09B400FEFDCF8091C0
:10184000D8008F7D8093D8008091E1008F7E8093B7
:10185000E1008091E2008F7E8093E2008091E200BF
:1018600081608093E2008091E101882311F084E09F
:1018700007C08091E30087FF02C083E001C081E0E0
:101880008093E5010E9428088091E10083FF29C030
:101890008091E20083FF25C08091E100877F8093E3
:1018A000E10082E08093E5011092E1018091E10086
:1018B0008E7F8093E1008091E2008E7F8093E20032
:1018C0008091E20080618093E20042E060E080E08D
:1018D0000E94AF0A8091F00088608093F0000E941F
:1018E0002508FF91EF91BF91AF919F918F917F91CB
:1018F0006F915F914F913F912F910F900FBE0F907D
:101900001F9018951F920F920FB60F9211242F93CC
:101910003F934F935F936F937F938F939F93AF9377
:10192000BF93CF93EF93FF93C091E900CF70809165
:10193000EC001092E9008091F000877F8093F00026
:1019400078940E94BE0C1092E9008091F0008860AB
:101950008093F000C093E900FF91EF91CF91BF9188
:10196000AF919F918F917F916F915F914F913F9137
:101970002F910F900FBE0F901F9018951F93CF932C
:10198000DF93CDB7DEB7AA970FB6F894DEBF0FBED0
:10199000CDBFE6EEF1E08091F100819321E0EE3ED3
:1019A000F207C9F70E9444088091E80083FF1CC138
:1019B0002091E6013091E701832F90E08A30910574
:1019C00008F012C1FC01EA5AFF4F0C948022203823
:1019D00081F0223809F008C18091EA018F7080936C
:1019E000E9008091EB0085FB882780F91092E900DF
:1019F00006C08091E2019091E30191118260909183
:101A0000E800977F9093E8008093F1001092F10036
:101A1000C5C0822F8D7F09F0E7C0222319F0223044
:101A200061F0E2C08091E801813009F0DDC033301F
:101A300009F080E08093E30128C08091E8018111E2
:101A400024C02091EA012F7009F4CEC02093E90050
:101A50008091EB0080FF19C08091EB00333011F4CE
:101A6000806211C080618093EB0081E090E0022EE3
:101A700001C0880F0A94EAF78093EA001092EA0006
:101A80008091EB0088608093EB001092E9008091D8
:101A9000E800877F86C02111A7C01091E8011F7759
:101AA0008091E3008078812B8093E3008091E800AF
:101AB000877F8093E8000E94E40A8091E80080FF1D
:101AC000FCCF8091E30080688093E300112311F044
:101AD00083E001C082E08093E50186C02058223077
:101AE00008F082C08091E8019091E9018C3D23E0EB
:101AF000920779F583E08A838AE289834FB7F89465
:101B0000DE01139620E03EE051E2E32FF0E0509337
:101B10005700E49120FF03C0E295EF703F5FEF7044
:101B20008E2F90E0EA3010F0C79601C0C0968D93DA
:101B30009D932F5F243149F74FBF8091E800877F45
:101B40008093E8006AE270E0CE0101960E94EC0901
:101B500014C0AE014F5F5F4F6091EA010E943409EB
:101B6000009709F441C02091E800277F2093E80006
:101B7000BC0189819A810E944D0A8091E8008B778F
:101B80008093E80031C0203879F58091E800877FA4
:101B90008093E8008091E1018093F1008091E8005A
:101BA0008E778093E8000E94E40A1EC021111CC0B9
:101BB0009091E8019230C0F48091E800877F809393
:101BC000E8009093E1010E94E40A8091E101811113
:101BD00004C08091E30087FF02C084E001C081E07F
:101BE0008093E5010E9430088091E80083FF0AC0DD
:101BF0008091E800877F8093E8008091EB0080620D
:101C00008093EB00AA960FB6F894DEBF0FBECDBF4F
:101C1000DF91CF911F9108950895CF938091E501B1
:101C20008823B1F08091E9008F709091EC0090FFD3
:101C300002C090E801C090E0C92FC82B1092E900C3
:101C40008091E80083FD0E94BE0CCF70C093E90034
:101C5000CF91089590936901809368010895E09170
:101C60006801F0916901309721F00190F081E02D39
:101C7000099480E00895E0916801F091690130973E
:101C800021F00280F381E02D09940895E09168012C
:101C9000F0916901309721F00480F581E02D0994DD
:101CA000089520916601309167018217930771F0C2
:101CB0009093670180936601E0916801F09169015A
:101CC000309721F00680F781E02D09940895209146
:101CD0006401309165018217930771F0909365015B
:101CE00080936401E0916801F0916901309721F0DF
:101CF0000084F185E02D0994089508950C947D0EDB
:101D00000E946F1A0E940B040C94351BCF92DF9235
:101D1000EF92FF920F931F93CF93DF93CDB7DEB770
:101D20002B970FB6F894DEBF0FBECDBF0E942304E1
:101D30003BE6E32E31E0F32E00E010E0C02E802FD2
:101D40000E941005F701D1907F01D826B1F40F5FF2
:101D50001F4F0E30110591F78FEF89838A831B8205
:101D60000E94781A8160782F9D838C8349815A81E3
:101D70006B818D810E94290F41C09091CC0191FF10
:101D800004C08B870E9416058B8520E030E04D2D26
:101D900050E0922FBA01022E02C0759567950A9401
:101DA000E2F760FF25C02E83CF82EE24E394F12C6E
:101DB00002C0EE0CFF1C9A95E2F790E08E219F2165
:101DC00021E0892B09F420E028870E94781A81609D
:101DD000782F9A8789874E815F8168858A850E94DE
:101DE000290FF801E559FE4F80818E25808306C0BA
:101DF0002F5F3F4F2630310561F6A9CF0E94191E93
:101E000010916A010E942F0E1817A1F00E942F0E48
:101E100080936A012B960FB6F894DEBF0FBECDBF3C
:101E2000DF91CF911F910F91FF90EF90DF90CF90B6
:101E30000C9434072B960FB6F894DEBF0FBECDBFBF
:101E4000DF91CF911F910F91FF90EF90DF90CF9096
:101E50000895CF93DF93CDB7DEB72B970FB6F894E5
:101E6000DEBF0FBECDBF4F83588769877A878B87C8
:101E7000DE01119686E0FD0111928A95E9F785E071
:101E8000FE01379601900D928A95E1F749815A81BA
:101E90006B817C818D819E810E945C162B960FB692
:101EA000F894DEBF0FBECDBFDF91CF910895CF93E1
:101EB000C82F882309F4C1C0823859F40E942F0E1C
:101EC00081FDBBC089E30E94F9180E94B31989E320
:101ED0000CC0833879F40E942F0E80FDAEC083E5DC
:101EE0000E94F9180E94B31983E50E943919CF9115
:101EF0000C94B319843859F40E942F0E82FD9DC0B2
:101F000087E40E94F9180E94B31987E4EECF8CEFA2
:101F10008C0F813A48F48C2F0E944E2081118DC085
:101F20008C2F0E94F918E3CF80E28C0F883048F4A0
:101F3000C77081E001C0880FCA95EAF70E947A193C
:101F4000D6CF8BE58C0F833078F4C53A29F0C63AAA
:101F500031F482E890E005C081E890E002C083E8B7
:101F600090E0CF910C94510E88E58C0F833108F0EE
:101F700064C0C83A39F1C93A41F1CA3A49F1CB3A99
:101F800051F1CC3A59F1CD3A61F1C03B69F1CE3A09
:101F900071F1CF3A79F1C13B81F1C23B89F1C33B89
:101FA00091F1C43B99F1C53BA1F1C63BA9F1C73BF7
:101FB000B1F1C83BB9F1C93BC1F1CA3BC9F58AE2ED
:101FC00092E038C082EE90E035C089EE90E032C0F9
:101FD0008AEE90E02FC085EB90E02CC086EB90E07D
:101FE00029C087EB90E026C08CEC90E023C08DECFC
:101FF00090E020C083E891E01DC08AE891E01AC01B
:1020000082E991E017C084E991E014C081E292E096
:1020100011C083E292E00EC084E292E00BC085E240
:1020200092E008C086E292E005C087E292E002C03A
:1020300080E090E0CF910C94670ECF9108958823B3
:1020400009F44BC0823859F40E942F0E81FF45C01D
:1020500089E30E94F9180E94B31989E30CC0833800
:1020600071F40E942F0E80FF38C083E50E94F9189A
:102070000E94B31983E50E9439190C94B31984386E
:1020800059F40E942F0E82FF28C087E40E94F9189D
:102090000E94B31987E4EFCF9CEF980F913A58F361
:1020A00090E2980F983050F4877091E001C0990F3A
:1020B0008A95EAF7892F0E948019DFCF9BE5980F58
:1020C000933020F480E090E00C94510E885A8331D4
:1020D00020F480E090E00C94670E0895882321F0AE
:1020E0000E947A190C94B3190895882321F00E9454
:1020F00080190C94B3190895CF92DF92EF92FF925A
:102100000F931F93CF93DF93CDB7DEB728970FB60A
:10211000F894DEBF0FBECDBF8C0185E0F801DE0173
:10212000119601900D928A95E1F7F8014081318175
:10213000F280258122952F7083819481892B31F043
:102140003F3F31F481E04F3F19F403C081E001C00B
:1021500080E080FDC4C249833A8389819A812F83BC
:102160000E94B7189E8388870E94B6180E9489171C
:102170004E81E42FE295EF70F0E0E05AFF4F2F819F
:1021800068850C948022842F807F142F1F708823F1
:1021900011F01295107FFF2059F0112309F454C259
:1021A000812F68870E948A190E94B31968854CC2E2
:1021B000862F0E941F10112309F491C2812F0E94C3
:1021C000901928960FB6F894DEBF0FBECDBFDF91F1
:1021D000CF911F910F91FF90EF90DF90CF900C94D3
:1021E000B319342F307F842F8F70303211F08295E5
:1021F000807F662319F0613019F12BC0FF20B1F008
:10220000222309F493C1213009F090C128960FB61A
:10221000F894DEBF0FBECDBFDF91CF911F910F911C
:10222000FF90EF90DF90CF900C949A19222319F031
:10223000213009F454C28E830E949D198E8189C178
:10224000FF2021F0223008F04AC270C1211147C29C
:1022500080C1FF2021F0222309F468C1F5C12223A7
:1022600009F477C105C2242F26952695237030E006
:102270002115310521F021303105C9F030C2FF2090
:1022800021F0862F942F937002C080E090E0289672
:102290000FB6F894DEBF0FBECDBFDF91CF911F9177
:1022A0000F91FF90EF90DF90CF900C94510EFF2094
:1022B00021F0862F942F937002C080E090E0289642
:1022C0000FB6F894DEBF0FBECDBFDF91CF911F9147
:1022D0000F91FF90EF90DF90CF900C94670E862FB8
:1022E000FF2019F00E94211D02C00E94891D28961E
:1022F0000FB6F894DEBF0FBECDBFDF91CF911F9117
:102300000F91FF90EF90DF90CF900C940E1E842FD2
:10231000837009F076C0F110E2C1262F2295269530
:102320002770220F220F862F8F70C82ED12CE12C00
:10233000F12C022E04C0CC0CDD1CEE1CFF1C0A94F8
:10234000D2F764FF10C06FE070E080E090E004C05E
:10235000660F771F881F991F2A95D2F76095709591
:102360008095909503C060E070E0CB01242F269506
:1023700026952370422F50E042305105D1F0433072
:10238000510559F16C297D298E299F29413051052C
:1023900041F128960FB6F894DEBF0FBECDBFDF9196
:1023A000CF911F910F91FF90EF90DF90CF900C9401
:1023B000AE176C297D298E299F2928960FB6F8948F
:1023C000DEBF0FBECDBFDF91CF911F910F91FF9068
:1023D000EF90DF90CF900C94C8170E94AE17C70102
:1023E000B60128960FB6F894DEBF0FBECDBFDF91C1
:1023F000CF911F910F91FF90EF90DF90CF900C94B1
:102400009417FF2019F0842F817001C086958823CE
:1024100009F465C1262F229526952770220F220FD9
:10242000862F8F70C82ED12CE12CF12C022E04C0E7
:10243000CC0CDD1CEE1CFF1C0A94D2F764FF10C00C
:102440006FE070E080E090E004C0660F771F881FA7
:10245000991F2A95D2F7609570958095909503C045
:1024600060E070E0CB01242F269526952370422F43
:1024700050E042305105D1F04330510559F16C29FB
:102480007D298E299F294130510541F128960FB6AB
:10249000F894DEBF0FBECDBFDF91CF911F910F919A
:1024A000FF90EF90DF90CF900C9482186C297D29DB
:1024B0008E299F2928960FB6F894DEBF0FBECDBF98
:1024C000DF91CF911F910F91FF90EF90DF90CF9010
:1024D0000C949C180E948218C701B60128960FB66A
:1024E000F894DEBF0FBECDBFDF91CF911F910F914A
:1024F000FF90EF90DF90CF900C946818603FC9F187
:1025000018F4603E50F49BC0623F09F460C008F4C8
:102510004AC0633F09F46FC092C0162F1F70842F0A
:102520008F71FF2099F00E940118812F28960FB615
:10253000F894DEBF0FBECDBFDF91CF911F910F91F9
:10254000FF90EF90DF90CF900C946E100E942218B5
:10255000812F28960FB6F894DEBF0FBECDBFDF9156
:10256000CF911F910F91FF90EF90DF90CF900C943F
:102570007510FF20A1F02111B2C0842F8F71289611
:102580000FB6F894DEBF0FBECDBFDF91CF911F9184
:102590000F91FF90EF90DF90CF900C94471822306E
:1025A00008F09DC0EACFFF20A1F0842F8F712896FC
:1025B0000FB6F894DEBF0FBECDBFDF91CF911F9154
:1025C0000F91FF90EF90DF90CF900C940118FF20B7
:1025D00061F3842F8F7128960FB6F894DEBF0FBE7B
:1025E000CDBFDF91CF911F910F91FF90EF90DF90C2
:1025F000CF900C942218FF2091F0842F8F71289691
:102600000FB6F894DEBF0FBECDBFDF91CF911F9103
:102610000F91FF90EF90DF90CF900C94EC172896DD
:102620000FB6F894DEBF0FBECDBFDF91CF911F91E3
:102630000F91FF90EF90DF90CF900C94E217FF2066
:10264000A1F0222309F4B1CF862F28960FB6F89473
:10265000DEBF0FBECDBFDF91CF911F910F91FF90D5
:10266000EF90DF90CF900C94570F222309F4B1CF55
:10267000862F28960FB6F894DEBF0FBECDBFDF9130
:10268000CF911F910F91FF90EF90DF90CF900C941E
:102690001F104F70C8010E94AB0228960FB6F89425
:1026A000DEBF0FBECDBFDF91CF911F910F91FF9085
:1026B000EF90DF90CF900C9409174F70C8012896C7
:1026C0000FB6F894DEBF0FBECDBFDF91CF911F9143
:1026D0000F91FF90EF90DF90CF900C94D605289645
:1026E0000FB6F894DEBF0FBECDBFDF91CF911F9123
:1026F0000F91FF90EF90DF90CF9008950E9497196F
:102700000E946C190E94B3190E94BA1E0E940E1EEC
:1027100080E090E00E94510E80E090E00C94670E03
:102720000E9487190C947E130E94B718292F2295B6
:102730002F7030E02C3031054CF42A3031056CF428
:10274000225031092230310590F407C02C30310578
:1027500051F02F30310539F00AC0803E10F0803F33
:1027600031F481E0089593FB882780F9089580E093
:102770000895CF93DF9300D000D01F92CDB7DEB77E
:102780000F900F900F900F900F90DF91CF910895C1
:10279000CF93DF9300D000D000D0CDB7DEB7269620
:1027A0000FB6F894DEBF0FBECDBFDF91CF91089575
:1027B0001F93CF93DF93C091790116E080917A0146
:1027C000C81799F0D0E01C9FF0011D9FF00D112457
:1027D000E558FE4F408151816281738184819581EA
:1027E0000E94C8132196C770E9CFDF91CF911F9146
:1027F00008954091AB015091AC016091AD01709191
:10280000AE018091AF019091B0010C94C813CF93A9
:102810008091B00182958F7009F05FC08091AD0109
:10282000882309F45AC020917901A0917A0160911E
:10283000AB017091AC018091AE019091AF0131E09C
:102840006F3F09F030E0B32FC6E02A1709F445C006
:10285000009721F07F3F21F44B2F03C041E001C0DE
:1028600040E030E040FD35C0C29FF001C39FF00D55
:102870001124E558FE4F418174132BC0408164132D
:1028800028C04281411125C043815481481759070E
:1028900010F441505109481B590B483C5105C8F4EC
:1028A0008091B0018F7080618093B00186E0829F3B
:1028B000F001839FF00D1124E058FE4F80818F704E
:1028C000806180838BEA91E00E947C10CF910C9410
:1028D000D8132F5F3F4F2770B8CFCF910895CF9275
:1028E000DF92EF92FF920F931F93CF93DF93CDB7B9
:1028F000DEB762970FB6F894DEBF0FBECDBF8C0176
:1029000085E0F801DE011D9601900D928A95E1F7B0
:10291000D8014C9111965C91119712966C91129777
:102920001396ED90FC9014977091AB01E091AC017F
:102930002091AE013091AF012115310531F0EF3F0B
:1029400031F481E07F3F19F403C081E001C080E0F1
:10295000B82FB170CB2E80FD6CC1D090AD01DD20C1
:1029600009F4F5C0F091B001E216F30638F0C701A2
:10297000821B930B883C910548F09BC020953095B5
:102980002E0D3F1D283C310508F093C08F2F807F0E
:1029900009F052C0E51314C0741312C0D62E611191
:1029A0000FC0FF70F061F093B0010E94F9138BEA41
:1029B00091E00E947C108091B001F80185836CC188
:1029C000EF2831F05F3F31F481E04F3F19F403C04D
:1029D00081E001C080E080FD03C081E0862701C066
:1029E00080E0F82FF170FF2E80FF1CC080917901EC
:1029F00020917A0136E0821709F428C190E0389FCF
:102A0000F001399FF00D1124E558FE4F71815713E5
:102A100006C07081471303C07281671303C001961B
:102A20008770E9CFD62E662309F436C18091B001B4
:102A300081608093B00153C0E51308C0741306C0D1
:102A4000611104C0D8011596FC93AEC04D875E8716
:102A50008D859E856A8B0E9494136A89882329F14B
:102A6000D62E662311F12091B001822F82958F70AE
:102A700090E002970CF460C08091AB019091AC01A2
:102A800098878F831986FB86EA862C87CE01079666
:102A900051C0E51731F14D875E878D859E856A8B24
:102AA0000E9494136A8981112EC0C8010E947C1073
:102AB000A4C08F2F807F69F77E2DF98AE88A8989E3
:102AC0000E94B9138BEA91E00E947C10EBEAF1E0DE
:102AD00086E0DF011D928A95E9F70E94F913D12C57
:102AE000DBC07413D8CF6111D6CFD8011596FC93F3
:102AF000C8010E947C10EBEAF1E086E0DF011D9244
:102B00008A95E9F7C9C0D62E662379F22091B001E3
:102B1000822F82958F7090E0029774F08091AB01C4
:102B20009091AC019A8389831B82FD82EC822E8373
:102B3000CE0101960E947C1086E0F801ABEAB1E07C
:102B400001900D928A95E1F70E9407146FC0E2167A
:102B5000F30628F0C701821B930B9C0104C020954B
:102B600030952E0D3F1D283C310508F052C0D62E61
:102B7000662309F49ACFE5132CC074132AC0809100
:102B8000B00180FD1DC0982F92959F70C9F0D801AB
:102B900015968C9315979F3039F09F5F9295907F93
:102BA0008F70892B15968C93C8010E947C1086E04B
:102BB000F801ABEAB1E001900D928A95E1F736C0D9
:102BC00086E0F801ABEAB1E001900D928A95E1F759
:102BD00063C04D875E878D859E850E9494138823F0
:102BE00079F086E0F801ABEAB1E001900D928A95A8
:102BF000E1F70E9407140E94F913DD24D3944CC01E
:102C00008091B00181608093B001C8010E947C1066
:102C100043C07E2DF98AE88A89890E94B913EBEABC
:102C2000F1E086E0DF011D928A95E9F70E94F91331
:102C300033C0662309F439CF4D875E878D859E8525
:102C40000E949413882309F430CFCBCF4D875E8741
:102C50008D859E850E94B718292F22952F7030E010
:102C6000223031052CF49F7041F0811106C00CC058
:102C7000243031052CF49F7049F4805E883020F0B8
:102C8000C8010E947C10CF2CDC2C06C0D801159600
:102C90009C91907F91F7F8CF8D2D62960FB6F894A6
:102CA000DEBF0FBECDBFDF91CF911F910F91FF907F
:102CB000EF90DF90CF9008951F93CF93DF93CDB720
:102CC000DEB72C970FB6F894DEBF0FBECDBF4F8393
:102CD000588769877A878B879C87CE0107960E94E1
:102CE0006F148823C1F02F8138858A859B85892BB5
:102CF00031F03F3F11F080E003C02F3FE1F781E06A
:102D0000811147C04F81588569857A858B859C855F
:102D10000E94C8133EC086E0FE013796DE01119680
:102D200001900D928A95E1F7FF81E8854A855B85E0
:102D30004115510531F0EF3F31F481E0FF3F19F4C7
:102D400003C081E001C080E080FD23C020917A01B2
:102D500030E0C9010196877099276091790170E090
:102D600086179707F1F1F983EA835D834C8396E038
:102D7000929FD001939FB00D1124A558BE4FFE0124
:102D8000319601900D929A95E1F780937A010E9415
:102D9000D81316E08091790190917A01891779F121
:102DA000189FC001112485589E4F0E946F148823DC
:102DB00031F1E09179011E9FF0011124E558FE4F99
:102DC0004081518162817381848195810E94C81301
:102DD0008091790190E0019687709927809379011D
:102DE000D9CF0E94901310927A0110927901EBEAE8
:102DF000F1E086E0DF011D928A95E9F7CACF2C96B3
:102E00000FB6F894DEBF0FBECDBFDF91CF911F91FB
:102E10000895EF92FF920F931F93CF93DF93FC01DE
:102E2000009709F46FC0F12CEE24E394EF01219692
:102E30008491843740F4843008F055C0813081F0AB
:102E4000823021F15FC0853709F447C0C0F19CE7AB
:102E5000980F903708F056C08F770E941F1045C01A
:102E60008F010E5F1F4FFE01849190E2980F983002
:102E700050F48770FE2D01C0FF0F8A95EAF78F2F5F
:102E80000E948A1915C00E94570F14C08F010E5F4F
:102E90001F4FFE01849190E2980F983068F487707C
:102EA000FE2D01C0FF0F8A95EAF78F2F0E9490191F
:102EB0000E94B319E80119C00E941F10FBCFCF0177
:102EC0000296FE01C491CC2361F0EFE9FFE0319757
:102ED000F1F700C00000C150F6CFCF010296FE010D
:102EE000F490EC0102C00E94570F8F2D882341F00F
:102EF000EFE9FFE03197F1F700C000008150F6CF15
:102F0000FE0194CFDF91CF911F910F91FF90EF9031
:102F1000089508956093B5017093B6018093B70149
:102F20009093B8010C947E130F931F930091B501F9
:102F30001091B6012091B7013091B801062B172BE3
:102F4000282B392B0093B5011093B6012093B701BC
:102F50003093B8011F910F910C947E130F931F9320
:102F60000091B5011091B6012091B7013091B801DF
:102F700006231723282339230093B5011093B601A4
:102F80002093B7013093B8011F910F910C947E13D9
:102F90000F931F930091B5011091B6012091B701D5
:102FA0003091B80106271727282739270093B50144
:102FB0001093B6012093B7013093B8011F910F9180
:102FC0000C947E131092B1011092B2011092B301D1
:102FD0001092B4010C947E1341E050E060E070E088
:102FE00004C0440F551F661F771F8A95D2F7409380
:102FF000B1015093B2016093B3017093B4010C948A
:103000007E1341E050E060E070E004C0440F551FC3
:10301000661F771F8A95D2F78091B1019091B20116
:10302000A091B301B091B401842B952BA62BB72BA3
:103030008093B1019093B201A093B301B093B40116
:103040000C947E1341E050E060E070E004C0440F57
:10305000551F661F771F8A95D2F74095509560954A
:1030600070958091B1019091B201A091B301B0919E
:10307000B40184239523A623B7238093B1019093B1
:10308000B201A093B301B093B4010C947E1341E05C
:1030900050E060E070E004C0440F551F661F771FCA
:1030A0008A95D2F78091B1019091B201A091B301BC
:1030B000B091B40184279527A627B7278093B10143
:1030C0009093B201A093B301B093B4010C947E131A
:1030D0000F931F930091B1011091B2012091B301A0
:1030E0003091B401062B172B282B392B0093B101FB
:1030F0001093B2012093B3013093B4011F910F914B
:103100000C947E130F931F930091B1011091B201A3
:103110002091B3013091B4010623172328233923CA
:103120000093B1011093B2012093B3013093B40125
:103130001F910F910C947E130F931F930091B10177
:103140001091B2012091B3013091B40106271727E5
:10315000282739270093B1011093B2012093B301BE
:103160003093B4011F910F910C947E130895CF9268
:10317000DF92EF92FF920F931F93CF93DF93EC01B7
:10318000C090B501D090B601E090B701F090B801C1
:103190008091B1019091B201A091B301B091B401BD
:1031A000C82AD92AEA2AFB2A0FE110E0B701A601B2
:1031B000002E04C076956795579547950A94D2F7E7
:1031C00040FF07C0BE01802F0E94F90581309105A4
:1031D00039F40150110950F7BE0180E00E94F90551
:1031E000DF91CF911F910F91FF90EF90DF90CF90E3
:1031F000089590910C019923D9F090910D01992394
:10320000B9F0982F9695969596959F3088F5E09110
:103210000E01F0910F01E90FF11D877021E030E000
:1032200001C0220F8A95EAF78181822B818308955C
:1032300040910E0150910F0120E030E09FEFFA0124
:10324000E20FF31F6281681799F09F3F19F4611133
:1032500001C0922F2F5F3F4F2E30310581F79F3FE6
:1032600039F0FA01E90FF11D97FDFA95828308956F
:10327000089590910C019923E1F090910D0199230B
:10328000C1F0982F9695969596959F3020F5E091F0
:103290000E01F0910F01E90FF11D877021E030E080
:1032A00001C0220F8A95EAF7209581812823218386
:1032B000089540910E0150910F0120E030E0FA0195
:1032C000E20FF31F9281981301C012822F5F3F4FCC
:1032D0002E303105A1F7089581E090E0E0910E01D4
:1032E000F0910F01E80FF91F1082019680319105CE
:1032F000A9F708959091CB01982B9093CB01089555
:1033000080959091CB0198239093CB0108951092D2
:10331000CB0108959091CA01982B9093CA0108950A
:1033200080959091CA0198239093CA0108951092B4
:10333000CA0108958093B90108951092B9010895C2
:1033400040910E0150910F0120E030E080E0FA0141
:10335000E20FF31F918191118F5F2F5F3F4F2F304D
:103360003105A9F70895E0910E01F0910F018091C8
:10337000CB018083E0910E01F0910F01808190914B
:10338000CA01892B80839091B901992361F0E09162
:103390000E01F0910F018081892B80830E94A0197A
:1033A00081111092B90180910E0190910F010C943E
:1033B0003B0ECF92DF92EF92FF920F931F936C011F
:1033C000EE24FF24C114D104E104F10421F46B01C3
:1033D0007C0180E001C080E133272F2D1E2D0D2DB3
:1033E000011511052105310519F0885F6801790182
:1033F00097018601A4E03695279517950795AA951C
:10340000D1F7011511052105310519F08C5F68010F
:10341000790197018601F2E0369527951795079572
:10342000FA95D1F7011511052105310519F08E5FC7
:1034300068017901B701A60176956795579547957B
:10344000452B462B472B09F08F5F1F910F91FF9063
:10345000EF90DF90CF9008958091E501843009F1DD
:103460001092CD0120E488E190E00FB6F894A89581
:10347000809360000FBE2093600083B7817F8460DB
:1034800083BF83B7816083BF7894889583B78E7F2D
:1034900083BF88E10FB6F8948093600010926000BB
:1034A0000FBE089508950895CF930E94521A0E9466
:1034B00023040E94531AC0E08C2F0E941005811132
:1034C00005C0CF5FCE30C1F780E001C081E0CF9171
:1034D00008950E9490130E942F0E0C94340782E0EE
:1034E00084BD93E095BD9AEF97BD80936E000895DB
:1034F0002FB7F8948091CE019091CF01A091D00187
:10350000B091D1012FBF0895CF92DF92EF92FF9239
:103510000F931F932FB7F8944091CE015091CF0194
:103520006091D0017091D1012FBF6A017B01EE241F
:10353000FF248C0120E030E0C016D106E206F3063D
:1035400010F441505109481B590BCA011F910F91AA
:10355000FF90EF90DF90CF9008951F920F920FB6DB
:103560000F9211248F939F93AF93BF938091CE01BD
:103570009091CF01A091D001B091D1010196A11DF0
:10358000B11D8093CE019093CF01A093D001B09351
:10359000D101BF91AF919F918F910F900FBE0F906E
:1035A0001F9018950E94350BF8942FEF87EA91E64B
:1035B000215080409040E1F700C0000087E090EB90
:1035C000DC018093EE019093EF01A093F001B093A2
:1035D000F1012CE088E190E00FB6F894A895809373
:1035E00060000FBE20936000FFCFEF92FF920F9319
:1035F0001F93CF93DF93E82EF12C8F2D0E9410059F
:10360000C0E0D0E0082F10E098010C2E02C03595E4
:1036100027950A94E2F720FD05C02196C630D10512
:1036200099F709C06C2F7F2D80E00E94D705E81222
:10363000F4CF81E005C0F3948EE0F812DECF80E095
:10364000DF91CF911F910F91FF90EF900895CF934D
:10365000C82F8CE20E94F51A882321F08C2FCF917D
:103660000C94F51A80E0CF910895CF930E947A1CB4
:10367000811102C00E94601CC5E6C15049F00E9441
:1036800023048FE39CE90197F1F700C00000F5CF18
:1036900089E20E94271B811111C18AE20E94271B27
:1036A00081110E94601C85E00E94271B81110E94ED
:1036B000D21A0E94851C8093CC0187E00E94271BB0
:1036C000882399F18BE10E94271B882351F0909168
:1036D000CC0191FB882780F921E0822780FB91F9BA
:1036E00022C08EE00E94271B882351F09091CC01CC
:1036F00092FB882780F921E0822780FB92F913C092
:1037000080E10E94271B9091CC01882341F093FB1C
:10371000882780F921E0822780FB93F904C0892F54
:10372000809580FB90F99093CC018091CC010E9410
:10373000891C0E94971C8093DF0180EE0E94271B4A
:10374000882341F08091DF01982F909590FB80F9BC
:103750008093DF0189E30E94271B882359F0909111
:10376000DF0191FB882780F921E0822780FB91F916
:103770009093DF0182EE0E94271B882359F09091DD
:10378000DF0192FB882780F921E0822780FB92F9F4
:103790009093DF0186EE0E94271B882359F09091B9
:1037A000DF0193FB882780F921E0822780FB93F9D2
:1037B0009093DF0183EE0E94271B882359F090919C
:1037C000DF0194FB882780F921E0822780FB94F9B0
:1037D0009093DF0185E30E94271B882359F0909185
:1037E000DF0195FB882780F921E0822780FB95F98E
:1037F0009093DF0181E30E94271B882359F0909169
:10380000DF0196FB882780F921E0822780FB96F96B
:103810009093DF0181E10E94271B882359F090914A
:10382000DF0197FB882780F921E0822780FB97F949
:103830009093DF018091DF010E949B1C8091DF014A
:1038400087FB882780F980930D0187E20E94271B60
:10385000C82F8EE10E94271B8111C2608FE10E9458
:10386000271B8111C46080E20E94271B8111C86060
:1038700081E20E94271B8111C06182E20E94271B06
:103880008111C06283E20E94271B8111C06484E21F
:103890000E94271B882311F0C06802C0CC2329F0A6
:1038A0008C2F0E94921C6C2F03C00E948E1C682FCC
:1038B00070E080E090E0CF910C948A17CF9108954A
:1038C0006DEE7EEF80E090E00E94B62260E082E044
:1038D00090E00E94A82260E083E090E00E94A8228D
:1038E00060E084E090E00E94A82260E085E090E043
:1038F0000C94A82280E090E00E94A22221E08D3E5C
:103900009E4F09F020E0822F089582E090E00C9411
:103910009A22682F82E090E00C94A82283E090E045
:103920000C949A22682F83E090E00C94A82284E003
:1039300090E00C949A22682F84E090E00C94A822E6
:103940008091D40180FF0BC06091130185E0689FD6
:10395000B001112475956795759567952AC081FF0B
:1039600009C06091130185E0689FB001112475952D
:1039700067951FC082FF07C06091130185E0689FB3
:10398000B001112416C04091D5014423C9F06091C3
:103990001201461788F72091130185E0289F9001B6
:1039A0001124429FC001439F900D112470E00E949A
:1039B0006C226038710540F46115710539F002C060
:1039C00065E070E0862F08958FE7089581E00895FF
:1039D0008091D40180FF08C06091110170E075955D
:1039E00067957595679521C081FF06C060911101AB
:1039F00070E07595679519C082FF04C06091110150
:103A000070E010C08091D5018823C1F06091100151
:103A10008617A0F790911101989FC001112470E0C2
:103A20000E946C226038710528F46115710521F03F
:103A3000862F08958FE7089581E0089561E070E092
:103A4000F4CF803F21F40E94A01C819504C0813FE7
:103A500029F40E94A01C8093D8010895823F21F48C
:103A60000E94A01C819504C0833F29F40E94A01CE1
:103A70008093D7010895893F19F40E94E81C05C07E
:103A80008A3F31F40E94E81C81958093D901089502
:103A90008B3F21F40E94E81C819504C08C3F29F4DF
:103AA0000E94E81C8093DA010895843F21F48091FC
:103AB000D601816017C0853F21F48091D6018260D4
:103AC00011C0863F21F48091D60184600BC0873FEE
:103AD00021F48091D601886005C0883F31F480913F
:103AE000D60180618093D60108958D3F21F48091A5
:103AF000D40181600BC08E3F21F48091D40182609B
:103B000005C08F3F29F48091D40184608093D40153
:103B10000895803F39F48091D80187FF6CC01092DE
:103B2000D80169C0813F29F48091D8011816BCF3EF
:103B300062C09091D701823F29F497FF5CC0109238
:103B4000D70159C0833F19F41916CCF354C0893FEB
:103B500041F48091D90118160CF04DC01092D90192
:103B60004AC08A3F29F48091D90187FF44C0F6CF2B
:103B70008B3F39F48091DA0187FF3DC01092DA0162
:103B80003AC08C3F29F48091DA011816BCF333C097
:103B9000843F21F48091D6018E7F17C0853F21F4A8
:103BA0008091D6018D7F11C0863F21F48091D6018E
:103BB0008B7F0BC0873F21F48091D601877F05C0A2
:103BC000883F31F48091D6018F7E8093D60113C057
:103BD0008D3F21F48091D4018E7F0BC08E3F21F464
:103BE0008091D4018D7F05C08F3F29F48091D4014D
:103BF0008B7F8093D4018091D70181110EC0809179
:103C0000D80181110AC08091D901811106C080912B
:103C1000DA01811102C01092D501089586ED91E07C
:103C20000E94460E0E94781A9093D3018093D2018D
:103C300008951F93CF93DF938091D2019091D30188
:103C40000E94841A4091D501442321F0209114014F
:103C500030E006C0209115015AE0259F9001112403
:103C60008217930708F482C08091D7011091D80180
:103C7000D091D901C091DA01811107C0111105C09D
:103C8000D11103C0CC2309F471C04F3F19F04F5F2D
:103C90004093D501181624F40E94A01C8093D701EC
:103CA0008091D70187FF05C00E94A01C8195809359
:103CB000D701111624F40E94A01C8093D801809192
:103CC000D80187FF05C00E94A01C81958093D80170
:103CD0006091D701662339F11091D801112319F1B0
:103CE000772767FD7095872F972F0E947D2123E30B
:103CF00033E343E35FE30E94E1210E944A216093A2
:103D0000D701612F772767FD7095872F972F0E9426
:103D10007D2123E333E343E35FE30E94E1210E943B
:103D20004A216093D8011D1624F40E94E81C809358
:103D3000D9018091D90187FF05C00E94E81C8195B7
:103D40008093D9011C1624F40E94E81C8093DA01A8
:103D50008091DA0187FF05C00E94E81C819580935D
:103D6000DA01DF91CF911F910C940E1EDF91CF915C
:103D70001F910895E6EDF1E085E0DF011D928A953F
:103D8000E9F71092D5011092D4010895833081F1A2
:103D900028F4813059F08230D1F00895853009F44B
:103DA00049C0B8F1863009F456C008952091150134
:103DB000862F90E0820F911D8F3F910520F4620FB6
:103DC0006093150108958FEF809315010895209158
:103DD0001401862F90E0820F911D8F3F910520F4F2
:103DE000620F6093140108958FEF8093140108957A
:103DF00020911301862F90E0820F911D8F3F910536
:103E000020F4620F6093130108958FEF80931301E4
:103E1000089520911201862F90E0820F911D8F3F0F
:103E2000910520F4620F6093120108958FEF809343
:103E30001201089520911101862F90E0820F911DAB
:103E40008F3F910520F4620F6093110108958FEF69
:103E500080931101089520911001862F90E0820F28
:103E6000911D8F3F910520F4620F6093100108951A
:103E70008FEF809310010895833011F128F4813081
:103E800049F0823091F00895853081F120F186303B
:103E9000C1F1089580911501681720F4861B809365
:103EA0001501089510921501089580911401681765
:103EB00020F4861B80931401089510921401089534
:103EC00080911301681720F4861B809313010895D5
:103ED00010921301089580911201681720F4861B37
:103EE000809312010895109212010895809111019A
:103EF000681720F4861B8093110108951092110118
:103F0000089580911001681720F4861B809310019A
:103F100008951092100108958D3109F442C020F5E2
:103F20008E3009F479C070F4873009F45EC020F453
:103F3000863009F442C033C08830D1F18B3009F4A7
:103F4000A7C02DC0863109F4A3C038F4803109F42C
:103F50006DC0813109F47BC022C0893109F498C059
:103F60008B3109F44FC01BC0853309F479C048F484
:103F7000873209F475C008F478C0893209F470C03A
:103F80000EC0833438F48A3308F071C0883309F4E2
:103F90007FC005C0833409F463C08834C1F080E079
:103FA00008950E9404210E942F0E0E94340770C0C1
:103FB0000E94851C0E94971C6BC08091CC01817F60
:103FC0008E7F8093CC0181E08093DC0108950E9474
:103FD00090132FEF83ED90E3215080409040E1F764
:103FE00000C000000E94D21A53C09091CC01892FCA
:103FF000817090FF03C0917F9E7F26C09160909357
:10400000CC0146C09091CC0191FB882780F921E03A
:10401000822780FB91F913C09091CC0192FB8827F5
:1040200080F921E0822780FB92F909C09091CC01B0
:1040300093FB882780F921E0822780FB93F99093F6
:10404000CC01882329F191609093CC0108950E94BE
:10405000901380910D0191E0892780930D0118C084
:1040600061E070E080E090E00FC023EE01C027EC3B
:10407000280F61E070E080E090E004C0660F771FD9
:10408000881F991F2A95D2F70E948A170E949013C1
:1040900081E0089580E0089580E00895CF93C82FCF
:1040A0008091DC01813079F018F08230D1F184C048
:1040B000A0910E01B0910F018C91813169F0823293
:1040C00009F07CC009C0A0910E01B0910F018C9144
:1040D000813111F0823249F48C2F0E944A208111E3
:1040E0001DC08C2F0E948C1F1AC08C2F0E944C2048
:1040F000811114C0C43179F048F4CB3079F0C0316B
:1041000009F060C082E08093DC0108C0C93219F078
:10411000C83321F057C01092DC0154C081E0817097
:1041200053C0C93289F118F5C43171F1A8F4C73010
:1041300009F046C08AE08093150194E19093140140
:1041400093E0909313018093120188E08093110112
:1041500088E28093100134C0CE51C63088F5EC2F30
:10416000F0E0E65DFE4F80818093DB0129C0CE3414
:10417000E9F020F4CB3421F56AE013C0C13579F0C1
:10418000C235F1F461E00DC08091DB01882319F0A4
:104190001092DB0115C081E08093DC0115C061E065
:1041A00006C08091DB010E94C61E0AC06AE08091B1
:1041B000DB010E943C1F04C01092DC0180E004C0BF
:1041C00081E002C080E0ABCFCF910895E1E8F0E05C
:1041D0008081886080838081816080838FB7F8943C
:1041E00093E09093890090ED909388008FBF08959D
:1041F000EFE6F0E08081826080830895EFE6F0E0F2
:1042000080818D7F80830895EFE6F0E0808192E0E9
:104210008927808308951F920F920FB60F92112461
:104220002F933F934F935F936F937F938F939F93BE
:10423000AF93BF93EF93FF938091DD019091DE01E7
:1042400001969093DE018093DD01811103C082E02D
:104250000E943407E091DE01E695E695F0E0E6572E
:10426000FB4FE4918091DD018E1303C080E00E943A
:104270003407FF91EF91BF91AF919F918F917F9103
:104280006F915F914F913F912F910F900FBE0F90C3
:104290001F90189504D06894B1118DC0089570D006
:1042A00088F09F5790F0B92F9927B751A0F0D1F01F
:1042B000660F771F881F991F1AF0BA95C9F712C0A9
:1042C000B13081F077D0B1E0089574C0672F782FB6
:1042D0008827B85F39F0B93FCCF386957795679515
:1042E000B395D9F73EF490958095709561957F4F81
:1042F0008F4F9F4F0895E89409C097FB3EF4909527
:104300008095709561957F4F8F4F9F4F9923A9F0AE
:10431000F92F96E9BB279395F6958795779567953D
:10432000B795F111F8CFFAF4BB0F11F460FF1BC081
:104330006F5F7F4F8F4F9F4F16C0882311F096E914
:1043400011C0772321F09EE8872F762F05C06623C2
:1043500071F096E8862F70E060E02AF09A95660F7B
:10436000771F881FDAF7880F9695879597F9089534
:1043700057FD9058440F551F59F05F3F71F0479516
:10438000880F97FB991F61F09F3F79F087950895FB
:10439000121613061406551FF2CF4695F1DF08C01A
:1043A000161617061806991FF1CF86957105610537
:1043B00008940895E894BB2766277727CB0197F9DF
:1043C00008950BD078C069D028F06ED018F09523EE
:1043D00009F05AC05FC01124EECFCADFA0F3959F49
:1043E000D1F3950F50E0551F629FF001729FBB27DC
:1043F000F00DB11D639FAA27F00DB11DAA1F649F88
:104400006627B00DA11D661F829F2227B00DA11D3A
:10441000621F739FB00DA11D621F839FA00D611DC0
:10442000221F749F3327A00D611D231F849F600DE1
:10443000211D822F762F6A2F11249F5750408AF01A
:10444000E1F088234AF0EE0FFF1FBB1F661F771FA6
:10445000881F91505040A9F79E3F510570F014C03D
:10446000AACF5F3FECF3983EDCF38695779567958E
:10447000B795F795E7959F5FC1F7FE2B880F911DC4
:104480009695879597F9089597F99F6780E870E06A
:1044900060E008959FEF80EC089500240A941616BA
:1044A000170618060906089500240A941216130622
:1044B000140605060895092E0394000C11F48823B0
:1044C00052F0BB0F40F4BF2B11F460FF04C06F5FCC
:1044D0007F4F8F4F9F4F089597FB072E16F4009440
:1044E00007D077FD09D00E94862207FC05D03EF454
:1044F000909581959F4F0895709561957F4F089590
:10450000EE0FFF1F0590F491E02D0994AA1BBB1B31
:1045100051E107C0AA1FBB1FA617B70710F0A61BC3
:10452000B70B881F991F5A95A9F780959095BC01E4
:10453000CD010895F999FECF92BD81BDF89A9927D2
:1045400080B50895A8E1B0E042E050E00C94BD22AF
:10455000262FF999FECF1FBA92BD81BD20BD0FB69F
:10456000F894FA9AF99A0FBE019608950E94A8222B
:10457000272F0C94A922DC01CB01FC01F999FECF75
:1045800006C0F2BDE1BDF89A319600B40D924150DB
:0A4590005040B8F70895F894FFCFEB
:10459A0020023607C307A0076C0739070101BA01D1
:1045AA0028080A03140A3F4D36394B04FE03C80390
:1045BA008F0322033B0354036D0301020304050620
:0445CA0007080900D5
:00000001FF

@ -0,0 +1,9 @@
# The Ordinary Layout, a familiar and powerful layout
The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards and features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
Full details about the rationale behind this layout [are available](http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html).
![Ordinary base layout](ordinary-base.png)
![Ordinary symbol layout](ordinary-symbol.png)
![Ordinary media layout](ordinary-media.png)

@ -13,9 +13,11 @@
#define M_CTRL_CMDV 1
#define M_CTRL_CMDC 2
#define M_MEH_SH_ACUT 3
#define M_DE_PLUS_CTRLALT 12
#define M_DE_CIRC_CTRLCMD 13
#define M_DE_OSX_PLUS_CTRLALT 12
#define M_DE_OSX_CIRC_CTRLCMD 13
#define M_TOGGLE_5 14
#define M_CTL_SFT_HASH 15
#define M_LGUI_SHFT 16
#define SM_SMILE 4
#define SM_SMIRK 5
@ -30,19 +32,19 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* ,-----------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |CTL_SFT/#| |CTL_SFT/#| 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+----------------| |---------+------+------+------+------+------+--------|
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | LALT | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/RALT|
* | LALT | A | S | D | F | G |---------| |---------| H | J | K | L | ö | ä/RALT|
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
* | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 |
* `----------------------------------' `----------------------------------'
* `--------+------+------+------+------+----------------' `-------------+------+------+------+------+--------'
* |</L1| ^°/CTRL_CMD | +/CTRL_ALT | UP | DOWN| | Left | Right | CMD-SHFT| ALT-SHIFT | +/L1 |
* `------------------------------------------' `---------------------------------------------'
* ,-------------. ,---------------.
* | MDIA | Meh | | Hyper| NUM |
* |`/Meh | Media| | NUM | ´/Hyper |
* ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* | Back-| Del |------| |------| Enter | Space|
@ -53,21 +55,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, M(M_CTRL_CMDV),
KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_LGUI,
KC_LALT, DE_A, DE_S, DE_D, DE_F, DE_G,
KC_LSFT, CTL_T(DE_Y), DE_X, DE_C, DE_V, DE_B, KC_LALT,
LT(SYMB,DE_LESS), M(M_DE_CIRC_CTRLCMD), M(M_DE_PLUS_CTRLALT), LALT(KC_LSFT), LGUI(KC_LSFT),
M(M_MEH_SH_ACUT), TG(2),
KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH),
KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI,
KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G,
KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT,
LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN,
M(M_MEH_SH_ACUT), TG(MDIA),
KC_HOME,
KC_BSPC,KC_DEL, LT(SMLY,KC_END),
// right hand
M(M_CTRL_CMDC), DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS,
KC_RGUI, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UE,
DE_H, DE_J, DE_K, DE_L, DE_OE, ALT_T(DE_AE),
KC_RALT, DE_N, DE_M, DE_COMM,DE_DOT, CTL_T(DE_MINS), KC_RSFT,
KC_LEFT, KC_UP,KC_DOWN,KC_RIGHT, LT(SYMB,DE_HASH),
TG(4), ALL_T(DE_ACUT),
M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS,
KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE,
DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE),
KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM,DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT,
KC_LEFT, KC_RIGHT,LGUI(KC_LSFT),LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS),
TG(NUMB), ALL_T(DE_OSX_ACUT),
KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC
),
@ -76,42 +78,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | L5 | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | < | > | ! | ? | | | | | \ | [ | ] | | | # | F12 |
* | | < | > | ! | ? | | | | | \ | [ | ] | < | > | ! |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | |
* | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | # |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | ^ | % | | | ~ | | | | & | < | > | " | ' | ? |
* | | | ^ | % | | | ~ | | | | | | ~ | ^ | UP | | $ |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | . | ! | |
* | | | | | | | ' | LEFT| DOWN | RIGHT | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* | | | | F13 | F12 |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | | | | F14 | | |
* | | |------| |------| | |
* | | | | | | | |
* | | | | | F15 | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,DE_LESS,DE_MORE,DE_EXLM,DE_QST, KC_TRNS,KC_TRNS,
KC_TRNS,DE_HASH,DE_DLR, DE_BSLS,DE_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,DE_PIPE,DE_TILD,KC_TRNS,
KC_TRNS,DE_OSX_LESS,DE_OSX_MORE,DE_OSX_EXLM,DE_OSX_QST, KC_TRNS,KC_TRNS,
KC_TRNS,DE_OSX_HASH,DE_OSX_DLR, DE_OSX_BSLS,DE_OSX_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_OSX_LESS,DE_OSX_PERC,DE_OSX_PIPE,DE_OSX_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_DEL,KC_TRNS,
// right hand
M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12,
DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS,
KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST,
KC_TRNS,KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM,
DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH,
KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4),
DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS,
KC_F13, KC_F12,
KC_F14,
KC_F15, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media and mouse keys
*
@ -135,7 +137,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
[MDIA] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D,
@ -177,7 +179,7 @@ KEYMAP(
* | | | | | | | |
* `--------------------' `----------------------'
*/
KEYMAP(
[SMLY] = 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,
@ -197,7 +199,7 @@ KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS
),
//number pad
KEYMAP(
[NUMB] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
@ -209,9 +211,9 @@ KEYMAP(
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_MINS,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS,
KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
KC_0,KC_DOT, KC_0, DE_EQL, KC_TRNS,
KC_0,KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
@ -238,7 +240,7 @@ KEYMAP(
* | | | F4 | | | | |
* `--------------------' `----------------------'
*/
KEYMAP(
[EGOS] = 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_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@ -308,11 +310,30 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
} else {
return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_ACUT here, as macro needs KC_ prefix
return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_OSX_ACUT here, as macro needs KC_ prefix
}
}
break;
case M_LGUI_SHFT:
if (record->event.pressed){
return MACRO(D(LGUI),D(LSFT),END);
}else{
return MACRO(U(LGUI),U(LSFT),END);
}
break;
case M_CTL_SFT_HASH:
if (record->event.pressed) {
start=timer_read();
return MACRO(D(LCTRL),D(LSFT),END);
} else {
if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),U(LSFT),END);
} else {
return MACRO(U(LCTRL),U(LSFT),T(BSLS),END);
}
}
break;
case M_DE_CIRC_CTRLCMD:
case M_DE_OSX_CIRC_CTRLCMD:
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LGUI),END);
@ -324,7 +345,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
}
break;
case M_DE_PLUS_CTRLALT:
case M_DE_OSX_PLUS_CTRLALT:
if (record->event.pressed) {
start = timer_read();
return MACRO(D(LCTRL),D(LALT),END);
@ -390,12 +411,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 732 KiB

After

Width:  |  Height:  |  Size: 669 KiB

@ -227,12 +227,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -158,12 +158,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -162,12 +162,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -199,12 +199,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -0,0 +1,134 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0
#define SYMB 1
#define PLVR 2
#define ARRW 3
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = KEYMAP(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F14,
KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, TG(PLVR),
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_LALT, KC_LGUI,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_FN1,
//
/*-*/ KC_F15, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
/*-*/ KC_BSLS, 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_RALT, KC_F4, KC_F5, KC_F6,
KC_MPLY, KC_MNXT,
KC_MPRV,
KC_FN3, KC_QUOT, KC_SPC
),
[SYMB] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
//
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
/*-*/ /*-*/ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
[PLVR] = KEYMAP(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T,
KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO,
KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_C, KC_V, KC_NO,
//
/*-*/ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
/*-*/ KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
/*-*/ /*-*/ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
/*-*/ KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
/*-*/ /*-*/ /*-*/ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_NO, KC_N, KC_M
),
[ARRW] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
//
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS,
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = {
[SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
[PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
[ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
case SYMB:
ergodox_right_led_1_on();
break;
case PLVR:
ergodox_right_led_2_on();
break;
case ARRW:
ergodox_right_led_3_on();
break;
default:
break;
}
};

@ -0,0 +1,47 @@
# Roman's Layout
There are four layers:
- **BASE** is [Norman layout](https://normanlayout.info/).
- **SYMB** for numbers and symbols.
- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
- **ARRW** for navigation.
[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417)
## Switching
- Tap `SYMB` to toggle **SYMB**.
- Tap `ARRW` to toggle **ARRW**.
- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
- Tap `PLVR` to toggle **PLVR**.
## LEDs
- Red: SYMB is on.
- Green: PLVR is on.
- Blue: ARRW 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/).
- Tap `F14`, `F15` to adjust display brightness.
**IMPORTANT**: If you have another keyboard connected via Bluetooth, then `F14` and `F15` will not work.
Turn off that Bluetooth keyboard. Re-plug you ErgoDox. Enjoy!
## CTRL/ESC
Both of those keys are frequently used in Vim.
- Tap `CTRL/ESC` to send `ESC`.
- Hold `CTRL/ESC` to use as `CTRL`.
## Activate N-rollover
- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
- Then you can activate **PLVR** and use ErgoDox EZ for steno.

@ -0,0 +1,1132 @@
:100000000C94BB020C94FF020C94FF020C94FF02B0
:100010000C94FF020C94FF020C94FF020C94FF025C
:100020000C94FF020C94FF020C941C0C0C94EE0C2C
:100030000C94FF020C94FF020C94FF020C94FF023C
:100040000C94FF020C9473210C94FF020C94FF0299
:100050000C94FF020C94041B0C94FF020C94FF02FE
:100060000C94FF020C94FF020C94FF020C94FF020C
:100070000C94FF020C94FF020C94FF020C94FF02FC
:100080000C94FF020C94FF020C94FF020C94FF02EC
:100090000C94FF020C94FF020C94FF020C94FF02DC
:1000A0000C94FF020C94FF020C94FF025B0D7D0D7B
:1000B0006B0E7D0D6B0EC20DE50D6B0E3A0E4D0EE7
:1000C0002F112F115E115E11A111DF11F813F8131A
:1000D000F811F813F912F912CC13F813F813E3130B
:1000E0000000F0A1F0A2F0A335002B002971E1007F
:1000F0003A0000001E00140004001D003B00C10077
:100100001F001A0016001B003C0029712000070088
:1001100008000600E2002A0021000900170019006B
:10012000E300A90022000E000A0005000000AA005A
:100130006900025400002F000000A8006A0031008E
:10014000000030000000AE0023000D001C00130072
:100150000000AB002400180011001000E700AC0004
:10016000250015000C003600E6002C0026000F00CC
:10017000120037003D003400270033000B00380028
:100180003E00C3002E002D002800E5003F000000C7
:1001900001000100010001000100000001001E003B
:1001A0001E0201000100010001001F001F020100EA
:1001B00001000100010020002002010001000100F7
:1001C00001002100210201000100010001002200C4
:1001D00022020100000001000100010000000100F6
:1001E000000001000100010000000100000001000A
:1001F000010023002302010000000100010024008F
:100200002402010001000100010025002502010077
:10021000010001000100260026020100010001008A
:100220000100270027020100010001000100010078
:1002300001000100010000000000000000000000BB
:100240000100000000001E00140004000100000076
:1002500000001F001A001600010019000000200015
:10026000080007000000060000002100150009003A
:10027000000001000000220017000A000000010039
:10028000010001000000000000000100010000006A
:100290000000000000000100000023001C000B0013
:1002A000000001000000240018000D000000010003
:1002B000000025000C000E000000100000002600C9
:1002C00012000F000000110000002700130033008F
:1002D00000000000000000002F00340000000000BB
:1002E0000100010001000100010000000100010007
:1002F00001000100010001000100F400F200010012
:10030000010001000100F000F10001000100010006
:100310000100F500F30001000100010001000100EF
:1003200001000100000001000100010000000100C7
:1003300000000100010001000000010000000100B8
:1003400001000100010001000000010001000100A6
:1003500050000100010001000100520051000100A5
:1003600001000100010001004F0001000100010037
:100370000100010001000100010001000100010075
:100380000100010001000000160345007200670033
:100390006F0044006F007800200045005A00000004
:1003A00016034500720067006F0044006F0078007C
:1003B000200045005A0000000403090409026D00F2
:1003C000040100A0FA090400000103010100092151
:1003D00011010001223F000705810308000A0904FA
:1003E00001000103010200092111010001224D0059
:1003F0000705820308000A09040200010300000047
:100400000921110100012236000705830308000AB3
:100410000904030001030000000921110100012269
:1004200039000705840310000112011001000000CB
:1004300008EDFE071301000102000105010906A1F4
:1004400001050719E029E7150025019508750181C7
:100450000205081901290595057501910295017597
:100460000391010507190029771500250195787575
:10047000018102C005010980A10185021601002643
:10048000B7001A01002AB700751095018100C00558
:100490000C0901A1018503160100269C021A010026
:1004A0002A9C02751095018100C005010902A10175
:1004B0000901A10005091901290515002501950566
:1004C000750181029501750381010501093009312A
:1004D0001581257F95027508810609381581257FCC
:1004E000950175088106050C0A38021581257F954E
:1004F0000175088106C0C005010906A1010507199B
:10050000E029E7150025019508750181029501751F
:1005100008810105081901290595057501910295C4
:1005200001750391010507190029FF150025FF95A5
:100530000675088100C000000000000000000000F7
:1005400000010204060A0F17202C3A4A5D71879DAC
:10055000B3C7DAE9F5FCFFFCF5E9DAC7B39D8771AB
:100560005D4A3A2C20170F0A060402010000000021
:1005700000000000000011241FBECFEFDAE0DEBF54
:10058000CDBF04B603FE24C08091EE019091EF012F
:10059000A091F001B091F1018730904BA740B04B92
:1005A000B9F41092EE011092EF011092F001109246
:1005B000F10114BE84B7877F84BF88E10FB6F89439
:1005C00080936000109260000FBEE0E0FFE30995A9
:1005D00011E0A0E0B1E0EAE6F6E402C005900D9279
:1005E000A433B107D9F711E0A4E3B1E001C01D9233
:1005F000AE3EB107E1F70E9460090C9433230C94DE
:10060000000061110BC0FC018281882321F085EE7E
:100610000E94CC0F03C085EE0E94941080E090E011
:10062000089508956091B1017091B2018091B30174
:100630009091B4010E94331A56985E9825982D988F
:1006400026982E9827982F98823039F0833041F0E1
:10065000813041F4259A2D9A0895269A2E9A08956C
:10066000279A2F9A089582E193E0892B11F00E9436
:10067000120380E090E0089556985E9825982D9892
:1006800026982E9827982F988FEF90E090938900C6
:100690008093880090938B0080938A0090938D00C4
:1006A00080938C00259A2D9A2FEF80E792E02150BD
:1006B00080409040E1F700C00000269A2E9A2FEF6C
:1006C00080E792E0215080409040E1F700C00000B8
:1006D000279A2F9A2FEF80E792E021508040904098
:1006E000E1F700C0000025982D982FEF80E792E0F9
:1006F000215080409040E1F700C0000026982E98DD
:100700002FEF80E792E0215080409040E1F700C059
:10071000000027982F9856985E9825982D9826982F
:100720002E9827982F98089589EA8093800089E071
:100730008093810024982C983F988AB18F748AB94D
:100740006E98479A8BB1806B8BB9769A0E943C0366
:1007500081E193E0892B11F00E94110380E090E089
:10076000089580E2809300018091340181110EC0D0
:100770000E94000481E0809334012FEF83ED90E329
:10078000215080409040E1F700C0000080E40E94CA
:1007900006048093000181112EC00E9430048093D2
:1007A0000001811128C00E94300480930001811152
:1007B00022C08FE30E9430048093000181111BC08E
:1007C0000E94280480E40E940604809300018111A5
:1007D00012C08CE00E9430048093000181110BC094
:1007E0000E94300480930001811105C08FE30E94B4
:1007F0003004809300010E94280480910001089534
:100800001092B9008AE08093B800089594EA90931A
:10081000BC009091BC0097FFFCCF9091B900987FED
:10082000983021F0903111F081E008958093BB0061
:1008300084E88093BC008091BC0087FFFCCF80914E
:10084000B900887F883111F0803471F780E0089515
:1008500084E98093BC008091BC0084FDFCCF0895A6
:100860008093BB0084E88093BC008091BC0087FF2C
:10087000FCCF9091B900987F81E0983209F480E034
:10088000089584E88093BC008091BC0087FFFCCF72
:100890008091BB00089580910001811115C080E412
:1008A0000E9406048093000181110CC082E10E9425
:1008B000300480930001811105C08FEF0E94300445
:1008C000809300010E94280484B1807F84B985B19F
:1008D000807F85B98AB1837F8AB98BB1837F8BB9D9
:1008E0003E98469808950E94B103809300010E94AB
:1008F0004B0480B38C7080BB81B3836F81BBA6E354
:10090000B1E0E4E4F1E08EE08E0F11921D928E13BF
:10091000FCCF84E993E0892B11F00C9494030895A3
:10092000BF92CF92DF92EF92FF920F931F93CF93DC
:10093000DF9380910001882379F0809135018F5FEA
:1009400080933501811108C00E94B103809300019A
:10095000811102C00E943C0306E311E0C0E0D0E038
:10096000DD24D39482E0C82EEE24E394F12CC7302A
:10097000D10500F580910001811164C080E40E94DE
:10098000060480930001811112C082E10E943004AC
:100990008093000181110BC0C7010C2E01C0880F8C
:1009A0000A94EAF780950E943004809300010E9427
:1009B000280448C0CA30A1F028F4C83059F0C93022
:1009C00061F005C0CC3089F070F0CD3089F0209A0C
:1009D000289810C0219A29980DC0229A2A980AC0F6
:1009E000239A2B9807C0529A01C0539A5B9802C071
:1009F0003E9A469890EA9A95F1F79FB1799902C08C
:100A000082E001C080E091709D25982B7C9902C006
:100A100084E001C080E0892B7D9902C038E001C0EC
:100A200030E0832B7E9902C020E101C020E0822BC0
:100A30009FB19095991F9927991F9295990F907E34
:100A4000892B0FC08091000181114FC080E40E946A
:100A50000604809300018823A9F1B12C0E94280488
:100A60008B2DF8019081981719F08083C0920101B5
:100A70000E944B0421960F5F1F4FCE30D10509F025
:100A800076CF809101018823B1F0815080930101DC
:100A9000882339F08FE99FE00197F1F700C000004B
:100AA0000AC0A4E4B1E0E6E3F1E0CF01825F9191F6
:100AB0009D938E13FCCF83E393E0892BC1F00E94BA
:100AC000330315C083E10E9430048093000181113B
:100AD000C4CF81E40E940604809300018111BDCF40
:100AE0000E944104B82EB094B9CF80E0BACF81E023
:100AF000DF91CF911F910F91FF90EF90DF90CF90FA
:100B0000BF900895E82FF0E0EC5BFE4F80810895E0
:100B100008958B3B910578F4883A910540F5853A24
:100B20009105D0F48430910508F0B1C08130910571
:100B300009F4ADC06BC0803E910508F467C0883EE3
:100B4000910508F4A4C09C01205F310920313105D2
:100B500008F05CC090650895853A910509F459C084
:100B6000863A910509F058C082E890E40895883AE1
:100B7000910509F454C0893A910509F453C08A3AA1
:100B8000910509F452C08B3A910509F451C08C3A91
:100B9000910509F450C08D3A910509F44FC0803B8E
:100BA000910509F44EC08E3A910509F44DC08F3A73
:100BB000910509F44CC0813B910509F44BC0823B7F
:100BC000910509F44AC0833B910509F449C0843B6F
:100BD000910509F448C0853B910509F447C0863B5F
:100BE000910509F446C0873B910509F445C0883B4F
:100BF000910509F444C0893B910509F443C08A3B3F
:100C0000910509F442C080E094E4089580E090E00A
:100C1000089581E890E4089583E890E4089582EED1
:100C200094E4089589EE94E408958AEE94E4089596
:100C300085EB94E4089586EB94E4089587EB94E4BF
:100C400008958CEC94E408958DEC94E4089583E881
:100C500095E408958AE895E4089582E995E4089575
:100C600084E995E4089581E296E4089583E296E4A8
:100C7000089584E296E4089585E296E4089586E274
:100C800096E4089587E296E408958AE296E408954A
:100C9000089596E0799FF001112494E5899FE00D75
:100CA000F11D1124E60FF11DEE0FFF1FE851FF4F5C
:100CB000859194910895880F991FFC01E05AF040A6
:100CC000859194910895880F991FFC01E052FF4F80
:100CD00085919491089526E0729FF001112444E5D6
:100CE000849FE00DF11D1124E60FF11DEE0FFF1F93
:100CF000E851FF4F859194919C013A9521154FE160
:100D0000340708F41AC13F512115304120F49F7077
:100D10000E94630608959C0130532115304118F458
:100D20009927906C0895811520E5920769F40E9437
:100D30001A144FEF84E39CE0415080409040E1F76B
:100D400000C000000C94291B813020E5920731F48B
:100D50008091CC0181608093CC0108959C01305535
:100D60002115304108F051C0292F33272F70332728
:100D700021303105D9F4AC014370552702C0220F50
:100D8000331F4A95E2F73C68AC0164E0440F551FFD
:100D90006A95E1F744275370242B352B73E0880FB5
:100DA000991F7A95E1F7807699271DC02230310589
:100DB00029F4982F8827816F906A08952330310590
:100DC000A9F4AC014370552721E030E002C0220FA6
:100DD000331F4A95E2F73C6843E0880F991F4A9514
:100DE000E1F7807E9770822B932B08952430310594
:100DF000E1F4AC014370552721E030E002C0220F3E
:100E0000331F4A95E2F73A68E7CF9C013057211526
:100E1000304118F49F70906208959C01305821155C
:100E2000304118F49F70906A0895803E9105E0F477
:100E3000803C910558F58133910509F46FC048F461
:100E40008932910509F463C08A32910509F46DC0B5
:100E500072C089339105E9F082389105D1F085336C
:100E6000910509F44DC067C0833E910581F138F4C6
:100E7000803E9105B9F0823E9105D9F05CC0863E76
:100E8000910561F1873E9105A1F155C00E945B0675
:100E900008952091DF0120FD02C021FF4CC080EEAB
:100EA00090E049C08091DF0180FFF9CF89E390E0B5
:100EB00042C08091DF0182FF0EC08091DF0184FF7C
:100EC00003C080E090E037C083EE90E034C08091B2
:100ED000DF0182FFF2CF82EE90E02DC08091DF0132
:100EE00083FF0BC08091DF0184FDEBCF87EE90E0A4
:100EF00022C08091DF0183FFF5CF86EE90E01BC01A
:100F00008091DF0185FF07C089E290E014C08091E5
:100F1000DF0185FFF9CF85E390E00DC08091DF010F
:100F200086FF07C08AE290E006C08091DF0186FF5D
:100F3000F9CF81E390E00E9489050895089580919A
:100F400062010895CF93DF9300D01F92CDB7DEB733
:100F50009C018091E501843019F593E099833B83EE
:100F60002A839093E9008FEF9091E800815095FDDE
:100F700006C095ED9A95F1F700008111F5CF8091AB
:100F8000E80085FF0DC040E050E063E070E0CE0176
:100F900001960E940C0A8091E8008E778093E80009
:100FA0000F900F900F90DF91CF910895CF93DF9323
:100FB00000D01F92CDB7DEB72091E501243021F596
:100FC00022E029839B838A8383E08093E9008FEF6B
:100FD0009091E800815095FD06C095ED9A95F1F746
:100FE00000008111F5CF8091E80085FF0DC040E041
:100FF00050E063E070E0CE0101960E940C0A8091FF
:10100000E8008E778093E8000F900F900F90DF91AB
:10101000CF9108952091E5012430F1F422E020934E
:10102000E9002FEF3091E800215035FD06C035ED85
:101030003A95F1F700002111F5CF2091E80025FF46
:101040000BC040E050E065E070E00E940C0A809127
:10105000E8008E778093E8000895CF93DF93EC014A
:101060009091E501943009F046C080910C018823ED
:10107000D9F080910D018823B9F09093E9008FEFAA
:101080009091E800815095FD06C095E19A95F1F7A1
:1010900000008111F5CF8091E80085FF2CC040E071
:1010A00050E060E170E017C081E08093E9008FEFCD
:1010B0009091E800815095FD06C095ED9A95F1F765
:1010C00000008111F5CF8091E80085FF14C040E059
:1010D00050E068E070E0CE010E940C0A8091E800C8
:1010E0008E778093E80080E1FE01A2E5B1E00190F7
:1010F0000D928A95E1F7DF91CF9108958091E401F7
:10110000811109C00E94A10B0E94FE0B8091E20098
:1011100084608093E20008951092E4010895089598
:101120000C9460210E94BF1A0E9466210E94A40EA6
:101130000C949E0742E061EC81E00E941B0B42E0B0
:1011400061EC82E00E941B0B42E061EC83E00E94B4
:101150001B0B42E161EC84E00C941B0B8091E701D6
:10116000833009F455C030F4813071F0823009F4D5
:101170008EC008958A3009F47AC08B3009F460C0BB
:10118000893009F09CC020C08091E601813A09F0C5
:1011900096C08091E800877F8093E8008091EA0103
:1011A0009091EB01892B21F460E182E591E003C08D
:1011B00060E080E090E070E00E94570A8091E800D3
:1011C0008B778093E80008958091E601813209F0E1
:1011D00076C08091EA019091EB01009719F0039796
:1011E00009F06DC08091E800877F8093E8008091CE
:1011F000E80082FD05C08091E5018111F8CF5FC054
:101200008091F100809362018091E8008B7753C058
:101210008091E601813A09F052C08091EA019091F3
:10122000EB01892B09F04BC08091E800877F809308
:10123000E8008091E80080FFFCCF80910C0136C06F
:101240008091E6018132D9F58091EA019091EB011C
:10125000892BA9F58091E800877F8093E8000E94A0
:10126000500B8091E80180930C010C941A1480912A
:10127000E601813221F58091E800877F8093E800C4
:101280000E94500B8091E901809363010895809141
:10129000E601813AA1F48091E800877F8093E8001D
:1012A0008091E80080FFFCCF809163018093F10082
:1012B0008091E8008E778093E8000C94500B08959D
:1012C00084B7877F84BF88E10FB6F894809360006D
:1012D000109260000FBE90E080E80FB6F894809303
:1012E0006100909361000FBE0E94F30E0E94A10B5B
:1012F0000E94FE0B8091E20084608093E20078946B
:101300000E94840E0E94F50E82E091E00E949F0EE2
:101310000E944E218091E501853069F40E94831A74
:101320008091E3018823B1F30E94AB1A882391F3E3
:101330000E94F609EFCF0E94FB0EECCF292F332736
:1013400023303105C9F064F42130310581F02230B9
:10135000310509F043C08DE690E02CEB33E042C04C
:1013600021323105F1F02232310541F137C082E1FD
:1013700090E029E234E036C099278130910541F0B0
:101380008230910541F0892B49F5E8EBF3E005C087
:10139000E0EAF3E002C0E8E8F3E0849190E09F0126
:1013A00021C06430D8F4E62FF0E0EE0FFF1FEE5DB1
:1013B000FE4F2081318189E090E014C0643070F4E8
:1013C00070E0FB01EE0FFF1FE65EFE4F20813181D2
:1013D000FB01EA5EFE4F808190E004C080E090E077
:1013E00020E030E0FA0131832083089580E189BD57
:1013F00082E189BD09B400FEFDCF8091D8008F7DC8
:101400008093D8008091E00082608093E00080911A
:10141000E00081FDFCCF0895CF92DF92EF92FF9222
:101420000F931F93CF93DF93EC018B016A010E940E
:101430006F0B811133C0C114D10439F0F6018081E2
:101440009181081B190BC80FD91FE12CF12C011534
:10145000110519F18091E80085FD16C08091E80022
:101460008E778093E800C114D10449F0F6018081A1
:101470009181E80EF91EF182E08285E00FC00E94A2
:101480006F0B882321F30AC089918093F1000150EA
:101490001109FFEFEF1AFF0ADACF80E0DF91CF9159
:1014A0001F910F91FF90EF90DF90CF9008952091C2
:1014B000EC013091ED012617370748F061157105F1
:1014C00039F42091E8002E772093E80001C0B9019B
:1014D00040E061157105A9F12091E501222309F48D
:1014E00043C0253009F442C02091E80023FD40C0EC
:1014F0002091E80022FD32C02091E80020FFE9CFD2
:101500004091F3002091F20030E0342BFC01CF0138
:101510006115710559F02830310540F481918093AF
:10152000F100615071092F5F3F4FF1CF41E028304A
:10153000310509F040E02091E8002E772093E80083
:10154000C8CF4111C9CF0AC08091E501882361F05D
:10155000853061F08091E80083FD0AC08091E80049
:1015600082FFF2CF80E0089582E0089583E008953D
:1015700081E008952091EC013091ED0126173707A5
:1015800048F06115710539F42091E8002E77209319
:10159000E80001C0B901FC0120E06115710591F17D
:1015A0008091E501882309F440C0853009F43FC0EB
:1015B0008091E80083FD3DC08091E80082FD2FC04E
:1015C0008091E80080FFE9CF2091F3008091F20044
:1015D00090E0922B6115710559F08830910540F427
:1015E00024912093F1003196615071090196F2CF58
:1015F00021E0089709F020E08091E8008E77809341
:10160000E800CBCF2111CCCF0AC08091E50188231F
:1016100061F0853061F08091E80083FD0AC080911F
:10162000E80082FFF2CF80E0089582E0089583E031
:10163000089581E00895982F973058F59093E90028
:10164000981739F07091EC002091ED005091F00066
:1016500003C0242F762F50E021FF19C03091EB00FA
:101660003E7F3093EB003091ED003D7F3093ED00F5
:101670003091EB0031603093EB007093EC002093DD
:10168000ED005093F0002091EE0027FF07C09F5F10
:10169000D3CF8F708093E90081E0089580E00895B2
:1016A0008091E60187FF11C08091E80082FD05C0AE
:1016B0008091E5018111F8CF11C08091E8008B770E
:1016C0000BC08091E501882349F08091E80080FFFC
:1016D000F8CF8091E8008E778093E80008952091FC
:1016E000E4003091E50095E64091EC00842F817094
:1016F00040FF22C08091E80080FD1CC08091E50180
:10170000882391F0853091F08091EB0085FD10C029
:101710004091E4005091E5004217530729F39A01E4
:10172000915011F784E0089582E0089583E00895D0
:1017300081E0089580E008954091E80042FFDECF07
:1017400008950E940F0C0E94170CE0EEF0E08081DB
:1017500081608083E8EDF0E080818F77808319BC21
:10176000A7EDB0E08C918E7F8C9380818F7E8083FB
:101770001092E40108950F931F93CF93DF930E947B
:101780000F0C0E94170CC8EDD0E088818F778883FA
:1017900088818068888388818F7D888319BC1092B6
:1017A000E5011092E1011092E3011092E20100EED6
:1017B00010E0F80180818B7F80838881816088833D
:1017C00042E060E080E00E941B0BE1EEF0E08081EF
:1017D0008E7F8083E2EEF0E0808181608083808173
:1017E00088608083F80180818E7F8083888180611A
:1017F0008883DF91CF911F910F910895E8EDF0E07C
:1018000080818F7E8083E7EDF0E08081816080833E
:1018100084E082BF81E08093E4010C94BB0BE8ED8F
:10182000F0E080818E7F80831092E2000895109214
:10183000DA001092E10008951F920F920FB60F92F6
:1018400011242F933F934F935F936F937F938F93C5
:101850009F93AF93BF93EF93FF938091E10082FF3B
:101860000BC08091E20082FF07C08091E1008B7F76
:101870008093E1000E94830E8091DA0080FF1FC0F8
:101880008091D80080FF1BC08091DA008E7F80930A
:10189000DA008091D90080FF0DC080E189BD82E12E
:1018A00089BD09B400FEFDCF81E08093E5010E946F
:1018B0007E0805C019BC1092E5010E948C08809139
:1018C000E10080FF19C08091E20080FF15C0809187
:1018D000E2008E7F8093E2008091E200806180933D
:1018E000E2008091D80080628093D80019BC85E026
:1018F0008093E5010E9490088091E10084FF30C050
:101900008091E20084FF2CC080E189BD82E189BD25
:1019100009B400FEFDCF8091D8008F7D8093D80060
:101920008091E1008F7E8093E1008091E2008F7EC4
:101930008093E2008091E20081608093E2008091D8
:10194000E101882311F084E007C08091E30087FD66
:1019500002C081E001C083E08093E5010E9492080B
:101960008091E10083FF29C08091E20083FF25C0C0
:101970008091E100877F8093E10082E08093E50120
:101980001092E1018091E1008E7F8093E1008091CF
:10199000E2008E7F8093E2008091E200806180937C
:1019A000E20042E060E080E00E941B0B8091F000CA
:1019B00088608093F0000E948F08FF91EF91BF91A3
:1019C000AF919F918F917F916F915F914F913F91D7
:1019D0002F910F900FBE0F901F9018951F920F928E
:1019E0000FB60F9211242F933F934F935F936F93F2
:1019F0007F938F939F93AF93BF93CF93DF93EF9397
:101A0000FF93C091E900CF708091EC00D82FD17086
:101A100080FDD0E81092E9008091F000877F8093EC
:101A2000F00078940E94320D1092E9008091F0004D
:101A300088608093F000CD2BCF70C093E900FF91B8
:101A4000EF91DF91CF91BF91AF919F918F917F9156
:101A50006F915F914F913F912F910F900FBE0F901B
:101A60001F9018951F93CF93DF93CDB7DEB7AA973A
:101A70000FB6F894DEBF0FBECDBFE6EEF1E088E012
:101A80008E0F9091F10091938E13FBCF0E94AE08C0
:101A90008091E80083FF1FC18091E6019091E701EA
:101AA000492F50E04A30510508F015C1FA01EA5AB1
:101AB000FF4F0C94E822803881F0823809F00BC186
:101AC0008091EA018F708093E9008091EB0085FBA3
:101AD000882780F91092E90006C08091E201909178
:101AE000E301911182609091E800977F9093E80064
:101AF0008093F1001092F100C8C0282F2D7F09F0CB
:101B0000EAC0882319F0823061F0E5C08091E801D5
:101B1000813009F0E0C0933009F080E08093E30168
:101B20002BC08091E801811127C08091EA018F705C
:101B300009F4D1C08093E9002091EB0020FF1CC084
:101B4000933021F48091EB00806214C09091EB00FF
:101B500090619093EB0021E030E0A90102C0440FB6
:101B6000551F8A95E2F74093EA001092EA008091AF
:101B7000EB0088608093EB001092E9008091E80010
:101B8000877F86C08111A7C01091E8011F778091DF
:101B9000E3008078812B8093E3008091E800877FC9
:101BA0008093E8000E94500B8091E80080FFFCCFFA
:101BB0008091E30080688093E300111102C082E00D
:101BC00001C083E08093E50186C08058823008F030
:101BD00082C08091E8019091E9018C3D53E0950726
:101BE00079F583E08A838AE289834FB7F894DE012E
:101BF000139620E03EE051E2E32FF0E050935700CF
:101C0000E49120FF03C0E295EF703F5FEF708E2FED
:101C100090E0EA3010F0C79601C0C0968D939D9376
:101C20002F5F243149F74FBF8091E800877F809371
:101C3000E8006AE270E0CE0101960E94570A14C0E3
:101C4000AE014F5F5F4F6091EA010E949E09BC01A7
:101C5000892B09F440C09091E800977F9093E800A9
:101C600089819A810E94BA0A8091E8008B778093DB
:101C7000E80031C0803879F58091E800877F809353
:101C8000E8008091E1018093F1008091E8008E7777
:101C90008093E8000E94500B1EC081111CC09091DF
:101CA000E8019230C0F48091E800877F8093E800DB
:101CB0009093E1010E94500B8091E101811106C0D7
:101CC0008091E30087FD02C081E001C084E0809341
:101CD000E5010E949A088091E80083FF0AC0809184
:101CE000E800877F8093E8008091EB00806280931A
:101CF000EB00AA960FB6F894DEBF0FBECDBFDF9102
:101D0000CF911F9108950895CF938091E501882385
:101D1000A1F0C091E900CF709091EC00892F817003
:101D200090FD80E8C82B1092E9008091E80083FDC7
:101D30000E94320DCF70C093E900CF910895909327
:101D40006901809368010895E0916801F09169014B
:101D5000309721F00190F081E02D099480E0089502
:101D6000E0916801F0916901309721F00280F381E0
:101D7000E02D09940895E0916801F0916901309790
:101D800021F00480F581E02D0994089520916601E9
:101D9000309167018217930771F0909367018093E8
:101DA0006601E0916801F0916901309721F00680A9
:101DB000F781E02D09940895209164013091650127
:101DC0008217930771F09093650180936401E0910D
:101DD0006801F0916901309721F00084F185E02DD0
:101DE0000994089508950C94F20E0E94C51A0E9459
:101DF00073040C948B1BCF92DF92EF92FF920F93A0
:101E00001F93CF93DF93CDB7DEB72B970FB6F89420
:101E1000DEBF0FBECDBF0E9490048BE6C82E81E0CE
:101E2000D82E00E010E0E02E802F0E948205F601FF
:101E300041916F01F42EF826B1F40F5F1F4F0E3061
:101E4000110589F78FEF89838A831B820E94CE1A3E
:101E50008160782F9D838C8349815A816B818D812C
:101E60000E949E0F40C09091CC0191FF04C08B87CF
:101E70000E9488058B8520E030E04F2D50E0922FA6
:101E8000BA01022E02C0759567950A94E2F760FFC9
:101E900024C02E83EF8221E030E0690102C0CC0C27
:101EA000DD1C9A95E2F790E08C219D21892B09F4A5
:101EB00020E028870E94CE1A8160782F9A87898730
:101EC0004E815F8168858A850E949E0FF801E559E1
:101ED000FE4F8081C826C08206C02F5F3F4F26304C
:101EE000310569F6AACF0E94721E10916A010E9404
:101EF000A40E1817A1F00E94A40E80936A012B96DD
:101F00000FB6F894DEBF0FBECDBFDF91CF911F910A
:101F10000F91FF90EF90DF90CF900C949E072B963F
:101F20000FB6F894DEBF0FBECDBFDF91CF911F91EA
:101F30000F91FF90EF90DF90CF900895CF93DF93B4
:101F4000CDB7DEB72B970FB6F894DEBF0FBECDBF6F
:101F50004F83588769877A878B87DE01119686E0E1
:101F6000FD0111928A95E9F785E0FE01379601900F
:101F70000D928A95E1F749815A816B817C818D812F
:101F80009E810E94B4162B960FB6F894DEBF0FBE4A
:101F9000CDBFDF91CF910895CF93882309F4C2C0BC
:101FA000C82F823859F40E94A40E81FDBBC089E37A
:101FB0000E9450190E940D1A89E30CC0833879F4ED
:101FC0000E94A40E80FDAEC083E50E9450190E94BD
:101FD0000D1A83E50E949219CF910C940D1A843842
:101FE00059F40E94A40E82FD9DC087E40E945019FE
:101FF0000E940D1A87E4EECF8CEF8C0F813A48F4E3
:102000008C2F0E94B32081118DC08C2F0E945019FB
:10201000E3CF80E28C0F883048F4C77081E001C0C4
:10202000880FCA95EAF70E94D619D6CF8BE58C0F98
:10203000833078F4C53A29F0C63A31F083E890E06D
:1020400005C081E890E002C082E890E0CF910C9456
:10205000C60E88E58C0F833108F064C0C83A39F1A8
:10206000C93A41F1CA3A49F1CB3A51F1CC3A59F166
:10207000CD3A61F1C03B69F1CE3A71F1CF3A79F1D5
:10208000C13B81F1C23B89F1C33B91F1C43B99F162
:10209000C53BA1F1C63BA9F1C73BB1F1C83BB9F1C2
:1020A000C93BC1F1CA3BC9F180E090E038C082EE83
:1020B00090E035C089EE90E032C08AEE90E02FC00B
:1020C00085EB90E02CC086EB90E029C087EB90E098
:1020D00026C08CEC90E023C08DEC90E020C083E81B
:1020E00091E01DC08AE891E01AC082E991E017C032
:1020F00084E991E014C081E292E011C083E292E0B1
:102100000EC084E292E00BC085E292E008C086E255
:1021100092E005C087E292E002C08AE292E0CF91AD
:102120000C94DC0ECF910895882309F44BC08238BB
:1021300059F40E94A40E81FF45C089E30E94501902
:102140000E940D1A89E30CC0833871F40E94A40E1A
:1021500080FF38C083E50E9450190E940D1A83E564
:102160000E9492190C940D1A843859F40E94A40EFE
:1021700082FF28C087E40E9450190E940D1A87E44C
:10218000EFCF9CEF980F913A58F390E2980F983068
:1021900050F4877091E001C0990F8A95EAF7892F72
:1021A0000E94DC19DFCF9BE5980F933020F480E08C
:1021B00090E00C94C60E885A833120F480E090E0C1
:1021C0000C94DC0E0895882321F00E94D6190C94FB
:1021D0000D1A0895882321F00E94DC190C940D1A21
:1021E0000895BF92CF92DF92EF92FF920F931F93C9
:1021F000CF93DF9300D000D000D0CDB7DEB725E07D
:10220000FC01DE01119601900D922A95E1F7FC0187
:10221000408131810281258122952F7063817481F3
:10222000672B09F4E5C23F3F19F44F3F09F4E0C2C0
:102230007C0149833A8389819A812E830E940F19F8
:10224000182FB92E0E940E190E94D517EB2DE2957A
:10225000EF70F0E0E05AFF4F2E810C94E8228B2DB6
:10226000807F9B2D9F70F92E882319F0F29480EFC8
:10227000F822002349F0FF2009F467C28F2D0E9445
:10228000E6190E940D1A61C2812F0E949410FF204E
:1022900009F4AEC28F2D0E94EC1926960FB6F89461
:1022A000DEBF0FBECDBFDF91CF911F910F91FF9089
:1022B000EF90DF90CF90BF900C940D1A3B2D307FA4
:1022C0008B2D8F70303211F08295807F112319F0A1
:1022D000113021F12CC00023B9F0222309F4A0C150
:1022E000213009F09DC126960FB6F894DEBF0FBECF
:1022F000CDBFDF91CF911F910F91FF90EF90DF90B5
:10230000CF90BF900C94F619222319F0213009F4D4
:102310006FC28E830E94F9198E8196C1002321F02D
:10232000223008F065C27CC1211162C28DC1002338
:1023300021F0222309F474C108C2222309F484C1C4
:1023400019C22B2D26952695237030E021153105D5
:1023500021F021303105D1F04BC2002321F0812F33
:102360009B2D937002C080E090E026960FB6F89403
:10237000DEBF0FBECDBFDF91CF911F910F91FF90B8
:10238000EF90DF90CF90BF900C94C60E002321F009
:10239000812F9B2D937002C080E090E026960FB6AF
:1023A000F894DEBF0FBECDBFDF91CF911F910F918B
:1023B000FF90EF90DF90CF90BF900C94DC0E812FB8
:1023C000002319F00E947A1D02C00E94E21D269689
:1023D0000FB6F894DEBF0FBECDBFDF91CF911F9136
:1023E0000F91FF90EF90DF90CF90BF900C94671EFD
:1023F0008B2D837009F07BC00111FAC1812F82956A
:1024000086958770880F880F912F9F70C92ED12CC9
:10241000E12CF12C082E04C0CC0CDD1CEE1CFF1CA2
:102420000A94D2F714FF12C04FE050E060E070E071
:1024300004C0440F551F661F771F8A95D2F7CB0142
:10244000BA01609570958095909503C060E070E04A
:10245000CB012B2D269526952370422F50E042303C
:102460005105D9F04330510569F16C297D298E2938
:102470009F294130510551F126960FB6F894DEBFE1
:102480000FBECDBFDF91CF911F910F91FF90EF90C5
:10249000DF90CF90BF900C94FC176C297D298E297A
:1024A0009F2926960FB6F894DEBF0FBECDBFDF91F1
:1024B000CF911F910F91FF90EF90DF90CF90BF9041
:1024C0000C9418180E94FC17C701B60126960FB687
:1024D000F894DEBF0FBECDBFDF91CF911F910F915A
:1024E000FF90EF90DF90CF90BF900C94E017002307
:1024F00019F08B2D817001C08695882309F478C16D
:10250000812F829586958770880F880F912F9F70F5
:10251000C92ED12CE12CF12C082E04C0CC0CDD1CD2
:10252000EE1CFF1C0A94D2F714FF12C04FE050E0DB
:1025300060E070E004C0440F551F661F771F8A9546
:10254000D2F7CB01BA01609570958095909503C044
:1025500060E070E0CB012B2D269526952370422F4D
:1025600050E042305105D9F04330510569F16C29F2
:102570007D298E299F294130510551F126960FB6AC
:10258000F894DEBF0FBECDBFDF91CF911F910F91A9
:10259000FF90EF90DF90CF90BF900C94D6186C29ED
:1025A0007D298E299F2926960FB6F894DEBF0FBE8F
:1025B000CDBFDF91CF911F910F91FF90EF90DF90F2
:1025C000CF90BF900C94F2180E94D618C701B601A4
:1025D00026960FB6F894DEBF0FBECDBFDF91CF9128
:1025E0001F910F91FF90EF90DF90CF90BF900C94D0
:1025F000BA18103FD1F118F4103E50F4A1C0123FA8
:1026000009F463C008F44CC0133F09F473C098C0C8
:102610001F708B2D8F710023A1F00E945318812F02
:1026200026960FB6F894DEBF0FBECDBFDF91CF91D7
:102630001F910F91FF90EF90DF90CF90BF900C947F
:10264000E3100E947418812F26960FB6F894DEBF0F
:102650000FBECDBFDF91CF911F910F91FF90EF90F3
:10266000DF90CF90BF900C94EA100023A9F02111C5
:10267000BFC08B2D8F7126960FB6F894DEBF0FBEAC
:10268000CDBFDF91CF911F910F91FF90EF90DF9021
:10269000CF90BF900C949918223008F0A9C0E9CFD0
:1026A0000023A9F08B2D8F7126960FB6F894DEBF0C
:1026B0000FBECDBFDF91CF911F910F91FF90EF9093
:1026C000DF90CF90BF900C945318002359F38B2DBB
:1026D0008F7126960FB6F894DEBF0FBECDBFDF9187
:1026E000CF911F910F91FF90EF90DF90CF90BF900F
:1026F0000C947418002399F08B2D8F7126960FB6C9
:10270000F894DEBF0FBECDBFDF91CF911F910F9127
:10271000FF90EF90DF90CF90BF900C943E182696DC
:102720000FB6F894DEBF0FBECDBFDF91CF911F91E2
:102730000F91FF90EF90DF90CF90BF900C943418E2
:102740000023A9F0222309F4ADCF812F26960FB6DE
:10275000F894DEBF0FBECDBFDF91CF911F910F91D7
:10276000FF90EF90DF90CF90BF900C94CC0F22237E
:1027700009F4ADCF812F26960FB6F894DEBF0FBEB9
:10278000CDBFDF91CF911F910F91FF90EF90DF9020
:10279000CF90BF900C9494104B2D4F70612FC701B8
:1027A0000E94010326960FB6F894DEBF0FBECDBF80
:1027B000DF91CF911F910F91FF90EF90DF90CF901D
:1027C000BF900C9458174B2D4F70612FC701269660
:1027D0000FB6F894DEBF0FBECDBFDF91CF911F9132
:1027E0000F91FF90EF90DF90CF90BF900C94480630
:1027F00026960FB6F894DEBF0FBECDBFDF91CF9106
:102800001F910F91FF90EF90DF90CF90BF900895B0
:102810000E94F3190E94C8190E940D1A0E94181FE5
:102820000E94671E80E090E00E94C60E80E090E06B
:102830000C94DC0E0E94E3190C9408140E940F19EA
:10284000292F22952F7030E02C3031054CF42A309E
:1028500031056CF4225031092230310588F407C06B
:102860002C30310549F02F30310531F009C0803E60
:1028700048F0803F29F406C093FB882780F908952B
:1028800080E0089581E00895CF93DF9300D000D0D9
:102890001F92CDB7DEB70F900F900F900F900F9053
:1028A000DF91CF910895CF93DF9300D000D000D077
:1028B000CDB7DEB726960FB6F894DEBF0FBECDBFFC
:1028C000DF91CF9108951F93CF93DF93C09179014A
:1028D00016E080917A01C81799F0D0E01C9FF001B2
:1028E0001D9FF00D1124E558FE4F408151816281FA
:1028F0007381848195810E9453142196C770E9CF1A
:10290000DF91CF911F9108954091AB015091AC019F
:102910006091AD017091AE018091AF019091B001D5
:102920000C9453148091B00182958F7009F054C0BB
:102930008091AD01882309F44FC080917901A09165
:102940007A016091AB017091AC014091AE01509160
:10295000AF01B6E08A1709F43FC090E04115510578
:10296000C1F17F3F11F46F3FA1F1B89FF001B99F12
:10297000F00D1124E558FE4F218172132AC02081E9
:10298000621327C02281211124C02381348124179E
:10299000350710F421503109241B350B283C310533
:1029A000C0F42091B0012F7020612093B00126E087
:1029B000289FF001299FF00D1124E058FE4F8081DF
:1029C0008F70806180838BEA91E00E94F1100C94FB
:1029D000631401968770BECF0895CF92DF92EF9275
:1029E000FF920F931F93CF93DF93CDB7DEB762971C
:1029F0000FB6F894DEBF0FBECDBF8C0185E0F801A5
:102A0000DE011D9601900D928A95E1F7D8014C9157
:102A100011965C91119712966C9112971396CD9026
:102A2000DC9014973091AB017091AC018091AE01B4
:102A30009091AF01009709F46BC17F3F19F43F3FBC
:102A400009F466C1E090AD01EE2009F4C0C0209108
:102A5000B001C816D90628F0F601E81BF90BCF0122
:102A600004C0809590958C0D9D1DFF24F394883CA7
:102A7000910578F0F12C207F09F0C6C07C2DD98A11
:102A8000C88A89890E9444148BEA91E00E94F1105F
:102A9000B1C0822F807F09F046C0751314C0341373
:102AA00012C0611110C02F7020612093B0010E94EC
:102AB00084148BEA91E00E94F1108091B001D8015A
:102AC00015968C932EC0CD2819F15F3F11F44F3F1E
:102AD000F9F0F62E61111CC08091790120917A01E4
:102AE00036E0821709F45AC090E0389FF001399F10
:102AF000F00D1124E558FE4F7181571306C0708107
:102B0000471303C07281711103C001968770E9CF2A
:102B1000F62E662309F418C18091B001816080937C
:102B2000B001F12C11C1751308C0341306C0611136
:102B300004C08091B001D801C3C04D875E878D85E8
:102B40009E856A8B0E941E146A898823E1F16623A0
:102B5000D1F12091B001822F82958F7090E0029781
:102B600074F08091AB019091AC0198878F831986A6
:102B7000DB86CA862C87CE0107960E94F11086E07C
:102B8000F801ABEAB1E001900D928A95E1F70E945D
:102B900092140E948414FF24F394D6C04D875E875C
:102BA0008D859E850E940F19292F22952F7030E068
:102BB000223031050CF0BCC09F7009F0B6C0805EB9
:102BC000883008F4C1C0C8010E94F110E4CFC816D3
:102BD000D90608F453C0F601E81BF90BCF01883C75
:102BE000910508F450C0F12C7C2DD98AC88A8989B6
:102BF0000E944414EBEAF1E086E0DF011D928A9521
:102C0000E9F70E948414A0C0751314C0341312C0D5
:102C1000611110C08091B001F8018583C8010E9444
:102C2000F11086E0EBEAF1E0DF011D928A95E9F709
:102C3000FE2C8AC04D875E878D859E856A8B0E949B
:102C40001E146A89882309F4BECF662309F4BBCF1A
:102C50002091B001822F82958F7090E002970CF442
:102C60008ECF8091AB019091AC019A8389831B82B6
:102C7000DD82CC822E83CE0101967FCF8095909508
:102C80008C0D9D1DACCFF62E662309F49CCF7513D9
:102C90002EC034132CC02091B00120FD1FC0822F04
:102CA00082958F70D9F0D80115962C9315978F3097
:102CB00049F08F5F982F9295907F822F8F70892B8C
:102CC00015968C93C8010E94F11086E0F801ABEADA
:102CD000B1E001900D928A95E1F793CF86E0F8017B
:102CE000ABEAB1E001900D928A95E1F72DC04D87D6
:102CF0005E878D859E850E941E14811140CF809134
:102D0000B00181608093B001C8010E94F1101CC025
:102D1000662309F458CF4D875E878D859E850E9476
:102D20001E14882309F44FCF2ACF811148CF0CC03D
:102D3000243031050CF047CF9F7009F440CFF801E3
:102D40009581907F09F03BCF8F2D62960FB6F89456
:102D5000DEBF0FBECDBFDF91CF911F910F91FF90CE
:102D6000EF90DF90CF9008951F93CF93DF93CDB76F
:102D7000DEB72C970FB6F894DEBF0FBECDBF4F83E2
:102D8000588769877A878B879C87CE0107960E9430
:102D9000ED14882369F08F8198852A853B85232B44
:102DA000F1F19F3F09F063C08F3F09F060C037C069
:102DB00086E0FE013796DE01119601900D928A950C
:102DC000E1F76F817885EA85FB85309741F17F3F98
:102DD00011F46F3F21F120917A0130E0C901019691
:102DE000877099274091790150E08417950709F47D
:102DF00047C069837A83FD83EC8396E0929FD0017C
:102E0000939FB00D1124A558BE4FFE01319601903D
:102E10000D929A95E1F780937A010E94631416E06F
:102E20008091790190917A018917C1F1189FC001B1
:102E3000112485589E4F0E94ED14882379F1E0916A
:102E400079011E9FF0011124E558FE4F4081518108
:102E500062817381848195810E94531480917901EC
:102E600090E001968770992780937901D9CF4F819F
:102E7000588569857A858B859C850E945314CFCFB0
:102E80000E941A1410927A0110927901EBEAF1E093
:102E900086E0DF011D928A95E9F7C1CF2C960FB627
:102EA000F894DEBF0FBECDBFDF91CF911F91089583
:102EB000EF92FF920F931F93CF93DF938C01892B97
:102EC00009F46CC0F12CEE24E394E8012196F8019A
:102ED0008491843740F4843008F051C0813081F00F
:102EE000823019F15BC0853709F444C0A8F19CE732
:102EF000980F903708F052C08F770E94941041C00D
:102F00000E5F1F4FFE01C49180E28C0F883048F4A1
:102F1000C7708E2D01C0880FCA95EAF70E94E61986
:102F200014C08C2F0E94CC0F2DC00E5F1F4FFE01CE
:102F3000C49180E28C0F883058F4C7708E2D01C088
:102F4000880FCA95EAF70E94EC190E940D1A1AC060
:102F50008C2F0E94941016C00E5F1F4FFE01C4916B
:102F6000CC2381F08FE99FE00197F1F700C00000CA
:102F7000C150F6CF0E5F1F4FFE01F49003C00E94B8
:102F8000CC0F8E018F2D882309F49FCFEFE9FFE04E
:102F90003197F1F700C000008150F5CFDF91CF915C
:102FA0001F910F91FF90EF90089508956093B501E0
:102FB0007093B6018093B7019093B8010C940814F4
:102FC0000F931F930091B5011091B6012091B701A5
:102FD0003091B801DC01CB01802B912BA22BB32BBC
:102FE0008093B5019093B601A093B701B093B80157
:102FF0001F910F910C9408140F931F930091B5012A
:103000001091B6012091B7013091B801DC01CB01DC
:1030100080239123A223B3238093B5019093B6011B
:10302000A093B701B093B8011F910F910C940814AD
:103030000F931F930091B5011091B6012091B70134
:103040003091B801DC01CB0180279127A227B3275B
:103050008093B5019093B601A093B701B093B801E6
:103060001F910F910C9408141092B1011092B201AB
:103070001092B3011092B4010C94081441E050E096
:1030800060E070E004C0440F551F661F771F8A95EB
:10309000D2F74093B1015093B2016093B3017093A2
:1030A000B4010C94081441E050E060E070E004C00A
:1030B000440F551F661F771F8A95D2F78091B10183
:1030C0009091B201A091B301B091B401482B592B5A
:1030D0006A2B7B2B4093B1015093B2016093B301F3
:1030E0007093B4010C94081441E050E060E070E08B
:1030F00004C0440F551F661F771F8A95D2F740956D
:103100005095609570958091B1019091B201A09118
:10311000B301B091B401482359236A237B23409320
:10312000B1015093B2016093B3017093B4010C9458
:10313000081441E050E060E070E004C0440F551F07
:10314000661F771F8A95D2F78091B1019091B201E5
:10315000A091B301B091B401482759276A277B2772
:103160004093B1015093B2016093B3017093B401E5
:103170000C9408140F931F930091B1011091B201A8
:103180002091B3013091B401DC01CB01802B912B54
:10319000A22BB32B8093B1019093B201A093B30102
:1031A000B093B4011F910F910C9408140F931F93C7
:1031B0000091B1011091B2012091B3013091B4019D
:1031C000DC01CB0180239123A223B3238093B1019F
:1031D0009093B201A093B301B093B4011F910F91EA
:1031E0000C9408140F931F930091B1011091B20138
:1031F0002091B3013091B401DC01CB0180279127EC
:10320000A227B3278093B1019093B201A093B30199
:10321000B093B4011F910F910C9408140895CF92AC
:10322000DF92EF92FF920F931F93CF93DF938C0166
:10323000C090B501D090B601E090B701F090B80110
:103240004091B1015091B2016091B3017091B4010C
:10325000C42AD52AE62AF72ACFE1D0E0D701C60151
:103260000C2E04C0B695A795979587950A94D2F72A
:1032700080FF07C0B8018C2F0E946B06813091053A
:1032800031F4219758F7B80180E00E946B06DF9176
:10329000CF911F910F91FF90EF90DF90CF90089505
:1032A00090910C01992321F090910D01911109C089
:1032B00020910E0130910F01F90132969FEF40E00D
:1032C0001FC0982F9695969596959F3050F5E09152
:1032D0000E01F0910F01E90FF11D877021E030E040
:1032E000A90102C0440F551F8A95E2F7CA019181D6
:1032F000892B818308959F3F39F04F5F4E3041F015
:1033000051915813F8CF0DC05111F7CF942FF5CF2D
:103310009F3F39F0F901E90FF11D97FDFA9582837E
:103320000895089590910C01992321F090910D0139
:10333000911109C020910E0130910F01F9013296CF
:10334000205F3F4F1FC0982F9695969596959F307A
:10335000F0F4E0910E01F0910F01E90FF11D87707B
:1033600021E030E0A90102C0440F551F8A95E2F721
:10337000CA01809591818923818308953196E2174E
:10338000F30729F090819813F9CF1082F7CF0895B1
:1033900081E090E0E0910E01F0910F01E80FF91F3C
:1033A0001082019680319105A9F708959091CB0183
:1033B000892B8093CB01089580959091CB0189232F
:1033C0008093CB0108951092CB0108959091CA018A
:1033D000892B8093CA01089580959091CA01892311
:1033E0008093CA0108951092CA0108958093B9018B
:1033F00008951092B901089580910E0190910F01E6
:10340000FC0131969C01205F3F4F80E0919191112A
:103410008F5FE217F307D1F70895E0910E01F09165
:103420000F018091CB018083E0910E01F0910F019B
:1034300090818091CA01892B80838091B901882372
:1034400061F0E0910E01F0910F019081892B808352
:103450000E94FC1981111092B90180910E01909186
:103460000F010C94B00ECF92DF92EF92FF926C019D
:10347000EE24FF24C114D104E104F10421F0C701BA
:10348000B60120E101C020E0C72ED82EE92EFF248E
:10349000C114D104E104F10419F0285FC701B60199
:1034A0006B017C0154E0F694E794D794C7945A9545
:1034B000D1F7C114D104E104F10419F02C5FC70164
:1034C000B6016B017C0142E0F694E794D794C7946F
:1034D0004A95D1F7C114D104E104F10419F02E5F2B
:1034E000C701B601DC01CB01B695A79597958795E5
:1034F000892B8A2B8B2B09F02F5F822FFF90EF9067
:10350000DF90CF9008958091E501843009F1109209
:10351000CD0120E488E190E00FB6F894A89580935F
:1035200060000FBE2093600083B7817F846083BFFB
:1035300083B7816083BF7894889583B78E7F83BF7C
:1035400088E10FB6F89480936000109260000FBE7F
:10355000089508950895CF930E94A91A0E94900497
:103560000E94AA1AC0E08C2F0E948205811104C01B
:10357000CF5FCE30C1F701C081E0CF9108950E94A6
:103580001A140E94A40E0C949E0782E084BD93E05E
:1035900095BD9AEF97BD80936E0008952FB7F8946C
:1035A0008091CE019091CF01A091D001B091D10135
:1035B0002FBF0895CF92DF92EF92FF920F931F9348
:1035C0002FB7F8944091CE015091CF016091D00176
:1035D0007091D1012FBF6A017B01EE24FF248C0181
:1035E00020E030E0C016D106E206F30610F44150A8
:1035F00051099A01281B390BC9011F910F91FF90A6
:10360000EF90DF90CF9008951F920F920FB60F9218
:1036100011248F939F93AF93BF938091CE0190918C
:10362000CF01A091D001B091D1010196A11DB11D92
:103630008093CE019093CF01A093D001B093D1019C
:10364000BF91AF919F918F910F900FBE0F901F90E0
:1036500018950E94A10BF8942FEF87EA91E621506C
:1036600080409040E1F700C0000087E090EBDC0173
:103670008093EE019093EF01A093F001B093F101DC
:103680009CE088E10FB6F894A895809360000FBE87
:1036900090936000FFCFEF92FF920F931F93CF9311
:1036A000DF93D82FC0E08C2F0E94820500E010E04D
:1036B000E82EF12CC701002E02C0959587950A943B
:1036C000E2F780FD06C00F5F1F4F0630110591F72E
:1036D00009C0602F7C2F80E00E944906D813F3CFE9
:1036E00081E004C0CF5FCE30F1F680E0DF91CF9172
:1036F0001F910F91FF90EF900895CF93C82F8CE208
:103700000E944B1B882321F08C2FCF910C944B1BD4
:1037100080E0CF910895CF930E94D21C811102C006
:103720000E94B81CC5E6C15049F00E9490048FE386
:103730009CE90197F1F700C00000F5CF89E20E94F3
:103740007D1B811113C18AE20E947D1B81110E94A1
:10375000B81C85E00E947D1B81110E94291B0E94DC
:10376000DD1C8093CC0187E00E947D1B8823A9F19A
:103770008BE10E947D1B882351F08091CC0181FB5D
:10378000222720F991E0922790FB81F90EC08EE06C
:103790000E947D1B882361F08091CC0182FB22274F
:1037A00020F991E0922790FB82F98093CC0115C01B
:1037B00080E10E947D1B9091CC01882341F093FB16
:1037C000222720F981E0822780FB93F904C0892F0A
:1037D000809580FB90F99093CC018091CC010E9460
:1037E000E11C0E94EF1C8093DF0180EE0E947D1B94
:1037F000882341F08091DF01982F909590FB80F90C
:103800008093DF0189E30E947D1B882359F080911A
:10381000DF0181FB222720F991E0922790FB81F9BB
:103820008093DF0182EE0E947D1B882359F08091F6
:10383000DF0182FB222720F991E0922790FB82F999
:103840008093DF0186EE0E947D1B882359F08091D2
:10385000DF0183FB222720F991E0922790FB83F977
:103860008093DF0183EE0E947D1B882359F08091B5
:10387000DF0184FB222720F991E0922790FB84F955
:103880008093DF0185E30E947D1B882359F080919E
:10389000DF0185FB222720F991E0922790FB85F933
:1038A0008093DF0181E30E947D1B882359F0809182
:1038B000DF0186FB222720F991E0922790FB86F911
:1038C0008093DF0181E10E947D1B882359F0809164
:1038D000DF0187FB222720F991E0922790FB87F9EF
:1038E0008093DF018091DF010E94F31C8091DF0152
:1038F00087FB882780F980930D0187E20E947D1B5A
:10390000C82F8EE10E947D1B8111C2608FE10E9451
:103910007D1B8111C46080E20E947D1B8111C86003
:1039200081E20E947D1B8111C06182E20E947D1BA9
:103930008111C06283E20E947D1B8111C06484E218
:103940000E947D1B882311F0C06802C0CC2329F09F
:103950008C2F0E94EA1C6C2F03C00E94E61C682F6B
:1039600070E080E090E0CF910C94D617CF9108954D
:103970006DEE7EEF80E090E00E941E2360E082E02A
:1039800090E00E94102360E083E090E00E9410230A
:1039900060E084E090E00E94102360E085E090E029
:1039A0000C94102380E090E00E940A2321E08D3ED9
:1039B0009E4F09F020E0822F089582E090E00C9461
:1039C0000223682F82E090E00C94102383E090E0C3
:1039D0000C940223682F83E090E00C94102384E081
:1039E00090E00C940223682F84E090E00C94102364
:1039F0008091D40180FF0BC06091130185E0689F26
:103A0000B001112475956795759567952BC081FF59
:103A100009C06091130185E0689FB001112475957C
:103A2000679520C082FF07C06091130185E0689F01
:103A3000B001112417C09091D5019923D1F0609164
:103A40001201961788F72091130185E0289F9001B5
:103A50001124929FA001939F500D112470E0CA0180
:103A60000E94D4226038710540F46115710539F067
:103A700002C065E070E0862F08958FE7089581E029
:103A800008958091D40180FF08C06091110170E019
:103A9000759567957595679521C081FF06C0609102
:103AA000110170E07595679519C082FF04C060919F
:103AB000110170E010C09091D5019923C1F060917F
:103AC00010019617A0F780911101899FC001112460
:103AD00070E00E94D4226038710528F461157105E8
:103AE00021F0862F08958FE7089581E0089561E021
:103AF00070E0F4CF803F21F40E94F81C819504C04F
:103B0000813F29F40E94F81C8093D8010895823FD8
:103B100021F40E94F81C819504C0833F29F40E947F
:103B2000F81C8093D7010895893F19F40E94411D24
:103B300005C08A3F31F40E94411D81958093D901CF
:103B400008958B3F21F40E94411D819504C08C3F54
:103B500029F40E94411D8093DA010895843F21F4E5
:103B60008091D601816017C0853F21F48091D601F4
:103B7000826011C0863F21F48091D60184600BC021
:103B8000873F21F48091D601886005C0883F31F4D9
:103B90008091D60180618093D60108958D3F21F4F4
:103BA0008091D40181600BC08E3F21F48091D401BB
:103BB000826005C08F3F29F48091D4018460809396
:103BC000D4010895803F39F48091D80187FF6CC0FB
:103BD0001092D80169C0813F29F48091D80118164C
:103BE000BCF362C09091D701823F29F497FF5CC07B
:103BF0001092D70159C0833F19F41916CCF354C061
:103C0000893F41F48091D90118160CF04DC01092F3
:103C1000D9014AC08A3F29F48091D90187FF44C065
:103C2000F6CF8B3F39F48091DA0187FF3DC01092C7
:103C3000DA013AC08C3F29F48091DA011816BCF3FE
:103C400033C0843F21F48091D6018E7F17C0853F19
:103C500021F48091D6018D7F11C0863F21F480919F
:103C6000D6018B7F0BC0873F21F48091D601877FDF
:103C700005C0883F31F48091D6018F7E8093D601B4
:103C800013C08D3F21F48091D4018E7F0BC08E3FF5
:103C900021F48091D4018D7F05C08F3F29F480915C
:103CA000D4018B7F8093D4018091D70181110EC004
:103CB0008091D80181110AC08091D901811106C07B
:103CC0008091DA01811102C01092D501089586ED2C
:103CD00091E00E94BB0E0E94CE1A9093D301809374
:103CE000D20108951F93CF93DF938091D2019091D9
:103CF000D3010E94DA1AAC019091D501992321F0E9
:103D00002091140130E006C0209115018AE0289F1F
:103D1000900111244217530708F486C08091D701FF
:103D2000C091D801D091D9011091DA01811107C059
:103D3000C11176C0D11174C0111172C075C09F3FFE
:103D400019F09F5F9093D501181624F40E94F81C77
:103D50008093D7018091D70187FF05C00E94F81C8E
:103D600081958093D7011C1624F40E94F81C80933F
:103D7000D8018091D80187FF05C00E94F81C819569
:103D80008093D8016091D701662339F1C091D801A1
:103D9000CC2319F1772767FD7095872F972F0E9405
:103DA000E52123E333E343E35FE30E9449220E94DA
:103DB000B2216093D7016C2F772767FD7095872F0D
:103DC000972F0E94E52123E333E343E35FE30E945F
:103DD00049220E94B2216093D8011D1624F40E944A
:103DE000411D8093D9018091D90187FF05C00E94B0
:103DF000411D81958093D901111624F40E94411D23
:103E00008093DA018091DA0187FF05C00E94411D8D
:103E100081958093DA01DF91CF911F910C94671EF9
:103E20009F3F09F08ECF96CFDF91CF911F910895DC
:103E3000E6EDF1E085E0DF011D928A95E9F7109249
:103E4000D5011092D4010895833081F128F4813096
:103E500059F08230D1F00895853009F449C0B8F1A5
:103E6000863009F456C0089580911501262F30E060
:103E7000280F311D2F3F310524F4680F6093150181
:103E800008958FEF80931501089580911401262FD6
:103E900030E0280F311D2F3F310524F4680F609367
:103EA000140108958FEF80931401089580911301F8
:103EB000262F30E0280F311D2F3F310524F4680FE5
:103EC0006093130108958FEF8093130108958091FB
:103ED0001201262F30E0280F311D2F3F310524F429
:103EE000680F6093120108958FEF80931201089577
:103EF00080911101262F30E0280F311D2F3F310511
:103F000024F4680F6093110108958FEF80931101DD
:103F1000089580911001262F30E0280F311D2F3F8A
:103F2000310524F4680F6093100108958FEF80939A
:103F300010010895833011F128F4813049F0823066
:103F400091F00895853081F120F18630C1F1089516
:103F500080911501681720F4861B80931501089540
:103F600010921501089580911401681720F4861BA2
:103F70008093140108951092140108958091130103
:103F8000681720F4861B8093130108951092130183
:103F9000089580911201681720F4861B8093120106
:103FA000089510921201089580911101681720F46C
:103FB000861B80931101089510921101089580913C
:103FC0001001681720F4861B809310010895109249
:103FD000100108950F931F938D3109F46BC008F001
:103FE0003FC08E3009F47DC0C0F4873009F46EC044
:103FF00068F4863009F0AFC08091CC01817F8E7F5C
:104000008093CC0181E08093DC01A6C0883009F464
:1040100058C08B3009F49BC09EC0863109F497C00C
:1040200078F4803109F470C0813109F094C00E94A5
:104030001A1490910D0181E0892780930D0187C0AA
:10404000893109F484C08B3109F085C08091CC019D
:1040500081FB222720F991E0922790FB81F94AC049
:10406000853309F45BC048F4873209F457C008F47B
:104070005AC0893209F452C06EC0833438F48A338E
:1040800008F067C0883309F462C065C0833409F45E
:1040900045C0883409F05FC00E941A140FEF13ED79
:1040A00020E3015010402040E1F700C000000E94D2
:1040B000291B4DC00E946C210E94A40E0E949E07E5
:1040C00046C00E94DD1C0E94EF1C41C09091CC01B3
:1040D000892F817090FF12C0917F9E7F9093CC01B9
:1040E0003BC08091CC0182FB222720F991E09227EE
:1040F00090FB82F98093CC01992349F18091CC0106
:1041000081608093CC0123C08091CC0183FB222766
:1041100020F991E0922790FB83F9ECCF61E070E009
:1041200080E090E010C08D5141E050E060E070E030
:104130008A019B0104C0000F111F221F331F8A95A3
:10414000D2F7C901B8010E94D6170E941A1481E063
:1041500003C08953E9CF80E01F910F91089580E05B
:10416000089580E00895CF93C82F8091DC018130BD
:1041700079F018F08230E9F187C0E0910E01F091FA
:104180000F018081813169F0823209F07FC009C05E
:10419000E0910E01F0910F018081813111F08232A6
:1041A00061F48C2F0E94AF20811104C08C2F0E94DB
:1041B000EA1F1DC081E090E01AC08C2F0E94B12040
:1041C000811114C0C43179F048F4CB3079F0C0319A
:1041D00009F060C082E08093DC0108C0C93219F0A8
:1041E000C83321F057C01092DC0154C081E08170C7
:1041F00053C0C93289F118F5C43171F1A8F4C73040
:1042000009F046C08AE08093150194E1909314016F
:1042100093E0909313018093120188E08093110141
:1042200088E28093100134C0CE51C63088F5EC2F5F
:10423000F0E0E65DFE4F80818093DB0129C0CE3443
:10424000E9F020F4CB3421F56AE013C0C13579F0F0
:10425000C235F1F461E00DC08091DB01882319F0D3
:104260001092DB0115C081E08093DC0115C061E094
:1042700006C08091DB010E94241F0AC06AE0809181
:10428000DB010E949A1F04C01092DC0180E004C090
:1042900081E002C080E0ABCFCF910895E1E8F0E08B
:1042A0008081886080838081816080838FB7F8946B
:1042B00093E09093890090ED909388008FBF0895CC
:1042C000EFE6F0E08081826080830895EFE6F0E021
:1042D00080818D7F80830895EFE6F0E0908182E019
:1042E0008927808308951F920F920FB60F92112491
:1042F0002F933F934F935F936F937F938F939F93EE
:10430000AF93BF93EF93FF938091DD019091DE0116
:1043100001969093DE018093DD01811103C082E05C
:104320000E949E07E091DE01E695E695F0E0EA5CEA
:10433000FA4FE4918091DD018E1303C080E00E946A
:104340009E07FF91EF91BF91AF919F918F917F91C8
:104350006F915F914F913F912F910F900FBE0F90F2
:104360001F90189504D06894B1118DC0089570D035
:1043700088F09F5790F0B92F9927B751A0F0D1F04E
:10438000660F771F881F991F1AF0BA95C9F712C0D8
:10439000B13081F077D0B1E0089574C0672F782FE5
:1043A0008827B85F39F0B93FCCF386957795679544
:1043B000B395D9F73EF490958095709561957F4FB0
:1043C0008F4F9F4F0895E89409C097FB3EF4909556
:1043D0008095709561957F4F8F4F9F4F9923A9F0DE
:1043E000F92F96E9BB279395F6958795779567956D
:1043F000B795F111F8CFFAF4BB0F11F460FF1BC0B1
:104400006F5F7F4F8F4F9F4F16C0882311F096E943
:1044100011C0772321F09EE8872F762F05C06623F1
:1044200071F096E8862F70E060E02AF09A95660FAA
:10443000771F881FDAF7880F9695879597F9089563
:1044400057FD9058440F551F59F05F3F71F0479545
:10445000880F97FB991F61F09F3F79F0879508952A
:10446000121613061406551FF2CF4695F1DF08C049
:10447000161617061806991FF1CF86957105610566
:1044800008940895E894BB2766277727CB0197F90E
:1044900008950BD078C069D028F06ED018F095231D
:1044A00009F05AC05FC01124EECFCADFA0F3959F78
:1044B000D1F3950F50E0551F629FF001729FBB270B
:1044C000F00DB11D639FAA27F00DB11DAA1F649FB7
:1044D0006627B00DA11D661F829F2227B00DA11D6A
:1044E000621F739FB00DA11D621F839FA00D611DF0
:1044F000221F749F3327A00D611D231F849F600D11
:10450000211D822F762F6A2F11249F5750408AF049
:10451000E1F088234AF0EE0FFF1FBB1F661F771FD5
:10452000881F91505040A9F79E3F510570F014C06C
:10453000AACF5F3FECF3983EDCF3869577956795BD
:10454000B795F795E7959F5FC1F7FE2B880F911DF3
:104550009695879597F9089597F99F6780E870E099
:1045600060E008959FEF80EC089500240A941616E9
:10457000170618060906089500240A941216130651
:10458000140605060895092E0394000C11F48823DF
:1045900052F0BB0F40F4BF2B11F460FF04C06F5FFB
:1045A0007F4F8F4F9F4F089597FB072E16F400946F
:1045B00007D077FD09D00E94EE2207FC05D03EF41B
:1045C000909581959F4F0895709561957F4F0895BF
:1045D000EE0FFF1F0590F491E02D0994AA1BBB1B61
:1045E00051E107C0AA1FBB1FA617B70710F0A61BF3
:1045F000B70B881F991F5A95A9F780959095BC0114
:10460000CD010895F999FECF92BD81BDF89A992701
:1046100080B50895A8E1B0E042E050E00C94252375
:10462000262FF999FECF1FBA92BD81BD20BD0FB6CE
:10463000F894FA9AF99A0FBE019608950E941023F1
:10464000272F0C941123DC01CB01FC01F999FECF3B
:1046500006C0F2BDE1BDF89A319600B40D9241500A
:0A4660005040B8F70895F894FFCF1A
:10466A0020029F072D080A08D607A2070101BA01EE
:10467A0028080A03140A3F4D3639F704AA047404B9
:10468A003B04CE03E70300041904010203040506F0
:04469A000708090004
:00000001FF

@ -114,12 +114,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -215,12 +215,12 @@ 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) {
return NULL;
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
ergodox_board_led_off();
ergodox_right_led_1_off();
@ -238,5 +238,5 @@ void * matrix_scan_user(void) {
if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
ergodox_right_led_3_on();
}
return NULL;
};

@ -1,1538 +0,0 @@
:100000000C9454090C9498090C9498090C94980930
:100010000C9498090C9498090C9498090C949809DC
:100020000C9498090C9498090C94C4140C9496158B
:100030000C9498090C9498090C9498090C949809BC
:100040000C9498090C94172E0C9498090C94980908
:100050000C9498090C941E240C9498090C949809FB
:100060000C9498090C9498090C9498090C9498098C
:100070000C9498090C9498090C9498090C9498097C
:100080000C9498090C9498090C9498090C9498096C
:100090000C9498090C9498090C9498090C9498095C
:1000A0000C9498090C9498090C949809FB151D164A
:1000B00008171D1608175F1682160817D716EA16B6
:1000C000381A381A661A661AA81AE41AE41CE41CCC
:1000D000FC1AE41CF31BF31BBE1CE41CE41CD21C26
:1000E000751901620262016202620035002B00E1B3
:1000F00000E100E00000001E00140004001D0002EA
:10010000304E001F001A0016001B00E300E1002023
:1001100000080007000600AE002C002100150009B1
:1001200000190065744B00220017000A000500004A
:100130000029744C002A0000002800000008544CDC
:10014000002A00000028000000500023001C000BC3
:1001500000110000004F00240018000D001000E600
:1001600000520025000C000E0036002D002C002649
:100170000012000F0037004A00E50027001300338B
:100180000038002E00510030002F00347231724DC3
:1001900071000035002B00E100E100E00000001ECE
:1001A0000034000400330002304E001F00360012FD
:1001B000001400E300E1002000370008000D00AE4D
:1001C000002C002100130018000E0065744B002263
:1001D000001C000C001B00000029744C002A0000C9
:1001E000002800000008544C002A000000280000ED
:1001F000005000230009000700050000004F002404
:10020000000A000B001000E600520025000600174F
:10021000001A002F002C0026001500110019004ABA
:1002200000E50027000F0016001D00300051002ED1
:100230000038002D7231724D710000000000000086
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1003000000000000000000000000000000000000ED
:1003100000000000000000000000000000000000DD
:1003200000000000000000000000000000000000CD
:1003300000000000000000000000000000000000BD
:1003400000000000000000000000000000000000AD
:10035000000000000000000000000000000000009D
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000000004D
:1003B000000000000000000000000000000000003D
:1003C000000000000000000000000000000000002D
:1003D000000000000000000000000000000000001D
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:1004000000000000000000000000000000000000EC
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000100010001C7
:10063000000100010000003A003F004400010001F9
:100640000001003B00400045000100010001003CAA
:1006500000410001000100010001003D00420001D5
:10066000000100010001003E004300010001000004
:100670000001000100010000000100000001000174
:1006800000010000005000000053003F0001005234
:100690000051000000390040004A004D004F0001A9
:1006A0000001002B005F005C005900620001005453
:1006B0000060005D005A0001300100550061005EDD
:1006C000005B0063000100560057005700580058B7
:1006D00071000001000100010001000100000001A3
:1006E0000001000100010001000100010001000102
:1006F000004C020100010001000100B200490101AB
:1007000000A80001000100B1004902010001000140
:10071000000100B500A800000001004900A9000088
:1007200000AA0000000100490001000000010000D3
:10073000000100B00001000100010000000100A55F
:10074000000100010001000100AC00A60001000151
:1007500000010001000100A70001000100010001EB
:1007600000010046000100010001000100AB00474C
:1007700000480001000100010000000A002530319E
:100780003662003A200025303258000A722F63206A
:1007900030313233343536373839414243444546B7
:1007A0000A000A002530325800626F756E636521B9
:1007B0003A20006C65667420736964652061747406
:1007C00061636865640A006C6566742073696465BA
:1007D000206E6F7420726573706F6E64696E670A45
:1007E00000747279696E6720746F20726573657426
:1007F000206D637032333031380A000A4445425567
:10080000473A20656E61626C65642E0A005B735D19
:10081000004B6579626F6172642073746172742E2B
:100820000A005B575D005B535D005B525D005B44FB
:100830005D005B435D0016034500720067006F00BA
:1008400044006F007800200045005A0000001603A5
:100850004500720067006F0044006F0078002000C0
:1008600045005A0000000403090409028D00050137
:1008700000A0FA090400000103010100092111018F
:100880000001223F000705810308000A0904010056
:100890000103010200092111010001224D00070599
:1008A000820308000A090402000103000000092174
:1008B000110100012236000705830308000A09041C
:1008C00003000203000000092111010001222000A1
:1008D0000705840320000107050403200001090423
:1008E0000400010300000009211101000122390068
:1008F000070585031000011201100100000008ED3A
:10090000FE071301000102000105010906A101050E
:100910000719E029E71500250195087501810205F1
:100920000819012905950575019102950175039135
:1009300001050719002977150025019578750181B2
:1009400002C00631FF0974A1010975150025FF9544
:1009500020750881020976150025FF9520750891FC
:1009600002C005010980A101850216010026B70019
:100970001A01002AB700751095018100C0050C0905
:1009800001A1018503160100269C021A01002A9C80
:1009900002751095018100C005010902A10109013C
:1009A000A100050919012905150025019505750105
:1009B0008102950175038101050109300931158115
:1009C000257F95027508810609381581257F9501D7
:1009D00075088106050C0A38021581257F95017579
:1009E000088106C0C005010906A101050719E02913
:1009F000E7150025019508750181029501750881AB
:100A000001050819012905950575019102950175E2
:100A10000391010507190029FF150025FF950675AB
:100A2000088100C00A002530325820006B657962C9
:100A30006F6172645F7265706F72743A20000A00B1
:100A400025303258006B6579626F6172645F73653F
:100A5000745F6C65643A200064656C5F6B65795FF8
:100A60006269743A2063616E27742064656C3A2071
:100A7000253032580A006164645F6B65795F626992
:100A8000743A2063616E2774206164643A202530D3
:100A900032580A00646F6E652E0A00626F6F676DD0
:100AA00061676963207363616E3A202E2E2E2000E9
:100AB000290A002575002F002575005D2800256492
:100AC000002000256400200025640020002564002B
:100AD0007C0025303258006D6F7573656B65792029
:100AE0005B62746E7C782079207620685D28726560
:100AF000702F61636C293A205B006D6B5F776865CE
:100B0000656C5F74696D655F746F5F6D6178203DC2
:100B10002025640A006D6B5F776865656C5F6D61A9
:100B2000785F7370656564203D2025640A006D6BF5
:100B30005F74696D655F746F5F6D6178203D20251E
:100B4000640A006D6B5F6D61785F7370656564202A
:100B50003D2025640A006D6B5F696E746572766175
:100B60006C203D2025640A006D6B5F64656C6179C3
:100B7000203D2025640A006D6B5F776865656C5FBA
:100B800074696D655F746F5F6D6178203D202564C9
:100B90000A006D6B5F776865656C5F6D61785F7388
:100BA00070656564203D2025640A006D6B5F746983
:100BB0006D655F746F5F6D6178203D2025640A006C
:100BC0006D6B5F6D61785F7370656564203D202596
:100BD000640A006D6B5F696E74657276616C203DAE
:100BE0002025640A006D6B5F64656C6179203D208F
:100BF00025640A000A00257500363A207768656585
:100C00006C5F74696D655F746F5F6D61783A200029
:100C10000A00257500353A20776865656C5F6D615F
:100C2000785F73706565643A20000A0025750034AA
:100C30003A2074696D655F746F5F6D61783A20006A
:100C40000A00257500333A206D61785F7370656521
:100C5000643A20000A00257500323A20696E7465F6
:100C60007276616C286D73293A20000A00257500A0
:100C7000313A2064656C6179282A31306D73293AE4
:100C800020000A092D2056616C756573202D0A001D
:100C90004D3E004D25643E20003F00736574206486
:100CA000656661756C740A00433E20007768657262
:100CB000652064656C74613A20637572736F723D70
:100CC00025642C20776865656C3D25640A5365654D
:100CD00020687474703A2F2F656E2E77696B697077
:100CE000656469612E6F72672F77696B692F4D6F2D
:100CF0007573655F6B6579730A000A092D204D6F66
:100D00007573656B6579202D0A4553432F713A0938
:100D1000717569740A313A0964656C6179282A3100
:100D2000306D73290A323A09696E74657276616CA6
:100D3000286D73290A333A096D61785F73706565B0
:100D4000640A343A0974696D655F746F5F6D617828
:100D50000A353A09776865656C5F6D61785F737015
:100D60006565640A363A09776865656C5F74696D14
:100D7000655F746F5F6D61780A0A703A0970726915
:100D80006E742076616C7565730A643A09736574D4
:100D90002064656661756C74730A75703A092B314D
:100DA0000A646F776E3A092D310A706775703A09D7
:100DB0002B31300A7067646F776E3A092D31300A33
:100DC0000A7370656564203D2064656C7461202A37
:100DD000206D61785F7370656564202A20287265D4
:100DE00070656174202F2074696D655F746F5F6D2D
:100DF0006178290A003F004D3E2000433E20004C10
:100E000025640A000A092D20436F6E736F6C6520FC
:100E10002D0A4553432F713A09717569740A6D3A69
:100E2000096D6F7573656B65790A000A092D204D90
:100E300061676963202D0A643A0964656275670A0F
:100E4000783A096465627567206D61747269780A21
:100E50006B3A096465627567206B6579626F6172D0
:100E6000640A6D3A096465627567206D6F75736514
:100E70000A763A0976657273696F6E0A733A097376
:100E800074617475730A633A09636F6E736F6C658E
:100E9000206D6F64650A302D343A096C6179657292
:100EA000302D34284631302D4634290A506175736F
:100EB0003A09626F6F746C6F616465720A653A0912
:100EC000656570726F6D0A6E3A094E4B524F0A7A21
:100ED0003A09736C656570204C45442074657374E1
:100EE0000A000A002575002E6E6B726F3A20000A08
:100EF000002575002E737761705F6261636B736CA0
:100F00006173685F6261636B73706163653A20004F
:100F10000A002575002E737761705F6772617665D0
:100F20005F6573633A20000A002575002E6E6F5FBF
:100F30006775693A20000A002575002E7377617085
:100F40005F72616C745F726775693A20000A0025F0
:100F500075002E737761705F6C616C745F6C677580
:100F6000693A20000A002575002E636170736C6F6A
:100F7000636B5F746F5F636F6E74726F6C3A2000A7
:100F80000A002575002E737761705F636F6E74724F
:100F90006F6C5F636170736C6F636B3A20000A0063
:100FA00025303258006B65796D61705F636F6E66D6
:100FB00069672E7261773A20000A002575002E6D50
:100FC0006F7573653A20000A002575002E6B6579F0
:100FD000626F6172643A20000A002575002E6D610F
:100FE000747269783A20000A002575002E656E61DA
:100FF000626C653A20000A00253032580064656250
:1010000075675F636F6E6669672E7261773A20005D
:101010000A0025750064656661756C745F6C6179A2
:1010200065723A20003F004E4B524F3A206F666681
:101030000A004E4B524F3A206F6E0A0074696D657C
:10104000725F636F756E743A202530346C580A00F5
:101050006B6579626F6172645F6E6B726F3A2025A7
:10106000580A006B6579626F6172645F69646C65D0
:101070003A2025580A006B6579626F6172645F706F
:10108000726F746F636F6C3A2025580A00686F7333
:10109000745F6B6579626F6172645F6C65647328FD
:1010A000293A2025580A000A092D205374617475C5
:1010B00073202D0A004743433A20342E382E312026
:1010C0004156522D4C4942433A20312E382E30732E
:1010D000766E204156525F415243483A2061767203
:1010E000350A004F5054494F4E533A204C55464113
:1010F00020424F4F544D41474943204D4F55534592
:101100004B45592045585452414B455920434F4E69
:10111000534F4C4520434F4D4D414E44204E4B5272
:101120004F203531320A004255494C443A2035614E
:1011300031386134322D6469727479202831383A3B
:1011400034363A343620466562203231203230312E
:1011500036290A005649443A203078464545442805
:101160004572676F446F7820455A29205049443AA8
:1011700020307831333037284572676F446F7820DC
:10118000455A29205645523A203078303030310ABD
:1011900000444553433A20742E6D2E6B2E206B6510
:1011A00079626F617264206669726D776172652021
:1011B000666F72204572676F646F780A000A092DA6
:1011C0002056657273696F6E202D0A000A6D6F7567
:1011D00073653A206F66660A000A6D6F7573653A2B
:1011E000206F6E0A000A6B6579626F6172643A2043
:1011F0006F66660A000A6B6579626F6172643A20F5
:101200006F6E0A000A6D61747269783A206F6666C3
:101210000A000A6D61747269783A206F6E0A000ADA
:1012200064656275673A206F6E0A000A64656275CC
:10123000673A206F66660A000A0A626F6F746C6F05
:10124000616465722E2E2E2000433E20006565638A
:101250006F6E6669673A0A00536C656570204C458D
:101260004420746573740A00000000000000000050
:10127000000000010204060A0F17202C3A4A5D7193
:10128000879DB3C7DAE9F5FCFFFCF5E9DAC7B39D42
:1012900087715D4A3A2C20170F0A060402010000EC
:1012A000000000000000000011241FBECFEFDAE0B4
:1012B000DEBFCDBF04B603FE24C08091F90190913A
:1012C000FA01A091FB01B091FC018730904BA7403F
:1012D000B04BB9F41092F9011092FA011092FB018F
:1012E0001092FC0114BE84B7877F84BF88E10FB6DB
:1012F000F89480936000109260000FBEE0E0FFE37E
:10130000099511E0A0E0B1E0EAECFFE502C005902C
:101310000D92AA33B107D9F721E0AAE3B1E001C0E9
:101320001D92A93FB207E1F70E94FE110C94E32F32
:101330000C940000FF93EF93E0913A01F0913B0190
:10134000309709F00995EF91FF910895FC0185917F
:10135000803011F0EFDFFBCF0895FF27E0E230E2AD
:1013600047FF0CC0419597FF09C0EDE2609570956D
:1013700080959095611D711D811D911D27FF02C0F3
:10138000219530E350E2AA27660F771F881F991F27
:10139000AA1FA41710F0A41B63955A95A9F7AA30A9
:1013A00008F0A95FA05DAF93F39561157105810504
:1013B000910541F7ED3211F4EF93F395F21718F41C
:1013C0003F93F395FBCF8F91B5DFFA95E1F7089541
:1013D000E991F9918591803021F0853219F0AADFE9
:1013E000F9CF089520E0E89455915532C1F3503378
:1013F00011F4689455915A3348F4505390F3220FE6
:10140000022E220F220F200D250FF4CF0EF421956E
:1014100089919991533619F3533729F1533559F17D
:10142000BC0188279927E8945C3621F48991999129
:1014300068945591543639F446EF7EF077FF0DC02D
:101440008FEF9FEF0AC055374AE039F0583540E139
:1014500021F0523642E009F00895FF93EF937DDFCB
:10146000EF91FF91B7CFFF93EF93FC018191803013
:10147000B9F360DFFBCFFF93EF9368DFF1CFDF932A
:10148000CF93CDB7DEB72596A3DFCF91DF91089537
:10149000613049F0623071F488E00E94BC2189E03B
:1014A0000E94BC2107C0FC018281882319F080EED4
:1014B00090E0089580E090E0089580E090E0089545
:1014C00056985E9825982D9826982E9827982F98AC
:1014D0008091BC019091BD01A091BE01B091BF016E
:1014E00090FF02C0259A2D9A8091C0019091C10170
:1014F000A091C201B091C3010297A105B10511F4F9
:10150000269A2E9A0E94421781FF02C0279A2F9A8C
:1015100080E090E0089580E69AE0892B11F00E9427
:10152000600A80E090E0089556985E9825982D987E
:1015300026982E9827982F988FEF90E09093890007
:101540008093880090938B0080938A0090938D0005
:1015500080938C00259A2D9A2FEF80E792E02150FE
:1015600080409040E1F700C00000269A2E9A2FEFAD
:1015700080E792E0215080409040E1F700C00000F9
:10158000279A2F9A2FEF80E792E0215080409040D9
:10159000E1F700C0000025982D982FEF80E792E03A
:1015A000215080409040E1F700C0000026982E981E
:1015B0002FEF80E792E0215080409040E1F700C09B
:1015C000000027982F9856985E9825982D98269871
:1015D0002E9827982F98089589EA8093800089E0B3
:1015E0008093810024982C983F988AB18F748AB98F
:1015F0006E98479A8BB1806B8BB9769A0E94940A49
:101600008DE59AE0892B11F00E945D0A80E090E060
:10161000089580E28093000180913C0181110EC009
:101620000E94580B81E080933C012FEF83ED90E303
:10163000215080409040E1F700C0000080E40E940B
:101640005E0B8093000181112EC00E94880B809355
:101650000001811128C00E94880B80930001811134
:1016600022C08FE30E94880B8093000181111BC070
:101670000E94800B80E40E945E0B80930001811128
:1016800012C08CE00E94880B8093000181110BC076
:101690000E94880B80930001811105C08FE30E9496
:1016A000880B809300010E94800B809100010895B7
:1016B0001092B9008AE08093B800089594EA90935C
:1016C000BC009091BC0097FFFCCF9091B900987F2F
:1016D000983021F0903111F081E008958093BB00A3
:1016E00084E88093BC008091BC0087FFFCCF809190
:1016F000B900887F883111F0803471F780E0089557
:1017000084E98093BC008091BC0084FDFCCF0895E7
:101710008093BB0084E88093BC008091BC0087FF6D
:10172000FCCF9091B900987F81E0983209F480E075
:10173000089584E88093BC008091BC0087FFFCCFB3
:101740008091BB00089580910001811115C080E453
:101750000E945E0B8093000181110CC082E10E9407
:10176000880B80930001811105C08FEF0E94880BC8
:10177000809300010E94800B84B1807F84B985B181
:10178000807F85B98AB1837F8AB98BB1837F8BB91A
:101790003E98469808950E94090B809300010E948C
:1017A000A30B80B38C7080BB81B3836F81BBECE4EF
:1017B000F1E0AEE3B1E011921D9281E0EA35F80765
:1017C000D1F78CEE9AE0892B11F00C94EC0A089575
:1017D0009F92AF92BF92CF92DF92EF92FF920F93C0
:1017E0001F93CF93DF93809100018823E1F08091D4
:1017F0003D018F5F80933D01811115C081EE97E01F
:101800000E94A6090E94090B80930001882329F0F9
:1018100087EC97E00E94A60906C083EB97E00E9440
:10182000A6090E94940A0EE311E0C0E0D0E0BB24B8
:10183000B39482E0A82ECC24C394D12C24EAE22EC7
:1018400027E0F22EC73000F580910001811162C0BF
:1018500080E40E945E0B80930001811112C082E13E
:101860000E94880B8093000181110BC0C6010C2ED1
:1018700001C0880F0A94EAF780950E94880B809334
:1018800000010E94800B46C0CA30A1F028F4C83085
:1018900059F0C93061F005C0CC3089F070F0CD301E
:1018A00089F0209A289810C0219A29980DC0229A70
:1018B0002A980AC0239A2B9807C0529A01C0539ABB
:1018C0005B9802C03E9A4698E0EAEA95F1F78FB13C
:1018D000799985C092E081708B25892B7C9B02C011
:1018E00090E001C094E0892B7D9B02C090E001C094
:1018F00098E0892B7E9B02C090E001C090E1892B8B
:101900009FB19095991F9927991F9295990F907E55
:10191000892B10C080910001811176C080E40E9463
:101920005E0B80930001882309F45BC0912C0E9418
:10193000800B892DF8019081981739F1808380916F
:101940000101882301F18091D70180FF04C089EA59
:1019500097E00E94A6098091D70180FF0CC080917A
:1019600001011F928F93FF92EF920E943F0A0F9006
:101970000F900F900F908091D70180FF04C082EAF2
:1019800097E00E94A609A09201010E94A30B219654
:101990000F5F1F4FCE30D10509F054CF8091010168
:1019A0008823B1F0815080930101882339F08FE9B9
:1019B0009FE00197F1F700C000000AC0ACE4B1E07D
:1019C000EEE3F1E081918D9391E0EC34F907D1F7EA
:1019D0008BE89AE0892BD1F00E948B0A17C090E027
:1019E0007ACF83E10E94880B8093000181119ECF02
:1019F00081E40E945E0B80930001811197CF0E94C9
:101A0000990B982E909493CF80E094CF81E0DF9152
:101A1000CF911F910F91FF90EF90DF90CF90BF90EB
:101A2000AF909F900895E82FF0E0E45BFE4F808137
:101A30000895CF92DF92EF92FF920F931F93CF936F
:101A4000DF938BE897E00E94A6093CE4E32E31E0A7
:101A5000F32EC0E0D0E046E8C42E47E0D42E0DE7D8
:101A600017E0DF93CF93DF92CF920E943F0A83E883
:101A700097E00E94A609F70181917F0190E00E9402
:101A800087239F938F931F930F930E943F0A8BE7A7
:101A900097E00E94A60921968DB79EB708960FB6CB
:101AA000F8949EBF0FBE8DBFCE30D105D1F6DF9129
:101AB000CF911F910F91FF90EF90DF90CF900895FD
:101AC0008B3B910578F4883A910540F5853A91056C
:101AD000D0F48430910508F0B1C08130910509F44B
:101AE000ADC06BC0803E910508F467C0883E91058B
:101AF00008F4A4C09C01205F31092031310508F0B1
:101B00005CC090650895853A910509F459C0863AFC
:101B1000910509F458C083E890E40895883A910546
:101B200009F454C0893A910509F453C08A3A9105E1
:101B300009F452C08B3A910509F451C08C3A9105D1
:101B400009F450C08D3A910509F44FC0803B9105CE
:101B500009F44EC08E3A910509F44DC08F3A9105B3
:101B600009F44CC0813B910509F44BC0823B9105BF
:101B700009F44AC0833B910509F449C0843B9105AF
:101B800009F448C0853B910509F447C0863B91059F
:101B900009F446C0873B910509F445C0883B91058F
:101BA00009F444C0893B910509F443C08A3B91057F
:101BB00009F042C08AE296E4089580E090E008953A
:101BC00081E890E4089582E890E4089582EE94E438
:101BD000089589EE94E408958AEE94E4089585EBDF
:101BE00094E4089586EB94E4089587EB94E40895D3
:101BF0008CEC94E408958DEC94E4089583E895E4E6
:101C000008958AE895E4089582E995E4089584E9C1
:101C100095E4089581E296E4089583E296E40895B8
:101C200084E296E4089585E296E4089586E296E4D7
:101C3000089587E296E4089580E094E40895089575
:101C400096E0799FF001112494E5899FE00DF11D44
:101C50001124E60FF11DEE0FFF1FE551FF4F859197
:101C600094910895880F991F85599040FC018591A2
:101C700094910895880F991F85519F4FFC0185917C
:101C80009491089526E0729FF001112444E5849F09
:101C9000E00DF11D1124E60FF11DEE0FFF1FE551C0
:101CA000FF4F25913491C9019A9581159F4110F4F8
:101CB000C9010895C90190528115904128F4C901C4
:101CC0009F700E943A0E0895C9019053811590416A
:101CD00020F4C9019927906C0895211580E53807F3
:101CE00069F40E94051D9FEF24E34CE091502040D1
:101CF0004040E1F700C000000C944324213080E50F
:101D0000380751F48BEF97E00E94A6098091D70124
:101D100081608093D7010895C90190558115904144
:101D200008F050C0832F99278F7099278130910533
:101D3000D9F4A9014370552702C0880F991F4A950D
:101D4000E2F79C68A90164E0440F551F6A95E1F72A
:101D500044275370842B952B73E0220F331F7A9501
:101D6000E1F7207633271DC08230910529F4922FA8
:101D70008827816F906A089583309105A9F4A9019D
:101D80004370552781E090E002C0880F991F4A9563
:101D9000E2F79C6843E0220F331F4A95E1F7207E6B
:101DA0003770822B932B08950497F1F4A9014370A7
:101DB000552781E090E002C0880F991F4A95E2F70D
:101DC0009A68E8CFC90190578115904120F4C90164
:101DD0009F7090620895C90190588115904120F438
:101DE000C9019F70906A0895203E3105E0F4203CBF
:101DF000310558F52133310509F470C048F4293212
:101E0000310509F464C02A32310509F46EC074C08A
:101E100029333105F1F022383105D9F02533310568
:101E200009F44EC069C0233E310589F138F4203EE3
:101E30003105C1F0223E3105E1F05EC0263E31059C
:101E400069F1273E3105A9F157C0C9010E94320E40
:101E500008958091EA0180FD02C081FF4DC080EEAF
:101E600090E04BC08091EA0180FFF9CF89E390E0D8
:101E700044C08091EA0182FF0EC08091EA0184FF94
:101E800003C080E090E039C083EE90E036C08091DE
:101E9000EA0182FFF2CF82EE90E02FC08091EA014A
:101EA00083FF0BC08091EA0184FDEBCF87EE90E0C9
:101EB00024C08091EA0183FFF5CF86EE90E01DC03B
:101EC0008091EA0185FF07C089E290E016C0809109
:101ED000EA0185FFF9CF85E390E00FC08091EA0128
:101EE00086FF07C08AE290E008C08091EA0186FF81
:101EF000F9CF81E390E001C0C9010E94600D08950F
:101F0000089580916D0108959FB7F89410925C0137
:101F10009FBF9091F001943009F058C09091E90072
:101F20009F702091EC0020FF02C020E801C020E05B
:101F3000292B94E09093E9009091EB0090FF43C02F
:101F40009091EE0097FF3FC090915A01992321F0A4
:101F50009091E80095FF37C010925A0196E03091B9
:101F6000E80035FD15C03091F001343061F5309155
:101F7000EB0035FD28C0915021F481E080935A0197
:101F800022C0EFE9FFE03197F1F700C00000E7CF92
:101F90008093F1008091E80085FD0AC08091E800FF
:101FA00080FFFCCF8091E8008E778093E80006C028
:101FB0008FB7F89491E090935C018FBF2F702093BE
:101FC000E90080E008952F702093E9008FEF0895D5
:101FD000CF93DF9300D01F92CDB7DEB72091F001F1
:101FE000243019F523E029839B838A832093E90019
:101FF0008FEF9091E800815095FD06C095ED9A9580
:10200000F1F700008111F5CF8091E80085FF0DC048
:1020100040E050E063E070E0CE0101960E94B7120C
:102020008091E8008E778093E8000F900F900F90DA
:10203000DF91CF910895CF93DF9300D01F92CDB75A
:10204000DEB72091F001243021F522E029839B8323
:102050008A8383E08093E9008FEF9091E8008150BC
:1020600095FD06C095ED9A95F1F700008111F5CF29
:102070008091E80085FF0DC040E050E063E070E033
:10208000CE0101960E94B7128091E8008E7780936E
:10209000E8000F900F900F90DF91CF91089520915D
:1020A000F0012430F1F422E02093E9002FEF309189
:1020B000E800215035FD06C035ED3A95F1F70000F6
:1020C0002111F5CF2091E80025FF0BC040E050E042
:1020D00065E070E00E94B7128091E8008E778093EF
:1020E000E8000895CF93DF93EC018091F0018430F4
:1020F00009F047C080910C018823E1F080910D0127
:102100008823C1F085E08093E9008FEF9091E8008B
:10211000815095FD06C095E19A95F1F70000811177
:10212000F5CF8091E80085FF2CC040E050E060E1F1
:1021300070E017C081E08093E9008FEF9091E80094
:10214000815095FD06C095ED9A95F1F7000081113B
:10215000F5CF8091E80085FF14C040E050E068E0D2
:1021600070E0CE010E94B7128091E8008E778093D4
:10217000E80080E1FE01ADE5B1E001900D928A95A5
:10218000E1F7DF91CF91089582E398E00E94A609DC
:102190008091EF01811109C00E9449140E94A61488
:1021A0008091E20084608093E20008958EE298E0DE
:1021B0000E94A6091092EF0108958AE298E00C941B
:1021C000A60986E298E00E94A6090C94042E82E2F9
:1021D00098E00E94A6090E94DE230E940A2E0E9417
:1021E00042170C94800F80915B018F5F80935B019D
:1021F00062E30E94782F911135C010925B018091AB
:102200005C01882379F18091F001843049F5809157
:10221000E9008F709091EC0090FF02C090E801C03F
:1022200090E0982B84E08093E9008091EB0080FFA0
:1022300014C08091EE0087FF10C08091E80085FFF8
:1022400003C01092F100F9CF8091E80080FF05C033
:102250008091E8008E778093E8009F709093E9006A
:1022600010925C01089542E061EC81E00E94C3138A
:1022700042E061EC82E00E94C31342E061EC83E043
:102280000E94C31342E261EC84E00E94C31342E166
:1022900061EC85E00C94C3138091F201833009F462
:1022A00055C030F4813071F0823009F48EC0089549
:1022B0008A3009F47AC08B3009F460C0893009F0A3
:1022C0009CC020C08091F101813A09F096C08091B4
:1022D000E800877F8093E8008091F5019091F601F6
:1022E000892B21F060E080E090E003C060E18DE5A3
:1022F00091E070E00E9400138091E8008B7780935A
:10230000E80008958091F101813209F076C0809152
:10231000F5019091F601009719F0049709F06DC04E
:102320008091E800877F8093E8008091E80082FD3B
:1023300005C08091F0018111F8CF5FC08091F1005C
:1023400080936D018091E8008B7753C08091F101FB
:10235000813A09F052C08091F5019091F601892BE4
:1023600009F04BC08091E800877F8093E80080915E
:10237000E80080FFFCCF80910C0136C08091F10114
:102380008132D9F58091F5019091F601892BA9F55B
:102390008091E800877F8093E8000E94F813809185
:1023A000F30180930C010C94051D8091F1018132A1
:1023B00021F58091E800877F8093E8000E94F81360
:1023C0008091F40180936E0108958091F101813A2A
:1023D000A1F48091E800877F8093E8008091E80075
:1023E00080FFFCCF80916E018093F1008091E80026
:1023F0008E778093E8000C94F813089584B7877F54
:1024000084BF88E10FB6F89480936000109260005A
:102410000FBE90E080E80FB6F8948093610090932F
:1024200061000FBE0E94CB170E9449140E94A6149F
:102430008091E20084608093E20084E89FE00E9443
:10244000702378940E9420170E94CD1782E091E0BB
:102450000E943D170E94F22D81E198E00E94A6099A
:102460008091F001853089F48DE098E00E94A60902
:102470000E94A1238091EE01882391F30E94C92339
:10248000882371F30E94A112EBCF0E94FB17E8CFC3
:10249000292F332723303105A9F06CF42130310581
:1024A00009F442C02230310509F043C08DE890E0C4
:1024B0002AE638E042C021323105C9F02232310526
:1024C00019F137C099278130910541F0823091058B
:1024D00041F0892B71F5E6E6F8E005C0EEE4F8E09E
:1024E00002C0E6E3F8E0849190E09F0126C06530E9
:1024F00000F5E62FF0E0EE0FFF1FEB5DFE4F2081B1
:10250000318189E090E019C0653098F4E62FF0E061
:10251000DF01AA0FBB1FA55EBE4F2D913C91EA5E65
:10252000FE4F808190E009C082E190E027EF38E023
:1025300004C080E090E020E030E0FA0131832083A5
:10254000089580E189BD82E189BD09B400FEFDCF17
:102550008091D8008F7D8093D8008091E0008260C8
:102560008093E0008091E00081FDFCCF0895CF9240
:10257000DF92EF92FF920F931F93CF93DF937C0133
:102580008B01EA010E941914811131C0209731F0AA
:1025900088819981081B190BE80EF91EC12CD12CDA
:1025A0000115110519F18091E80085FD14C0809195
:1025B000E8008E778093E800209741F08881998128
:1025C0008C0D9D1D9983888385E011C00E9419148C
:1025D000882331F30CC0F70181917F018093F100D2
:1025E00001501109FFEFCF1ADF0ADACF80E0DF9147
:1025F000CF911F910F91FF90EF90DF90CF900895B2
:102600002091F7013091F8012617370748F061153E
:10261000710539F42091E8002E772093E80001C07D
:10262000B901FC0120E061157105B9F18091F0015B
:10263000882309F440C0853009F43FC08091E80048
:1026400083FD3DC08091E80082FF06C08091E800D4
:1026500082FF26C080E008958091E80080FFE3CFEC
:102660002091F3008091F20090E0922B61157105AA
:1026700051F08830910538F421912093F100615098
:1026800071090196F3CF21E0089709F020E08091CD
:10269000E8008E778093E800C6CF2111C7CFD6CF50
:1026A0008091F001882339F0853039F08091E8007D
:1026B00083FFCCCF04C082E0089583E0089581E0D9
:1026C00008952091F7013091F8012617370748F057
:1026D0006115710539F42091E8002E772093E80008
:1026E00001C0B901FC0120E061157105C1F18091C3
:1026F000F001882309F441C0853009F440C080917D
:10270000E80083FD3EC08091E80082FF06C0809112
:10271000E80082FF27C080E008958091E80080FFF4
:10272000E3CF2091F3008091F20090E0922B6115AD
:10273000710559F08830910540F424912093F100FF
:102740003196615071090196F2CF21E0089709F0A6
:1027500020E08091E8008E778093E800C5CF2111BA
:10276000C6CFD5CF8091F001882339F0853039F07C
:102770008091E80083FFCBCF04C082E0089583E01E
:10278000089581E00895982F973058F59093E900C7
:10279000981739F07091EC002091ED005091F00005
:1027A00003C0242F762F50E021FF19C03091EB0099
:1027B0003E7F3093EB003091ED003D7F3093ED0094
:1027C0003091EB0031603093EB007093EC0020937C
:1027D000ED005093F0002091EE0027FF07C09F5FAF
:1027E000D3CF8F708093E90081E0089580E0089551
:1027F0008091F10187FD05C08091E80080FF0EC047
:1028000012C08091E80082FD05C08091F001811125
:10281000F8CF08958091E8008B7708C08091F0018F
:102820008111EACF08958091E8008E778093E800C7
:1028300008958091E4009091E50045E62091EC0038
:1028400020FF21C02091E80020FD21C02091F0014F
:10285000222389F0253089F02091EB0025FD0FC05F
:102860002091E4003091E5002817390739F34150F1
:1028700041F0C901E3CF82E0089583E0089581E04B
:10288000089584E008952091E80022FFDFCF80E0E2
:1028900008950E94B7140E94BF14E0EEF0E080811A
:1028A00081608083E8EDF0E080818F77808319BCC0
:1028B000A7EDB0E08C918E7F8C9380818F7E80839A
:1028C0001092EF0108950F931F93CF93DF930E940F
:1028D000B7140E94BF14C8EDD0E088818F77888339
:1028E00088818068888388818F7D888319BC109255
:1028F000F0011092EC011092EE011092ED0100EE49
:1029000010E0F80180818B7F8083888181608883DB
:1029100042E060E080E00E94C313E1EEF0E08081DD
:102920008E7F8083E2EEF0E0808181608083808111
:1029300088608083F80180818E7F808388818061B8
:102940008883DF91CF911F910F910895E8EDF0E01A
:1029500080818F7E8083E7EDF0E0808181608083DD
:1029600084E082BF81E08093EF010C946314E8ED72
:10297000F0E080818E7F80831092E20008951092B3
:10298000DA001092E10008951F920F920FB60F9295
:1029900011242F933F934F935F936F937F938F9364
:1029A0009F93AF93BF93EF93FF938091E10082FFDA
:1029B0000BC08091E20082FF07C08091E1008B7F15
:1029C0008093E1000E94F3108091DA0080FF1FC025
:1029D0008091D80080FF1BC08091DA008E7F8093A9
:1029E000DA008091D90080FF0DC080E189BD82E1CD
:1029F00089BD09B400FEFDCF81E08093F0010E9403
:102A0000C41005C019BC1092F0010E94D61080912C
:102A1000E10080FF19C08091E20080FF15C0809125
:102A2000E2008E7F8093E2008091E20080618093DB
:102A3000E2008091D80080628093D80019BC85E0C4
:102A40008093F0010E94E1108091E10084FF30C08A
:102A50008091E20084FF2CC080E189BD82E189BDC4
:102A600009B400FEFDCF8091D8008F7D8093D800FF
:102A70008091E1008F7E8093E1008091E2008F7E63
:102A80008093E2008091E20081608093E200809177
:102A9000EC01882311F084E007C08091E30087FFF8
:102AA00002C083E001C081E08093F0010E94E71042
:102AB0008091E10083FF29C08091E20083FF25C05F
:102AC0008091E100877F8093E10082E08093F001B4
:102AD0001092EC018091E1008E7F8093E100809163
:102AE000E2008E7F8093E2008091E200806180931B
:102AF000E20042E060E080E00E94C3138091F000B9
:102B000088608093F0000E94DD10FF91EF91BF91EB
:102B1000AF919F918F917F916F915F914F913F9175
:102B20002F910F900FBE0F901F9018951F920F922C
:102B30000FB60F9211242F933F934F935F936F9390
:102B40007F938F939F93AF93BF93CF93EF93FF9315
:102B5000C091E900CF708091EC001092E900809163
:102B6000F000877F8093F00078940E94D215109235
:102B7000E9008091F00088608093F000C093E90044
:102B8000FF91EF91CF91BF91AF919F918F917F91E5
:102B90006F915F914F913F912F910F900FBE0F90CA
:102BA0001F9018951F93CF93DF93CDB7DEB7AA97E9
:102BB0000FB6F894DEBF0FBECDBFE1EFF1E080911C
:102BC000F100819321E0E93FF207C9F70E944C111F
:102BD0008091E80083FF1CC12091F1013091F20146
:102BE000832F90E08A30910508F012C1FC01EA5A67
:102BF000FF4F0C94982F203881F0223809F008C13B
:102C00008091F5018F708093E9008091EB0085FB46
:102C1000882780F91092E90006C08091ED0190911B
:102C2000EE01911182609091E800977F9093E80007
:102C30008093F1001092F100C5C0822F8D7F09F0C2
:102C4000E7C0222319F0223061F0E2C08091F30145
:102C5000813009F0DDC0333009F080E08093EE016F
:102C600028C08091F301811124C02091F5012F70BB
:102C700009F4CEC02093E9008091EB0080FF19C0D9
:102C80008091EB00333011F4806211C08061809339
:102C9000EB0081E090E0022E01C0880F0A94EAF771
:102CA0008093EA001092EA008091EB0088608093A4
:102CB000EB001092E9008091E800877F86C0211127
:102CC000A7C01091F3011F778091E3008078812BDA
:102CD0008093E3008091E800877F8093E8000E9462
:102CE000F8138091E80080FFFCCF8091E3008068BA
:102CF0008093E300112311F083E001C082E0809310
:102D0000F00186C02058223008F082C08091F30183
:102D10009091F4018C3D23E0920779F583E08A835A
:102D20008AE289834FB7F894DE01139620E03EE0F3
:102D300051E2E32FF0E050935700E49120FF03C0ED
:102D4000E295EF703F5FEF708E2F90E0EA3010F069
:102D5000C79601C0C0968D939D932F5F243149F78C
:102D60004FBF8091E800877F8093E8006AE270E0BF
:102D7000CE0101960E94001314C0AE014F5F5F4F59
:102D80006091F5010E944812009709F441C020911A
:102D9000E800277F2093E800BC0189819A810E9486
:102DA00061138091E8008B778093E80031C0203870
:102DB00079F58091E800877F8093E8008091EC01AD
:102DC0008093F1008091E8008E778093E8000E9464
:102DD000F8131EC021111CC09091F3019230C0F471
:102DE0008091E800877F8093E8009093EC010E9437
:102DF000F8138091EC01811104C08091E30087FFFA
:102E000002C084E001C081E08093F0010E94331190
:102E10008091E80083FF0AC08091E800877F80935B
:102E2000E8008091EB0080628093EB00AA960FB6D9
:102E3000F894DEBF0FBECDBFDF91CF911F910895F3
:102E4000CF938091F0018823B1F08091E9008F70D9
:102E50009091EC0090FF02C090E801C090E0C92F73
:102E6000C82B1092E9008091E80083FD0E94D215E2
:102E7000CF70C093E900CF9108959093740180932F
:102E800073010895E0917301F0917401309721F07E
:102E90000190F081E02D099480E00895FF920F9356
:102EA0001F93CF93DF938C01E0917301F091740134
:102EB000309799F10280F381E02D09958091D70137
:102EC00082FF2BC080FF04C08CE29AE00E94A6091A
:102ED000E80180E1F82E06E21AE08091D70180FF38
:102EE0000BC088811F928F931F930F930E943F0AFC
:102EF0000F900F900F900F90FA942196F110EDCF54
:102F00008091D70180FF09C084E29AE0DF91CF91E0
:102F10001F910F91FF900C94A609DF91CF911F9103
:102F20000F91FF900895E0917301F0917401309733
:102F300021F00480F581E02D09940895209171011C
:102F4000309172018217930771F090937201809310
:102F50007101E0917301F0917401309721F00680C6
:102F6000F781E02D0994089520916F01309170014F
:102F70008217930771F09093700180936F01E09135
:102F80007301F0917401309721F00084F185E02DF8
:102F90000994089508950C94CA170E94E0230E9492
:102FA000CB0B0C94A624CF93C82F8091D70182FF1E
:102FB0001EC080FF04C085E49AE00E94A6098091AB
:102FC000D70180FF0CC01F92CF9320E43AE03F93DB
:102FD0002F930E943F0A0F900F900F900F908091B7
:102FE000D70180FF04C08EE39AE00E94A6098C2FCF
:102FF000CF910C94800FCF92DF92EF92FF920F93BC
:103000001F93CF93DF93CDB7DEB72B970FB6F8940E
:10301000DEBF0FBECDBF0E94E80B36E7E32E31E0E6
:10302000F32E00E010E0C02E802F0E94130DF70158
:10303000D1907F01D826B1F40F5F1F4F0E301105DC
:1030400091F78FEF89838A831B820E94E923816035
:10305000782F9D838C8349815A816B818D810E9459
:103060009E1841C09091D70191FF04C08B870E94A8
:10307000190D8B8520E030E04D2D50E0922FBA01E4
:10308000022E02C0759567950A94E2F760FF25C08D
:103090002E83CF82EE24E394F12C02C0EE0CFF1CB1
:1030A0009A95E2F790E08E219F2121E0892B09F487
:1030B00020E028870E94E9238160782F9A878987FA
:1030C0004E815F8168858A850E949E18F801EA58C2
:1030D000FE4F80818E25808306C02F5F3F4F2630B4
:1030E000310561F6A9CF0E941428109175010E9444
:1030F00042171817A1F00E944217809375012B9672
:103100000FB6F894DEBF0FBECDBFDF91CF911F91F8
:103110000F91FF90EF90DF90CF900C94D3172B96E8
:103120000FB6F894DEBF0FBECDBFDF91CF911F91D8
:103130000F91FF90EF90DF90CF900895CF93DF93A2
:10314000CDB7DEB72B970FB6F894DEBF0FBECDBF5D
:103150004F83588769877A878B87DE01119686E0CF
:10316000FD0111928A95E9F785E0FE0137960190FD
:103170000D928A95E1F749815A816B817C818D811D
:103180009E810E94D11F2B960FB6F894DEBF0FBE12
:10319000CDBFDF91CF910895CF93C82F882309F435
:1031A000C1C0823859F40E94421781FDBBC089E337
:1031B0000E946E220E944A2389E30CC0833879F46E
:1031C0000E94421780FDAEC083E50E946E220E94DD
:1031D0004A2383E50E94BF22CF910C944A2384386E
:1031E00059F40E94421782FD9DC087E40E946E221E
:1031F0000E944A2387E4EECF8CEF8C0F813A48F48B
:103200008C2F0E949D2C81118DC08C2F0E946E22CC
:10321000E3CF80E28C0F883048F4C77081E001C0B2
:10322000880FCA95EAF70E941123D6CF8BE58C0F41
:10323000833078F4C53A29F0C63A31F482E890E058
:1032400005C081E890E002C083E890E0CF910C9443
:103250009E1788E58C0F833108F064C0C83A39F1B5
:10326000C93A41F1CA3A49F1CB3A51F1CC3A59F154
:10327000CD3A61F1C03B69F1CE3A71F1CF3A79F1C3
:10328000C13B81F1C23B89F1C33B91F1C43B99F150
:10329000C53BA1F1C63BA9F1C73BB1F1C83BB9F1B0
:1032A000C93BC1F1CA3BC9F58AE292E038C082EE5F
:1032B00090E035C089EE90E032C08AEE90E02FC0F9
:1032C00085EB90E02CC086EB90E029C087EB90E086
:1032D00026C08CEC90E023C08DEC90E020C083E809
:1032E00091E01DC08AE891E01AC082E991E017C020
:1032F00084E991E014C081E292E011C083E292E09F
:103300000EC084E292E00BC085E292E008C086E243
:1033100092E005C087E292E002C080E090E0CF91A9
:103320000C94B417CF910895882309F44BC08238C8
:1033300059F40E94421781FF45C089E30E946E2222
:103340000E944A2389E30CC0833871F40E9442171B
:1033500080FF38C083E50E946E220E944A2383E5E5
:103360000E94BF220C944A23843859F40E944217C9
:1033700082FF28C087E40E946E220E944A2387E4CD
:10338000EFCF9CEF980F913A58F390E2980F983056
:1033900050F4877091E001C0990F8A95EAF7892F60
:1033A0000E941723DFCF9BE5980F933020F480E035
:1033B00090E00C949E17885A833120F480E090E0CE
:1033C0000C94B4170895882321F00E9411230C94C3
:1033D0004A230895882321F00E9417230C944A233E
:1033E0000895CF92DF92EF92FF920F931F93CF93A6
:1033F000DF93CDB7DEB728970FB6F894DEBF0FBEC8
:10340000CDBF8C0185E0F801DE01119601900D928F
:103410008A95E1F7F80140813181F280258122957A
:103420002F7083819481892B31F03F3F31F481E00B
:103430004F3F19F403C081E001C080E080FDC4C2A9
:1034400049833A8389819A812F830E942C229E830B
:1034500088870E942B220E94FE204E81E42FE29555
:10346000EF70F0E0E05AFF4F2F8168850C94982FA1
:10347000842F807F142F1F70882311F01295107FE6
:10348000FF2059F0112309F454C2812F68870E944C
:1034900021230E944A2368854CC2862F0E949419DA
:1034A000112309F491C2812F0E94272328960FB679
:1034B000F894DEBF0FBECDBFDF91CF911F910F916A
:1034C000FF90EF90DF90CF900C944A23342F307F01
:1034D000842F8F70303211F08295807F662319F02F
:1034E000613019F12BC0FF20B1F0222309F493C100
:1034F000213009F090C128960FB6F894DEBF0FBEB8
:10350000CDBFDF91CF911F910F91FF90EF90DF9092
:10351000CF900C943123222319F0213009F454C2A6
:103520008E830E9434238E8189C1FF2021F02230B6
:1035300008F04AC270C1211147C280C1FF2021F0AA
:10354000222309F468C1F5C1222309F477C105C219
:10355000242F26952695237030E02115310521F082
:1035600021303105C9F030C2FF2021F0862F942F81
:10357000937002C080E090E028960FB6F894DEBF0A
:103580000FBECDBFDF91CF911F910F91FF90EF90B4
:10359000DF90CF900C949E17FF2021F0862F942F60
:1035A000937002C080E090E028960FB6F894DEBFDA
:1035B0000FBECDBFDF91CF911F910F91FF90EF9084
:1035C000DF90CF900C94B417862FFF2019F00E9443
:1035D0009A2602C00E94022728960FB6F894DEBFF2
:1035E0000FBECDBFDF91CF911F910F91FF90EF9054
:1035F000DF90CF900C948727842F837009F076C0DA
:10360000F110E2C1262F229526952770220F220F56
:10361000862F8F70C82ED12CE12CF12C022E04C0E5
:10362000CC0CDD1CEE1CFF1C0A94D2F764FF10C00A
:103630006FE070E080E090E004C0660F771F881FA5
:10364000991F2A95D2F7609570958095909503C043
:1036500060E070E0CB01242F269526952370422F41
:1036600050E042305105D1F04330510559F16C29F9
:103670007D298E299F294130510541F128960FB6A9
:10368000F894DEBF0FBECDBFDF91CF911F910F9198
:10369000FF90EF90DF90CF900C9423216C297D292F
:1036A0008E299F2928960FB6F894DEBF0FBECDBF96
:1036B000DF91CF911F910F91FF90EF90DF90CF900E
:1036C0000C943D210E942321C701B60128960FB614
:1036D000F894DEBF0FBECDBFDF91CF911F910F9148
:1036E000FF90EF90DF90CF900C940921FF2019F00C
:1036F000842F817001C08695882309F465C1262F27
:10370000229526952770220F220F862F8F70C82EA4
:10371000D12CE12CF12C022E04C0CC0CDD1CEE1CB3
:10372000FF1C0A94D2F764FF10C06FE070E080E0E5
:1037300090E004C0660F771F881F991F2A95D2F763
:10374000609570958095909503C060E070E0CB0126
:10375000242F269526952370422F50E042305105A4
:10376000D1F04330510559F16C297D298E299F29CB
:103770004130510541F128960FB6F894DEBF0FBED7
:10378000CDBFDF91CF911F910F91FF90EF90DF9010
:10379000CF900C94F7216C297D298E299F2928969A
:1037A0000FB6F894DEBF0FBECDBFDF91CF911F9152
:1037B0000F91FF90EF90DF90CF900C9411220E9418
:1037C000F721C701B60128960FB6F894DEBF0FBEE9
:1037D000CDBFDF91CF911F910F91FF90EF90DF90C0
:1037E000CF900C94DD21603FC9F118F4603E50F495
:1037F0009BC0623F09F460C008F44AC0633F09F40B
:103800006FC092C0162F1F70842F8F71FF2099F008
:103810000E947621812F28960FB6F894DEBF0FBE46
:10382000CDBFDF91CF911F910F91FF90EF90DF906F
:10383000CF900C94E3190E949721812F28960FB600
:10384000F894DEBF0FBECDBFDF91CF911F910F91D6
:10385000FF90EF90DF90CF900C94EA19FF20A1F039
:103860002111B2C0842F8F7128960FB6F894DEBF55
:103870000FBECDBFDF91CF911F910F91FF90EF90C1
:10388000DF90CF900C94BC21223008F09DC0EACF8D
:10389000FF20A1F0842F8F7128960FB6F894DEBF19
:1038A0000FBECDBFDF91CF911F910F91FF90EF9091
:1038B000DF90CF900C947621FF2061F3842F8F71DD
:1038C00028960FB6F894DEBF0FBECDBFDF91CF9123
:1038D0001F910F91FF90EF90DF90CF900C94972164
:1038E000FF2091F0842F8F7128960FB6F894DEBFD9
:1038F0000FBECDBFDF91CF911F910F91FF90EF9041
:10390000DF90CF900C94612128960FB6F894DEBF1B
:103910000FBECDBFDF91CF911F910F91FF90EF9020
:10392000DF90CF900C945721FF20A1F0222309F4BF
:10393000B1CF862F28960FB6F894DEBF0FBECDBF4D
:10394000DF91CF911F910F91FF90EF90DF90CF907B
:103950000C94CC18222309F4B1CF862F28960FB6E9
:10396000F894DEBF0FBECDBFDF91CF911F910F91B5
:10397000FF90EF90DF90CF900C9494194F70C80196
:103980000E94480A28960FB6F894DEBF0FBECDBF3E
:10399000DF91CF911F910F91FF90EF90DF90CF902B
:1039A0000C947E204F70C80128960FB6F894DEBFA5
:1039B0000FBECDBFDF91CF911F910F91FF90EF9080
:1039C000DF90CF900C941F0E28960FB6F894DEBFB0
:1039D0000FBECDBFDF91CF911F910F91FF90EF9060
:1039E000DF90CF9008950E942E230E9403230E940F
:1039F0004A230E94B5280E94872780E090E00E9419
:103A00009E1780E090E00C94B4170E941E230C9443
:103A1000F31C0E942C22292F22952F7030E02C308D
:103A200031054CF42A3031056CF422503109223032
:103A3000310590F407C02C30310551F02F3031059D
:103A400039F00AC0803E10F0803F31F481E00895E3
:103A500093FB882780F9089580E00895CF93DF9342
:103A600000D000D01F92CDB7DEB70F900F900F900F
:103A70000F900F90DF91CF910895CF93DF9300D0F7
:103A800000D000D0CDB7DEB726960FB6F894DEBFD3
:103A90000FBECDBFDF91CF9108951F93CF93DF93DA
:103AA000C091840116E080918501C81799F0D0E09B
:103AB0001C9FF0011D9FF00D1124EA57FE4F40811D
:103AC000518162817381848195810E943D1D21967F
:103AD000C770E9CFDF91CF911F9108954091B60152
:103AE0005091B7016091B8017091B9018091BA010C
:103AF0009091BB010C943D1DCF938091BB018295A9
:103B00008F7009F05FC08091B801882309F45AC012
:103B100020918401A09185016091B6017091B70157
:103B20008091B9019091BA0131E06F3F09F030E026
:103B3000B32FC6E02A1709F445C0009721F07F3F54
:103B400021F44B2F03C041E001C040E030E040FDD4
:103B500035C0C29FF001C39FF00D1124EA57FE4FFC
:103B6000418174132BC04081641328C042814111EC
:103B700025C0438154814817590710F44150510919
:103B8000481B590B483C5105C8F48091BB018F700C
:103B900080618093BB0186E0829FF001839FF00DDE
:103BA0001124E557FE4F80818F708061808386EB02
:103BB00091E00E94F119CF910C944D1D2F5F3F4F62
:103BC0002770B8CFCF910895CF92DF92EF92FF92F6
:103BD0000F931F93CF93DF93CDB7DEB762970FB6E6
:103BE000F894DEBF0FBECDBF8C0185E0F801DE0189
:103BF0001D9601900D928A95E1F7D8014C9111968E
:103C00005C91119712966C9112971396ED90FC901F
:103C100014977091B601E091B7012091B9013091EC
:103C2000BA012115310531F0EF3F31F481E07F3FDA
:103C300019F403C081E001C080E0B82FB170CB2E31
:103C400080FD6CC1D090B801DD2009F4F5C0F09181
:103C5000BB01E216F30638F0C701821B930B883CC8
:103C6000910548F09BC0209530952E0D3F1D283CB6
:103C7000310508F093C08F2F807F09F052C0E51303
:103C800014C0741312C0D62E61110FC0FF70F06102
:103C9000F093BB010E946E1D86EB91E00E94F1192A
:103CA0008091BB01F80185836CC1EF2831F05F3F43
:103CB00031F481E04F3F19F403C081E001C080E09E
:103CC00080FD03C081E0862701C080E0F82FF170FD
:103CD000FF2E80FF1CC0809184012091850136E079
:103CE000821709F428C190E0389FF001399FF00D48
:103CF0001124EA57FE4F7181571306C07081471394
:103D000003C07281671303C001968770E9CFD62E76
:103D1000662309F436C18091BB0181608093BB01A9
:103D200053C0E51308C0741306C0611104C0D80164
:103D30001596FC93AEC04D875E878D859E856A8BF8
:103D40000E94091D6A89882329F1D62E662311F164
:103D50002091BB01822F82958F7090E002970CF426
:103D600060C08091B6019091B70198878F831986C2
:103D7000FB86EA862C87CE01079651C0E51731F104
:103D80004D875E878D859E856A8B0E94091D6A8995
:103D900081112EC0C8010E94F119A4C08F2F807F0D
:103DA00069F77E2DF98AE88A89890E942E1D86EBA3
:103DB00091E00E94F119E6EBF1E086E0DF011D924F
:103DC0008A95E9F70E946E1DD12CDBC07413D8CF01
:103DD0006111D6CFD8011596FC93C8010E94F11944
:103DE000E6EBF1E086E0DF011D928A95E9F7C9C0B4
:103DF000D62E662379F22091BB01822F82958F7097
:103E000090E0029774F08091B6019091B7019A8387
:103E100089831B82FD82EC822E83CE0101960E9453
:103E2000F11986E0F801A6EBB1E001900D928A95B8
:103E3000E1F70E947C1D6FC0E216F30628F0C7016F
:103E4000821B930B9C0104C0209530952E0D3F1DC5
:103E5000283C310508F052C0D62E662309F49ACFCB
:103E6000E5132CC074132AC08091BB0180FD1DC0D6
:103E7000982F92959F70C9F0D80115968C9315973D
:103E80009F3039F09F5F9295907F8F70892B1596A8
:103E90008C93C8010E94F11986E0F801A6EBB1E00D
:103EA00001900D928A95E1F736C086E0F801A6EB05
:103EB000B1E001900D928A95E1F763C04D875E876E
:103EC0008D859E850E94091D882379F086E0F80182
:103ED000A6EBB1E001900D928A95E1F70E947C1D5E
:103EE0000E946E1DDD24D3944CC08091BB01816083
:103EF0008093BB01C8010E94F11943C07E2DF98A4D
:103F0000E88A89890E942E1DE6EBF1E086E0DF0158
:103F10001D928A95E9F70E946E1D33C0662309F44D
:103F200039CF4D875E878D859E850E94091D882328
:103F300009F430CFCBCF4D875E878D859E850E945B
:103F40002C22292F22952F7030E0223031052CF4BD
:103F50009F7041F0811106C00CC0243031052CF453
:103F60009F7049F4805E883020F0C8010E94F119EA
:103F7000CF2CDC2C06C0D80115969C91907F91F730
:103F8000F8CF8D2D62960FB6F894DEBF0FBECDBF71
:103F9000DF91CF911F910F91FF90EF90DF90CF9025
:103FA00008951F93CF93DF93CDB7DEB72C970FB64D
:103FB000F894DEBF0FBECDBF4F83588769877A87DD
:103FC0008B879C87CE0107960E94E41D8823C1F051
:103FD0002F8138858A859B85892B31F03F3F11F0F1
:103FE00080E003C02F3FE1F781E0811147C04F819E
:103FF000588569857A858B859C850E943D1D3EC0CC
:1040000086E0FE013796DE01119601900D928A95A9
:10401000E1F7FF81E8854A855B854115510531F05F
:10402000EF3F31F481E0FF3F19F403C081E001C0AC
:1040300080E080FD23C02091850130E0C901019618
:10404000877099276091840170E086179707F1F1D6
:10405000F983EA835D834C8396E0929FD001939F1E
:10406000B00D1124AA57BE4FFE01319601900D925A
:104070009A95E1F7809385010E944D1D16E080918D
:10408000840190918501891779F1189FC00111244D
:104090008A579E4F0E94E41D882331F1E0918401EC
:1040A0001E9FF0011124EA57FE4F40815181628129
:1040B0007381848195810E943D1D8091840190E0EF
:1040C00001968770992780938401D9CF0E94051D9E
:1040D0001092850110928401E6EBF1E086E0DF01A9
:1040E0001D928A95E9F7CACF2C960FB6F894DEBFD9
:1040F0000FBECDBFDF91CF911F910895EF92FF9238
:104100000F931F93CF93DF93FC01009709F46FC0C7
:10411000F12CEE24E394EF0121968491843740F44E
:10412000843008F055C0813081F0823021F15FC0C9
:10413000853709F447C0C0F19CE7980F903708F025
:1041400056C08F770E94941945C08F010E5F1F4F94
:10415000FE01849190E2980F983050F48770FE2D04
:1041600001C0FF0F8A95EAF78F2F0E94212315C007
:104170000E94CC1814C08F010E5F1F4FFE01849166
:1041800090E2980F983068F48770FE2D01C0FF0F01
:104190008A95EAF78F2F0E9427230E944A23E8017D
:1041A00019C00E949419FBCFCF010296FE01C49161
:1041B000CC2361F0EFE9FFE03197F1F700C0000098
:1041C000C150F6CFCF010296FE01F490EC0102C07F
:1041D0000E94CC188F2D882341F0EFE9FFE0319742
:1041E000F1F700C000008150F6CFFE0194CFDF91BF
:1041F000CF911F910F91FF90EF90089508956093D4
:10420000C0017093C1018093C2019093C3010C94CB
:10421000F31C0F931F930091C0011091C1012091D5
:10422000C2013091C301062B172B282B392B009389
:10423000C0011093C1012093C2013093C3011F91AB
:104240000F910C94F31C0F931F930091C0011091D8
:10425000C1012091C2013091C301062317232823F5
:1042600039230093C0011093C1012093C201309300
:10427000C3011F910F910C94F31C0F931F93009196
:10428000C0011091C1012091C2013091C3010627E4
:104290001727282739270093C0011093C1012093C5
:1042A000C2013093C3011F910F910C94F31C109223
:1042B000BC011092BD011092BE011092BF010C947E
:1042C000F31C41E050E060E070E004C0440F551F73
:1042D000661F771F8A95D2F74093BC015093BD01AA
:1042E0006093BE017093BF010C94F31C41E050E059
:1042F00060E070E004C0440F551F661F771F8A9569
:10430000D2F78091BC019091BD01A091BE01B09106
:10431000BF01842B952BA62BB72B8093BC019093C8
:10432000BD01A093BE01B093BF010C94F31C41E00A
:1043300050E060E070E004C0440F551F661F771F17
:104340008A95D2F740955095609570958091BC0103
:104350009091BD01A091BE01B091BF01842395232E
:10436000A623B7238093BC019093BD01A093BE0107
:10437000B093BF010C94F31C41E050E060E070E0AA
:1043800004C0440F551F661F771F8A95D2F780918E
:10439000BC019091BD01A091BE01B091BF018427E5
:1043A0009527A627B7278093BC019093BD01A093C2
:1043B000BE01B093BF010C94F31C0F931F930091A7
:1043C000BC011091BD012091BE013091BF01062BAF
:1043D000172B282B392B0093BC011093BD01209380
:1043E000BE013093BF011F910F910C94F31C0F93EA
:1043F0001F930091BC011091BD012091BE0130912D
:10440000BF0106231723282339230093BC011093EF
:10441000BD012093BE013093BF011F910F910C94F9
:10442000F31C0F931F930091BC011091BD012091CB
:10443000BE013091BF01062717272827392700938F
:10444000BC011093BD012093BE013093BF011F91A9
:104450000F910C94F31C0895CF92DF92EF92FF928C
:104460000F931F93CF93DF93EC01C090C001D090C6
:10447000C101E090C201F090C3018091BC01909114
:10448000BD01A091BE01B091BF01C82AD92AEA2A74
:10449000FB2A0FE110E0B701A601002E04C07695BB
:1044A0006795579547950A94D2F740FF07C0BE011C
:1044B000802F0E94420E8130910539F4015011097C
:1044C00050F7BE0180E00E94420EDF91CF911F9114
:1044D0000F91FF90EF90DF90CF90089590910C0195
:1044E000992361F190910D01992341F1982F9695AF
:1044F000969596959F3088F4E0910E01F0910F010A
:10450000E90FF11D877021E030E001C0220F8A958C
:10451000EAF78181822B818308959091D70190FFE2
:104520002DC01F928F9386E79AE09F938F930E94EE
:104530003F0A0F900F900F900F90089540910E0139
:1045400050910F0120E030E09FEFFA01E20FF31FDE
:104550006281681799F09F3F19F4611101C0922F91
:104560002F5F3F4F2E30310581F79F3F39F0FA0121
:10457000E90FF11D97FDFA958283089508959091B2
:104580000C01992369F190910D01992349F1982F1C
:104590009695969596959F3090F4E0910E01F09146
:1045A0000F01E90FF11D877021E030E001C0220FFB
:1045B0008A95EAF720958181282321830895909197
:1045C000D70190FF1FC01F928F9388E59AE09F93B9
:1045D0008F930E943F0A0F900F900F900F900895B5
:1045E00040910E0150910F0120E030E0FA01E20FFE
:1045F000F31F9281981301C012822F5F3F4F2E301C
:104600003105A1F7089581E090E0E0910E01F0916D
:104610000F01E80FF91F1082019680319105A9F76B
:1046200008959091D601982B9093D6010895809586
:104630009091D60198239093D60108951092D601B7
:1046400008959091D501982B9093D5010895809568
:104650009091D50198239093D50108951092D5019A
:1046600008958093C40108951092C4010895409163
:104670000E0150910F0120E030E080E0FA01E20FDE
:10468000F31F918191118F5F2F5F3F4F2F303105C5
:10469000A9F70895E0910E01F0910F018091D601E4
:1046A0008083E0910E01F0910F0180819091D501FE
:1046B000892B80839091C401992361F0E0910E01D0
:1046C000F0910F018081892B80830E943723811113
:1046D0001092C40180910E0190910F010C944E171D
:1046E00090933B0180933A0108958295982F9C7C8A
:1046F00096959695837344E0849F90011124922BA4
:10470000892F8A7A86959575990F892B08951F931D
:10471000CF93DF931F92CDB7DEB799830E947523A5
:10472000182F9981892F0E947523212F30E0322F75
:104730002227A901482BCA010F90DF91CF911F9129
:1047400008958091F001843009F11092D80120E49D
:1047500088E190E00FB6F894A895809360000FBEB2
:104760002093600083B7817F846083BF83B78160BB
:1047700083BF7894889583B78E7F83BF88E10FB617
:10478000F89480936000109260000FBE0895089521
:104790000895CF930E94C7230E94E80B0E94C8236C
:1047A000C0E08C2F0E94130D811105C0CF5FCE3069
:1047B000C1F780E001C081E0CF9108950C94051D00
:1047C00082E084BD93E095BD9AEF97BD80936E0023
:1047D00008952FB7F8948091D9019091DA01A091B2
:1047E000DB01B091DC012FBF0895CF92DF92EF92F1
:1047F000FF920F931F932FB7F8944091D9015091D6
:10480000DA016091DB017091DC012FBF6A017B014D
:10481000EE24FF248C0120E030E0C016D106E20631
:10482000F30610F441505109481B590BCA011F915E
:104830000F91FF90EF90DF90CF9008951F920F920D
:104840000FB60F9211248F939F93AF93BF938091D4
:10485000D9019091DA01A091DB01B091DC010196C0
:10486000A11DB11D8093D9019093DA01A093DB01C2
:10487000B093DC01BF91AF919F918F910F900FBECC
:104880000F901F9018950E944914F8942FEF87EA13
:1048900091E6215080409040E1F700C0000087E0A1
:1048A00090EBDC018093F9019093FA01A093FB0156
:1048B000B093FC012CE088E190E00FB6F894A89545
:1048C000809360000FBE20936000FFCFEF92FF92B5
:1048D0000F931F93CF93DF93E82EF12C8F2D0E941F
:1048E000130DC0E0D0E0082F10E098010C2E02C09C
:1048F000359527950A94E2F720FD05C02196C6302C
:10490000D10599F709C06C2F7F2D80E00E94200E01
:10491000E812F4CF81E005C0F3948EE0F812DECF08
:1049200080E0DF91CF911F910F91FF90EF9008955C
:10493000CF93C82F8CE20E946624882321F08C2F0D
:10494000CF910C94662480E0CF910895CF930E947C
:10495000F325811102C00E94D9258BE99AE00E94BB
:10496000A609C5E6C15049F00E94E80B8FE39CE917
:104970000197F1F700C00000F5CF84E99AE00E94AA
:10498000A60989E20E949824811111C18AE20E943D
:10499000982481110E94D92585E00E9498248111D4
:1049A0000E9443240E94FE258093D70187E00E9445
:1049B0009824882399F18BE10E949824882351F050
:1049C0009091D70191FB882780F921E0822780FB15
:1049D00091F922C08EE00E949824882351F0909192
:1049E000D70192FB882780F921E0822780FB92F98A
:1049F00013C080E10E9498249091D701882341F050
:104A000093FB882780F921E0822780FB93F904C07B
:104A1000892F809580FB90F99093D7018091D701E1
:104A20000E9402260E9410268093EA0180EE0E94D6
:104A30009824882341F08091EA01982F909590FB6B
:104A400080F98093EA0189E30E949824882359F031
:104A50009091EA0191FB882780F921E0822780FB71
:104A600091F99093EA0182EE0E949824882359F0EC
:104A70009091EA0192FB882780F921E0822780FB50
:104A800092F99093EA0186EE0E949824882359F0C7
:104A90009091EA0193FB882780F921E0822780FB2F
:104AA00093F99093EA0183EE0E949824882359F0A9
:104AB0009091EA0194FB882780F921E0822780FB0E
:104AC00094F99093EA0185E30E949824882359F091
:104AD0009091EA0195FB882780F921E0822780FBED
:104AE00095F99093EA0181E30E949824882359F074
:104AF0009091EA0196FB882780F921E0822780FBCC
:104B000096F99093EA0181E10E949824882359F054
:104B10009091EA0197FB882780F921E0822780FBAA
:104B200097F99093EA018091EA010E9414268091FE
:104B3000EA0187FB882780F980930D0187E20E94B4
:104B40009824C82F8EE10E9498248111C2608FE1C1
:104B50000E9498248111C46080E20E9498248111EF
:104B6000C86081E20E9498248111C06182E20E94A3
:104B700098248111C06283E20E9498248111C0644C
:104B800084E20E949824882311F0C06802C0CC23DC
:104B900029F08C2F0E940B266C2F03C00E94072641
:104BA000682F70E080E090E0CF910C94FF20CF91CF
:104BB00008956DEE7EEF80E090E00E94CE2F60E0E1
:104BC00082E090E00E94C02F60E083E090E00E94CD
:104BD000C02F60E084E090E00E94C02F60E085E09C
:104BE00090E00C94C02F80E090E00E94BA2F21E06A
:104BF0008D3E9E4F09F020E0822F089582E090E0E4
:104C00000C94B22F682F82E090E00C94C02F83E0C8
:104C100090E00C94B22F682F83E090E00C94C02FAA
:104C200084E090E00C94B22F682F84E090E00C9424
:104C3000C02F8091DF0180FF0BC06091130185E0E0
:104C4000689FB001112475956795759567952AC081
:104C500081FF09C06091130185E0689FB0011124B4
:104C6000759567951FC082FF07C06091130185E0AD
:104C7000689FB001112416C04091E0014423C9F09F
:104C800060911201461788F72091130185E0289F53
:104C900090011124429FC001439F900D112470E0A8
:104CA0000E94842F6038710540F46115710539F058
:104CB00002C065E070E0862F08958FE7089581E0D7
:104CC00008958091DF0180FF08C06091110170E0BC
:104CD000759567957595679521C081FF06C06091B0
:104CE000110170E07595679519C082FF04C060914D
:104CF000110170E010C08091E0018823C1F0609143
:104D000010018617A0F790911101989FC0011124FE
:104D100070E00E94842F6038710528F461157105D8
:104D200021F0862F08958FE7089581E0089561E0CE
:104D300070E0F4CF803F21F40E941926819504C0D1
:104D4000813F29F40E9419268093E3010895823F50
:104D500021F40E941926819504C0833F29F40E9402
:104D600019268093E2010895893F19F40E94612673
:104D700005C08A3F31F40E94612681958093E40149
:104D800008958B3F21F40E946126819504C08C3FD9
:104D900029F40E9461268093E5010895843F21F45F
:104DA0008091E101816017C0853F21F48091E1018C
:104DB000826011C0863F21F48091E10184600BC0C4
:104DC000873F21F48091E101886005C0883F31F47C
:104DD0008091E10180618093E10108958D3F21F48C
:104DE0008091DF0181600BC08E3F21F48091DF0153
:104DF000826005C08F3F29F48091DF018460809339
:104E0000DF010895803F39F48091E30187FF6CC092
:104E10001092E30169C0813F29F48091E3011816E3
:104E2000BCF362C09091E201823F29F497FF5CC01D
:104E30001092E20159C0833F19F41916CCF354C003
:104E4000893F41F48091E40118160CF04DC0109296
:104E5000E4014AC08A3F29F48091E40187FF44C0FD
:104E6000F6CF8B3F39F48091E50187FF3DC010926A
:104E7000E5013AC08C3F29F48091E5011816BCF396
:104E800033C0843F21F48091E1018E7F17C0853FBC
:104E900021F48091E1018D7F11C0863F21F4809142
:104EA000E1018B7F0BC0873F21F48091E101877F77
:104EB00005C0883F31F48091E1018F7E8093E1014C
:104EC00013C08D3F21F48091DF018E7F0BC08E3F98
:104ED00021F48091DF018D7F05C08F3F29F48091FF
:104EE000DF018B7F8093DF018091E20181110EC091
:104EF0008091E30181110AC08091E401811106C013
:104F00008091E501811102C01092E0010895809125
:104F1000D70183FF7EC087ED9AE00E94A6098091A9
:104F2000E1011F928F9382ED9AE09F938F930E94ED
:104F30003F0A80ED9AE00E94A6092091E201822FAB
:104F4000992787FD90959F932F938DEC9AE09F93DF
:104F50008F930E943F0A8BEC9AE00E94A609209151
:104F6000E301822F992787FD90959F932F9388ECDB
:104F70009AE09F938F930E943F0A86EC9AE00E94EA
:104F8000A6092091E401822F992787FD90959F9390
:104F90002F9383EC9AE09F938F930E943F0A81ECBA
:104FA0009AE00E94A6092091E501822F992787FDAA
:104FB00090959F932F938EEB9AE09F938F930E94EF
:104FC0003F0A8BEB9AE00E94A6098091E0011F92B4
:104FD0008F9388EB9AE09F938F930E943F0A86EB12
:104FE0009AE00E94A6098091DF011F928F9383EBC4
:104FF0009AE09F938F930E943F0A80EB9AE00E9471
:10500000A6098DB79EB74C960FB6F8949EBF0FBEFB
:105010008DBF81EE91E00E9493170E94E923909347
:10502000DE018093DD0108951F93CF93DF9380917C
:10503000DD019091DE010E94F5234091E0014423BF
:1050400021F02091140130E006C0209115015AE0B2
:10505000259F900111248217930708F482C0809144
:10506000E2011091E301D091E401C091E5018111C9
:1050700007C0111105C0D11103C0CC2309F471C0C0
:105080004F3F19F04F5F4093E001181624F40E943F
:1050900019268093E2018091E20187FF05C00E94FA
:1050A000192681958093E201111624F40E94192695
:1050B0008093E3018091E30187FF05C00E941926D8
:1050C00081958093E3016091E201662339F11091AB
:1050D000E301112319F1772767FD7095872F972F2B
:1050E0000E94892E23E333E343E35FE30E94ED2E26
:1050F0000E94562E6093E201612F772767FD70951D
:10510000872F972F0E94892E23E333E343E35FE346
:105110000E94ED2E0E94562E6093E3011D1624F48A
:105120000E9461268093E4018091E40187FF05C01D
:105130000E94612681958093E4011C1624F40E944C
:1051400061268093E5018091E50187FF05C00E94FB
:10515000612681958093E501DF91CF911F910C9499
:105160008727DF91CF911F910895E1EEF1E085E06F
:10517000DF011D928A95E9F71092E0011092DF019C
:1051800008958AEF9CE00E94A6091F9281E08F9308
:105190001F9285E08F938CEA9CE09F938F930E94EF
:1051A0003F0A0F900F900F900F900F900F9008955F
:1051B0008330E9F128F4813061F0823009F10895FB
:1051C000853009F462C008F449C0863009F474C01F
:1051D000089520911501862F90E0820F911D8F3F39
:1051E000910520F4620F6093150103C08FEF809347
:1051F0001501809115011F928F9385EE9BE072C07F
:1052000020911401862F90E0820F911D8F3F910510
:1052100020F4620F6093140103C08FEF8093140198
:10522000809114011F928F9383ED9BE05BC02091CE
:105230001301862F90E0820F911D8F3F910520F47E
:10524000620F6093130103C08FEF8093130180916D
:1052500013011F928F9380EC9BE044C020911201B8
:10526000862F90E0820F911D8F3F910520F4620FF1
:105270006093120103C08FEF80931201809112019D
:105280001F928F938BEA9BE02DC020911101862FF6
:1052900090E0820F911D8F3F910520F4620F609383
:1052A000110103C08FEF80931101809111011F92B2
:1052B0008F9382E99BE016C020911001862F90E029
:1052C000820F911D8F3F910520F4620F60931001B2
:1052D00003C08FEF80931001809110011F928F9374
:1052E00087E79BE09F938F930E943F0A0F900F9058
:1052F0000F900F900895833081F128F4813059F098
:105300008230D1F00895853009F449C0B8F1863073
:1053100009F456C0089580911501681720F4861B82
:105320008093150102C010921501809115011F9202
:105330008F9388E69BE054C080911401681720F495
:10534000861B8093140102C01092140180911401F5
:105350001F928F9386E59BE043C0809113016817ED
:1053600020F4861B8093130102C0109213018091D8
:1053700013011F928F9383E49BE032C0809112014E
:10538000681720F4861B8093120102C0109212014C
:10539000809112011F928F938EE29BE021C0809139
:1053A0001101681720F4861B8093110102C010922E
:1053B0001101809111011F928F9385E19BE010C034
:1053C00080911001681720F4861B8093100102C0A1
:1053D00010921001809110011F928F938AEF9AE032
:1053E0009F938F930E943F0A0F900F900F900F9002
:1053F0000895CF93C82F1F928F932FEF3DE03F93D7
:105400002F930E943F0A61E070E080E090E004C0CA
:10541000660F771F881F991FCA95D2F70E94FF2039
:105420000F900F900F900F90CF910C94051DCF937C
:105430008D3109F465C0B0F58E3009F4CBC100F5AB
:10544000873009F49BC1A8F4863009F06AC28091C4
:10545000D701817F8E7F8093D70184E09EE00E94F8
:10546000A60989E492E10E94A60981E08093E70100
:1054700080C1883009F44FC08B3009F47CC151C21F
:10548000863109F4EDC138F4803109F4B6C18131B7
:1054900009F42DC246C2893109F4CBC18B3109F41C
:1054A00086C13FC2853309F434C248F4873209F417
:1054B00030C208F430C2893209F42BC232C28334BC
:1054C00038F48A3308F029C2883309F454C129C258
:1054D000833409F41EC2883409F023C20E94051DDA
:1054E00088E392E10E94A6099FEF23ED80E39150AB
:1054F00020408040E1F700C000000E94432439C1F1
:1055000088E592E10E94A6090E94102E0E9442178F
:105510000E94800F2EC18DE492E10E94A60985E1D0
:1055200090E10E94A6090E9407261F928F9382E1B4
:1055300090E19F938F930E943F0A80E190E10E9447
:10554000A6090E94FE25C82F8DEF9FE00E94A609A4
:105550001F92CF9328EF3FE03F932F930E943F0A83
:1055600086EF9FE00E94A6098CEE9FE00E94A609AC
:105570008C2F81701F928F9329EE3FE03F932F93E2
:105580000E943F0A87EE9FE00E94A6098DED9FE0F2
:105590000E94A609C1FB882780F91F928F932AEDEC
:1055A0003FE03F932F930E943F0A88ED9FE00E94C7
:1055B000A6098CEC9FE00E94A609C2FB882780F90F
:1055C0001F928F9329EC3FE03F932F930E943F0A55
:1055D00087EC9FE00E94A6098EEB9FE00E94A6093F
:1055E000C3FBCC27C0F91F92CF938BEB9FE09F9317
:1055F0008F930E943F0A89EB9FE00E94A6090E94B8
:105600001026C82F85EA9FE00E94A6091F92CF931B
:1056100020EA3FE03F932F930E943F0A8EE99FE0EC
:105620000E94A60985E89FE00E94A6098C2F817040
:105630001F928F9322E83FE03F932F930E943F0AEF
:105640008DB79EB780960FB6F8949EBF0FBE8DBFE4
:1056500080E89FE00E94A60989E69FE00E94A609D3
:10566000C1FB882780F91F928F9326E63FE03F9386
:105670002F930E943F0A84E69FE00E94A60982E5DC
:105680009FE00E94A609C2FB882780F91F928F9392
:105690002FE43FE03F932F930E943F0A8DE49FE069
:1056A0000E94A6098BE39FE00E94A609C3FB8827FE
:1056B00080F91F928F9328E33FE03F932F930E943E
:1056C0003F0A86E39FE00E94A6098CE29FE00E94C9
:1056D000A609C4FB882780F91F928F9329E23FE037
:1056E0003F932F930E943F0A87E29FE00E94A60902
:1056F00085E19FE00E94A609C5FB882780F91F92DB
:105700008F9322E13FE03F932F930E943F0A80E175
:105710009FE00E94A60984EF9EE00E94A609C6FBB6
:10572000882780F91F928F9321EF3EE03F932F93BC
:105730000E943F0A8FEE9EE00E94A60987EE9EE03F
:105740000E94A609C7FBCC27C0F91F92CF9384EE15
:105750009EE09F938F930E943F0A82EE9EE00E94FC
:10576000A6098DB79EB74C960FB6F8949EBF0FBE94
:105770008DBFC1E0DBC08BE29EE058C08091D701B5
:10578000C82FC17080FF09C08BE292E10E94A60978
:105790008091D701817F8E7F44C08FE192E10E948A
:1057A000A6098091D70181608093D701E2CF8091D3
:1057B000D70181FBCC27C0F991E0C927C0FB81F953
:1057C0008093D701CC2319F082E192E125C084E0D7
:1057D00092E12CC08091D70182FBCC27C0F991E0E7
:1057E000C927C0FB82F98093D701CC2319F085EF3C
:1057F00091E112C085EE91E119C08091D70183FB40
:10580000CC27C0F991E0C927C0FB83F98093D70169
:10581000CC2351F089ED91E10E94A6098091D70136
:1058200081608093D70182C08CEC91E10E94A6092F
:10583000A0CF8DEB91E10E94A60981E991E10E9440
:10584000A60984E591E10E94A60987E291E10E9400
:10585000A60983EE90E10E94A60985EB90E1E6CFD0
:1058600087EA90E10E94A6090E9442171F928F9337
:105870008DE890E19F938F930E943F0A80910C01E5
:105880001F928F9386E790E19F938F930E943F0A28
:1058900080916E011F928F9383E690E19F938F9387
:1058A0000E943F0A80910D011F928F9380E590E145
:1058B0009F938F930E943F0A8091D9019091DA01C2
:1058C000A091DB01B091DC01BF93AF939F938F93C5
:1058D0008CE390E19F938F930E943F0A8DB79EB710
:1058E00046960FB6F8949EBF0FBE8DBF42CF0E9462
:1058F000051DC0910D0181E0C827C0930D01CC2387
:1059000029F082E390E10E94A60910C087E290E1AD
:105910008DCF80E003C08D5101C089530E94F929C9
:1059200028CF85E290E10E94A609C0E08C2FCF919C
:10593000089580E0089580E00895CF93C82F809166
:10594000E701813081F020F0823009F44CC042C17F
:10595000A0910E01B0910F018C91813169F08232DA
:1059600009F03AC109C0A0910E01B0910F018C91CC
:10597000813111F0823249F48C2F0E94992C8111CF
:105980002FC08C2F0E94172A2CC08C2F0E949B2C7A
:10599000811126C0C431E1F070F4CB3081F0C03108
:1059A000D1F40E94C12887EF9DE00E94A60982E001
:1059B0008093E70115C0C93259F0C83361F484E01F
:1059C0009EE00E94A6098BEF9DE00E94A60908C0F8
:1059D0001092E70103C185EF9DE00E94A609FEC079
:1059E00081E08170FDC0C43220F5CE3108F0C0C026
:1059F000CB3099F1C8F4C73009F0D2C08AE0809367
:105A0000150194E19093140193E090931301809316
:105A1000120188E08093110188E2809310018BE9E4
:105A20009CE00E94A609BFC0C33149F1C431C1F056
:105A3000B7C0CB3409F4A9C028F4C93289F0C833FF
:105A400061F0AEC0C13509F49EC0C23509F499C0F9
:105A5000CE3409F0A5C06AE09EC00E94C128A3C050
:105A60008091E601882319F01092E6019CC088EA33
:105A70009CE00E94A60981E08093E701B1C082E822
:105A80009CE00E94A60980E79CE00E94A609809104
:105A900015011F928F938DE69CE09F938F930E9438
:105AA0003F0A8BE69CE00E94A60989E59CE00E94E3
:105AB000A609809114011F928F9386E59CE09F9325
:105AC0008F930E943F0A84E59CE00E94A60985E42A
:105AD0009CE00E94A609809113011F928F9382E49B
:105AE0009CE09F938F930E943F0A80E49CE00E9479
:105AF000A6098FE29CE00E94A609809112011F92E4
:105B00008F938CE29CE09F938F930E943F0A8AE2DE
:105B10009CE00E94A60985E19CE00E94A609809174
:105B200011011F928F9382E19CE09F938F930E94BB
:105B30003F0A80E19CE00E94A60989EF9BE00E9459
:105B4000A609809110011F928F9386EF9BE09F938F
:105B50008F930E943F0A84EF9BE00E94A6098DB7B5
:105B60009EB748960FB6F8949EBF0FBE8DBF1BC060
:105B7000CE51EC2FF0E0E15DFE4F80818093E60195
:105B800012C061E003C061E006C06AE08091E601F6
:105B90000E94D82808C08091E6010E947B2903C09A
:105BA00089E99CE013C08091E601882369F01F9287
:105BB0008F9383E99CE09F938F930E943F0A0F90FD
:105BC0000F900F900F9004C080E99CE00E94A609FE
:105BD00081E006C01092E70180E002C080E001CFC2
:105BE000CF910895E1E8F0E0808188608083808132
:105BF000816080838FB7F89493E09093890090ED53
:105C0000909388008FBF0895EFE6F0E08081826076
:105C100080830895EFE6F0E080818D7F8083089592
:105C2000EFE6F0E0808192E08927808308951F925B
:105C30000F920FB60F9211242F933F934F935F93C0
:105C40006F937F938F939F93AF93BF93EF93FF9344
:105C50008091E8019091E90101969093E901809388
:105C6000E801811103C082E00E94800FE091E90108
:105C7000E695E695F0E0E859FD4EE4918091E80163
:105C80008E1303C080E00E94800FFF91EF91BF91BF
:105C9000AF919F918F917F916F915F914F913F91C4
:105CA0002F910F900FBE0F901F90189504D06894FD
:105CB000B1118DC0089570D088F09F5790F0B92F22
:105CC0009927B751A0F0D1F0660F771F881F991F51
:105CD0001AF0BA95C9F712C0B13081F077D0B1E0AF
:105CE000089574C0672F782F8827B85F39F0B93FBF
:105CF000CCF3869577956795B395D9F73EF4909553
:105D00008095709561957F4F8F4F9F4F0895E894D0
:105D100009C097FB3EF490958095709561957F4FF3
:105D20008F4F9F4F9923A9F0F92F96E9BB279395A1
:105D3000F695879577956795B795F111F8CFFAF4B1
:105D4000BB0F11F460FF1BC06F5F7F4F8F4F9F4FE2
:105D500016C0882311F096E911C0772321F09EE840
:105D6000872F762F05C0662371F096E8862F70E0A6
:105D700060E02AF09A95660F771F881FDAF7880F80
:105D80009695879597F9089557FD9058440F551F9C
:105D900059F05F3F71F04795880F97FB991F61F0AD
:105DA0009F3F79F087950895121613061406551F24
:105DB000F2CF4695F1DF08C0161617061806991F90
:105DC000F1CF86957105610508940895E894BB2785
:105DD00066277727CB0197F908950BD078C069D053
:105DE00028F06ED018F0952309F05AC05FC0112436
:105DF000EECFCADFA0F3959FD1F3950F50E0551F6A
:105E0000629FF001729FBB27F00DB11D639FAA270F
:105E1000F00DB11DAA1F649F6627B00DA11D661F5E
:105E2000829F2227B00DA11D621F739FB00DA11D7F
:105E3000621F839FA00D611D221F749F3327A00D39
:105E4000611D231F849F600D211D822F762F6A2FD5
:105E500011249F5750408AF0E1F088234AF0EE0F5A
:105E6000FF1FBB1F661F771F881F91505040A9F767
:105E70009E3F510570F014C0AACF5F3FECF3983EEF
:105E8000DCF3869577956795B795F795E7959F5FCE
:105E9000C1F7FE2B880F911D9695879597F9089568
:105EA00097F99F6780E870E060E008959FEF80ECCD
:105EB000089500240A941616170618060906089570
:105EC00000240A9412161306140605060895092ED6
:105ED0000394000C11F4882352F0BB0F40F4BF2B45
:105EE00011F460FF04C06F5F7F4F8F4F9F4F089585
:105EF000991B79E004C0991F961708F0961B881F1C
:105F00007A95C9F78095089597FB072E16F40094AB
:105F100007D077FD09D00E949E2F07FC05D03EF4E4
:105F2000909581959F4F0895709561957F4F089545
:105F3000EE0FFF1F0590F491E02D0994AA1BBB1BE7
:105F400051E107C0AA1FBB1FA617B70710F0A61B79
:105F5000B70B881F991F5A95A9F780959095BC019A
:105F6000CD010895F999FECF92BD81BDF89A992788
:105F700080B50895A8E1B0E042E050E00C94D52F40
:105F8000262FF999FECF1FBA92BD81BD20BD0FB655
:105F9000F894FA9AF99A0FBE019608950E94C02FBC
:105FA000272F0C94C12FDC01CB01FC01F999FECF06
:105FB00006C0F2BDE1BDF89A319600B40D92415091
:0A5FC0005040B8F70895F894FFCFA1
:105FCA002002810F72104F101B10E80F0101C5014A
:105FDA0028080A03140A3F4D362039E50998096250
:105FEA0009420909097C089508AE08C708E70801AB
:0A5FFA000203040506070809000071
:00000001FF

@ -0,0 +1,1187 @@
:100000000C94B5040C94FC040C94FC040C94FC04B7
:100010000C94FC040C94FC040C94FC040C94FC0460
:100020000C94FC040C94FC040C94240E0C94F60E1A
:100030000C94FC040C94FC040C94FC040C94FC0440
:100040000C94FC040C941A230C94FC040C94FC04F3
:100050000C94FC040C94AC1C0C94FC040C94FC0458
:100060000C94FC040C94FC040C94FC040C94FC0410
:100070000C94FC040C94FC040C94FC040C94FC0400
:100080000C94FC040C94FC040C94FC040C94FC04F0
:100090000C94FC040C94FC040C94FC040C94FC04E0
:1000A0000C94FC040C94FC040C94FC04630F850F6A
:1000B0007810850F7810CA0FED0F78104210551088
:1000C0003F133F136E136E13B113EB13F815F815AE
:1000D0000414F815F914F914CC15F815F815E315EE
:1000E000751901620262016202620035002B00E1B3
:1000F00000E100E00000001E00140004001D0002EA
:10010000304E001F001A0016001B00E300E1002023
:1001100000080007000600AE002C002100150009B1
:1001200000190065744B00220017000A000500004A
:100130000029744C002A0000002800000008544CDC
:10014000002A00000028000000500023001C000BC3
:1001500000110000004F00240018000D001000E600
:1001600000520025000C000E0036002D002C002649
:100170000012000F0037004A00E50027001300338B
:100180000038002E00510030002F00347231724DC3
:1001900071000035002B00E100E100E00000001ECE
:1001A0000034000400330002304E001F00360012FD
:1001B000001400E300E1002000370008000D00AE4D
:1001C000002C002100130018000E0065744B002263
:1001D000001C000C001B00000029744C002A0000C9
:1001E000002800000008544C002A000000280000ED
:1001F000005000230009000700050000004F002404
:10020000000A000B001000E600520025000600174F
:10021000001A002F002C0026001500110019004ABA
:1002200000E50027000F0016001D00300051002ED1
:100230000038002D7231724D710000000000000086
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1003000000000000000000000000000000000000ED
:1003100000000000000000000000000000000000DD
:1003200000000000000000000000000000000000CD
:1003300000000000000000000000000000000000BD
:1003400000000000000000000000000000000000AD
:10035000000000000000000000000000000000009D
:10036000000000000000000000000000000000008D
:10037000000000000000000000000000000000007D
:10038000000000000000000000000000000000006D
:10039000000000000000000000000000000000005D
:1003A000000000000000000000000000000000004D
:1003B000000000000000000000000000000000003D
:1003C000000000000000000000000000000000002D
:1003D000000000000000000000000000000000001D
:1003E000000000000000000000000000000000000D
:1003F00000000000000000000000000000000000FD
:1004000000000000000000000000000000000000EC
:1004100000000000000000000000000000000000DC
:1004200000000000000000000000000000000000CC
:1004300000000000000000000000000000000000BC
:1004400000000000000000000000000000000000AC
:10045000000000000000000000000000000000009C
:10046000000000000000000000000000000000008C
:10047000000000000000000000000000000000007C
:10048000000000000000000000000000000000006C
:10049000000000000000000000000000000000005C
:1004A000000000000000000000000000000000004C
:1004B000000000000000000000000000000000003C
:1004C000000000000000000000000000000000002C
:1004D000000000000000000000000000000000001C
:1004E000000000000000000000000000000000000C
:1004F00000000000000000000000000000000000FC
:1005000000000000000000000000000000000000EB
:1005100000000000000000000000000000000000DB
:1005200000000000000000000000000000000000CB
:1005300000000000000000000000000000000000BB
:1005400000000000000000000000000000000000AB
:10055000000000000000000000000000000000009B
:10056000000000000000000000000000000000008B
:10057000000000000000000000000000000000007B
:10058000000000000000000000000000000000006B
:10059000000000000000000000000000000000005B
:1005A000000000000000000000000000000000004B
:1005B000000000000000000000000000000000003B
:1005C000000000000000000000000000000000002B
:1005D000000000000000000000000000000000001B
:1005E000000000000000000000000000000000000B
:1005F00000000000000000000000000000000000FB
:1006000000000000000000000000000000000000EA
:1006100000000000000000000000000000000000DA
:1006200000000000000000000000000100010001C7
:10063000000100010000003A003F004400010001F9
:100640000001003B00400045000100010001003CAA
:1006500000410001000100010001003D00420001D5
:10066000000100010001003E004300010001000004
:100670000001000100010000000100000001000174
:1006800000010000005000000053003F0001005234
:100690000051000000390040004A004D004F0001A9
:1006A0000001002B005F005C005900620001005453
:1006B0000060005D005A0001300100550061005EDD
:1006C000005B0063000100560057005700580058B7
:1006D00071000001000100010001000100000001A3
:1006E0000001000100010001000100010001000102
:1006F000004C020100010001000100B200490101AB
:1007000000A80001000100B1004902010001000140
:10071000000100B500A800000001004900A9000088
:1007200000AA0000000100490001000000010000D3
:10073000000100B00001000100010000000100A55F
:10074000000100010001000100AC00A60001000151
:1007500000010001000100A70001000100010001EB
:1007600000010046000100010001000100AB00474C
:10077000004800010001000100000016034500725E
:100780000067006F0044006F007800200045005AA9
:1007900000000016034500720067006F0044006F00
:1007A000007800200045005A0000000403090409F5
:1007B000026D00040100A0FA090400000103010118
:1007C00000092111010001223F00070581030800F3
:1007D0000A090401000103010200092111010001BD
:1007E000224D000705820308000A090402000103E4
:1007F00000000009211101000122360007058303D2
:1008000008000A0904030001030000000921110186
:1008100000012239000705840310000112011001B4
:1008200000000008EDFE07130100010200010501B0
:100830000906A101050719E029E71500250195081A
:1008400075018102050819012905950575019102B7
:1008500095017503910105071900297715002501F8
:10086000957875018102C005010980A101850216F4
:10087000010026B7001A01002AB700751095018102
:1008800000C0050C0901A1018503160100269C0288
:100890001A01002A9C02751095018100C00501090A
:1008A00002A1010901A10005091901290515002569
:1008B0000195057501810295017503810105010905
:1008C0003009311581257F95027508810609381593
:1008D00081257F950175088106050C0A380215816E
:1008E000257F950175088106C0C005010906A10193
:1008F000050719E029E71500250195087501810212
:1009000095017508810105081901290595057501ED
:1009100091029501750391010507190029FF150042
:1009200025FF950675088100C0000000000000004A
:1009300000000000010204060A0F17202C3A4A5D4D
:1009400071879DB3C7DAE9F5FCFFFCF5E9DAC7B3B7
:100950009D87715D4A3A2C20170F0A060402010098
:100960000000000000000000000011241FBECFEFB7
:10097000DAE0DEBFCDBF04B603FE27C08091ED01F3
:100980009091EE01A091EF01B091F0018730904B72
:10099000A740B04BD1F41092ED011092EE011092ED
:1009A000EF011092F00114BE84B7877F84BF0FB6A9
:1009B000F894A895809160008861809360001092FF
:1009C00060000FBEE0E0FFE3099511E0A0E0B1E0B8
:1009D000E6EDF9E402C005900D92A433B107D9F712
:1009E00021E0A4E3B1E001C01D92AD3EB207E1F702
:1009F0000E946B0B0C94E9240C940000613049F0C8
:100A0000623059F488E00E94941A89E00E94941A96
:100A100004C0FC018281811103C080E090E0089550
:100A200080EE90E00895089556985E9825982D9848
:100A300026982E9827982F988091B1019091B20115
:100A4000A091B301B091B40190FF02C0259A2D9AF4
:100A50008091B5019091B601A091B701B091B80114
:100A60000297A105B10511F4269A2E9A0E94B110A1
:100A700081FF02C0279A2F9A08950C941405569866
:100A80005E9825982D9826982E9827982F988FEF66
:100A900090E0909389008093880090938B008093DE
:100AA0008A0090938D0080938C00259A2D9A2FEFC9
:100AB00080E792E0215080409040E1F700C00000C4
:100AC000269A2E9A2FEF80E792E0215080409040A6
:100AD000E1F700C00000279A2F9A2FEF80E792E0FD
:100AE000215080409040E1F700C0000025982D98EB
:100AF0002FEF80E792E0215080409040E1F700C066
:100B0000000026982E982FEF80E792E02150804039
:100B10009040E1F700C0000027982F9856985E9803
:100B200025982D9826982E9827982F98089589EA29
:100B30008093800089E08093810024982C983F98CE
:100B40008AB18F748AB96E98479A8BB1806B8BB9D2
:100B5000769A0E943F050C94130580E28093000171
:100B60008091340181110EC00E94FC0581E08093C8
:100B700034012FEF83ED90E3215080409040E1F766
:100B800000C0000080E40E940206809300018111F1
:100B90002EC00E942C0680930001811128C00E9463
:100BA0002C0680930001811122C08FE30E942C0645
:100BB0008093000181111BC00E94240680E40E94E2
:100BC000020680930001811112C08CE00E942C0665
:100BD0008093000181110BC00E942C0680930001BC
:100BE000811105C08FE30E942C06809300010E94B2
:100BF00024068091000108951092B9008AE0809344
:100C0000B800089594EA9093BC009091BC0097FFBF
:100C1000FCCF9091B900987F983021F0903111F07D
:100C200081E008958093BB0084E88093BC008091AC
:100C3000BC0087FFFCCF8091B900887F883111F01C
:100C4000803471F780E0089584E98093BC0080913E
:100C5000BC0084FDFCCF08958093BB0084E88093A2
:100C6000BC008091BC0087FFFCCF9091B900987FB9
:100C700081E0983209F480E0089584E88093BC0014
:100C80008091BC0087FFFCCF8091BB0008958091CC
:100C90000001811115C080E40E94020680930001CA
:100CA00081110CC082E10E942C0680930001811109
:100CB00005C08FEF0E942C06809300010E9424063D
:100CC00084B1807F84B985B1807F85B98AB1837F03
:100CD0008AB98BB1837F8BB93E98469808950E945C
:100CE000AD05809300010E94470680B38C7080BBE5
:100CF00081B3836F81BBE4E4F1E0A6E3B1E011923C
:100D00001D9281E0E235F807D1F70C9497059F9288
:100D1000AF92BF92CF92DF92EF92FF920F931F9309
:100D2000CF93DF9380910001882379F08091350182
:100D30008F5F80933501811108C00E94AD058093BB
:100D40000001811102C00E943F0586E3E82E81E088
:100D5000F82E8701C0E0D0E0BB24B39492E0A92E26
:100D6000CC24C394D12CC730D10500F5809100016B
:100D7000811164C080E40E94020680930001811109
:100D800012C082E10E942C068093000181110BC0E9
:100D9000C6010C2E01C0880F0A94EAF780950E94C4
:100DA0002C06809300010E94240648C0CA30A1F09E
:100DB00028F4C83059F0C93061F005C0CC3089F052
:100DC00070F0CD3089F0209A289810C0219A299887
:100DD0000DC0229A2A980AC0239A2B9807C0529ACB
:100DE00001C0539A5B9802C03E9A4698E0EAEA95A1
:100DF000F1F78FB181708B25799902C032E001C083
:100E000030E0832B7C9902C034E001C030E0832BBA
:100E10007D9902C028E001C020E0822B7E9902C0AB
:100E200090E101C090E0892B9FB19095991F99277F
:100E3000991F9295990F907E892B0FC08091000188
:100E400081114AC080E40E94020680930001882339
:100E500081F1912C0E942406892DD8019C9198172C
:100E600019F08C93A09201010E94470621960F5F12
:100E70001F4FCE30D10509F076CF80910101882334
:100E800069F1815080930101882339F0EFE9FFE097
:100E90003197F1F700C0000021C0E4E4F1E0D70190
:100EA0008D917D018193B4E4EB16B1E0FB06B9F7B7
:100EB00015C083E10E942C06809300018111C9CFE7
:100EC00081E40E940206809300018111C2CF0E943A
:100ED0003D06982E9094BECF80E0BFCF0E943D0586
:100EE00081E0DF91CF911F910F91FF90EF90DF9004
:100EF000CF90BF90AF909F900895E82FF0E0EC5B0B
:100F0000FE4F8081089508958B3B910580F4883AC7
:100F1000910548F5853A9105D8F48430910508F09B
:100F2000B2C0019709F06EC081E090E00895803E64
:100F3000910508F467C0883E910508F4A4C09C019F
:100F4000205F31092031310508F05CC090650895BB
:100F5000853A910509F459C0863A910509F058C0BF
:100F600082E890E40895883A910509F454C0893ADA
:100F7000910509F453C08A3A910509F452C08B3A9D
:100F8000910509F451C08C3A910509F450C08D3A8D
:100F9000910509F44FC0803B910509F44EC08E3A8B
:100FA000910509F44DC08F3A910509F44CC0813B7D
:100FB000910509F44BC0823B910509F44AC0833B7B
:100FC000910509F449C0843B910509F448C0853B6B
:100FD000910509F447C0863B910509F446C0873B5B
:100FE000910509F445C0883B910509F444C0893B4B
:100FF000910509F443C08A3B910509F442C080E0A1
:1010000094E4089580E090E0089581E890E40895E4
:1010100083E890E4089582EE94E4089589EE94E4E0
:1010200008958AEE94E4089585EB94E4089586EBA0
:1010300094E4089587EB94E408958CEC94E4089587
:101040008DEC94E4089583E895E408958AE895E4A6
:10105000089582E995E4089584E995E4089581E28C
:1010600096E4089583E296E4089584E296E4089570
:1010700085E296E4089586E296E4089587E296E490
:1010800008958AE296E40895089524E5829FC001B8
:101090001124FC0126E0729FE00DF11D1124E60FE2
:1010A000F11DEE0FFF1FE551FF4F859194910895BB
:1010B000880F991FFC01E559F0408591949108959E
:1010C000880F991FFC01E551FF4F85919491089578
:1010D00024E5829FC0011124FC0146E0749FE00DCD
:1010E000F11D1124E60FF11DEE0FFF1FE551FF4F1B
:1010F000859194919C013A9521154FE1340708F4AC
:1011000025C13F512115304120F49F700E94600895
:1011100008959C0130532115304118F49927906CA3
:101120000895811520E5920769F40E941A164FEF81
:1011300084E39CE0415080409040E1F700C0000013
:101140000C94D11C813020E5920731F48091CC01C0
:1011500081608093CC0108959C0130552115304168
:1011600008F05CC0292F33272F7033272130310539
:10117000E9F4AC0164E0440F551F6A95E1F7442798
:101180005370BC016370772702C0220F331F6A952A
:10119000E2F73C68242B352B73E0880F991F7A9572
:1011A000E1F780769927822B932B08952230310521
:1011B00029F4982F8827816F906A0895233031058C
:1011C000A1F4AC0133E0440F551F3A95E1F7407E9E
:1011D00057708370992721E030E002C0220F331F3F
:1011E0008A95E2F7C9019C6816C02430310531F5B3
:1011F000AC0123E0440F551F2A95E1F7407E57705C
:101200008370992721E030E002C0220F331F8A95B6
:10121000E2F7C9019A68842B952B08959C013057F9
:101220002115304118F49F70906208959C01305848
:101230002115304118F49F70906A0895803E910501
:10124000E0F4803C910558F58133910509F46FC0B5
:1012500048F48932910509F463C08A32910509F492
:101260006DC072C089339105E9F082389105D1F0E3
:101270008533910509F44DC067C0833E910581F126
:1012800038F4803E9105B9F0823E9105D9F05CC0FA
:10129000863E910561F1873E9105A1F155C00E94FE
:1012A000580808952091DE0120FD02C021FF4CC0A6
:1012B00080EE90E049C08091DE0180FFF9CF89E3A4
:1012C00090E042C08091DE0182FF0EC08091DE017D
:1012D00084FF03C080E090E037C083EE90E034C02C
:1012E0008091DE0182FFF2CF82EE90E02DC08091EE
:1012F000DE0183FF0BC08091DE0184FDEBCF87EE22
:1013000090E022C08091DE0183FFF5CF86EE90E071
:101310001BC08091DE0185FF07C089E290E014C008
:101320008091DE0185FFF9CF85E390E00DC08091CB
:10133000DE0186FF07C08AE290E006C08091DE01F0
:1013400086FFF9CF81E390E00E9484070895089515
:10135000809162010895CF93DF9300D01F92CDB7A3
:10136000DEB79C018091E401843019F593E0998304
:101370003B832A839093E9008FEF9091E80081509E
:1013800095FD06C095ED9A95F1F700008111F5CF16
:101390008091E80085FF0DC040E050E063E070E020
:1013A000CE0101960E94180C8091E8008E77809300
:1013B000E8000F900F900F90DF91CF910895CF9399
:1013C000DF9300D01F92CDB7DEB72091E401243027
:1013D00021F522E029839B838A8383E08093E900BF
:1013E0008FEF9091E800815095FD06C095ED9A959C
:1013F000F1F700008111F5CF8091E80085FF0DC065
:1014000040E050E063E070E0CE0101960E94180CCD
:101410008091E8008E778093E8000F900F900F90F6
:10142000DF91CF9108959C018091E4018430F9F41B
:1014300082E08093E9009FEF8091E800915085FD64
:1014400006C085ED8A95F1F700009111F5CF8091E6
:10145000E80085FF0CC040E050E065E070E0C901A5
:101460000E94180C8091E8008E778093E800089520
:10147000CF93DF93EC018091E401843009F046C002
:1014800090910C019923D9F090910D019923B9F015
:101490008093E9008FEF9091E800815095FD06C0A0
:1014A00095E19A95F1F700008111F5CF8091E80060
:1014B00085FF2CC040E050E060E170E017C081E0A3
:1014C0008093E9008FEF9091E800815095FD06C070
:1014D00095ED9A95F1F700008111F5CF8091E80024
:1014E00085FF14C040E050E068E070E0CE010E944B
:1014F000180C8091E8008E778093E80080E1FE016F
:10150000A2E5B1E001900D928A95E1F7DF91CF91CC
:1015100008958091E301811109C00E94A90D0E94E4
:10152000060E8091E20084608093E200089510929C
:10153000E301089508950C9407230E94671C0E94FC
:101540000D230E94B1100C94A70942E061EC81E0E8
:101550000E94220D42E061EC82E00E94220D42E0F6
:1015600061EC83E00E94220D42E161EC84E00C9486
:10157000220D8091E601833009F455C030F48130AA
:1015800071F0823009F48EC008958A3009F47AC06F
:101590008B3009F460C0893009F09CC020C0809174
:1015A000E501813A09F096C08091E800877F809339
:1015B000E8008091E9019091EA01892B21F460E132
:1015C00082E591E003C060E080E090E070E00E947E
:1015D000630C8091E8008B778093E80008958091F8
:1015E000E501813209F076C08091E9019091EA012C
:1015F000009719F0039709F06DC08091E800877F8C
:101600008093E8008091E80082FD05C08091E401AC
:101610008111F8CF5FC08091F100809362018091C9
:10162000E8008B7753C08091E501813A09F052C000
:101630008091E9019091EA01892B09F04BC08091DA
:10164000E800877F8093E8008091E80080FFFCCF6E
:1016500080910C0136C08091E5018132D9F58091ED
:10166000E9019091EA01892BA9F58091E800877F33
:101670008093E8000E94570D8091E70180930C0150
:101680000C941A168091E501813221F58091E800D1
:10169000877F8093E8000E94570D8091E801809336
:1016A000630108958091E501813AA1F48091E800F9
:1016B000877F8093E8008091E80080FFFCCF8091D5
:1016C00063018093F1008091E8008E778093E800B9
:1016D0000C94570D089584B7877F84BF0FB6F89494
:1016E000A8958091600088618093600010926000EE
:1016F0000FBE90E080E80FB6F8948093610090935D
:1017000061000FBE0E9400110E94A90D0E94060EEA
:101710008091E20084608093E20078940E949110AE
:101720000E94021182E091E00E94AC100E94F5221A
:101730008091E401853069F40E94291C8091E201C6
:101740008823B1F30E94531C882391F30E94020C5A
:10175000EFCF0E940811ECCF292F3327233031051A
:10176000C9F060F42130310581F02230310509F0F3
:1017700041C08DE690E02FEA37E040C021323105CC
:10178000E1F02232310531F135C082E190E02CE107
:1017900038E034C099278130910549F028F002974C
:1017A00049F5EBE7F7E005C0EBEAF7E002C0E3E953
:1017B000F7E0849190E09F0121C06430D8F4E62FD7
:1017C000F0E0EE0FFF1FEE5DFE4F2081318189E0DA
:1017D00090E014C0643070F470E0FB01EE0FFF1F66
:1017E000E65EFE4F20813181FB01EA5EFE4F808183
:1017F00090E004C080E090E020E030E0FA01318326
:101800002083089580E189BD82E189BD09B400FE8D
:10181000FDCF8091D8008F7D8093D8008091E0002B
:1018200082608093E0008091E00081FDFCCF08950C
:10183000CF92DF92EF92FF920F931F93CF93DF939C
:10184000EC018B016A010E94760D811133C0C11435
:10185000D10439F0F60180819181081B190BC80F62
:10186000D91FE12CF12C0115110519F18091E80027
:1018700085FD16C08091E8008E778093E800C11442
:10188000D10449F0F60180819181E80EF91EF182C0
:10189000E08285E00FC00E94760D882321F30AC004
:1018A00089918093F10001501109FFEFEF1AFF0AAF
:1018B000DACF80E0DF91CF911F910F91FF90EF90F1
:1018C000DF90CF9008952091EB013091EC01261725
:1018D000370748F06115710539F42091E8002E773B
:1018E0002093E80001C0B901FC0120E061157105F9
:1018F00079F18091E4018823F1F18530F1F1809153
:10190000E80083FD3CC08091E80082FD2EC08091FC
:10191000E80080FFEBCF2091F3008091F20090E08F
:10192000922B6115710551F08830910538F42191A1
:101930002093F100615071090196F3CF21E00897DF
:1019400009F020E08091E8008E778093E800CECF08
:101950002111CFCF0AC08091E401882361F0853046
:1019600061F08091E80083FD0AC08091E80082FF69
:10197000F2CF80E0089582E0089583E0089581E049
:1019800008952091EB013091EC012617370748F0BC
:101990006115710539F42091E8002E772093E80055
:1019A00001C0B901FC0120E06115710591F1809140
:1019B000E401882309F440C0853009F43FC08091D8
:1019C000E80083FD3DC08091E80082FD2FC080913A
:1019D000E80080FFE9CF2091F3008091F20090E0D1
:1019E000922B6115710559F08830910540F42491CE
:1019F0002093F1003196615071090196F2CF21E0F8
:101A0000089709F020E08091E8008E778093E80045
:101A1000CBCF2111CCCF0AC08091E401882361F0A3
:101A2000853061F08091E80083FD0AC08091E80074
:101A300082FFF2CF80E0089582E0089583E0089568
:101A400081E00895982F973068F59093E9009817F2
:101A500039F07091EC002091ED005091F00003C03E
:101A6000242F762F50E021FD02C09F5FECCF3091F4
:101A7000EB003E7F3093EB003091ED003D7F3093E3
:101A8000ED003091EB0031603093EB007093EC008F
:101A90002093ED005093F0002091EE0027FDE5CF5C
:101AA00080E008958F708093E90081E0089580912F
:101AB000E50187FF11C08091E80082FD05C080919B
:101AC000E4018111F8CF11C08091E8008B770BC041
:101AD0008091E401882349F08091E80080FFF8CFED
:101AE0008091E8008E778093E80008952091E400CB
:101AF0003091E50095E64091EC00842F817040FF25
:101B000023C08091E80080FD1DC08091E4018823FE
:101B100099F0853099F08091EB0085FD11C04091DE
:101B2000E4005091E5002417350729F3915011F096
:101B30009A01E1CF84E0089582E0089583E008955A
:101B400081E0089580E008954091E80042FFDDCFF4
:101B500008950E94170E0E941F0EE0EEF0E08081B3
:101B600081608083E8EDF0E080818F77808319BC0D
:101B7000A7EDB0E08C918E7F8C9380818F7E8083E7
:101B80001092E30108950F931F93CF93DF930E9468
:101B9000170E0E941F0EC8EDD0E088818F778883D2
:101BA00088818068888388818F7D888319BC1092A2
:101BB000E4011092E0011092E2011092E10100EEC6
:101BC00010E0F80180818B7F808388818160888329
:101BD00042E060E080E00E94220DE1EEF0E08081D2
:101BE0008E7F8083E2EEF0E080818160808380815F
:101BF00088608083F80180818E7F80838881806106
:101C00008883DF91CF911F910F910895E8EDF0E067
:101C100080818F7E8083E7EDF0E08081816080832A
:101C200084E082BF81E08093E3010C94C30DE8ED72
:101C3000F0E080818E7F80831092E2000895109200
:101C4000DA001092E10008951F920F920FB60F92E2
:101C500011242F933F934F935F936F937F938F93B1
:101C60009F93AF93BF93EF93FF938091E10082FF27
:101C70000BC08091E20082FF07C08091E1008B7F62
:101C80008093E1000E9490108091DA0080FF1FC0D5
:101C90008091D80080FF1BC08091DA008E7F8093F6
:101CA000DA008091D90080FF0DC080E189BD82E11A
:101CB00089BD09B400FEFDCF81E08093E4010E945C
:101CC000890A05C019BC1092E4010E94970A80910C
:101CD000E10080FF19C08091E20080FF15C0809173
:101CE000E2008E7F8093E2008091E2008061809329
:101CF000E2008091D80080628093D80019BC85E012
:101D00008093E4010E949B0A8091E10084FF30C02F
:101D10008091E20084FF2CC080E189BD82E189BD11
:101D200009B400FEFDCF8091D8008F7D8093D8004C
:101D30008091E1008F7E8093E1008091E2008F7EB0
:101D40008093E2008091E20081608093E2008091C4
:101D5000E001882311F084E007C08091E30087FD53
:101D600002C081E001C083E08093E4010E949D0AEB
:101D70008091E10083FF29C08091E20083FF25C0AC
:101D80008091E100877F8093E10082E08093E4010D
:101D90001092E0018091E1008E7F8093E1008091BC
:101DA000E2008E7F8093E2008091E2008061809368
:101DB000E20042E060E080E00E94220D8091F000AD
:101DC00088608093F0000E949A0AFF91EF91BF9182
:101DD000AF919F918F917F916F915F914F913F91C3
:101DE0002F910F900FBE0F901F9018951F920F927A
:101DF0000FB60F9211242F933F934F935F936F93DE
:101E00007F938F939F93AF93BF93CF93DF93EF9382
:101E1000FF93C091E900CF708091EC00D82FD17072
:101E200080FDD0E81092E9008091F000877F8093D8
:101E3000F00078940E943A0F1092E9008091F0002F
:101E400088608093F000CD2BCF70C093E900FF91A4
:101E5000EF91DF91CF91BF91AF919F918F917F9142
:101E60006F915F914F913F912F910F900FBE0F9007
:101E70001F9018951F93CF93DF93CDB7DEB7AA9726
:101E80000FB6F894DEBF0FBECDBFE5EEF1E0809156
:101E9000F100819321E0ED3EF207C9F70E94B90AF3
:101EA0008091E80083FF24C18091E5019091E601D3
:101EB000492F50E04A30510508F01AC1FA01EA5A98
:101EC000FF4F0C949E24803881F0823809F010C1B5
:101ED0008091E9018F708093E9008091EB0085FB90
:101EE000882780F91092E90006C08091E101909165
:101EF000E201911182609091E800977F9093E80051
:101F00008093F1001092F100C8C0282F2D7F09F0B6
:101F1000EFC0882319F0823061F0EAC08091E701B8
:101F2000813009F0E5C0933009F080E08093E20150
:101F30002BC08091E701811127C08091E9018F704A
:101F400009F4D6C08093E9002091EB0020FF1CC06B
:101F5000933021F48091EB00806214C09091EB00EB
:101F600090619093EB0021E030E0A90102C0440FA2
:101F7000551F8A95E2F74093EA001092EA0080919B
:101F8000EB0088608093EB001092E9008091E800FC
:101F9000877F86C08111ACC01091E7011F778091C7
:101FA000E3008078812B8093E3008091E800877FB5
:101FB0008093E8000E94570D8091E80080FFFCCFDD
:101FC0008091E30080688093E300111102C082E0F9
:101FD00001C083E08093E4018BC08058823008F018
:101FE00087C08091E7019091E8018C3D53E095070F
:101FF00079F583E08A838AE289834FB7F894DE011A
:10200000139620E03EE051E2E32FF0E050935700BA
:10201000E49120FF03C0E295EF703F5FEF708E2FD9
:1020200090E0EA3010F0C79601C0C0968D939D9362
:102030002F5F243149F74FBF8091E800877F80935D
:10204000E8006AE270E0CE0101960E94630C14C0C1
:10205000AE014F5F5F4F6091E9010E94AC0BBC0184
:10206000892B09F445C09091E800977F9093E80090
:1020700089819A810E94C10C8091E8008B778093BE
:10208000E80036C08038A1F58091E800877F809312
:10209000E8008091E0018093F1008091E8008E7764
:1020A0008093E8000E94570D23C0811121C08091C8
:1020B000E7019091E80199270297D4F48091E80014
:1020C000877F8093E8008091E7018093E0010E9480
:1020D000570D8091E001811106C08091E30087FDDA
:1020E00002C081E001C084E08093E4010E94A50A5F
:1020F0008091E80083FF0AC08091E800877F809389
:10210000E8008091EB0080628093EB00AA960FB606
:10211000F894DEBF0FBECDBFDF91CF911F91089520
:102120000895CF938091E4018823A1F0C091E90044
:10213000CF709091EC00892F817090FD80E8C82BC2
:102140001092E9008091E80083FD0E943A0FCF7061
:10215000C093E900CF91089590936901809368013D
:102160000895E0916801F0916901309721F00190A4
:10217000F081E02D099480E00895E0916801F091EC
:102180006901309721F00280F381E02D09940895D0
:10219000E0916801F0916901309721F00480F581A8
:1021A000E02D099408952091660130916701281768
:1021B000390771F09093670180936601E09168019F
:1021C000F0916901309721F00680F781E02D0994A4
:1021D000089520916401309165012817390771F045
:1021E0009093650180936401E0916801F091690129
:1021F000309721F00084F185E02D09940895089529
:102200000C94FF100E946D1C0E946F060C94331DED
:10221000CF92DF92EF92FF920F931F93CF93DF93B2
:10222000CDB7DEB72B970FB6F894DEBF0FBECDBF8C
:102230000E9487068BE6C82E81E0D82E00E010E0D1
:10224000E02E802F0E947D07F60141916F01F82E4C
:10225000F426B1F40F5F1F4F0E30110589F78FEF91
:1022600089838A831B820E94761C8160782F9D83DC
:102270008C8349815A816B818D810E94AB1140C052
:102280009091CC0191FF04C08B870E9483078B85BE
:1022900020E030E04F2D50E0922FBA01022E02C014
:1022A000759567950A94E2F760FF24C02E83EF824C
:1022B00021E030E0690102C0CC0CDD1C9A95E2F708
:1022C00090E08C219D21892B09F420E028870E9431
:1022D000761C8160782F9A8789874E815F81688517
:1022E0008A850E94AB11F801E559FE4F8081C8260E
:1022F000C08206C02F5F3F4F2630310569F6AACF56
:102300000E941A200E94B11090916A018917A1F0D1
:102310000E94B11080936A012B960FB6F894DEBF2D
:102320000FBECDBFDF91CF911F910F91FF90EF9026
:10233000DF90CF900C94A7092B960FB6F894DEBFD0
:102340000FBECDBFDF91CF911F910F91FF90EF9006
:10235000DF90CF900895CF93DF93CDB7DEB72B9763
:102360000FB6F894DEBF0FBECDBF4F835887698785
:102370007A878B87DE01119686E0FD0111928A959E
:10238000E9F785E0FE01379601900D928A95E1F715
:1023900049815A816B817C818D819E810E94AE181A
:1023A0002B960FB6F894DEBF0FBECDBFDF91CF9155
:1023B0000895CF93C82F882309F4C1C0823859F4F7
:1023C0000E94B11081FDBBC089E30E944B1B0E949B
:1023D000031C89E30CC0833879F40E94B11080FD9E
:1023E000AEC083E50E944B1B0E94031C83E50E9444
:1023F0008A1BCF910C94031C843859F40E94B110AD
:1024000082FD9DC087E40E944B1B0E94031C87E451
:10241000EECF8CEF8C0F813A48F48C2F0E945A2219
:1024200081118DC08C2F0E944B1BE3CF80E28C0F5B
:10243000883048F4C77081E001C0880FCA95EAF778
:102440000E94CC1BD6CF8BE58C0F833078F4C53A35
:1024500029F0C63A31F083E890E005C081E890E0C9
:1024600002C082E890E0CF910C94D31088E58C0FE5
:10247000833108F064C0C83A39F1C93A41F1CA3A27
:1024800049F1CB3A51F1CC3A59F1CD3A61F1C03B27
:1024900069F1CE3A71F1CF3A79F1C13B81F1C23B9A
:1024A00089F1C33B91F1C43B99F1C53BA1F1C63B16
:1024B000A9F1C73BB1F1C83BB9F1C93BC1F1CA3B76
:1024C000C9F180E090E038C082EE90E035C089EE3E
:1024D00090E032C08AEE90E02FC085EB90E02CC0F7
:1024E00086EB90E029C087EB90E026C08CEC90E072
:1024F00023C08DEC90E020C083E891E01DC08AE805
:1025000091E01AC082E991E017C084E991E014C01B
:1025100081E292E011C083E292E00EC084E292E098
:102520000BC085E292E008C086E292E005C087E237
:1025300092E002C08AE292E0CF910C94E910CF9130
:102540000895882309F44BC0823859F40E94B110D1
:1025500081FF45C089E30E944B1B0E94031C89E355
:102560000CC0833871F40E94B11080FF38C083E53D
:102570000E944B1B0E94031C83E50E948A1B0C9443
:10258000031C843859F40E94B11082FF28C087E4EC
:102590000E944B1B0E94031C87E4EFCF9CEF980F17
:1025A000913A58F390E2980F983050F4877091E088
:1025B00001C0990F8A95EAF7892F0E94D21BDFCFBD
:1025C0009BE5980F933020F480E090E00C94D310BA
:1025D000885A833120F480E090E00C94E91008954B
:1025E000882321F00E94CC1B0C94031C089588239F
:1025F00021F00E94D21B0C94031C0895BF92CF922D
:10260000DF92EF92FF920F931F93CF93DF9300D04F
:1026100000D000D0CDB7DEB77C0185E0F701DE0148
:10262000119601900D928A95E1F7F70183819481CB
:10263000892B09F4DDC2908181818F3F19F49F3F7E
:1026400009F4D6C2F7010281258122952F70998362
:102650008A8389819A812E830E940A1B182FB92EA2
:102660000E94091B0E94D019EB2DE295EF704E2FAE
:1026700050E0FA01E05AFF4F2E810C949E248B2DDE
:10268000807F9B2D9F70F92E882319F0F29480EFA4
:10269000F822002349F0FF2009F457C28F2D0E9431
:1026A000DC1B0E94031C51C2812F0E94A112FF203B
:1026B00009F49EC28F2D0E94E21B26960FB6F89455
:1026C000DEBF0FBECDBFDF91CF911F910F91FF9065
:1026D000EF90DF90CF90BF900C94031C3B2D307F88
:1026E0008B2D8F70303211F08295807F112319F07D
:1026F000113021F12CC00023B9F0222309F490C13C
:10270000213009F08DC126960FB6F894DEBF0FBEBA
:10271000CDBFDF91CF911F910F91FF90EF90DF9090
:10272000CF90BF900C94EC1B222319F0213009F4B8
:102730005FC28E830E94EF1B8E8186C1002321F031
:10274000223008F055C26CC1211152C27DC1002354
:1027500021F0222309F464C1F8C1222309F474C1D1
:1027600009C28B2D86958695837019F08130D1F042
:102770003FC2002321F0812F9B2D937002C080E087
:1027800090E026960FB6F894DEBF0FBECDBFDF9166
:10279000CF911F910F91FF90EF90DF90CF90BF905E
:1027A0000C94D310002321F0812F9B2D937002C035
:1027B00080E090E026960FB6F894DEBF0FBECDBF46
:1027C000DF91CF911F910F91FF90EF90DF90CF900D
:1027D000BF900C94E910812F002319F00E94221F52
:1027E00002C00E948A1F26960FB6F894DEBF0FBE65
:1027F000CDBFDF91CF911F910F91FF90EF90DF90B0
:10280000CF90BF900C940F208B2D837009F075C072
:102810000111EEC1812F829586958770880F880FF0
:10282000912F9F70C92ED12CE12CF12C082E04C0C1
:10283000CC0CDD1CEE1CFF1C0A94D2F714FF12C056
:102840000FE010E020E030E004C0000F111F221F55
:10285000331F8A95D2F7C901B801609570958095AC
:10286000909503C060E070E0CB014B2D46954695F6
:1028700043704230C1F060F56C297D298E299F2973
:10288000413051F126960FB6F894DEBF0FBECDBF92
:10289000DF91CF911F910F91FF90EF90DF90CF903C
:1028A000BF900C94F7196C297D298E299F292696B3
:1028B0000FB6F894DEBF0FBECDBFDF91CF911F9151
:1028C0000F91FF90EF90DF90CF90BF900C94131A70
:1028D0000E94F719C701B60126960FB6F894DEBF1D
:1028E0000FBECDBFDF91CF911F910F91FF90EF9061
:1028F000DF90CF90BF900C94DB19002319F08B2D43
:10290000817001C08695882309F472C1812F829558
:1029100086958770880F880F912F9F70C92ED12CB4
:10292000E12CF12C082E04C0CC0CDD1CEE1CFF1C8D
:102930000A94D2F714FF12C00FE010E020E030E05C
:1029400004C0000F111F221F331F8A95D2F7C9013F
:10295000B801609570958095909503C060E070E037
:10296000CB014B2D4695469543704230C1F060F542
:102970006C297D298E299F29413051F126960FB669
:10298000F894DEBF0FBECDBFDF91CF911F910F91A5
:10299000FF90EF90DF90CF90BF900C94D11A6C29EC
:1029A0007D298E299F2926960FB6F894DEBF0FBE8B
:1029B000CDBFDF91CF911F910F91FF90EF90DF90EE
:1029C000CF90BF900C94ED1A0E94D11AC701B601A6
:1029D00026960FB6F894DEBF0FBECDBFDF91CF9124
:1029E0001F910F91FF90EF90DF90CF90BF900C94CC
:1029F000B51A103FD1F118F4103E50F4A1C0123FA7
:102A000009F463C008F44CC0133F09F473C098C0C4
:102A10001F708B2D8F710023A1F00E944E1A812F01
:102A200026960FB6F894DEBF0FBECDBFDF91CF91D3
:102A30001F910F91FF90EF90DF90CF90BF900C947B
:102A4000F0120E946F1A812F26960FB6F894DEBFFF
:102A50000FBECDBFDF91CF911F910F91FF90EF90EF
:102A6000DF90CF90BF900C94F7120023A9F02111B2
:102A7000BFC08B2D8F7126960FB6F894DEBF0FBEA8
:102A8000CDBFDF91CF911F910F91FF90EF90DF901D
:102A9000CF90BF900C94941A223008F0A9C0E9CFCF
:102AA0000023A9F08B2D8F7126960FB6F894DEBF08
:102AB0000FBECDBFDF91CF911F910F91FF90EF908F
:102AC000DF90CF90BF900C944E1A002359F38B2DBA
:102AD0008F7126960FB6F894DEBF0FBECDBFDF9183
:102AE000CF911F910F91FF90EF90DF90CF90BF900B
:102AF0000C946F1A002399F08B2D8F7126960FB6C8
:102B0000F894DEBF0FBECDBFDF91CF911F910F9123
:102B1000FF90EF90DF90CF90BF900C94391A2696DB
:102B20000FB6F894DEBF0FBECDBFDF91CF911F91DE
:102B30000F91FF90EF90DF90CF90BF900C942F1AE1
:102B40000023A9F0222309F4ADCF812F26960FB6DA
:102B5000F894DEBF0FBECDBFDF91CF911F910F91D3
:102B6000FF90EF90DF90CF90BF900C94D91122236B
:102B700009F4ADCF812F26960FB6F894DEBF0FBEB5
:102B8000CDBFDF91CF911F910F91FF90EF90DF901C
:102B9000CF90BF900C94A1124B2D4F70612FC701A5
:102BA0000E94FE0426960FB6F894DEBF0FBECDBF7E
:102BB000DF91CF911F910F91FF90EF90DF90CF9019
:102BC000BF900C9453194B2D4F70612FC70126965F
:102BD0000FB6F894DEBF0FBECDBFDF91CF911F912E
:102BE0000F91FF90EF90DF90CF90BF900C9444082E
:102BF00026960FB6F894DEBF0FBECDBFDF91CF9102
:102C00001F910F91FF90EF90DF90CF90BF900895AC
:102C10000E94E91B0E94BE1B0E94031C0E94BF2051
:102C20000E940F2080E090E00E94D31080E090E0AE
:102C30000C94E9100E94D91B0C9408160E940A1BE0
:102C4000292F22952F702C3030F42A3048F422504E
:102C5000223078F405C02C3041F02F3031F009C01B
:102C6000803E48F0803F29F406C093FB882780F916
:102C7000089580E0089581E00895CF93DF9300D018
:102C800000D01F92CDB7DEB70F900F900F900F902E
:102C90000F90DF91CF910895CF93DF9300D000D0B4
:102CA00000D0CDB7DEB726960FB6F894DEBF0FBEC4
:102CB000CDBFDF91CF9108951F93CF93DF93C09144
:102CC000790116E080917A01C81799F0D0E01C9F35
:102CD000F0011D9FF00D1124E558FE4F40815181F8
:102CE00062817381848195810E944C162196C77000
:102CF000E9CFDF91CF911F9108954091AB015091A1
:102D0000AC016091AD017091AE018091AF019091E5
:102D1000B0010C944C168091B00182958F7009F02F
:102D200054C08091AD01882309F44FC0809179018E
:102D3000A0917A014091AE015091AF016091AB0139
:102D40007091AC01B6E08A1709F43FC090E04115DC
:102D50005105C1F17F3F11F46F3FA1F1B89FF00120
:102D6000B99FF00D1124E558FE4F218127132AC089
:102D70002081261327C02281211124C02381348180
:102D80002417350710F421503109241B350B283C3A
:102D90003105C0F42091B0012F7020612093B00163
:102DA00026E0289FF001299FF00D1124E058FE4FE6
:102DB00080818F70806180838BEA91E00E94FE1297
:102DC0000C945C1601968770BECF0895CF92DF9267
:102DD000EF92FF920F931F93CF93DF93CDB7DEB7A0
:102DE00062970FB6F894DEBF0FBECDBF8C0185E0B1
:102DF000F801DE011D9601900D928A95E1F7D80148
:102E00004C9111965C91119712966C918091AE0144
:102E10009091AF01009709F475C13091AB017091A9
:102E2000AC017F3F19F43F3F09F46CC1F801C38046
:102E3000D480E090AD01EE2009F4BEC02091B00135
:102E4000C816D90628F0D601A81BB90BCD0104C0BD
:102E5000809590958C0D9D1DFF24F394883C9105E1
:102E600078F0F12C207F09F0C4C07C2DD98AC88A63
:102E700089890E943D168BEA91E00E94FE12AFC044
:102E8000822F807F09F045C0571313C0431311C030
:102E900061110FC02F7020612093B0010E947D1638
:102EA0008BEA91E00E94FE128091B001F8018583C7
:102EB0002EC0CD2819F15F3F11F44F3FF9F0F62EE7
:102EC00061111CC08091790120917A0136E082174E
:102ED00009F45BC090E0389FF001399FF00D112498
:102EE000E558FE4F7181571306C07081471303C028
:102EF0007281711103C001968770E9CFF62E6623A7
:102F000009F41CC18091B00181608093B001F12C63
:102F100015C1571309C0431307C0611105C0809143
:102F2000B001F8018583C8C04D875E878D859E8579
:102F30006A8B0E941E166A898823D1F16623C1F12B
:102F40002091B001822F82958F7090E0029774F0EB
:102F50008091AB019091AC0198878F831986DB86B5
:102F6000CA862C87CE0107960E94FE1286E0F801E1
:102F7000ABEAB1E001900D928A95E1F70E948B16C1
:102F80000E947D16FF24F394D9C04D875E878D85FE
:102F90009E850E940A1B292F22952F70223008F04F
:102FA000C1C09F7009F0BBC0805E883008F4C6C005
:102FB000C8010E94FE12E6CFC816D90608F453C015
:102FC000F601E81BF90BCF01883C910508F450C0CD
:102FD000F12C7C2DD98AC88A89890E943D16EBEA9A
:102FE000F1E086E0DF011D928A95E9F70E947D16E7
:102FF000A5C0571314C0431312C0611110C08091B3
:10300000B001F8018583C8010E94FE1286E0EBEA58
:10301000F1E0DF011D928A95E9F7FE2C8FC04D8704
:103020005E878D859E856A8B0E941E166A8988231D
:1030300009F4BECF662309F4BBCF2091B001822FE3
:1030400082958F7090E002970CF490CF8091AB0145
:103050009091AC019A8389831B82DD82CC822E837E
:10306000CE01019681CF809590958C0D9D1DACCFA2
:10307000F62E662309F49CCF571333C0431331C097
:103080002091B00120FD24C0822F82958F70482F9F
:1030900050E041155105E1F0D80115962C93159794
:1030A0004F30510549F08F5F982F9295907F822F76
:1030B0008F70892B15968C93C8010E94FE1286E0B2
:1030C000F801ABEAB1E001900D928A95E1F78ECF5D
:1030D00086E0F801ABEAB1E001900D928A95E1F744
:1030E0002DC04D875E878D859E850E941E1681119D
:1030F0003DCF8091B00181608093B001C8010E94F2
:10310000FE121CC0662309F453CF4D875E878D8560
:103110009E850E941E16882309F44ACF27CF81116D
:1031200043CF0CC0243008F043CF9F7009F43CCF4C
:10313000D80115969C91907F09F036CF8F2D62961D
:103140000FB6F894DEBF0FBECDBFDF91CF911F91B8
:103150000F91FF90EF90DF90CF9008951F93CF9342
:10316000DF93CDB7DEB72C970FB6F894DEBF0FBE56
:10317000CDBF4F83588769877A878B879C87CE011D
:1031800007960E94E616882371F08A859B85892B15
:1031900009F441C088858F3F09F065C08F818F3F5A
:1031A00009F061C038C086E0FE013796DE01119655
:1031B00001900D928A95E1F76A857B85611571050D
:1031C00051F1FF81E885EF3F11F4FF3F21F120919C
:1031D0007A0130E0C9010196877099274091790101
:1031E00050E08417950709F447C0F983EA837D838B
:1031F0006C8396E0929FD001939FB00D1124A55847
:10320000BE4FFE01319601900D929A95E1F78093A1
:103210007A010E945C1616E08091790190917A0102
:103220008917B9F1189FC001112485589E4F0E943B
:10323000E616882371F1E09179011E9FF0011124B7
:10324000E558FE4F4081518162817381848195816F
:103250000E944C168091790190E001968770992721
:1032600080937901D9CF4F81588569857A858B857F
:103270009C850E944C16CFCF0E941A1610927A019C
:1032800010927901EBEAF1E086E0DF011D928A9568
:10329000E9F72C960FB6F894DEBF0FBECDBFDF91D5
:1032A000CF911F910895EF92FF920F931F93CF93A9
:1032B000DF938C01892B09F46CC0F12CEE24E3948C
:1032C000E8012196F8018491843740F4843008F0B5
:1032D00051C0813081F0823019F15BC0853709F42B
:1032E00044C0A8F19CE7980F903708F052C08F7740
:1032F0000E94A11241C00E5F1F4FFE01849190E217
:10330000980F983050F48770FE2D01C0FF0F8A95FA
:10331000EAF78F2F0E94DC1B14C00E94D9112DC028
:103320000E5F1F4FFE01849190E2980F983060F479
:103330008770FE2D01C0FF0F8A95EAF78F2F0E943C
:10334000E21B0E94031C19C00E94A11216C00E5F4E
:103350001F4FFE01C491CC2381F08FE99FE00197BC
:10336000F1F700C00000C150F6CF0E5F1F4FFE0105
:10337000F49003C00E94D9118E018F2D882309F487
:103380009FCFEFE9FFE03197F1F700C000008150D7
:10339000F5CFDF91CF911F910F91FF90EF9008959E
:1033A00008956093B5017093B6018093B70190932F
:1033B000B8010C9408160F931F930091B50110915A
:1033C000B6012091B7013091B801DC01CB01802B0F
:1033D000912BA22BB32B8093B5019093B601A093B0
:1033E000B701B093B8011F910F910C9408160F9379
:1033F0001F930091B5011091B6012091B701309152
:10340000B801DC01CB0180239123A223B323809355
:10341000B5019093B601A093B701B093B8011F9185
:103420000F910C9408160F931F930091B501109102
:10343000B6012091B7013091B801DC01CB018027A2
:103440009127A227B3278093B5019093B601A0934B
:10345000B701B093B8011F910F910C940816109208
:10346000B1011092B2011092B3011092B4010C9408
:10347000081641E050E060E070E004C0440F551FC2
:10348000661F771F8A95D2F74093B1015093B2011E
:103490006093B3017093B4010C94081641E050E0BE
:1034A00060E070E004C0440F551F661F771F8A95C7
:1034B000D2F78091B1019091B201A091B301B09186
:1034C000B401482B592B6A2B7B2B4093B1015093AD
:1034D000B2016093B3017093B4010C94081641E0FB
:1034E00050E060E070E004C0440F551F661F771F76
:1034F0008A95D2F740955095609570958091B1016D
:103500009091B201A091B301B091B4014823592325
:103510006A237B234093B1015093B2016093B301BE
:103520007093B4010C94081641E050E060E070E044
:1035300004C0440F551F661F771F8A95D2F78091EC
:10354000B1019091B201A091B301B091B4014827AB
:1035500059276A277B274093B1015093B2016093AA
:10356000B3017093B4010C9408160F931F9300914C
:10357000B1011091B2012091B3013091B401DC018D
:10358000CB01802B912BA22BB32B8093B101909375
:10359000B201A093B301B093B4011F910F910C94A9
:1035A00008160F931F930091B1011091B201209161
:1035B000B3013091B401DC01CB0180239123A2231C
:1035C000B3238093B1019093B201A093B301B09360
:1035D000B4011F910F910C9408160F931F93009143
:1035E000B1011091B2012091B3013091B401DC011D
:1035F000CB0180279127A227B3278093B101909315
:10360000B201A093B301B093B4011F910F910C9438
:1036100008160895CF92DF92EF92FF920F931F93B7
:10362000CF93DF938C01C090B101D090B201E090B4
:10363000B301F090B4018091B5019091B601A091D1
:10364000B701B091B801C82AD92AEA2AFB2ACFE1EA
:10365000D0E0D701C6010C2E04C0B695A79597956A
:1036600087950A94D2F780FF07C0B8018C2F0E947B
:1036700068088130910531F4219758F7B80180E04E
:103680000E946808DF91CF911F910F91FF90EF90FA
:10369000DF90CF90089590910C019923F1F09091D3
:1036A0000D019923D1F0982F9695969596959F3078
:1036B00080F5E0910E01F0910F01E90FF11D877087
:1036C00021E030E0A90102C0440F551F8A95E2F7BE
:1036D000CA019181892B8183089520910E01309137
:1036E0000F01F90132969FEF40E05191851789F063
:1036F0009F3F19F4511101C0942F4F5F4E30A9F72D
:103700009F3F39F0F901E90FF11D97FDFA9582838A
:103710000895089590910C019923F9F090910D016D
:103720009923D9F0982F9695969596959F3028F5E0
:10373000E0910E01F0910F01E90FF11D877021E07A
:1037400030E0A90102C0440F551F8A95E2F7CA0173
:103750008095918189238183089520910E01309174
:103760000F01F9013296205F3F4F9081891301C00C
:1037700010823196E217F307C1F7089581E090E0D7
:10378000E0910E01F0910F01E80FF91F10820196F0
:1037900080319105A9F708959091CB01892B8093F1
:1037A000CB01089580959091CB0189238093CB0123
:1037B00008951092CB0108959091CA01892B8093AE
:1037C000CA01089580959091CA0189238093CA0106
:1037D00008951092CA0108958093B9010895109236
:1037E000B901089580910E0190910F01FC0131966D
:1037F0009C01205F3F4F80E0919191118F5FE21714
:10380000F307D1F70895E0910E01F0910F01809137
:10381000CB018083E0910E01F0910F0190818091A6
:10382000CA01892B80838091B901882361F0E091DE
:103830000E01F0910F019081892B80830E94F21B71
:1038400081111092B90180910E0190910F010C9499
:10385000BD108091E401843011F120E488E190E012
:103860000FB6F894A895809360000FBE2093600077
:1038700083B7817F846083BF83B7816083BF78947F
:10388000889583B78E7F83BF0FB6F894A8958091F3
:103890006000886180936000109260000FBE089500
:1038A00008950C94501CCF930E94511C0E948706CF
:1038B0000E94501CC0E08C2F0E947D07811104C023
:1038C000CF5FCE30C1F701C081E0CF9108950E9453
:1038D0001A160E94B1100C94A70982E084BD93E0EF
:1038E00095BD9AEF97BD80936E0008952FB7F89419
:1038F0008091CD019091CE01A091CF01B091D001E6
:103900002FBF0895CF92DF92EF92FF920F931F93F4
:103910002FB7F8944091CD015091CE016091CF0125
:103920007091D0012FBF6A017B01EE24FF248C012E
:1039300020E030E0C016D106E206F30610F4415054
:1039400051099A01281B390BC9011F910F91FF9052
:10395000EF90DF90CF9008951F920F920FB60F92C5
:1039600011248F939F93AF93BF938091CD0190913A
:10397000CE01A091CF01B091D0010196A11DB11D42
:103980008093CD019093CE01A093CF01B093D0014D
:10399000BF91AF919F918F910F900FBE0F901F908D
:1039A00018950E94A90DF8942FEF87EA91E621500F
:1039B00080409040E1F700C0000087E090EBDC0120
:1039C0008093ED019093EE01A093EF01B093F0018D
:1039D0009CE088E10FB6F894A895809360000FBE34
:1039E00090936000FFCFEF92FF920F931F93CF93BE
:1039F000DF93D82FC0E08C2F0E947D0700E010E0FD
:103A0000E82EF12CC701002E02C0959587950A94E7
:103A1000E2F780FD06C00F5F1F4F0630110591F7DA
:103A200009C0602F7C2F80E00E9445088D13F3CFE2
:103A300081E004C0CF5FCE30F1F680E0DF91CF911E
:103A40001F910F91FF90EF900895CF93C82F8CE2B4
:103A50000E94F31C882321F08C2FCF910C94F31C2F
:103A600080E0CF910895CF930E947A1E811102C009
:103A70000E94601EC5E6C15049F00E9487068FE390
:103A80009CE90197F1F700C00000F5CF89E20E94A0
:103A9000251D811113C18AE20E94251D81110E94FA
:103AA000601E85E00E94251D81110E94D11C0E948C
:103AB000851E8093CC0187E00E94251D8823A9F1F3
:103AC0008BE10E94251D882351F08091CC0181FB60
:103AD000222720F991E0922790FB81F90EC08EE019
:103AE0000E94251D882361F08091CC0182FB222752
:103AF00020F991E0922790FB82F98093CC0115C0C8
:103B000080E10E94251D9091CC01882341F093FB18
:103B1000222720F981E0822780FB93F904C0892FB6
:103B2000809580FB90F99093CC018091CC010E940C
:103B3000891E0E94971E8093DE0180EE0E94251D43
:103B4000882341F08091DE01982F909590FB80F9B9
:103B50008093DE0189E30E94251D882359F080911E
:103B6000DE0181FB222720F991E0922790FB81F969
:103B70008093DE0182EE0E94251D882359F08091FA
:103B8000DE0182FB222720F991E0922790FB82F947
:103B90008093DE0186EE0E94251D882359F08091D6
:103BA000DE0183FB222720F991E0922790FB83F925
:103BB0008093DE0183EE0E94251D882359F08091B9
:103BC000DE0184FB222720F991E0922790FB84F903
:103BD0008093DE0185E30E94251D882359F08091A2
:103BE000DE0185FB222720F991E0922790FB85F9E1
:103BF0008093DE0181E30E94251D882359F0809186
:103C0000DE0186FB222720F991E0922790FB86F9BE
:103C10008093DE0181E10E94251D882359F0809167
:103C2000DE0187FB222720F991E0922790FB87F99C
:103C30008093DE018091DE010E949B1E8091DE0157
:103C400087FB882780F980930D0187E20E94251D5C
:103C5000C82F8EE10E94251D8111C2608FE10E9454
:103C6000251D8111C46080E20E94251D8111C8605C
:103C700081E20E94251D8111C06182E20E94251D02
:103C80008111C06283E20E94251D8111C06484E21B
:103C90000E94251D882311F0C06802C0CC2329F0A2
:103CA0008C2F0E94921E6C2F03C00E948E1E682FC4
:103CB00070E080E090E0CF910C94D119CF910895FD
:103CC0006DEE7EEF80E090E00E94D42460E082E020
:103CD00090E00E94C62460E083E090E00E94C62449
:103CE00060E084E090E00E94C62460E085E090E01F
:103CF0000C94C62480E090E00E94C02421E08D3E18
:103D00009E4F09F020E0822F089582E090E00C940D
:103D1000B824682F82E090E00C94C62483E090E001
:103D20000C94B824682F83E090E00C94C62484E0BF
:103D300090E00C94B824682F84E090E00C94C624A2
:103D40008091D30180FF0BC06091130185E0689FD3
:103D5000B001112475956795759567952BC081FF06
:103D600009C06091130185E0689FB0011124759529
:103D7000679520C082FF07C06091130185E0689FAE
:103D8000B001112417C09091D4019923D1F0609112
:103D90001201961788F72091130185E0289F900162
:103DA0001124929FA001939F500D112470E0CA012D
:103DB0000E948A246038710540F46115710519F478
:103DC00006C065E070E0862F08958FE7089581E0D2
:103DD00008958091D30180FF08C06091110170E0C7
:103DE000759567957595679521C081FF06C06091AF
:103DF000110170E07595679519C082FF04C060914C
:103E0000110170E010C09091D401992399F0609154
:103E100010019617A0F780911101899FC00111240C
:103E200070E00E948A246038710540F461157105C4
:103E300019F406C061E070E0862F08958FE70895B9
:103E400081E00895803F21F40E94A01E819504C066
:103E5000813F29F40E94A01E8093D7010895823FDC
:103E600021F40E94A01E819504C0833F29F40E9482
:103E7000A01E8093D6010895893F19F40E94E91E7F
:103E800005C08A3F31F40E94E91E81958093D801D4
:103E900008958B3F21F40E94E91E819504C08C3F58
:103EA00029F40E94E91E8093D9010895843F21F4EA
:103EB0008091D501816017C0853F21F48091D501A3
:103EC000826011C0863F21F48091D50184600BC0CF
:103ED000873F21F48091D501886005C0883F31F487
:103EE0008091D50180618093D50108958D3F21F4A3
:103EF0008091D30181600BC08E3F21F48091D3016A
:103F0000826005C08F3F29F48091D3018460809343
:103F1000D3010895803F39F48091D70187FF6CC0A9
:103F20001092D70169C0813F29F48091D7011816FA
:103F3000BCF362C09091D601823F29F497FF5CC028
:103F40001092D60159C0833F19F41916CCF354C00E
:103F5000893F41F48091D80118160CF04DC01092A1
:103F6000D8014AC08A3F29F48091D80187FF44C014
:103F7000F6CF8B3F39F48091D90187FF3DC0109275
:103F8000D9013AC08C3F29F48091D9011816BCF3AD
:103F900033C0843F21F48091D5018E7F17C0853FC7
:103FA00021F48091D5018D7F11C0863F21F480914D
:103FB000D5018B7F0BC0873F21F48091D501877F8E
:103FC00005C0883F31F48091D5018F7E8093D50163
:103FD00013C08D3F21F48091D3018E7F0BC08E3FA3
:103FE00021F48091D3018D7F05C08F3F29F480910A
:103FF000D3018B7F8093D3018091D60181110EC0B4
:104000008091D70181110AC08091D801811106C029
:104010008091D901811102C01092D401089585EDDB
:1040200091E00E94C8100E94761C9093D201809368
:10403000D10108951F93CF93DF938091D101909187
:10404000D2010E94821CAC019091D401992321F0ED
:104050002091140130E006C0209115018AE0289FCC
:10406000900111244217530708F485C08091D601AE
:10407000C091D701D091D8011091D901811107C009
:10408000C11175C0D11173C0111171C074C09F3FAF
:1040900019F09F5F9093D401181624F40E94A01E7B
:1040A0008093D6018091D60187FF05C00E94A01E93
:1040B00081958093D6011C1624F40E94A01E809343
:1040C000D7018091D70187FF05C00E94A01E81956E
:1040D0008093D7016091D601662331F1C091D70159
:1040E000CC2311F1062E000C770B880B990B0E9444
:1040F000912323E333E343E35FE30E94F5230E942C
:1041000059236093D6016C2FCC0F770B880B990B3A
:104110000E94912323E333E343E35FE30E94F5230B
:104120000E9459236093D7011D1624F40E94E91EB2
:104130008093D8018091D80187FF05C00E94E91EB5
:1041400081958093D801111624F40E94E91E809372
:10415000D9018091D90187FF05C00E94E91E819590
:104160008093D901DF91CF911F910C940F209F3F35
:1041700009F08FCFA0CFDF91CF911F910895E5ED8A
:10418000F1E085E0DF011D928A95E9F71092D401F4
:104190001092D3010895833081F128F4813059F0D1
:1041A0008230D1F00895853009F449C0B8F18630E5
:1041B00009F456C0089580911501262F30E0280F8C
:1041C000311D2F3F310524F4680F609315010895C8
:1041D0008FEF80931501089580911401262F30E010
:1041E000280F311D2F3F310524F4680F609314010F
:1041F00008958FEF80931401089580911301262F65
:1042000030E0280F311D2F3F310524F4680F6093F3
:10421000130108958FEF8093130108958091120187
:10422000262F30E0280F311D2F3F310524F4680F71
:104230006093120108958FEF809312010895809189
:104240001101262F30E0280F311D2F3F310524F4B6
:10425000680F6093110108958FEF80931101089505
:1042600080911001262F30E0280F311D2F3F31059E
:1042700024F4680F6093100108958FEF809310016C
:104280000895833011F128F4813049F0823091F0A3
:104290000895853081F120F18630C1F10895809133
:1042A0001501681720F4861B80931501089510925C
:1042B0001501089580911401681720F4861B8093DE
:1042C0001401089510921401089580911301681744
:1042D00020F4861B80931301089510921301089512
:1042E00080911201681720F4861B809312010895B3
:1042F00010921201089580911101681720F4861B15
:104300008093110108951092110108958091100178
:10431000681720F4861B80931001089510921001F5
:1043200008950F931F938D3109F46BC008F03FC0BF
:104330008E3009F47DC0C0F4873009F46EC068F493
:10434000863009F0AFC08091CC01817F8E7F809351
:10435000CC0181E08093DB01A6C0883009F458C00D
:104360008B3009F49BC09EC0863109F497C078F465
:10437000803109F470C0813109F094C00E941A168E
:1043800090910D0181E0892780930D0187C08931CB
:1043900009F484C08B3109F085C08091CC0181FB88
:1043A000222720F991E0922790FB81F94AC08533BA
:1043B00009F45BC048F4873209F457C008F45AC0C6
:1043C000893209F452C06EC0833438F48A3308F05D
:1043D00067C0883309F462C065C0833409F445C0FE
:1043E000883409F05FC00E941A160FEF13ED20E326
:1043F000015010402040E1F700C000000E94D11C95
:104400004DC00E9413230E94B1100E94A70946C00C
:104410000E94851E0E94971E41C09091CC01892F59
:10442000817090FF12C0917F9E7F9093CC013BC022
:104430008091CC0182FB222720F991E0922790FB0A
:1044400082F98093CC01992349F18091CC0181605C
:104450008093CC0123C08091CC0183FB222720F9DB
:1044600091E0922790FB83F9ECCF61E070E080E06F
:1044700090E010C08D5141E050E060E070E08A01B2
:104480009B0104C0000F111F221F331F8A95D2F712
:10449000C901B8010E94D1190E941A1681E003C017
:1044A0008953E9CF80E01F910F91089580E008952E
:1044B0000C945622CF93C82F8091DB01813079F084
:1044C00018F08230E9F187C0E0910E01F0910F0100
:1044D0008081813169F0823209F07FC009C0E091AA
:1044E0000E01F0910F018081813111F0823261F46F
:1044F0008C2F0E945822811104C08C2F0E94912180
:104500001DC081E090E01AC08C2F0E9456228111BC
:1045100014C0C43179F048F4CB3079F0C03109F0DF
:1045200060C082E08093DB0108C0C93219F0C83353
:1045300021F057C01092DB0154C081E0817053C05C
:10454000C93289F118F5C43171F1A8F4C73009F006
:1045500046C08AE08093150194E19093140193E0A2
:10456000909313018093120188E08093110188E2F7
:104570008093100134C0CE51C63088F5EC2FF0E0A6
:10458000E65DFE4F80818093DA0129C0CE34E9F0E8
:1045900020F4CB3421F56AE013C0C13579F0C2357F
:1045A000F1F461E00DC08091DA01882319F01092D6
:1045B000DA0115C081E08093DB0115C061E006C01F
:1045C0008091DA010E94CB200AC06AE08091DA0172
:1045D0000E94412104C01092DB0180E004C081E010
:1045E00002C080E0ABCFCF910895E1E8F0E0808198
:1045F000886080838081816080838FB7F89493E0A6
:104600009093890090ED909388008FBF0895EFE616
:10461000F0E08081826080830895EFE6F0E08081A1
:104620008D7F80830895EFE6F0E0908182E0892716
:10463000808308951F920F920FB60F9211242F932B
:104640003F934F935F936F937F938F939F93AF931A
:10465000BF93EF93FF938091DC019091DD01019670
:104660009093DD018093DC01811103C082E00E9400
:10467000A709E091DD01E695E695F0E0E75DF64FEC
:10468000E4918091DC018E1303C080E00E94A709B1
:10469000FF91EF91BF91AF919F918F917F916F911A
:1046A0005F914F913F912F910F900FBE0F901F90F0
:1046B00018950E9460236894B1110C94EF2308951B
:1046C0000E94D42388F09F5798F0B92F9927B751AB
:1046D000B0F0E1F0660F771F881F991F1AF0BA95A6
:1046E000C9F714C0B13091F00E94EE23B1E00895F3
:1046F0000C94EE23672F782F8827B85F39F0B93FE5
:10470000CCF3869577956795B395D9F73EF4909558
:104710008095709561957F4F8F4F9F4F0895E894D6
:1047200009C097FB3EF490958095709561957F4FF9
:104730008F4F9F4F9923A9F0F92F96E9BB279395A7
:10474000F695879577956795B795F111F8CFFAF4B7
:10475000BB0F11F460FF1BC06F5F7F4F8F4F9F4FE8
:1047600016C0882311F096E911C0772321F09EE846
:10477000872F762F05C0662371F096E8862F70E0AC
:1047800060E02AF09A95660F771F881FDAF7880F86
:104790009695879597F9089557FD9058440F551FA2
:1047A00059F05F3F71F04795880F97FB991F61F0B3
:1047B0009F3F79F087950895121613061406551F2A
:1047C000F2CF4695F1DF08C0161617061806991F96
:1047D000F1CF86957105610508940895E894BB278B
:1047E00066277727CB0197F908950E9408240C9437
:1047F00079240E946B2438F00E94722420F09523C3
:1048000011F00C9462240C94682411240C94EF236E
:104810000E94CC2370F3959FC1F3950F50E0551F74
:10482000629FF001729FBB27F00DB11D639FAA2705
:10483000F00DB11DAA1F649F6627B00DA11D661F54
:10484000829F2227B00DA11D621F739FB00DA11D75
:10485000621F839FA00D611D221F749F3327A00D2F
:10486000611D231F849F600D211D822F762F6A2FCB
:1048700011249F5750409AF0F1F088234AF0EE0F30
:10488000FF1FBB1F661F771F881F91505040A9F75D
:104890009E3F510580F00C9462240C94EF235F3FFF
:1048A000E4F3983ED4F3869577956795B795F79599
:1048B000E7959F5FC1F7FE2B880F911D9695879511
:1048C00097F9089597F99F6780E870E060E0089590
:1048D0009FEF80EC089500240A9416161706180618
:1048E0000906089500240A941216130614060506F4
:1048F0000895092E0394000C11F4882352F0BB0F85
:1049000040F4BF2B11F460FF04C06F5F7F4F8F4FE7
:104910009F4F089597FB072E16F4009407D077FD5C
:1049200009D00E94A42407FC05D03EF490958195FF
:104930009F4F0895709561957F4F0895EE0FFF1F6B
:104940000590F491E02D0994AA1BBB1B51E107C00F
:10495000AA1FBB1FA617B70710F0A61BB70B881F0F
:10496000991F5A95A9F780959095BC01CD0108959E
:10497000F999FECF92BD81BDF89A992780B5089527
:10498000A8E1B0E042E050E00C94DB24262FF99936
:10499000FECF1FBA92BD81BD20BD0FB6F894FA9A22
:1049A000F99A0FBE019608950E94C624272F0C94F1
:1049B000C724DC01CB01FC01F999FECF06C0F2BD92
:1049C000E1BDF89A319600B40D9241505040B8F7CD
:0649D0000895F894FFCFEA
:1049D6002002A809380A130ADF09AB090101BA0146
:1049E60028080A03140A3F4D3639EA089D08670865
:1049F6002E08C107DA07F3070C08010203040506AF
:044A06000708090094
:00000001FF

@ -155,12 +155,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

File diff suppressed because it is too large Load Diff

@ -337,12 +337,12 @@ 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) {
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);

@ -0,0 +1,9 @@
#!/bin/bash
#a quick tool to rebuild all the hex files for the keymaps in the ./keymaps/ directory
make clean
for f in ./keymaps/*
do
MAPNAME=$(echo "$f"|sed -r 's#^./keymaps/##')
make KEYMAP=$MAPNAME
mv ergodox_ez.hex "$f/$MAPNAME.hex"
done

@ -62,12 +62,12 @@ uint32_t matrix_scan_count;
__attribute__ ((weak))
void * matrix_init_kb(void) {
};
void matrix_init_kb(void) {
}
__attribute__ ((weak))
void * matrix_scan_kb(void) {
};
void matrix_scan_kb(void) {
}
inline
uint8_t matrix_rows(void)
@ -102,9 +102,7 @@ void matrix_init(void)
matrix_scan_count = 0;
#endif
if (matrix_init_kb) {
(*matrix_init_kb)();
}
matrix_init_kb();
}
@ -163,9 +161,7 @@ uint8_t matrix_scan(void)
}
if (matrix_scan_kb) {
(*matrix_scan_kb)();
}
matrix_scan_kb();
return 1;
}

@ -53,9 +53,9 @@ SRC = keymap_common.c \
led.c
ifdef KEYMAP
SRC := keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymap_poker.c $(SRC)
SRC := keymaps/poker.c $(SRC)
endif
CONFIG_H = config.h

@ -53,9 +53,9 @@ SRC = keymap_common.c \
led.c
ifdef KEYMAP
SRC := keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymap_poker.c $(SRC)
SRC := keymaps/poker.c $(SRC)
endif
CONFIG_H = config.h

@ -21,7 +21,7 @@ Use `make -f Makefile.pjrc` if you want to use PJRC stack but I find no reason t
## Keymap
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document(you can find in top README.md) and existent keymap files.
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document(you can find in top README.md) and existent keymap files.
To build firmware binary hex file with a certain keymap just do `make` with `KEYMAP` option like:
@ -29,8 +29,8 @@ To build firmware binary hex file with a certain keymap just do `make` with `KEY
### 1 Poker
[keymap_poker.c](keymap_poker.c) emulates original Poker layers
while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
[poker.c](keymaps/poker.c) emulates original Poker layers
while both [poker_bit.c](keymaps/poker_bit.c) and [poker_set.c](keymaps/poker_set.c) implement the same layout in different ways and they fix a minor issue of original Poker and enhance arrow keys.
Fn + Esc = `
Fn + {left, down, up, right} = {home, pgdown, pgup, end}
@ -63,7 +63,7 @@ while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](key
### 2. Plain
Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
See [keymap_plain.c](keymap_plain.c) for detail.
See [plain.c](keymaps/plain.c) for detail.
#### 1.0 Plain Default layer
,-----------------------------------------------------------.
@ -80,11 +80,11 @@ See [keymap_plain.c](keymap_plain.c) for detail.
### 3. Hasu
This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail.
This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [hasu.c](keymaps/hasu.c) for detail.
### 4. SpaceFN
This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [spacefn.c](keymaps/spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
#### 4.0 Default layer
,-----------------------------------------------------------.
@ -113,7 +113,7 @@ This layout proposed by spiceBar uses space bar to change layer with using Dual
### 5. HHKB
[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers.
[hhkb.c](keymaps/hhkb.c) emulates original HHKB layers.
#### 5.0: Default layer
,-----------------------------------------------------------.
|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `|

@ -129,17 +129,17 @@ NKRO_ENABLE = yes # USB Nkey Rollover
# Keymap file
#
ifdef KEYMAP
SRC := keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
ifdef HHKB_JP
SRC := keymap_jp.c $(SRC)
SRC := keymaps/jp.c $(SRC)
else
SRC := keymap_hhkb.c $(SRC)
SRC := keymaps/hhkb.c $(SRC)
endif
endif
ifneq (, $(or $(findstring keymap_jp.c, $(SRC)), $(findstring yes, $(HHKB_JP))))
ifneq (, $(or $(findstring jp.c, $(SRC)), $(findstring yes, $(HHKB_JP))))
OPT_DEFS += -DHHKB_JP
endif

@ -18,9 +18,9 @@ SRC = keymap_common.c \
led.c
ifdef KEYMAP
SRC := keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymap_hasu.c $(SRC)
SRC := keymaps/hasu.c $(SRC)
endif
CONFIG_H = config.h

@ -122,17 +122,17 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
# Keymap file
#
ifdef KEYMAP
SRC := keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/$(KEYMAP).c $(SRC)
else
ifdef HHKB_JP
SRC := keymap_jp.c $(SRC)
SRC := keymaps/jp.c $(SRC)
else
SRC := keymap_hhkb.c $(SRC)
SRC := keymaps/hhkb.c $(SRC)
endif
endif
ifneq (, $(or $(findstring keymap_jp.c, $(SRC)), $(findstring yes, $(HHKB_JP))))
ifneq (, $(or $(findstring jp.c, $(SRC)), $(findstring yes, $(HHKB_JP))))
OPT_DEFS += -DHHKB_JP
endif

@ -76,7 +76,7 @@ Use [Teensy Loader] if your controller is Teensy/Teensy++.
##Keymap
To define your own keymap create file named `keymap_<name>.c` and see [keymap document](../../doc/keymap.md) and existent keymap files.
To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
##Hardware

@ -54,9 +54,9 @@ SRC = hhkb_qmk.c \
matrix.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
SRC := keymaps/keymaps/default.c $(SRC)
endif
CONFIG_H = config.h

@ -171,10 +171,10 @@ Depending on which keymap you would like to use, you will have to compile slight
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__keymap\_\<name\>.c__** and are stored in the `keymaps` folder.
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

@ -1,16 +1,16 @@
#include "hhkb_qmk.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
@ -19,7 +19,7 @@ void * matrix_init_kb(void) {
}
};
void * matrix_scan_kb(void) {
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)

@ -24,7 +24,7 @@
{ K70, K71, K72, K73, K74, K75, K76, KC_NO } \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -54,9 +54,9 @@ SRC = jd45.c \
backlight.c
ifdef KEYMAP
SRC := keymaps/keymap_$(KEYMAP).c $(SRC)
SRC := keymaps/keymaps/(KEYMAP).c $(SRC)
else
SRC := keymaps/keymap_default.c $(SRC)
SRC := keymaps/keymaps/default.c $(SRC)
endif
CONFIG_H = config.h

@ -1,16 +1,16 @@
#include "jd45.h"
__attribute__ ((weak))
void * matrix_init_user(void) {
void matrix_init_user(void) {
};
__attribute__ ((weak))
void * matrix_scan_user(void) {
void matrix_scan_user(void) {
};
void * matrix_init_kb(void) {
void matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE
backlight_init_ports();
#endif
@ -20,7 +20,7 @@ void * matrix_init_kb(void) {
}
};
void * matrix_scan_kb(void) {
void matrix_scan_kb(void) {
if (matrix_scan_user) {
(*matrix_scan_user)();
}

@ -6,7 +6,7 @@
#include "backlight.h"
#include <stddef.h>
void * matrix_init_user(void);
void * matrix_scan_user(void);
void matrix_init_user(void);
void matrix_scan_user(void);
#endif

@ -0,0 +1,352 @@
#Planck Advanced (but not too advanced) `cygwin` Users Guide
If you are a user of the [cygwin environment](https://cygwin.com) in Windows and want the freedom to use the latest tools available, then this is the guide for you. If compiling your own copy of the latest and greatest Gnu C Compiler makes you super happy, then this is the guide for you. If the command line make you smile, then this is the guide for you.
This guide was written step by step as I went through the process on a `Windows 10` `x86_64` and a `Windows 7` `amd k10` based system. This should be generally applicable to to any `Windows` environment with `cygwin`.
#####Do not skip steps. Do not move past a step until the previous step finishes successfully.
Based on [avr-libc installation guide](http://www.nongnu.org/avr-libc/user-manual/install_tools.html)
##Get the Required Packages
Download the `cygwin` setup ([x86_64](https://cygwin.com/setup-x86_64.exe)) and install the default system plus the following if they are not already selected:
- devel/git
- devel/gcc-core
- devel/gcc-g++
- devel/flex
- devel/bison
- devel/make
- devel/texinfo
- devel/gettext-devel
- devel/automake
- devel/autoconfig
- devel/libtool
- text/gettext
- libs/libgcc1
- interpreters/m4
- web/wget
- archive/unzip
The following sources will be required:
- [gmp](https://gmplib.org/) (6.1.0)
- [mpfr](http://www.mpfr.org/) (3.1.4)
- [mpc](http://www.multiprecision.org/) (1.0.3)
- [binutils](https://www.sourceware.org/binutils/) (2.26)
- [gcc](https://gcc.gnu.org/) (5.3.0)
- [avr-libc](http://www.nongnu.org/avr-libc/) (2.0.0)
The `dfu-programmer` will be required to flash the new firmware
- [dfu-programmer](https://dfu-programmer.github.io/) (0.7.2)
The set of commands below will create a directory (`~/local/avr`) for the sources you compile to be installed on the machine and a directory (`~/src`) for these source files to be stored. The commands then download the sources of the needed packages and unpack them. Note: the expand commands are different depending on if the packages are offered as a `bz2` or `gz` archive
```
$ mkdir ~/local
$ mkdir ~/local/avr
$ mkdir ~/src
$ cd ~/src
$ wget https://gmplib.org/download/gmp/gmp-6.1.0.tar.bz2
$ wget http://www.mpfr.org/mpfr-3.1.4/mpfr-3.1.4.tar.bz2
$ wget ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.26.tar.gz
$ wget http://mirror0.babylon.network/gcc/releases/gcc-5.3.0/gcc-5.3.0.tar.gz
$ wget http://download.savannah.gnu.org/releases/avr-libc/avr-libc-2.0.0.tar.bz2
$ tar -xjf gmp-6.1.0.tar.bz2
$ tar -xjf mpfr-3.1.4.tar.bz2
$ tar -zxf mpc-1.0.3.tar.gz
$ tar -zxf binutils-2.26.tar.gz
$ tar -zxf gcc-5.3.0.tar.gz
$ tar -xjf avr-libc-2.0.0.tar.bz2
```
##Setup the Build Environment
These commands will set up the install directory and the `PATH` variable, which will allow you to access your installed packages. Note: if you close the `cygwin` terminal window, you will need to rerun these commands, they are not permanent.
```
$ PREFIX=$HOME/local/avr
$ export PREFIX
$ PATH=/usr/local/bin:/usr/local/lib:/usr/local/include:/bin:/lib:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS
$ PATH=$PATH:$PREFIX/bin:$PREFIX/lib
$ export PATH
```
##The `gcc` Required Math Library Packages
The following packages are required to be complied and installed in order to compile `gcc`. They are not sufficiently available through the `cygwin` package system, so we have to make them ourselves. They must be complied in this order because each one depends on the previous. Verfiy that for each package, `make check` returns all passing and no fails.
###Build and Install `gmp`
```
$ cd ~/src/gmp-6.1.0
$ ./configure --enable-static --disable-shared
$ make
$ make check
$ make install
```
###Build and Install `mpfr`
```
$ cd ~/src/mpfr-3.1.4
$ ./configure --with-gmp-build=../gmp-6.1.0 --enable-static --disable-shared
$ make
$ make check
$ make install
```
###Build and Install `mpc`
```
$ cd ~/src/mpc-1.0.3
$ ./configure --with-gmp=/usr/local --with-mpfr=/usr/local --enable-static --disable-shared
$ make
$ make check
$ make install
```
##OPTIONAL Part
You can build and install a brand new `gcc` or you can use the one supplied by `cygwin`. This will take about 4-5 hours to compile (It is a "native build", so it does the entire build **3 times**. This takes a long while).
###Build and Install `gcc` for Your Machine
```
$ cd ~/src/gcc-5.3.0
$ mkdir obj-local
$ cd obj-local
$ ../configure --enable-languages=c,c++ --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --enable-static --disable-shared
$ make
$ make install
```
##End OPTIONAL Part
###Build and Install `binutils` for Your Machine
```
$ cd ~/src/binutils-2.26
$ mkdir obj-local
$ cd obj-local
$ ../configure
$ make
$ make install
```
##Buliding `binutils`, `gcc`, and `avr-libc` for the AVR system
Now we can make the critical stuff for compiling our firmware: `binutils`, `gcc`, and `avr-libc` for the AVR architecture. These allow us to build and manipulate the firmware for the keyboard.
###Build `binutils` for AVR
If you plan to build and install `avr-gdb` also, use the `gdb` install at the end of this guide as it also builds the `binutils`
```
$ cd ~/src/binutils-2.26
$ mkdir obj-avr
$ cd obj-avr
$ ../configure --prefix=$PREFIX --target=avr --disable-nls
$ make
$ make install
```
###Build `gcc` for AVR
```
$ cd ~/src/gcc-5.3.0
$ mkdir obj-avr
$ cd obj-avr
$ ../configure --prefix=$PREFIX --target=avr --enable-languages=c,c++ --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --enable-static --disable-shared --disable-nls --disable-libssp --with-dwarf2
$ make
$ make install
```
###Build `avr-libc` for AVR
For building the `avr-libc`, we have to specify the host build system. In my case it is `x86_64-unknown-cygwin`. You can look for build system type in the `gcc` configure notes for the proper `--build` specification to pass when you configure `avr-libc`.
```
$ cd ~/src/avr-libc-2.0.0
$ ./configure --prefix=$PREFIX --build=x86_64-unknown-cygwin --host=avr
$ make
$ make install
```
##Building 'dfu-programmer' for flashing the firmware via USB and installing the drivers
We can either build our own, or use the precomplied binaries. The precompiled binaries don't play well with `cygwin` so it is better to build them ourselves. The procedure for the precompiled binaries is included at the end of this guide.
### Build and Install the `libusb`
The `dfu-programmer` requires `libusb` so that it can interact with the USB system. These repos must be bootstrapped in order to create an appropriate `./configure` and `Makefile` for your system.
```
$ cd ~/src
$ git clone https://github.com/libusb/libusb.git
$ cd libusb
$ ./bootstrap.sh
$ ./configure
$ make
$ make install
```
### Build and Install the `dfu-programmer`
```
$ cd ~/src
$ git clone https://github.com/dfu-programmer/dfu-programmer.git
$ cd dfu-programmer
$ ./bootstrap.sh
$ ./configure
$ make
$ make install
```
Verify the installation with:
```
$ which dfu-programmer
/usr/local/bin/dfu-programmer
$ dfu-programmer
dfu-programmer 0.7.2
https://github.com/dfu-programmer/dfu-programmer
Type 'dfu-programmer --help' for a list of commands
'dfu-programmer --targets' to list supported target devices
```
If you are not getting the above result, you will not be able to flash the firmware!
###Install the USB drivers
The drivers are included in the windows binary version of [`dfu-programmer` 0.7.2](http://iweb.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip).
```
$ cd ~/src
$ wget http://iweb.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip
$ unzip dfu-programmer-win-0.7.2.zip -d dfu-programmer-win-0.7.2
```
or
The official drivers are found in [Atmel's `FLIP` installer](http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe). Download and then install `FLIP`. Upon installation, the drivers will be found in `C:\Program Files (x86)\Atmel\Flip 3.4.7\usb`.
Then, from an **administrator-privileged** `Windows` terminal, run the following command (adjust the path for username, etc. as necessary) and accept the prompt that pops up:
```
C:\> pnputil -i -a C:\cygwin64\home\Kevin\src\dfu-programmer-win-0.7.2\dfu-prog-usb-1.2.2\atmel_usb_dfu.inf
or
C:\> pnputil -i -a "C:\Program Files (x86)\Atmel\Flip 3.4.7\usb\atmel_usb_dfu.inf"
```
This should be the result:
```
Microsoft PnP Utility
Processing inf : atmel_usb_dfu.inf
Successfully installed the driver on a device on the system.
Driver package added successfully.
Published name : oem104.inf
Total attempted: 1
Number successfully imported: 1
```
Alternatively, the `Windows` driver can be installed when prompted by `Windows` when the keyboard is attached. Do not let `Windows` search for a driver; specify the path to search for a driver and point it to the `atmel_usb_dfu.inf` file.
##Building and Flashing the Planck firmware!
If you did everything else right. This part should be a snap! Grab the latest sources from `github`, make the Plank firmware, then flash it.
###Build Planck and Load the Firmware
```
$ cd ~/src
$ git clone https://github.com/jackhumbert/qmk_firmware.git
$ cd qmk_firmware/keyboard/planck
$ make
```
Make sure there are no errors. You should end up with this or something similar:
```
Creating load file for Flash: planck.hex
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature planck.elf planck.hex
Creating load file for EEPROM: planck.eep
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 --no-change-warnings -O ihex planck.elf planck.eep || exit 0
Creating Extended Listing: planck.lss
avr-objdump -h -S -z planck.elf > planck.lss
Creating Symbol Table: planck.sym
avr-nm -n planck.elf > planck.sym
Size after:
text data bss dec hex filename
18602 82 155 18839 4997 planck.elf
-------- end --------
```
If you do not get the above, you **did not** build the firmware, and you will have nothing to flash. If you have the fresh clone from `github`, it was probably something gone wrong in this install process, go check and see what didn't work and threw errors or what steps you might have missed.
But if everything went OK, you are ready to flash! Press the reset button on the bottom of the Planck, wait two seconds, then:
```
$ make dfu
```
.
.
.
profit!!!
##extra bits...
###Installing Precompiled `dfu-programmer` Binaries (not recommended for `cygwin`)
To install the `dfu-programmer` from the binaries, we must get if from [the `dfu-programmer` website](https://dfu-programmer.github.io/) ([0.7.2](http://iweb.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip)).
Copy this file into your `cygwin` home\src directory. (For me, it is `C:\cygwin64\home\Kevin\src`), extract the files, move `dfu-programmer.exe` to `~/local/avr/bin`. Most obnoxiously, the `libusb0_x86.dll` and `libusb0.sys` need to be moved from `./dfu-prog-usb-1.2.2/x86/` to a directory in the `Windows` `PATH` and the `cygwin` `PATH`. This is because the `dfu-programmer` binary is `mingw` based, not `cygwin` based, so the `dlls` do not cooperate. I achieved acceptable pathing by moving the files to `C:\cygwin64\home\Kevin\local\avr\bin` Then, in a `WINDOWS` command prompt running (Adjusting your path for username, etc. as needed):
```
C:\> set PATH=%PATH%;C:\cygwin64\home\Kevin\local\avr\bin
```
Then, rename `libusb0_x86.dll` to `libusb0.dll`.
You can tell that you were successful by trying to execute 'dfu-programmer' from the 'cygwin' prompt:
```
$ which dfu-programmer
/home/Kevin/local/avr/bin/dfu-programmer
$ dfu-programmer
dfu-programmer 0.7.2
https://github.com/dfu-programmer/dfu-programmer
Type 'dfu-programmer --help' for a list of commands
'dfu-programmer --targets' to list supported target devices
```
If you are not getting the above result, you will not be able to flash the firmware!
- Try making sure your `PATH` variables are set correctly for both `Windows` and `cygwin`.
- Make sure the `dll` is named correctly.
- Do not extract it with `cygwin`'s `unzip` as it does not set the executable permission. If you did it anyway, do `chmod +x dfu-programmer.exe`.
- Still have problems? Try building it instead.
##Debugging Tools
These tools are for debugging your firmware, etc. before flashing. Theoretically, it can save your memory from wearing out. However, these tool do not work 100% for the Planck firmware.
### `gdb` for AVR
`gdb` has a simulator for AVR but it does not support all instructions (like WDT), so it immediately crashes when running the Planck firmware (because `lufa.c` disables the WDT in the first few lines of execution). But it can still be useful in debugging example code and test cases, if you know how to use it.
```
$ cd ~/src
$ git clone git://sourceware.org/git/binutils-gdb.git
$ cd binutils-gdb
$ mkdir obj-avr
$ cd obj-avr
$ ../configure --prefix=$PREFIX --target=avr --build=x86_64-unknown-cygwin --with-gmp=/usr/local --with-mpfr=/usr/local --with-mpc=/usr/local --disable-nls --enable-static
$ make
$ make install
```
### `simulavr`
`simulavr` is an AVR simulator. It runs the complied AVR elfs. `simulavr` does not support the `atmega32u4` device... it does `atmega32` but that is not good enough for the firmware (no PORTE and other things), so you cannot run the Planck firmware. I use it to simulate ideas I have for features in separate test projects.
This one is a major pain in the butt because it has a lot of dependencies and it is buggy. I will do my best to explain it but... it was hard to figure out. A few things need to be changed in the 'Makefile' to make it work in `cygwin`.
```
$ cd ~/src
$ git clone https://github.com/Traumflug/simulavr.git
$ cd simulavr
$ ./bootstrap
$ ./configure --prefix=$PREFIX --enable-static --disable-tcl --disable-doxygen-doc
```
Edit `src/Makefile.am` now so that `-no-undefined` is included (I did this by removing the SYS_MINGW conditional surrounding `libsim_la_LDFLAGS += -no-undefined` and `libsimulavr_la_LDFLAGS += -no-undefined \ libsimulavr_la_LIBADD += $(TCL_LIB)`. Also, `$(EXEEXT)` is added after `kbdgentables` in two places.
```
$ make
$ make install
```
TODO:
- git repos for all sources
- command line magic for cygwin setup
- better options for `dfu-drivers`

@ -143,7 +143,7 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# AUDIO_ENABLE = YES # Audio output on port C6
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time.
# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
ifdef BACKLIGHT_ENABLE
SRC += backlight.c

@ -16,13 +16,13 @@ Depending on which keymap you would like to use, you will have to compile slight
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__<name\>.c__** and are stored in the `keymaps` folder.
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
### Notable forks (which some of the keymap files are from)
- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)

@ -17,31 +17,91 @@
#define _RS 4
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = { /* Qwerty */
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QW] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_CM] = { /* Colemak */
/* Colemak
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_CM] = {
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_DV] = { /* Dvorak */
/* Dvorak
* ,-----------------------------------------------------------------------------------.
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | O | E | U | I | D | H | T | N | S | / |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_DV] = {
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_RS] = { /* RAISE */
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_RS] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[_LW] = { /* LOWER */
/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Brite| Ctrl | Alt | GUI |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_LW] = {
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},

@ -150,7 +150,7 @@ float start_up[][2] = {
{440.0*pow(2.0,(64)/12.0), 1000},
};
void * matrix_init_user(void) {
void matrix_init_user(void) {
init_notes();
play_notes(&start_up, 9, false);
}

@ -0,0 +1,136 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
//
// Custom style by tak3over. Dropped the dvorak layer as it was not being used by me. Shifted over
// keys to make room for a second function key on the left side. Now has a keypad and most all
// standard keyboard keys. Including Delete. See TK layer.
#include "planck.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QW 0
#define _CM 1
#define _TK 2
#define _LW 3
#define _RS 4
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QW] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Colemak
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_CM] = {
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* TenKey, Arrow, and Function key Layer
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | Left | Up | Down | Right| Del | * | 4 | 5 | 6 | + | / |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Home | PGUP | PGDN | End | Ins | . | 1 | 2 | 3 | - |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_TK] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_DEL, KC_ASTR, KC_4, KC_5, KC_6, KC_PLUS, KC_SLSH},
{KC_LSFT, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_INS, KC_DOT, KC_1, KC_2, KC_3, KC_MINS, KC_ENT },
{KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Brite | Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_RS] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Brite | Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_LW] = {
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
}
};
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};

@ -0,0 +1,49 @@
#include "keymap_common.h"
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = KEYMAP(
TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT,
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, FN3,
ESC, DEL, LALT, LGUI, FN2, SPC, FN1, LEFT, DOWN, UP, RGHT),
[1] = KEYMAP(
GRV, GRV, FN22, FN19, FN10, TRNS, TRNS, 7, 8, 9, 0, BSPC,
TRNS, LBRC, RBRC, FN23, FN24, TRNS, TRNS, 4, 5, 6, TRNS, BSLS,
TRNS, MINS, FN20, EQL, FN21, TRNS, TRNS, 1, 2, 3, TRNS, ENT,
TRNS, TRNS, TRNS, TRNS, TRNS, SPC, FN1, TRNS, PGDN, PGUP, TRNS),
[2] = KEYMAP(
FN26, FN10, FN11, FN12, FN13, FN14, FN15, FN17, FN18, FN19, FN10, DEL,
TRNS, TRNS, MUTE, VOLD, VOLU, TRNS, BSPC, FN14, FN15, FN16, TRNS, FN25,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN11, FN12, FN13, TRNS, ENT,
TRNS, TRNS, TRNS, TRNS, FN2, ENT, TRNS, TRNS, PGDN, PGUP, TRNS),
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_MOMENTARY(1), // Switch layer raise
[2] = ACTION_LAYER_MOMENTARY(2), // Switch layer lower
[3] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // Right shift serves as Enter on tap
// Numeric shift modifiers
[10] = ACTION_MODS_KEY(MOD_LSFT, KC_0),
[11] = ACTION_MODS_KEY(MOD_LSFT, KC_1),
[12] = ACTION_MODS_KEY(MOD_LSFT, KC_2),
[13] = ACTION_MODS_KEY(MOD_LSFT, KC_3),
[14] = ACTION_MODS_KEY(MOD_LSFT, KC_4),
[15] = ACTION_MODS_KEY(MOD_LSFT, KC_5),
[16] = ACTION_MODS_KEY(MOD_LSFT, KC_6),
[17] = ACTION_MODS_KEY(MOD_LSFT, KC_7),
[18] = ACTION_MODS_KEY(MOD_LSFT, KC_8),
[19] = ACTION_MODS_KEY(MOD_LSFT, KC_9),
// Other shift modifiers
[20] = ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // _
[21] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // +
[22] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // ~
[23] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // {
[24] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // }
[25] = ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // |
// Switch windows in app
[26] = ACTION_MODS_KEY(MOD_LGUI, KC_GRV),
};

@ -1,36 +1,34 @@
#include "planck.h"
__attribute__ ((weak))
void * matrix_init_user(void) {
};
void matrix_init_user(void) {}
__attribute__ ((weak))
void * matrix_scan_user(void) {
void matrix_scan_user(void) {}
};
__attribute__ ((weak))
void process_action_user(keyrecord_t *record) {}
void * matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE
void matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE
backlight_init_ports();
#endif
#endif
#ifdef RGBLIGHT_ENABLE
#ifdef RGBLIGHT_ENABLE
rgblight_init();
#endif
#endif
// Turn status LED on
DDRE |= (1<<6);
PORTE |= (1<<6);
if (matrix_init_user) {
(*matrix_init_user)();
}
};
matrix_init_user();
}
void matrix_scan_kb(void) {
matrix_scan_user();
}
void * matrix_scan_kb(void) {
if (matrix_scan_user) {
(*matrix_scan_user)();
}
};
void process_action_kb(keyrecord_t *record) {
process_action_user(record);
}

@ -40,7 +40,8 @@
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
void matrix_init_user(void);
void matrix_scan_user(void);
void process_action_user(keyrecord_t *record);
#endif

@ -39,25 +39,41 @@
#----------------------------------------------------------------------------
# Target file name (without extension).
TARGET = preonic_lufa
TARGET = preonic
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = extended_keymap_common.c \
matrix.c \
led.c \
backlight.c
SRC = preonic.c
ifdef keymap
KEYMAP = $(keymap)
endif
ifdef KEYMAP
SRC := extended_keymaps/extended_keymap_$(KEYMAP).c $(SRC)
ifneq ("$(wildcard keymaps/$(KEYMAP).c)","")
KEYMAP_FILE = keymaps/$(KEYMAP).c
else
SRC := extended_keymaps/extended_keymap_default.c $(SRC)
ifneq ("$(wildcard keymaps/$(KEYMAP)/keymap.c)","")
KEYMAP_FILE = keymaps/$(KEYMAP)/keymap.c
else
$(error Keymap file does not exist)
endif
endif
else
ifneq ("$(wildcard keymaps/default.c)","")
KEYMAP_FILE = keymaps/default.c
else
KEYMAP_FILE = keymaps/default/keymap.c
endif
endif
SRC := $(KEYMAP_FILE) $(SRC)
CONFIG_H = config.h
@ -120,24 +136,26 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# 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
BACKLIGHT_ENABLE = yes
ifdef MIDI_ENABLE
SRC += keymap_midi.c \
beeps.c
# MIDI_ENABLE = YES # MIDI controls
# AUDIO_ENABLE = YES # Audio output on port C6
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time.
ifdef BACKLIGHT_ENABLE
SRC += backlight.c
endif
# 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)/protocol/lufa.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
include $(TOP_DIR)/quantum/quantum.mk

@ -1,116 +0,0 @@
#----------------------------------------------------------------------------
# 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 = gh60_pjrc
# Directory common source filess exist
TOP_DIR = ../..
# Directory keyboard dependent files exist
TARGET_DIR = .
# project specific files
SRC = keymap_common.c \
matrix.c \
led.c
ifdef KEYMAP
SRC := keymap_$(KEYMAP).c $(SRC)
else
SRC := keymap_jack.c $(SRC)
endif
CONFIG_H = config.h
# MCU name, you MUST set this to match the board you are using
# type "make clean" after changing this, so all files will be rebuilt
MCU = atmega32u4
#MCU = at90usb1286
# Processor frequency.
# Normally the first thing your program should do is set the clock prescaler,
# so your program will run at the correct speed. You should also set this
# variable to same clock speed. The _delay_ms() macro uses this, and many
# examples use this variable to calculate timings. Do not add a "UL" here.
F_CPU = 16000000
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Atmel DFU loader 4096
# LUFA bootloader 4096
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(+5000)
EXTRAKEY_ENABLE = yes # Audio control and System control(+600)
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
NKRO_ENABLE = yes # USB Nkey Rollover(+500)
#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support
# Search Path
VPATH += $(TARGET_DIR)
VPATH += $(TOP_DIR)
include $(TOP_DIR)/protocol/pjrc.mk
include $(TOP_DIR)/common.mk
include $(TOP_DIR)/rules.mk
plain: OPT_DEFS += -DKEYMAP_PLAIN
plain: all
poker: OPT_DEFS += -DKEYMAP_POKER
poker: all
poker_set: OPT_DEFS += -DKEYMAP_POKER_SET
poker_set: all
poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT
poker_bit: all

@ -1,116 +0,0 @@
# Planck Firmware Guide
## Setting up the environment
### Windows
1. Install [WinAVR Tools](http://sourceforge.net/projects/winavr/) for AVR GCC compiler.
2. Install [DFU-Programmer][dfu-prog] (the -win one).
3. Start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you will need to update its driver on 'Device Manager' to the `dfu-programmer` driver.
### Mac
1. Install [CrossPack](http://www.obdev.at/products/crosspack/index.html) or install Xcode from the App Store and install the Command Line Tools from `Xcode->Preferences->Downloads`.
2. Install [DFU-Programmer][dfu-prog].
### Linux
1. Install AVR GCC with your favorite package manager.
2. Install [DFU-Programmer][dfu-prog].
##Verify Your Installation
1. Clone the following repository: https://github.com/jackhumbert/tmk_keyboard
2. Open a Terminal and `cd` into `tmk_keyboard/keyboard/planck`
3. Run `make`. This should output a lot of information about the build process.
## Using the built-in functions
Here is a list of some of the functions available from the command line:
* `make clean`: clean the environment - may be required in-between builds
* `make`: compile the code
* `make COMMON=true`: compile with the common (non-extended) keymap
* `make MATRIX=<matrix_file>`: compile with the referenced matrix file. Default if unspecified is `matrix_pcb.c`. For handwired boards, use `matrix_handwired.c`.
* `make KEYMAP=<keymap>`: compile with the extended keymap file `extended_keymaps/extended_keymap_<keymap>.c`
* `make COMMON=true KEYMAP=<keymap>`: compile with the common keymap file `common_keymaps/keymap_<keymap>.c`
* `make dfu`: build and flash the layout to the PCB
* `make dfu-force`: build and force-flash the layout to the PCB (may be require for first flash)
Generally, the instructions to flash the PCB are as follows:
1. Make changes to the appropriate keymap file
2. Save the file
3. `make clean`
4. Press the reset button on the PCB/press the key with the `RESET` keycode
5. `make <arguments> dfu` - use the necessary `KEYMAP=<keymap>` and/or `COMMON=true` arguments here.
## Extended keymap
### Keymap
Unlike the common keymap, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/jackhumbert/tmk_keyboard/blob/master/keyboard/planck/extended_keymap_common.h).
You can use modifiers with keycodes like this:
LCTL(KC_C)
Which will generate Ctrl+c. These are daisy-chainable, meaning you can do things like:
LCTL(LALT(KC_C))
That will generate Ctrl+Alt+c. The entire list of these functions is here:
* `LCTL()`: Left control
* `LSFT()` / `S()`: Left shift
* `LALT()`: Left alt/opt
* `LGUI()`: Left win/cmd
* `RCTL()`: Right control
* `RSFT()`: Right shift
* `RALT()`: Right alt/opt
* `RGUI()`: Right win/cmd
`S(KC_1)`-like entries are useful in writing keymaps for the Planck.
### Other keycodes
A number of other keycodes have been added that you may find useful:
* `CM_<key>`: the Colemak equivalent of a key (in place of `KC_<key>`), when using Colemak in software (`CM_O` generates `KC_SCLN`)
* `RESET`: jump to bootloader for flashing (same as press the reset button)
* `BL_STEP`: step through the backlight brightnesses
* `BL_<0-15>`: set backlight brightness to 0-15
* `BL_DEC`: lower the backlight brightness
* `BL_INC`: raise the backlight brightness
* `BL_TOGG`: toggle the backlight on/off
### Function layers
The extended keymap extends the number of function layers from 32 to the near-infinite value of 256. Rather than using `FN<num>` notation (still available, but limited to `FN0`-`FN31`), you can use the `FUNC(<num>)` notation. `F(<num>)` is a shortcut for this.
The function actions are unchanged, and you can see the full list of them [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/common/action_code.h). They are explained in detail [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keymap.md#2-action).
### Macros
Macros have been setup in the `extended_keymaps/extended_keymaps_default.c` file so that you can use `M(<num>)` to access a macro in the `action_get_macro` section on your keymap. The switch/case structure you see here is required, and is setup for `M(0)` - you'll need to copy and paste the code to look like this (e.g. to support `M(3)`):
switch(id) {
case 0:
return MACRODOWN(TYPE(KC_A), END);
break;
case 1:
return MACRODOWN(TYPE(KC_B), END);
break;
case 2:
return MACRODOWN(TYPE(KC_C), END);
break;
case 3:
return MACRODOWN(TYPE(KC_D), END);
break;
}
return MACRO_NONE;
`MACRODOWN()` is a shortcut for `(record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)` which tells the macro to execute when the key is pressed. Without this, the macro will be executed on both the down and up stroke.
[cygwin]: https://www.cygwin.com/
[mingw]: http://www.mingw.org/
[mhv]: https://infernoembedded.com/products/avr-tools
[winavr]: http://winavr.sourceforge.net/
[crosspack]: http://www.obdev.at/products/crosspack/index.html
[dfu-prog]: http://dfu-programmer.sourceforge.net/

@ -1,56 +1,25 @@
Planck keyboard firmware
Preonic keyboard firmware
======================
DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
## Extended Keymap
If you include extended_keymap_common.h instead of keymap_common.h at the top of your file, you'll have access to a bunch of goodies:
## Quantum MK Firmware
- Use `LSFT()`, `LCTL()`, et. al. (listed in extended_keymap_common.h) as modifiers for keys (daisy-chain-able)
- Use `FUNC(1)` instead of `FN1` (etc.) to access the function layers beyond the 32 function layer limit
- Use `CM_F` instead of `KC_F` to get the ColeMak equivilent for shortcuts (maps backwards)
- Use `MACRODOWN()` instead of `MACRO()` to easily make a keydown macro (`CM_*` works here too)
For the full Quantum feature list, see [the parent README.md](/README.md).
### Some notes on usage:
## Building
- The `KEYMAP()` macro is unable to be used due to the bitwise modifications that take place - refer to extended_keymap_jack.c to see how to set things up with the `KC_` prefix
- Keep an eye on the Makefile - this needs to include the correct files to work
- Don't forget to use `const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {` instead of the 8bit equivilent
## Build
Follow [this guide](http://deskthority.net/workshop-f7/how-to-build-your-very-own-keyboard-firmware-t7177.html) to setup your development environment before anything else. Abbreviated instructions are provide at the [bottom of this document](https://github.com/rswiernik/tmk_keyboard/tree/rswiernik_dev/keyboard/planck#environment-setup)
Download the whole firmware [here](https://github.com/jackhumbert/tmk_keyboard/archive/master.zip) and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex that you can load with the Teensy app onto your Planck (once you've hit reset/shorted GND & RST).
Download or clone the whole firmware and navigate to the keyboard/preonic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
Depending on which keymap you would like to use, you will have to compile slightly differently.
####Default
To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows:
```
$ make
```
## Keymap
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
### Default
To build with the default keymap, simply run `make`.
####**Extended Keymaps**
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like:
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[common|jack|<name>]
$ make KEYMAP=[default|jack|<name>]
```
_The only applicable keymaps will work with this option._ Extended keymaps follow the format **__extended\_keymap\_\<name\>.c__**
####**Common Keymaps**
Building with a common keymap is as simple as adding the COMMON option. Note that only
```
$ make KEYMAP=[common|jack|<name>] COMMON=true
```
_The only applicable keymaps will work with this option._ Common keymaps follow the format **__keymap\_\<name\>.c__**
## Notable TMK forks (which some of the keymap files are from)
- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c)
- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck)
- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid)
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

@ -1,6 +0,0 @@
define reset
SIGNAL SIGHUP
end
file planck_lufa.elf
target remote localhost:4242
break main

@ -1,53 +0,0 @@
// Simple analog to digitial conversion
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdint.h>
#include "analog.h"
static uint8_t aref = (1<<REFS0); // default to AREF = Vcc
void analogReference(uint8_t mode)
{
aref = mode & 0xC0;
}
// Arduino compatible pin input
int16_t analogRead(uint8_t pin)
{
#if defined(__AVR_ATmega32U4__)
static const uint8_t PROGMEM pin_to_mux[] = {
0x00, 0x01, 0x04, 0x05, 0x06, 0x07,
0x25, 0x24, 0x23, 0x22, 0x21, 0x20};
if (pin >= 12) return 0;
return adc_read(pgm_read_byte(pin_to_mux + pin));
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
if (pin >= 8) return 0;
return adc_read(pin);
#else
return 0;
#endif
}
// Mux input
int16_t adc_read(uint8_t mux)
{
#if defined(__AVR_AT90USB162__)
return 0;
#else
uint8_t low;
ADCSRA = (1<<ADEN) | ADC_PRESCALER; // enable ADC
ADCSRB = (1<<ADHSM) | (mux & 0x20); // high speed mode
ADMUX = aref | (mux & 0x1F); // configure mux input
ADCSRA = (1<<ADEN) | ADC_PRESCALER | (1<<ADSC); // start the conversion
while (ADCSRA & (1<<ADSC)) ; // wait for result
low = ADCL; // must read LSB first
return (ADCH << 8) | low; // must read MSB only once!
#endif
}

@ -1,36 +0,0 @@
#ifndef _analog_h_included__
#define _analog_h_included__
#include <stdint.h>
void analogReference(uint8_t mode);
int16_t analogRead(uint8_t pin);
int16_t adc_read(uint8_t mux);
#define ADC_REF_POWER (1<<REFS0)
#define ADC_REF_INTERNAL ((1<<REFS1) | (1<<REFS0))
#define ADC_REF_EXTERNAL (0)
// These prescaler values are for high speed mode, ADHSM = 1
#if F_CPU == 16000000L
#define ADC_PRESCALER ((1<<ADPS2) | (1<<ADPS1))
#elif F_CPU == 8000000L
#define ADC_PRESCALER ((1<<ADPS2) | (1<<ADPS0))
#elif F_CPU == 4000000L
#define ADC_PRESCALER ((1<<ADPS2))
#elif F_CPU == 2000000L
#define ADC_PRESCALER ((1<<ADPS1) | (1<<ADPS0))
#elif F_CPU == 1000000L
#define ADC_PRESCALER ((1<<ADPS1))
#else
#define ADC_PRESCALER ((1<<ADPS0))
#endif
// some avr-libc versions do not properly define ADHSM
#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
#if !defined(ADHSM)
#define ADHSM (7)
#endif
#endif
#endif

@ -1,246 +0,0 @@
#include "beeps.h"
#include <math.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#define PI 3.14159265
void delay_us(int count) {
while(count--) {
_delay_us(1);
}
}
int voices = 0;
double frequency = 0;
int volume = 0;
int position = 0;
double frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
bool sliding = false;
#define RANGE 1000
volatile int i=0; //elements of the wave
void beeps() {
play_notes();
}
void send_freq(double freq, int vol) {
int duty = (((double)F_CPU) / freq);
ICR3 = duty; // Set max to the period
OCR3A = duty >> (0x10 - vol); // Set compare to half the period
}
void stop_all_notes() {
voices = 0;
TCCR3A = 0;
TCCR3B = 0;
frequency = 0;
volume = 0;
for (int i = 0; i < 8; i++) {
frequencies[i] = 0;
volumes[i] = 0;
}
}
void stop_note(double freq) {
for (int i = 7; i >= 0; i--) {
if (frequencies[i] == freq) {
frequencies[i] = 0;
volumes[i] = 0;
for (int j = i; (j < 7); j++) {
frequencies[j] = frequencies[j+1];
frequencies[j+1] = 0;
volumes[j] = volumes[j+1];
volumes[j+1] = 0;
}
}
}
voices--;
if (voices < 0)
voices = 0;
if (voices == 0) {
TCCR3A = 0;
TCCR3B = 0;
frequency = 0;
volume = 0;
} else {
double freq = frequencies[voices - 1];
int vol = volumes[voices - 1];
if (frequency < freq) {
sliding = true;
for (double f = frequency; f <= freq; f += ((freq - frequency) / 500.0)) {
send_freq(f, vol);
}
sliding = false;
} else if (frequency > freq) {
sliding = true;
for (double f = frequency; f >= freq; f -= ((frequency - freq) / 500.0)) {
send_freq(f, vol);
}
sliding = false;
}
send_freq(freq, vol);
frequency = freq;
volume = vol;
}
}
void init_notes() {
// TCCR1A = (1 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (1 << WGM10);
// TCCR1B = (1 << COM1B1) | (0 << COM1A0) | (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (0 << CS11) | (1 << CS10);
// DDRC |= (1<<6);
// TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
// TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (0 << CS31) | (1 << CS30);
// ICR3 = 0xFFFF;
// OCR3A = (int)((float)wave[i]*ICR3/RANGE); //go to next array element
// cli();
// /* Enable interrupt on timer2 == 127, with clk/8 prescaler. At 16MHz,
// this gives a timer interrupt at 15625Hz. */
// TIMSK3 = (1 << OCIE3A);
// /* clear/reset timer on match */
// // TCCR3A = 1<<WGM31 | 0<<WGM30; CTC mode, reset on match
// // TCCR3B = 0<<CS32 | 1<<CS31 | 0<<CS30; /* clk, /8 prescaler */
// TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
// TCCR3B = (0 << WGM33) | (0 << WGM32) | (0 << CS32) | (0 << CS31) | (1 << CS30);
// TCCR1A = (1 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (0 << WGM10);
// TCCR1B = (1 << WGM12) | (0 << CS12) | (0 << CS11) | (1 << CS10);
// // SPCR = 0x50;
// // SPSR = 0x01;
// DDRC |= (1<<6);
// // ICR3 = 0xFFFF;
// // OCR3A=80;
// PORTC |= (1<<6);
// sei();
}
// #define highByte(c) ((c >> 8) & 0x00FF)
// #define lowByte(c) (c & 0x00FF)
ISR(TIMER3_COMPA_vect) {
if (ICR3 > 0 && !sliding) {
switch (position) {
case 0: {
int duty = (((double)F_CPU) / (frequency));
ICR3 = duty; // Set max to the period
OCR3A = duty >> 1; // Set compare to half the period
break;
}
case 1: {
int duty = (((double)F_CPU) / (frequency*2));
ICR3 = duty; // Set max to the period
OCR3A = duty >> 1; // Set compare to half the period
break;
}
case 2: {
int duty = (((double)F_CPU) / (frequency*3));
ICR3 = duty; // Set max to the period
OCR3A = duty >> 1; // Set compare to half the period
break;
}
}
position = (position + 1) % 3;
}
// /* OCR2A has been cleared, per TCCR2A above */
// // OCR3A = 127;
// // pos1 += incr1;
// // pos2 += incr2;
// // pos3 += incr3;
// // sample = sinewave[highByte(pos1)] + sinewave[highByte(pos2)] + sinewave[highByte(pos3)];
// // OCR3A = sample;
// OCR3A=pgm_read_byte(&sinewave[pos1]);
// pos1++;
// // PORTC &= ~(1<<6);
// /* buffered, 1x gain, active mode */
// // SPDR = highByte(sample) | 0x70;
// // while (!(SPSR & (1<<SPIF)));
// // SPDR = lowByte(sample);
// // while (!(SPSR & (1<<SPIF)));
// // PORTC |= (1<<6);
}
void play_note(double freq, int vol) {
if (freq > 0) {
DDRC |= (1<<6);
TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30);
TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30);
if (frequency != 0) {
if (frequency < freq) {
for (double f = frequency; f <= freq; f += ((freq - frequency) / 500.0)) {
send_freq(f, vol);
}
} else if (frequency > freq) {
for (double f = frequency; f >= freq; f -= ((frequency - freq) / 500.0)) {
send_freq(f, vol);
}
}
}
send_freq(freq, vol);
frequency = freq;
volume = vol;
frequencies[voices] = frequency;
volumes[voices] = volume;
voices++;
}
// ICR3 = 0xFFFF;
// for (int i = 0; i < 10000; i++) {
// OCR3A = round((sin(i*freq)*.5)+.5)*0xFFFF;
// // _delay_us(50);
// }
// TCCR3A = 0;
// TCCR3B = 0;
}
// void note(int x, float length) {
// DDRC |= (1<<6);
// int t = (int)(440*pow(2,-x/12.0)); // starting note
// for (int y = 0; y < length*1000/t; y++) { // note length
// PORTC |= (1<<6);
// delay_us(t);
// PORTC &= ~(1<<6);
// delay_us(t);
// }
// PORTC &= ~(1<<6);
// }
// void true_note(float x, float y, float length) {
// for (uint32_t i = 0; i < length * 50; i++) {
// uint32_t v = (uint32_t) (round(sin(PI*2*i*640000*pow(2, x/12.0))*.5+1 + sin(PI*2*i*640000*pow(2, y/12.0))*.5+1) / 2 * pow(2, 8));
// for (int u = 0; u < 8; u++) {
// if (v & (1 << u) && !(PORTC&(1<<6)))
// PORTC |= (1<<6);
// else if (PORTC&(1<<6))
// PORTC &= ~(1<<6);
// }
// }
// PORTC &= ~(1<<6);
// }

@ -1,12 +0,0 @@
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include <util/delay.h>
void note(int x, float length);
void beeps();
void true_note(float x, float y, float length);
void play_note(double freq, int vol);
void stop_note(double freq);
void stop_all_notes();
void init_notes();

@ -18,11 +18,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CONFIG_H
#define CONFIG_H
#include "config_definitions.h"
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6062
#define PRODUCT_ID 0x6061
#define DEVICE_VER 0x0001
#define MANUFACTURER Ortholinear Keyboards
#define PRODUCT The Preonic Keyboard
@ -34,7 +34,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Planck PCB default pin-out */
#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
#define ROWS (int []){ D1, D0, D5, B5, B6 }
#define ROWS (int []){ D2, D5, B5, B6, D3 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
@ -55,6 +58,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* ws2812 RGB LED */
#define ws2812_PORTREG PORTD
#define ws2812_DDRREG DDRD
#define ws2812_pin PD1
#define RGBLED_NUM 28 // 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.

@ -1,50 +0,0 @@
#ifndef CONFIG_DEFINITIONS_H
#define CONFIG_DEFINITIONS_H
#define B0 0x20
#define B1 0x21
#define B2 0x22
#define B3 0x23
#define B4 0x24
#define B5 0x25
#define B6 0x26
#define B7 0x27
#define C0 0x30
#define C1 0x31
#define C2 0x32
#define C3 0x33
#define C4 0x34
#define C5 0x35
#define C6 0x36
#define C7 0x37
#define D0 0x40
#define D1 0x41
#define D2 0x42
#define D3 0x43
#define D4 0x44
#define D5 0x45
#define D6 0x46
#define D7 0x47
#define E0 0x50
#define E1 0x51
#define E2 0x52
#define E3 0x53
#define E4 0x54
#define E5 0x55
#define E6 0x56
#define E7 0x57
#define F0 0x60
#define F1 0x61
#define F2 0x62
#define F3 0x63
#define F4 0x64
#define F5 0x65
#define F6 0x66
#define F7 0x67
#endif

@ -1,216 +0,0 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "extended_keymap_common.h"
#include "report.h"
#include "keycode.h"
#include "action_layer.h"
#include "action.h"
#include "action_macro.h"
#include "debug.h"
#include "backlight.h"
#include "keymap_midi.h"
#include <lufa.h>
static action_t keycode_to_action(uint16_t keycode);
/* converts key to action */
action_t action_for_key(uint8_t layer, keypos_t key)
{
// 16bit keycodes - important
uint16_t keycode = keymap_key_to_keycode(layer, key);
if (keycode >= 0x0100 && keycode < 0x2000) {
// Has a modifier
action_t action;
// Split it up
action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF);
return action;
} else if (keycode >= 0x2000 && keycode < 0x3000) {
// Is a shortcut for function layer, pull last 12bits
return keymap_func_to_action(keycode & 0xFFF);
} else if (keycode >= 0x3000 && keycode < 0x4000) {
action_t action;
action.code = ACTION_MACRO(keycode & 0xFF);
return action;
} else if (keycode >= BL_0 & keycode <= BL_15) {
action_t action;
action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F);
return action;
} else if (keycode == BL_DEC) {
action_t action;
action.code = ACTION_BACKLIGHT_DECREASE();
return action;
} else if (keycode == BL_INC) {
action_t action;
action.code = ACTION_BACKLIGHT_INCREASE();
return action;
} else if (keycode == BL_TOGG) {
action_t action;
action.code = ACTION_BACKLIGHT_TOGGLE();
return action;
} else if (keycode == BL_STEP) {
action_t action;
action.code = ACTION_BACKLIGHT_STEP();
return action;
} else if (keycode == RESET) {
bootloader_jump();
return;
} else if (keycode == DEBUG) {
print("\nDEBUG: enabled.\n");
debug_enable = true;
return;
} else if (keycode >= 0x6000 && keycode < 0x7000) {
action_t action;
action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8);
return action;
}
switch (keycode) {
case KC_FN0 ... KC_FN31:
return keymap_fn_to_action(keycode);
#ifdef BOOTMAGIC_ENABLE
case KC_CAPSLOCK:
case KC_LOCKING_CAPS:
if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) {
return keycode_to_action(KC_LCTL);
}
return keycode_to_action(keycode);
case KC_LCTL:
if (keymap_config.swap_control_capslock) {
return keycode_to_action(KC_CAPSLOCK);
}
return keycode_to_action(KC_LCTL);
case KC_LALT:
if (keymap_config.swap_lalt_lgui) {
if (keymap_config.no_gui) {
return keycode_to_action(ACTION_NO);
}
return keycode_to_action(KC_LGUI);
}
return keycode_to_action(KC_LALT);
case KC_LGUI:
if (keymap_config.swap_lalt_lgui) {
return keycode_to_action(KC_LALT);
}
if (keymap_config.no_gui) {
return keycode_to_action(ACTION_NO);
}
return keycode_to_action(KC_LGUI);
case KC_RALT:
if (keymap_config.swap_ralt_rgui) {
if (keymap_config.no_gui) {
return keycode_to_action(ACTION_NO);
}
return keycode_to_action(KC_RGUI);
}
return keycode_to_action(KC_RALT);
case KC_RGUI:
if (keymap_config.swap_ralt_rgui) {
return keycode_to_action(KC_RALT);
}
if (keymap_config.no_gui) {
return keycode_to_action(ACTION_NO);
}
return keycode_to_action(KC_RGUI);
case KC_GRAVE:
if (keymap_config.swap_grave_esc) {
return keycode_to_action(KC_ESC);
}
return keycode_to_action(KC_GRAVE);
case KC_ESC:
if (keymap_config.swap_grave_esc) {
return keycode_to_action(KC_GRAVE);
}
return keycode_to_action(KC_ESC);
case KC_BSLASH:
if (keymap_config.swap_backslash_backspace) {
return keycode_to_action(KC_BSPACE);
}
return keycode_to_action(KC_BSLASH);
case KC_BSPACE:
if (keymap_config.swap_backslash_backspace) {
return keycode_to_action(KC_BSLASH);
}
return keycode_to_action(KC_BSPACE);
#endif
default:
return keycode_to_action(keycode);
}
}
/* Macro */
__attribute__ ((weak))
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
return MACRO_NONE;
}
/* Function */
__attribute__ ((weak))
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
}
/* translates keycode to action */
static action_t keycode_to_action(uint16_t keycode)
{
action_t action;
switch (keycode) {
case KC_A ... KC_EXSEL:
case KC_LCTRL ... KC_RGUI:
action.code = ACTION_KEY(keycode);
break;
case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE:
action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode));
break;
case KC_AUDIO_MUTE ... KC_WWW_FAVORITES:
action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode));
break;
case KC_MS_UP ... KC_MS_ACCEL2:
action.code = ACTION_MOUSEKEY(keycode);
break;
case KC_TRNS:
action.code = ACTION_TRANSPARENT;
break;
default:
action.code = ACTION_NO;
break;
}
return action;
}
/* translates key to keycode */
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key)
{
// Read entire word (16bits)
return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]);
}
/* translates Fn keycode to action */
action_t keymap_fn_to_action(uint16_t keycode)
{
return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) };
}
action_t keymap_func_to_action(uint16_t keycode)
{
// For FUNC without 8bit limit
return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) };
}

@ -1,181 +0,0 @@
/*
Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEYMAP_H
#define KEYMAP_H
#include <stdint.h>
#include <stdbool.h>
#include "action.h"
#include <avr/pgmspace.h>
#include "keycode.h"
#include "keymap.h"
#include "action_macro.h"
#include "report.h"
#include "host.h"
// #include "print.h"
#include "debug.h"
#ifdef BOOTMAGIC_ENABLE
/* NOTE: Not portable. Bit field order depends on implementation */
typedef union {
uint16_t raw;
struct {
bool swap_control_capslock:1;
bool capslock_to_control:1;
bool swap_lalt_lgui:1;
bool swap_ralt_rgui:1;
bool no_gui:1;
bool swap_grave_esc:1;
bool swap_backslash_backspace:1;
bool nkro:1;
};
} keymap_config_t;
keymap_config_t keymap_config;
#endif
/* translates key to keycode */
uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key);
/* translates Fn keycode to action */
action_t keymap_fn_to_action(uint16_t keycode);
/* translates Fn keycode to action */
action_t keymap_func_to_action(uint16_t keycode);
extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
extern const uint16_t fn_actions[];
// Ability to use mods in layouts
#define LCTL(kc) kc | 0x0100
#define LSFT(kc) kc | 0x0200
#define LALT(kc) kc | 0x0400
#define LGUI(kc) kc | 0x0800
#define RCTL(kc) kc | 0x1100
#define RSFT(kc) kc | 0x1200
#define RALT(kc) kc | 0x1400
#define RGUI(kc) kc | 0x1800
// Alias for function layers than expand past FN31
#define FUNC(kc) kc | 0x2000
// Aliases
#define S(kc) LSFT(kc)
#define F(kc) FUNC(kc)
// For software implementation of colemak
#define CM_Q KC_Q
#define CM_W KC_W
#define CM_F KC_E
#define CM_P KC_R
#define CM_G KC_T
#define CM_J KC_Y
#define CM_L KC_U
#define CM_U KC_I
#define CM_Y KC_O
#define CM_SCLN KC_P
#define CM_A KC_A
#define CM_R KC_S
#define CM_S KC_D
#define CM_T KC_F
#define CM_D KC_G
#define CM_H KC_H
#define CM_N KC_J
#define CM_E KC_K
#define CM_I KC_L
#define CM_O KC_SCLN
#define CM_Z KC_Z
#define CM_X KC_X
#define CM_C KC_C
#define CM_V KC_V
#define CM_B KC_B
#define CM_K KC_N
#define CM_M KC_M
#define CM_COMM KC_COMM
#define CM_DOT KC_DOT
#define CM_SLSH KC_SLSH
// Make it easy to support these in macros
#define KC_CM_Q CM_Q
#define KC_CM_W CM_W
#define KC_CM_F CM_F
#define KC_CM_P CM_P
#define KC_CM_G CM_G
#define KC_CM_J CM_J
#define KC_CM_L CM_L
#define KC_CM_U CM_U
#define KC_CM_Y CM_Y
#define KC_CM_SCLN CM_SCLN
#define KC_CM_A CM_A
#define KC_CM_R CM_R
#define KC_CM_S CM_S
#define KC_CM_T CM_T
#define KC_CM_D CM_D
#define KC_CM_H CM_H
#define KC_CM_N CM_N
#define KC_CM_E CM_E
#define KC_CM_I CM_I
#define KC_CM_O CM_O
#define KC_CM_Z CM_Z
#define KC_CM_X CM_X
#define KC_CM_C CM_C
#define KC_CM_V CM_V
#define KC_CM_B CM_B
#define KC_CM_K CM_K
#define KC_CM_M CM_M
#define KC_CM_COMM CM_COMM
#define KC_CM_DOT CM_DOT
#define KC_CM_SLSH CM_SLSH
#define M(kc) kc | 0x3000
#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)
#define BL_ON 0x4009
#define BL_OFF 0x4000
#define BL_0 0x4000
#define BL_1 0x4001
#define BL_2 0x4002
#define BL_3 0x4003
#define BL_4 0x4004
#define BL_5 0x4005
#define BL_6 0x4006
#define BL_7 0x4007
#define BL_8 0x4008
#define BL_9 0x4009
#define BL_10 0x400A
#define BL_11 0x400B
#define BL_12 0x400C
#define BL_13 0x400D
#define BL_14 0x400E
#define BL_15 0x400F
#define BL_DEC 0x4010
#define BL_INC 0x4011
#define BL_TOGG 0x4012
#define BL_STEP 0x4013
#define RESET 0x5000
#define DEBUG 0x5001
#define MIDI(n) n | 0x6000
#endif

@ -1,70 +0,0 @@
#include "extended_keymap_common.h"
#include "backlight.h"
#include "lufa.h"
#include "debug.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = { /* Qwerty */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
{M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
// Space is repeated to accommadate for both spacebar wiring positions
},
[1] = { /* Colemak */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
{KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[2] = { /* RAISE */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[3] = { /* LOWER */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
{S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
{KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[4] = { /* TENKEY */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT},
{KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
}
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
[2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
[3] = ACTION_DEFAULT_LAYER_SET(0),
[4] = ACTION_DEFAULT_LAYER_SET(1),
};
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);
midi_send_noteon(&midi_device, 1, 64, 127);
backlight_step();
} else {
unregister_code(KC_RSFT);
midi_send_noteoff(&midi_device, 1, 64, 127);
}
break;
}
return MACRO_NONE;
};

@ -1,81 +0,0 @@
#include "extended_keymap_common.h"
#include "backlight.h"
#include "action_layer.h"
#include "keymap_midi.h"
#include "beeps.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = { /* Qwerty */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
{M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
// Space is repeated to accommadate for both spacebar wiring positions
},
[1] = { /* Colemak */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT},
{KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[2] = { /* RAISE */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[3] = { /* LOWER */
{KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
{S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
{KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[4] = { /* TENKEY */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT},
{KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[5] = {
{ MIDI12 },
{ MIDI12 },
{ MIDI12 },
{ MIDI12 },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI}
}
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_MOMENTARY(2), // to RAISE
[2] = ACTION_LAYER_MOMENTARY(3), // to LOWER
[3] = ACTION_DEFAULT_LAYER_SET(0),
[4] = ACTION_DEFAULT_LAYER_SET(1),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
case 0:
if (record->event.pressed) {
// register_code(KC_RSFT);
backlight_set(BACKLIGHT_LEVELS);
default_layer_and(0);
default_layer_or((1<<5));
} else {
// unregister_code(KC_RSFT);
backlight_set(0);
default_layer_and(0);
default_layer_or(0);
}
break;
}
return MACRO_NONE;
};

@ -0,0 +1,3 @@
dfu-programmer atmega32u4 erase --force
dfu-programmer atmega32u4 flash preonic_pcb.hex
dfu-programmer atmega32u4 reset

@ -1,110 +0,0 @@
/*
Copyright 2015 Jack Humbert <jack.humb@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "extended_keymap_common.h"
#include "keymap_midi.h"
#include <lufa.h>
uint8_t starting_note = 0x0C;
int offset = 7;
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
if (id != 0) {
if (record->event.pressed) {
midi_send_noteon(&midi_device, opt, (id & 0xFF), 127);
} else {
midi_send_noteoff(&midi_device, opt, (id & 0xFF), 127);
}
}
if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
if (record->event.pressed) {
starting_note++;
play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
midi_send_cc(&midi_device, 0, 0x7B, 0);
midi_send_cc(&midi_device, 1, 0x7B, 0);
midi_send_cc(&midi_device, 2, 0x7B, 0);
midi_send_cc(&midi_device, 3, 0x7B, 0);
midi_send_cc(&midi_device, 4, 0x7B, 0);
return;
} else {
stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)));
stop_all_notes();
return;
}
}
if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
if (record->event.pressed) {
starting_note--;
play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
midi_send_cc(&midi_device, 0, 0x7B, 0);
midi_send_cc(&midi_device, 1, 0x7B, 0);
midi_send_cc(&midi_device, 2, 0x7B, 0);
midi_send_cc(&midi_device, 3, 0x7B, 0);
midi_send_cc(&midi_device, 4, 0x7B, 0);
return;
} else {
stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)));
stop_all_notes();
return;
}
}
if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
offset++;
midi_send_cc(&midi_device, 0, 0x7B, 0);
midi_send_cc(&midi_device, 1, 0x7B, 0);
midi_send_cc(&midi_device, 2, 0x7B, 0);
midi_send_cc(&midi_device, 3, 0x7B, 0);
midi_send_cc(&midi_device, 4, 0x7B, 0);
stop_all_notes();
for (int i = 0; i <= 7; i++) {
play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
_delay_us(80000);
stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)));
_delay_us(8000);
}
return;
}
if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
offset--;
midi_send_cc(&midi_device, 0, 0x7B, 0);
midi_send_cc(&midi_device, 1, 0x7B, 0);
midi_send_cc(&midi_device, 2, 0x7B, 0);
midi_send_cc(&midi_device, 3, 0x7B, 0);
midi_send_cc(&midi_device, 4, 0x7B, 0);
stop_all_notes();
for (int i = 0; i <= 7; i++) {
play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC);
_delay_us(80000);
stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)));
_delay_us(8000);
}
return;
}
if (record->event.pressed) {
// midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
} else {
// midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
}
}

@ -1,220 +0,0 @@
/*
Copyright 2015 Jack Humbert <jack.humb@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KEYMAP_MIDI_H
#define KEYMAP_MIDI_H
#define MIDI 0x6000
#define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000
#define CHNL(note, channel) (note + (channel << 8))
#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \
0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \
0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \
0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \
0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), }
#define N_CN1 (0x600C + (12 * -1) + 0 )
#define N_CN1S (0x600C + (12 * -1) + 1 )
#define N_DN1F (0x600C + (12 * -1) + 1 )
#define N_DN1 (0x600C + (12 * -1) + 2 )
#define N_DN1S (0x600C + (12 * -1) + 3 )
#define N_EN1F (0x600C + (12 * -1) + 3 )
#define N_EN1 (0x600C + (12 * -1) + 4 )
#define N_FN1 (0x600C + (12 * -1) + 5 )
#define N_FN1S (0x600C + (12 * -1) + 6 )
#define N_GN1F (0x600C + (12 * -1) + 6 )
#define N_GN1 (0x600C + (12 * -1) + 7 )
#define N_GN1S (0x600C + (12 * -1) + 8 )
#define N_AN1F (0x600C + (12 * -1) + 8 )
#define N_AN1 (0x600C + (12 * -1) + 9 )
#define N_AN1S (0x600C + (12 * -1) + 10)
#define N_BN1F (0x600C + (12 * -1) + 10)
#define N_BN1 (0x600C + (12 * -1) + 11)
#define N_C0 (0x600C + (12 * 0) + 0 )
#define N_C0S (0x600C + (12 * 0) + 1 )
#define N_D0F (0x600C + (12 * 0) + 1 )
#define N_D0 (0x600C + (12 * 0) + 2 )
#define N_D0S (0x600C + (12 * 0) + 3 )
#define N_E0F (0x600C + (12 * 0) + 3 )
#define N_E0 (0x600C + (12 * 0) + 4 )
#define N_F0 (0x600C + (12 * 0) + 5 )
#define N_F0S (0x600C + (12 * 0) + 6 )
#define N_G0F (0x600C + (12 * 0) + 6 )
#define N_G0 (0x600C + (12 * 0) + 7 )
#define N_G0S (0x600C + (12 * 0) + 8 )
#define N_A0F (0x600C + (12 * 0) + 8 )
#define N_A0 (0x600C + (12 * 0) + 9 )
#define N_A0S (0x600C + (12 * 0) + 10)
#define N_B0F (0x600C + (12 * 0) + 10)
#define N_B0 (0x600C + (12 * 0) + 11)
#define N_C1 (0x600C + (12 * 1) + 0 )
#define N_C1S (0x600C + (12 * 1) + 1 )
#define N_D1F (0x600C + (12 * 1) + 1 )
#define N_D1 (0x600C + (12 * 1) + 2 )
#define N_D1S (0x600C + (12 * 1) + 3 )
#define N_E1F (0x600C + (12 * 1) + 3 )
#define N_E1 (0x600C + (12 * 1) + 4 )
#define N_F1 (0x600C + (12 * 1) + 5 )
#define N_F1S (0x600C + (12 * 1) + 6 )
#define N_G1F (0x600C + (12 * 1) + 6 )
#define N_G1 (0x600C + (12 * 1) + 7 )
#define N_G1S (0x600C + (12 * 1) + 8 )
#define N_A1F (0x600C + (12 * 1) + 8 )
#define N_A1 (0x600C + (12 * 1) + 9 )
#define N_A1S (0x600C + (12 * 1) + 10)
#define N_B1F (0x600C + (12 * 1) + 10)
#define N_B1 (0x600C + (12 * 1) + 11)
#define N_C2 (0x600C + (12 * 2) + 0 )
#define N_C2S (0x600C + (12 * 2) + 1 )
#define N_D2F (0x600C + (12 * 2) + 1 )
#define N_D2 (0x600C + (12 * 2) + 2 )
#define N_D2S (0x600C + (12 * 2) + 3 )
#define N_E2F (0x600C + (12 * 2) + 3 )
#define N_E2 (0x600C + (12 * 2) + 4 )
#define N_F2 (0x600C + (12 * 2) + 5 )
#define N_F2S (0x600C + (12 * 2) + 6 )
#define N_G2F (0x600C + (12 * 2) + 6 )
#define N_G2 (0x600C + (12 * 2) + 7 )
#define N_G2S (0x600C + (12 * 2) + 8 )
#define N_A2F (0x600C + (12 * 2) + 8 )
#define N_A2 (0x600C + (12 * 2) + 9 )
#define N_A2S (0x600C + (12 * 2) + 10)
#define N_B2F (0x600C + (12 * 2) + 10)
#define N_B2 (0x600C + (12 * 2) + 11)
#define N_C3 (0x600C + (12 * 3) + 0 )
#define N_C3S (0x600C + (12 * 3) + 1 )
#define N_D3F (0x600C + (12 * 3) + 1 )
#define N_D3 (0x600C + (12 * 3) + 2 )
#define N_D3S (0x600C + (12 * 3) + 3 )
#define N_E3F (0x600C + (12 * 3) + 3 )
#define N_E3 (0x600C + (12 * 3) + 4 )
#define N_F3 (0x600C + (12 * 3) + 5 )
#define N_F3S (0x600C + (12 * 3) + 6 )
#define N_G3F (0x600C + (12 * 3) + 6 )
#define N_G3 (0x600C + (12 * 3) + 7 )
#define N_G3S (0x600C + (12 * 3) + 8 )
#define N_A3F (0x600C + (12 * 3) + 8 )
#define N_A3 (0x600C + (12 * 3) + 9 )
#define N_A3S (0x600C + (12 * 3) + 10)
#define N_B3F (0x600C + (12 * 3) + 10)
#define N_B3 (0x600C + (12 * 3) + 11)
#define N_C4 (0x600C + (12 * 4) + 0 )
#define N_C4S (0x600C + (12 * 4) + 1 )
#define N_D4F (0x600C + (12 * 4) + 1 )
#define N_D4 (0x600C + (12 * 4) + 2 )
#define N_D4S (0x600C + (12 * 4) + 3 )
#define N_E4F (0x600C + (12 * 4) + 3 )
#define N_E4 (0x600C + (12 * 4) + 4 )
#define N_F4 (0x600C + (12 * 4) + 5 )
#define N_F4S (0x600C + (12 * 4) + 6 )
#define N_G4F (0x600C + (12 * 4) + 6 )
#define N_G4 (0x600C + (12 * 4) + 7 )
#define N_G4S (0x600C + (12 * 4) + 8 )
#define N_A4F (0x600C + (12 * 4) + 8 )
#define N_A4 (0x600C + (12 * 4) + 9 )
#define N_A4S (0x600C + (12 * 4) + 10)
#define N_B4F (0x600C + (12 * 4) + 10)
#define N_B4 (0x600C + (12 * 4) + 11)
#define N_C5 (0x600C + (12 * 5) + 0 )
#define N_C5S (0x600C + (12 * 5) + 1 )
#define N_D5F (0x600C + (12 * 5) + 1 )
#define N_D5 (0x600C + (12 * 5) + 2 )
#define N_D5S (0x600C + (12 * 5) + 3 )
#define N_E5F (0x600C + (12 * 5) + 3 )
#define N_E5 (0x600C + (12 * 5) + 4 )
#define N_F5 (0x600C + (12 * 5) + 5 )
#define N_F5S (0x600C + (12 * 5) + 6 )
#define N_G5F (0x600C + (12 * 5) + 6 )
#define N_G5 (0x600C + (12 * 5) + 7 )
#define N_G5S (0x600C + (12 * 5) + 8 )
#define N_A5F (0x600C + (12 * 5) + 8 )
#define N_A5 (0x600C + (12 * 5) + 9 )
#define N_A5S (0x600C + (12 * 5) + 10)
#define N_B5F (0x600C + (12 * 5) + 10)
#define N_B5 (0x600C + (12 * 5) + 11)
#define N_C6 (0x600C + (12 * 6) + 0 )
#define N_C6S (0x600C + (12 * 6) + 1 )
#define N_D6F (0x600C + (12 * 6) + 1 )
#define N_D6 (0x600C + (12 * 6) + 2 )
#define N_D6S (0x600C + (12 * 6) + 3 )
#define N_E6F (0x600C + (12 * 6) + 3 )
#define N_E6 (0x600C + (12 * 6) + 4 )
#define N_F6 (0x600C + (12 * 6) + 5 )
#define N_F6S (0x600C + (12 * 6) + 6 )
#define N_G6F (0x600C + (12 * 6) + 6 )
#define N_G6 (0x600C + (12 * 6) + 7 )
#define N_G6S (0x600C + (12 * 6) + 8 )
#define N_A6F (0x600C + (12 * 6) + 8 )
#define N_A6 (0x600C + (12 * 6) + 9 )
#define N_A6S (0x600C + (12 * 6) + 10)
#define N_B6F (0x600C + (12 * 6) + 10)
#define N_B6 (0x600C + (12 * 6) + 11)
#define N_C7 (0x600C + (12 * 7) + 0 )
#define N_C7S (0x600C + (12 * 7) + 1 )
#define N_D7F (0x600C + (12 * 7) + 1 )
#define N_D7 (0x600C + (12 * 7) + 2 )
#define N_D7S (0x600C + (12 * 7) + 3 )
#define N_E7F (0x600C + (12 * 7) + 3 )
#define N_E7 (0x600C + (12 * 7) + 4 )
#define N_F7 (0x600C + (12 * 7) + 5 )
#define N_F7S (0x600C + (12 * 7) + 6 )
#define N_G7F (0x600C + (12 * 7) + 6 )
#define N_G7 (0x600C + (12 * 7) + 7 )
#define N_G7S (0x600C + (12 * 7) + 8 )
#define N_A7F (0x600C + (12 * 7) + 8 )
#define N_A7 (0x600C + (12 * 7) + 9 )
#define N_A7S (0x600C + (12 * 7) + 10)
#define N_B7F (0x600C + (12 * 7) + 10)
#define N_B7 (0x600C + (12 * 7) + 11)
#define N_C8 (0x600C + (12 * 8) + 0 )
#define N_C8S (0x600C + (12 * 8) + 1 )
#define N_D8F (0x600C + (12 * 8) + 1 )
#define N_D8 (0x600C + (12 * 8) + 2 )
#define N_D8S (0x600C + (12 * 8) + 3 )
#define N_E8F (0x600C + (12 * 8) + 3 )
#define N_E8 (0x600C + (12 * 8) + 4 )
#define N_F8 (0x600C + (12 * 8) + 5 )
#define N_F8S (0x600C + (12 * 8) + 6 )
#define N_G8F (0x600C + (12 * 8) + 6 )
#define N_G8 (0x600C + (12 * 8) + 7 )
#define N_G8S (0x600C + (12 * 8) + 8 )
#define N_A8F (0x600C + (12 * 8) + 8 )
#define N_A8 (0x600C + (12 * 8) + 9 )
#define N_A8S (0x600C + (12 * 8) + 10)
#define N_B8F (0x600C + (12 * 8) + 10)
#define N_B8 (0x600C + (12 * 8) + 11)
#define N_C8 (0x600C + (12 * 8) + 0 )
#define N_C8S (0x600C + (12 * 8) + 1 )
#define N_D8F (0x600C + (12 * 8) + 1 )
#define N_D8 (0x600C + (12 * 8) + 2 )
#define N_D8S (0x600C + (12 * 8) + 3 )
#define N_E8F (0x600C + (12 * 8) + 3 )
#define N_E8 (0x600C + (12 * 8) + 4 )
#define N_F8 (0x600C + (12 * 8) + 5 )
#define N_F8S (0x600C + (12 * 8) + 6 )
#define N_G8F (0x600C + (12 * 8) + 6 )
#define N_G8 (0x600C + (12 * 8) + 7 )
#define N_G8S (0x600C + (12 * 8) + 8 )
#define N_A8F (0x600C + (12 * 8) + 8 )
#define N_A8 (0x600C + (12 * 8) + 9 )
#define N_A8S (0x600C + (12 * 8) + 10)
#define N_B8F (0x600C + (12 * 8) + 10)
#define N_B8 (0x600C + (12 * 8) + 11)
#endif

@ -0,0 +1,34 @@
# The Default Planck Layout
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = { /* Qwerty */
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_CM] = { /* Colemak */
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_DV] = { /* Dvorak */
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_RS] = { /* RAISE */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[_LW] = { /* LOWER */
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
}
};

@ -0,0 +1,96 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
#include "preonic.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QW 0
#define _CM 1
#define _DV 2
#define _LW 3
#define _RS 4
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = { /* Qwerty */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_CM] = { /* Colemak */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_DV] = { /* Dvorak */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_RS] = { /* RAISE */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[_LW] = { /* LOWER */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
}
};
const uint16_t PROGMEM fn_actions[] = {
};
float start_up[][2] = {
{440.0*pow(2.0,(67)/12.0), 600},
{0, 50},
{440.0*pow(2.0,(64)/12.0), 400},
{0, 50},
{440.0*pow(2.0,(55)/12.0), 400},
{0, 50},
{440.0*pow(2.0,(60)/12.0), 400},
{0, 50},
{440.0*pow(2.0,(64)/12.0), 1000},
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};
void * matrix_init_user(void) {
#ifdef AUDIO_ENABLE
init_notes();
play_notes(&start_up, 9, false);
#endif
}

@ -0,0 +1,3 @@
# Lock layout
This layout is designed for having a lock switch in the lower-left-hand corner, and for experimenting with MIDI/audio features. It's constantly in development, so don't expect anything to work/be documented correctly!

@ -0,0 +1,105 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
#include "preonic.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
#include "action_layer.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 _QW 0
#define _CM 1
#define _DV 2
#define _LW 3
#define _RS 4
#define _MI 5
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QW] = { /* Qwerty */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_CM] = { /* Colemak */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_DV] = { /* Dvorak */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
{M(0), KC_LCTL, KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
[_RS] = { /* RAISE */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[_LW] = { /* LOWER */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), DF(_DV), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
[_MI] = { /* MIDI */
{MIDI12},
{MIDI12},
{MIDI12},
{MIDI12},
{M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MIDI, MIDI, MIDI, MIDI}
}
};
const uint16_t PROGMEM fn_actions[] = {
};
float start_up[][2] = {
{440.0*pow(2.0,(67)/12.0), 600},
{0, 50},
{440.0*pow(2.0,(64)/12.0), 400},
{0, 50},
{440.0*pow(2.0,(55)/12.0), 400},
{0, 50},
{440.0*pow(2.0,(60)/12.0), 400},
{0, 50},
{440.0*pow(2.0,(64)/12.0), 1000},
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
default_layer_state = 1<<5;
} else {
unregister_code(KC_RSFT);
default_layer_state = 1<<0;
}
break;
}
return MACRO_NONE;
};
void * matrix_init_user(void) {
init_notes();
play_notes(&start_up, 9, false);
}

@ -1,38 +0,0 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <avr/io.h>
#include "stdint.h"
#include "led.h"
void led_set(uint8_t usb_led)
{
// // Using PE6 Caps Lock LED
// if (usb_led & (1<<USB_LED_CAPS_LOCK))
// {
// // Output high.
// DDRE |= (1<<6);
// PORTE |= (1<<6);
// }
// else
// {
// // Output low.
// DDRE &= ~(1<<6);
// PORTE &= ~(1<<6);
// }
}

@ -1,234 +0,0 @@
/*
Copyright 2012 Jun Wako
Generated by planckkeyboard.com (2014 Jack Humbert)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* scan matrix
*/
#include <stdint.h>
#include <stdbool.h>
#include <avr/io.h>
#include <util/delay.h>
#include "print.h"
#include "debug.h"
#include "util.h"
#include "matrix.h"
#ifndef DEBOUNCE
# define DEBOUNCE 10
#endif
static uint8_t debouncing = DEBOUNCE;
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
static matrix_row_t read_cols(void);
static void init_cols(void);
static void unselect_rows(void);
static void select_row(uint8_t row);
inline
uint8_t matrix_rows(void)
{
return MATRIX_ROWS;
}
inline
uint8_t matrix_cols(void)
{
return MATRIX_COLS;
}
void matrix_init(void)
{
// To use PORTF disable JTAG with writing JTD bit twice within four cycles.
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
backlight_init_ports();
// Turn status LED on
DDRE |= (1<<6);
PORTE |= (1<<6);
// initialize row and col
unselect_rows();
init_cols();
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
matrix_debouncing[i] = 0;
}
}
uint8_t matrix_scan(void)
{
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
select_row(i);
_delay_us(30); // without this wait read unstable value.
matrix_row_t cols = read_cols();
if (matrix_debouncing[i] != cols) {
matrix_debouncing[i] = cols;
if (debouncing) {
debug("bounce!: "); debug_hex(debouncing); debug("\n");
}
debouncing = DEBOUNCE;
}
unselect_rows();
}
if (debouncing) {
if (--debouncing) {
_delay_ms(1);
} else {
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
matrix[i] = matrix_debouncing[i];
}
}
}
return 1;
}
bool matrix_is_modified(void)
{
if (debouncing) return false;
return true;
}
inline
bool matrix_is_on(uint8_t row, uint8_t col)
{
return (matrix[row] & ((matrix_row_t)1<col));
}
inline
matrix_row_t matrix_get_row(uint8_t row)
{
return matrix[row];
}
void matrix_print(void)
{
print("\nr/c 0123456789ABCDEF\n");
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
phex(row); print(": ");
pbin_reverse16(matrix_get_row(row));
print("\n");
}
}
uint8_t matrix_key_count(void)
{
uint8_t count = 0;
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
count += bitpop16(matrix[i]);
}
return count;
}
static void init_cols(void)
{
int B = 0, C = 0, D = 0, E = 0, F = 0;
for(int x = 0; x < MATRIX_COLS; x++) {
int col = COLS[x];
if ((col & 0xF0) == 0x20) {
B |= (1<<(col & 0x0F));
} else if ((col & 0xF0) == 0x30) {
C |= (1<<(col & 0x0F));
} else if ((col & 0xF0) == 0x40) {
D |= (1<<(col & 0x0F));
} else if ((col & 0xF0) == 0x50) {
E |= (1<<(col & 0x0F));
} else if ((col & 0xF0) == 0x60) {
F |= (1<<(col & 0x0F));
}
}
DDRB &= ~(B); PORTB |= (B);
DDRC &= ~(C); PORTC |= (C);
DDRD &= ~(D); PORTD |= (D);
DDRE &= ~(E); PORTE |= (E);
DDRF &= ~(F); PORTF |= (F);
}
static matrix_row_t read_cols(void)
{
matrix_row_t result = 0;
for(int x = 0; x < MATRIX_COLS; x++) {
int col = COLS[x];
if ((col & 0xF0) == 0x20) {
result |= (PINB&(1<<(col & 0x0F)) ? 0 : (1<<x));
} else if ((col & 0xF0) == 0x30) {
result |= (PINC&(1<<(col & 0x0F)) ? 0 : (1<<x));
} else if ((col & 0xF0) == 0x40) {
result |= (PIND&(1<<(col & 0x0F)) ? 0 : (1<<x));
} else if ((col & 0xF0) == 0x50) {
result |= (PINE&(1<<(col & 0x0F)) ? 0 : (1<<x));
} else if ((col & 0xF0) == 0x60) {
result |= (PINF&(1<<(col & 0x0F)) ? 0 : (1<<x));
}
}
return result;
}
static void unselect_rows(void)
{
int B = 0, C = 0, D = 0, E = 0, F = 0;
for(int x = 0; x < MATRIX_ROWS; x++) {
int row = ROWS[x];
if ((row & 0xF0) == 0x20) {
B |= (1<<(row & 0x0F));
} else if ((row & 0xF0) == 0x30) {
C |= (1<<(row & 0x0F));
} else if ((row & 0xF0) == 0x40) {
D |= (1<<(row & 0x0F));
} else if ((row & 0xF0) == 0x50) {
E |= (1<<(row & 0x0F));
} else if ((row & 0xF0) == 0x60) {
F |= (1<<(row & 0x0F));
}
}
DDRB &= ~(B); PORTB |= (B);
DDRC &= ~(C); PORTC |= (C);
DDRD &= ~(D); PORTD |= (D);
DDRE &= ~(E); PORTE |= (E);
DDRF &= ~(F); PORTF |= (F);
}
static void select_row(uint8_t row)
{
int row_pin = ROWS[row];
if ((row_pin & 0xF0) == 0x20) {
DDRB |= (1<<(row_pin & 0x0F));
PORTB &= ~(1<<(row_pin & 0x0F));
} else if ((row_pin & 0xF0) == 0x30) {
DDRC |= (1<<(row_pin & 0x0F));
PORTC &= ~(1<<(row_pin & 0x0F));
} else if ((row_pin & 0xF0) == 0x40) {
DDRD |= (1<<(row_pin & 0x0F));
PORTD &= ~(1<<(row_pin & 0x0F));
} else if ((row_pin & 0xF0) == 0x50) {
DDRE |= (1<<(row_pin & 0x0F));
PORTE &= ~(1<<(row_pin & 0x0F));
} else if ((row_pin & 0xF0) == 0x60) {
DDRF |= (1<<(row_pin & 0x0F));
PORTF &= ~(1<<(row_pin & 0x0F));
}
}

@ -0,0 +1,36 @@
#include "preonic.h"
__attribute__ ((weak))
void * matrix_init_user(void) {
};
__attribute__ ((weak))
void * matrix_scan_user(void) {
};
void * matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE
backlight_init_ports();
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_init();
#endif
// Turn status LED on
DDRE |= (1<<6);
PORTE |= (1<<6);
if (matrix_init_user) {
(*matrix_init_user)();
}
};
void * matrix_scan_kb(void) {
if (matrix_scan_user) {
(*matrix_scan_user)();
}
};

@ -0,0 +1,50 @@
#ifndef PREONIC_H
#define PREONIC_H
#include "matrix.h"
#include "keymap_common.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
#ifdef RGBLIGHT_ENABLE
#include "rgblight.h"
#endif
#include <stddef.h>
#ifdef MIDI_ENABLE
#include <keymap_midi.h>
#endif
#define PREONIC_MIT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
) \
{ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
{ k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b }, \
{ k40, k41, k42, k43, k44, k45, k45, k47, k48, k49, k4a, k4b } \
}
#define PREONIC_GRID( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
) \
{ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
{ k30, k31, k32, k33, k34, k35, k35, k37, k38, k39, k3a, k3b }, \
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
#endif

@ -0,0 +1,1702 @@
:100000000C94D4020C9418030C9418030C94180349
:100010000C9418030C9418030C9418030C941803F4
:100020000C9418030C9418030C94E8160C94BA174B
:100030000C946C290C9418030C9418030C9418035A
:100040000C9418030C9418030C9418030C941803C4
:100050000C9418030C94D9290C9418030C941803CD
:100060000C9418030C9418030C9418030C941803A4
:100070000C9418030C9418030C9418030C94180394
:100080000C941C0E0C9418030C9418030C94180375
:100090000C9418030C9418030C9418030C94180374
:1000A0000C9418030C9418030C941803076342363D
:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
:1000D0000000803F08000000BE922449123EABAAF7
:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
:1000F000AA3E00000000BF000000803F000000009A
:1001000000084178D3BB4387D1133D190E3CC3BDD2
:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
:1001200080EFFFBE01C4FF7F3F00000000003500EC
:100130001E001F00200021002200230024002500B3
:10014000260027002A002B0014001A0008001500C2
:1001500017001C0018000C00120013002A002900D0
:1001600004001600070009000A000B000D000E0035
:100170000F0033003400E1001D001B0006001900D1
:10018000050011001000360037003800280000304C
:10019000E000E200E30003522C002C000452500067
:1001A000510052004F0035001E001F0020002100AA
:1001B0002200230024002500260027002A002B000F
:1001C00014001A00090013000A000D000F001800A7
:1001D0001C0033002A002900040015001600170037
:1001E00007000B00110008000C0012003400E100B1
:1001F0001D001B000600190005000E00100036004F
:100200003700380028000030E000E200E30003522D
:100210002C002C0004525000510052004F003500B9
:100220001E001F00200021002200230024002500C2
:10023000260027002A002B00340036003700130068
:100240001C0009000A00060015000F002A00290002
:1002500004001200080018000C0007000B00170033
:10026000110016003800E100330014000D000E00EC
:100270001B00050010001A0019001D0028000030A6
:10028000E000E200E30003522C002C000452500076
:10029000510052004F0035001E001F0020002100B9
:1002A0002200230024002500260027002A00350212
:1002B0001E021F0220022102220223022402250222
:1002C000260227022A0001003A003B003C003D00C4
:1002D0003E003F002D022E022F02300231020100AB
:1002E00040004100420043004400450000530153D8
:1002F0000253005001000100010001000100010053
:10030000010001000100AB00AA00A900AE00350009
:100310001E001F00200021002200230024002500D1
:10032000260027002A0035001E001F0020002100A3
:100330002200230024002500260027002A000100B7
:100340003A003B003C003D003E003F002D002E00E7
:100350002F00300031000100400041004200430006
:1003600044004500005301530253005001000100B6
:100370000100010001000100010001000100AB00CB
:10038000AA00A900AE002A035400680065002000FE
:100390005000720065006F006E006900630020006D
:1003A0004B006500790062006F006100720064001C
:1003B00000002C034F007200740068006F006C0096
:1003C00069006E0065006100720020004B0065004E
:1003D000790062006F006100720064007300000029
:1003E000040309040902D000060100A0FA09040070
:1003F000000103010100092111010001223F000752
:1004000005810308000A0904010001030102000933
:100410002111010001224D000705820308000A098D
:10042000040200010300000009211101000122362D
:10043000000705830308000A090403000203000003
:10044000000921110100012220000705840320007A
:100450000107050403200001090404000001010054
:100460000009240100010900010509040500020139
:1004700003000007240100014100062402010100DD
:1004800006240202020009240301030102010009FB
:1004900024030204010101000905060240000500D1
:1004A0000005250101010905850240000500000540
:1004B000250101031201100100000008EDFE61603A
:1004C0000100010200010631FF0974A1010975153F
:1004D0000025FF9520750881020976150025FF95F6
:1004E0002075089102C005010980A101850216014D
:1004F0000026B7001A01002AB70075109501810087
:10050000C0050C0901A1018503160100269C021AF1
:1005100001002A9C02751095018100C005010902A5
:10052000A1010901A10005091901290515002501ED
:100530009505750181029501750381010501093059
:1005400009311581257F95027508810609381581C5
:10055000257F950175088106050C0A38021581254D
:100560007F950175088106C0C005010906A1010536
:100570000719E029E7150025019508750181029505
:100580000175088101050819012905950575019175
:10059000029501750391010507190029FF15002532
:1005A000FF950675088100C011241FBECFEFDAE069
:1005B000DEBFCDBF04B603FE24C080910404909139
:1005C0000504A0910604B09107048730904BA74022
:1005D000B04BB9F410920404109205041092060472
:1005E0001092070414BE84B7877F84BF88E10FB6DA
:1005F000F89480936000109260000FBEE0E0F8E392
:10060000099512E0A0E0B1E0EEE1F9E602C0059044
:100610000D92A832B107D9F714E0A8E2B2E001C008
:100620001D92A430B107E1F70E94A0130C948D3401
:100630000C94000061110DC0FC018281882331F00F
:1006400085EE0E94671E0E94683003C085EE0E94FE
:100650002F1F80E090E008950E940F0E40E050E0D0
:1006600069E070E080E091E00C94600F08950E94D2
:1006700049036E9A769A8CE293E0892B11F00C94E0
:100680002C03089586E393E0892B11F00C94360334
:100690000895279A2F988FEF9FEF9093870080936C
:1006A00086008AE08093800089E1809381000C9429
:1006B000113081110BC080918000877F8093800072
:1006C00010928D0010928C002F9808952F988330EF
:1006D00041F4809180008860809380008FEF9FEFCD
:1006E00012C09091800098609093800023E030E0E9
:1006F000281B3109220F331F8FEF9FEF02C0969501
:1007000087952A95E2F790938D0080938C00089549
:100710008B3B910568F4883A910530F5853A91054F
:10072000C0F48430910598F4019709F06FC071C04E
:10073000803E910508F46AC0883E910540F09C0116
:10074000205F31092031310508F060C05CC09C0198
:10075000A1C0853A910509F45FC0863A910509F474
:100760005EC023E830E496C0883A910509F45AC087
:10077000893A910509F459C08A3A910509F458C09B
:100780008B3A910509F457C08C3A910509F456C08B
:100790008D3A910509F455C0803B910509F454C088
:1007A0008E3A910509F453C08F3A910509F452C06D
:1007B000813B910509F451C0823B910509F450C079
:1007C000833B910509F44FC0843B910509F44EC069
:1007D000853B910509F44DC0863B910509F44CC059
:1007E000873B910509F44BC0883B910509F44AC049
:1007F000893B910509F449C08A3B910509F048C03D
:100800002AE236E447C09C01306544C020E030E075
:1008100041C021E030E03EC021E830E43BC022E8A6
:1008200030E438C022EE34E435C029EE34E432C07E
:100830002AEE34E42FC025EB34E42CC026EB34E45C
:1008400029C027EB34E426C02CEC34E423C02DEC83
:1008500034E420C023E835E41DC02AE835E41AC09A
:1008600022E935E417C024E935E414C021E236E476
:1008700011C023E236E40EC024E236E40BC025E2C8
:1008800036E408C026E236E405C027E236E402C0BA
:1008900020E034E4C90108959CE0799FF00111241F
:1008A0009CE3899FE00DF11D1124E60FF11DEE0F71
:1008B000FF1FE25DFE4F25913491C9010895880F15
:1008C000991F82559040FC0125913491C9010895EA
:1008D000880F991F825D9E4FFC0125913491C901BB
:1008E00008950E944C049C019A9581159F4110F433
:1008F000C9010895C90190528115904128F4C90198
:100900009F700E9468040895C90190538115904119
:1009100020F4C9019927906C0895C901905440971B
:1009200028F4C9018F709927946D0895203180E4CF
:10093000380719F480E091ED0895213190E43907EA
:1009400019F480E090ED0895223140E4340719F461
:1009500080E092ED0895233180E4380719F480E0B7
:1009600093ED0895211590E5390799F40E945623D7
:1009700040E065E088E491E00E94600F2FEF44E3DF
:100980008CE0215040408040E1F700C000000C9412
:10099000FE29213090E5390731F48091F002816021
:1009A0008093F0020895C90190558115904108F097
:1009B00062C0432F55274F70552741305105F9F438
:1009C000C90174E0880F991F7A95E1F78827937021
:1009D000B901E3E0660F771FEA95E1F760767727C4
:1009E000862B972B9C682370332702C0440F551F1A
:1009F0002A95E2F74F715527842B952B08954230A5
:100A0000510529F4922F8827816F906A0895433009
:100A10005105B9F4C90153E0880F991F5A95E1F7C0
:100A2000807E97702370332741E050E002C0440F6E
:100A3000551F2A95E2F74F715527842B952B9C68FB
:100A400008954430510589F5C90143E0880F991F85
:100A50004A95E1F7807E97702370332741E050E09C
:100A600002C0440F551F2A95E2F74F715527842B7A
:100A7000952B9A680895C90190568115904118F4F4
:100A8000C901906F0895C90190578115904120F4D4
:100A9000C9019F7090620895C901905881159041D5
:100AA00020F4C9019F70906A0895203E3105E0F45A
:100AB000203C310568F52133310509F475C048F44F
:100AC0002932310509F46BC02A32310509F07BC0A7
:100AD00075C02933310501F122383105E9F025339C
:100AE000310509F070C051C0233E3105B1F140F429
:100AF000203E3105D1F0223E310509F064C01CC012
:100B0000263E310579F1273E310509F05CC038C039
:100B1000C9010E945F0408958091010380FD02C015
:100B200081FF51C080EE90E04FC08091010380FFB3
:100B3000F9CF89E390E048C08091010382FF0AC0A9
:100B40008091010384FF03C080E090E03DC083EE0C
:100B500090E03AC082EE90E037C08091010382FFBE
:100B6000EFCFF8CF8091010383FF07C0809101038D
:100B700084FDEACF87EE90E027C086EE90E024C0A7
:100B80008091010383FFF2CFF8CF8091010385FFAD
:100B900003C089E290E018C085E390E015C0809121
:100BA000010385FDF9CFF5CF8091010386FF03C0D6
:100BB0008AE290E009C081E390E006C080910103E1
:100BC00086FDF9CFF5CFC9010E94880308950895E5
:100BD0005F926F927F928F929F92AF92BF92CF92CD
:100BE000DF92EF92FF920F931F93CF93DF93CDB7D6
:100BF000DEB72A970FB6F894DEBF0FBECDBF9E01B9
:100C00002F5F3F4F4E018BE0880E911C60E070E03B
:100C100000E010E0E12CF12CC12CD12CA12CB12C46
:100C20008AE0782E622E532E41E050E0E3E9F1E0B5
:100C3000A62DB52D872D01900D928A95E1F7F9012A
:100C4000819191919F01FC01E07FFF27E032F10546
:100C500059F48F709927FA0102C0EE0FFF1F8A9591
:100C6000E2F7AE2ABF2A37C0E033F10559F48F709E
:100C70009927FA0102C0EE0FFF1F8A95E2F7CE2AEC
:100C8000DF2A29C0E034F10559F48F709927FA0161
:100C900002C0EE0FFF1F8A95E2F7EE2AFF2A1BC063
:100CA000E035F10559F48F709927FA0102C0EE0F73
:100CB000FF1F8A95E2F70E2B1F2B0DC0E036F105C2
:100CC00051F48F709927FA0102C0EE0FFF1F8A9529
:100CD000E2F76E2B7F2B2815390509F0A7CF94B1C9
:100CE0008A2D8095892384B985B18A2985B997B1E0
:100CF0008C2D8095892387B988B18C2988B99AB1C0
:100D00008E2D809589238AB98BB18E298BB99DB19F
:100D1000802F809589238DB98EB1802B8EB990B3A9
:100D2000862F8095892380BB81B3862B81BB2A9631
:100D30000FB6F894DEBF0FBECDBFDF91CF911F91EC
:100D40000F91FF90EF90DF90CF90BF90AF909F906A
:100D50008F907F906F905F9008955F926F927F92D7
:100D60008F929F92AF92BF92CF92DF92EF92FF92BB
:100D70000F931F93CF93DF93CDB7DEB768970FB66E
:100D8000F894DEBF0FBECDBF85B7806885BF85B73D
:100D9000806885BF0E94E8059E012F5F3F4F4E018E
:100DA00089E1880E911C60E070E000E010E0E12C29
:100DB000F12CC12CD12CA12CB12C98E1792E622ED2
:100DC000532E41E050E0EDE9F1E0A62DB52D872D41
:100DD00001900D928A95E1F7F901819191919F011E
:100DE000FC01E07FFF27E032F10559F48F7099276D
:100DF000FA0102C0EE0FFF1F8A95E2F7AE2ABF2A62
:100E000037C0E033F10559F48F709927FA0102C019
:100E1000EE0FFF1F8A95E2F7CE2ADF2A29C0E034C1
:100E2000F10559F48F709927FA0102C0EE0FFF1FE8
:100E30008A95E2F7EE2AFF2A1BC0E035F10559F446
:100E40008F709927FA0102C0EE0FFF1F8A95E2F713
:100E50000E2B1F2B0DC0E036F10551F48F70992732
:100E6000FA0102C0EE0FFF1F8A95E2F76E2B7F2B6F
:100E70002815390509F0A7CF94B18A2D80958923CB
:100E800084B985B18A2985B997B18C2D809589233C
:100E900087B988B18C2988B99AB18E2D809589231C
:100EA0008AB98BB18E298BB99DB1802F809589230A
:100EB0008DB98EB1802B8EB990B3862F8095892302
:100EC00080BB81B3862B81BB10922902109228022D
:100ED000109233021092320210922B0210922A02C8
:100EE000109235021092340210922D0210922C02B0
:100EF000109237021092360210922F0210922E0298
:100F0000109239021092380210923102109230027F
:100F100010923B0210923A0287E393E0892BB9F0DA
:100F200068960FB6F894DEBF0FBECDBFDF91CF91AC
:100F30001F910F91FF90EF90DF90CF90BF90AF90F7
:100F40009F908F907F906F905F900C94370368967E
:100F50000FB6F894DEBF0FBECDBFDF91CF911F91CA
:100F60000F91FF90EF90DF90CF90BF90AF909F9048
:100F70008F907F906F905F9008955F926F927F92B5
:100F80008F929F92AF92BF92CF92DF92EF92FF9299
:100F90000F931F93CF93DF93CDB7DEB7A2970FB612
:100FA000F894DEBF0FBECDBF7E0149E1E40EF11C17
:100FB00022E3C22E22E0D22E5E0153E2A50EB11C26
:100FC0003AE0532E470101E010E048E1642E55E07D
:100FD000752EE3E9F1E0D401852D01900D928A95FB
:100FE000E1F7F701819191917F019C01207F3327E7
:100FF0002032310589F424B18F709927A80102C0ED
:10100000440F551F8A95E2F7CA01242B24B995B1E4
:101010008095892385B94FC02033310589F427B1E4
:101020008F709927F80102C0EE0FFF1F8A95E2F733
:10103000CF012E2B27B998B18095892388B93BC061
:101040002034310589F42AB18F709927A80102C094
:10105000440F551F8A95E2F7CA01242B2AB99BB188
:10106000809589238BB927C02035310589F42DB1AE
:101070008F709927F80102C0EE0FFF1F8A95E2F7E3
:10108000CF012E2B2DB99EB1809589238EB913C027
:101090002036310581F420B38F709927A80102C052
:1010A000440F551F8A95E2F7CA01242B20BB91B348
:1010B0008095892381BB50EA5A95F1F7BE016F5F95
:1010C0007F4F80E090E020E030E0EDE9F1E0DE01EC
:1010D0001196462D01900D924A95E1F7FB01419141
:1010E0005191BF01FA01E07FFF27E032F10511F4D1
:1010F000E3B113C0E033F10511F4E6B10EC0E03402
:10110000F10511F4E9B109C0E035F10511F4ECB1D4
:1011100004C0E036F105B9F4EFB1F0E04F705527A7
:1011200002C0F595E7954A95E2F7E0FD08C0A801F1
:10113000022E02C0440F551F0A94E2F702C040E09D
:1011400050E0842B952B2F5F3F4F2C30310509F059
:10115000BCCFF601208131812817390721F0918316
:101160008083709270010E94E805F2E0CF0ED11CDE
:10117000EA14FB0409F02DCF809170018823A1F1BE
:10118000815080937001882339F08FE99FE00197A7
:10119000F1F700C0000028C0809132029091330224
:1011A0009093290280932802809134029091350215
:1011B00090932B0280932A028091360290913702FD
:1011C00090932D0280932C028091380290913902E5
:1011D00090932F0280932E0280913A0290913B02CD
:1011E000909331028093300282E493E0892B11F0D6
:1011F0000E94420381E0A2960FB6F894DEBF0FBEB4
:10120000CDBFDF91CF911F910F91FF90EF90DF90B5
:10121000CF90BF90AF909F908F907F906F905F9096
:101220000895E82FF0E0EE0FFF1FE85DFD4F80818D
:10123000918108950895CF92DF92EF92FF920F93DC
:101240001F93CF93DF93CDB7DEB7CC5BD2400FB601
:10125000F894DEBF0FBECDBF8C01862F642F88238C
:1012600079F0F80192812FE7482F992329F083E044
:1012700093E00E94C41904C083E093E00E94D41953
:10128000F80180818B3091F59181943009F0A8C2EA
:101290009281809173019923B1F08F5F80937301E4
:1012A00096E4E5EBF1E0DE01A958BD4F01900D9207
:1012B0009A95E1F7E0917101F0917201EE0FFF1F35
:1012C00027E732E036C096E4E5EBF1E0DE01AF5C03
:1012D000BD4F01900D929A95E1F7E0917101F09167
:1012E0007201EE0FFF1F21E332E093C08A3009F054
:1012F000CBC0F8019181943009F072C29281809143
:101300007301992309F473C081508093730196E4AB
:10131000E5EBF1E0DE01A551BE4F01900D929A95EB
:10132000E1F7E0917101F0917201EE0FFF1F2BEEDA
:1013300031E02C0F3D1FE20FF31F60817181680FB8
:10134000711D882777FD8095982F0E94AC3120E091
:1013500030E040E451E40E94113120E030E040E808
:1013600050E40E94A9309B01AC0160E070E080E095
:1013700090E40E94C33221E230ED42E053E40E9447
:1013800060324CE050E00E94BB0F20E04BE760E091
:1013900083E093E00E94B41920E04BE761E083E032
:1013A00093E00E94B41920E04BE762E083E093E011
:1013B0000E94B41920E04BE763E083E093E00E94D1
:1013C000B41920E04BE764E083E093E0C454DD4FC0
:1013D0000FB6F894DEBF0FBECDBFDF91CF911F9146
:1013E0000F91FF90EF90DF90CF900C94B41996E49A
:1013F000E5EBF1E0DE01AB55BE4F01900D929A9501
:10140000E1F7E0917101F0917201EE0FFF1F25EA03
:1014100031E02C0F3D1FE20FF31F60817181680FD7
:10142000711D882777FD8095982F0E94AC3120E0B0
:1014300030E040E451E40E94113120E030E040E827
:1014400050E40E94A9309B01AC0160E070E080E0B4
:1014500090E40E94C33221E230ED42E053E40E9466
:1014600060320E94EB0CC454DD4F0FB6F894DEBF1F
:101470000FBECDBFDF91CF911F910F91FF90EF90E5
:10148000DF90CF900C94BE0C893009F0D3C0F801E6
:101490009181943009F0A4C19281992309F4A0C1EB
:1014A00080917101909172010196909372018093E5
:1014B000710120E04BE760E083E093E00E94B41903
:1014C00020E04BE761E083E093E00E94B41920E064
:1014D0004BE762E083E093E00E94B41920E04BE721
:1014E00063E083E093E00E94B41920E04BE764E0FE
:1014F00083E093E00E94B4190E94BE0C00E010E06B
:10150000E6E4FE2E80917301E5EBF1E0DE01A15AE5
:10151000BE4F9F2D01900D929A95E1F7E0917101D8
:10152000F0917201E00FF11FEE0FFF1F2FE531E088
:101530002C0F3D1FE20FF31F60817181680F711D39
:10154000882777FD8095982F0E94AC3120E030E00D
:1015500040E451E40E94113120E030E040E850E4E2
:101560000E94A9309B01AC0160E070E080E090E453
:101570000E94C33221E230ED42E053E40E94603227
:101580004CE050E00E94BB0F3FEF87EE93E03150FC
:1015900080409040E1F700C0000080917301E5EBCE
:1015A000F1E0DE01A75EBE4F9F2D01900D929A954E
:1015B000E1F7E0917101F0917201E00FF11FEE0F80
:1015C000FF1F29E131E02C0F3D1FE20FF31F608167
:1015D0007181680F711D882777FD8095982F0E9473
:1015E000AC3120E030E040E451E40E94113120E0D1
:1015F00030E040E850E40E94A9309B01AC0160E07B
:1016000070E080E090E40E94C33221E230ED42E0DD
:1016100053E40E9460320E94EB0C8FEF9CE701972D
:10162000F1F700C000000F5F1F4F0830110509F0EF
:1016300069CF94C1883009F0D3C0F801918194300A
:1016400009F0CEC09281992309F4CAC0809171013A
:10165000909172010197909372018093710120E043
:101660004BE760E083E093E00E94B41920E04BE791
:1016700061E083E093E00E94B41920E04BE762E070
:1016800083E093E00E94B41920E04BE763E083E03D
:1016900093E00E94B41920E04BE764E083E093E01C
:1016A0000E94B4190E94BE0C00E010E056E4F52E32
:1016B00080917301E5EBF1E0DE01AD52BF4F9F2D4C
:1016C00001900D929A95E1F7E0917101F09172010C
:1016D000E00FF11FEE0FFF1F23ED30E02C0F3D1F39
:1016E000E20FF31F60817181680F711D882777FDFC
:1016F0008095982F0E94AC3120E030E040E451E426
:101700000E94113120E030E040E850E40E94A9300E
:101710009B01AC0160E070E080E090E40E94C33285
:1017200021E230ED42E053E40E9460324CE050E0B0
:101730000E94BB0F3FEF87EE93E031508040904016
:10174000E1F700C0000080917301E5EBF1E0DE01FC
:10175000A357BF4F9F2D01900D929A95E1F7E0910D
:101760007101F0917201E00FF11FEE0FFF1F2DE8E4
:1017700030E02C0F3D1FE20FF31F60817181680F75
:10178000711D882777FD8095982F0E94AC3120E04D
:1017900030E040E451E40E94113120E030E040E8C4
:1017A00050E40E94A9309B01AC0160E070E080E051
:1017B00090E40E94C33221E230ED42E053E40E9403
:1017C00060320E94EB0C8FEF9CE70197F1F700C0AD
:1017D00000000F5F1F4F0830110509F069CFBEC030
:1017E000F801228190917301222309F45DC026E45F
:1017F000E5EBF1E0DE01A95BBF4F01900D922A9568
:10180000E1F7E0917101F0917201E80FF11DEE0F27
:10181000FF1F27E430E02C0F3D1FE20FF31F608114
:101820007181690F711D882777FD8095982F0E941F
:10183000AC3120E030E040E451E40E9411316B0112
:101840007C01F801818165E070E0681B71098827DF
:1018500077FD8095982F0E94AC319B01AC01C701A8
:10186000B6010E94A9309B01AC0160E070E080E00D
:1018700090E40E94C33221E230ED42E053E40E9442
:1018800060324FE050E0C454DD4F0FB6F894DEBF35
:101890000FBECDBFDF91CF911F910F91FF90EF90C1
:1018A000DF90CF900C94BB0F26E4E5EBF1E0DE0176
:1018B000119601900D922A95E1F7E0917101F09156
:1018C0007201E80FF11DEE0FFF1F21E030E02C0F39
:1018D0003D1FE20FF31F60817181690F711D882721
:1018E00077FD8095982F0E94AC3120E030E040E4F5
:1018F00051E40E9411316B017C01F801818165E0A6
:1019000070E0681B7109882777FD8095982F0E94E9
:10191000AC319B01AC01C701B6010E94A9309B010B
:10192000AC0160E070E080E090E40E94C33221E20C
:1019300030ED42E053E40E946032C454DD4F0FB6F4
:10194000F894DEBF0FBECDBFDF91CF911F910F91F5
:10195000FF90EF90DF90CF900C94EB0CC454DD4FD0
:101960000FB6F894DEBF0FBECDBFDF91CF911F91B0
:101970000F91FF90EF90DF90CF9008951092870223
:1019800010928602809171008D7F8093710080910A
:1019900090008F7780939000109248021092470237
:1019A00010928002109281021092820210928302A1
:1019B00010927F0210927E02EEE5F2E0AEE4B2E019
:1019C00011921192119211921D921D9282E0EE37A6
:1019D000F807B1F708956F927F928F929F92AF921E
:1019E000BF92CF92DF92EF92FF920F931F93CF930C
:1019F000DF936B017C010EE712E04CE5A42E42E080
:101A0000B42EC7E0D0E0A7019601F801929182912F
:101A1000729162918F010E940D31882349F02197C4
:101A2000F2E0AF1AB108CF3F8FEFD80761F734C0AB
:101A3000F8011082118212821382F5011182108244
:101A4000FE01EE0FFF1FEE0FFF1FE25AFD4FDE01FA
:101A5000AA0FBB1FA25BBD4FCE011AC001964481E5
:101A600055816681778140835183628373831482B9
:101A700015821682178212962D913C91139711961A
:101A80003C932E9313961C921E92129734961296A4
:101A90008730910519F7C3CF809186029091870214
:101AA000019797FD05C0909387028093860204C03A
:101AB0001092870210928602E0918602F0918702CE
:101AC0003097C9F4809171008D7F8093710080916F
:101AD00090008F7780939000109280021092810284
:101AE000109282021092830210927F0210927E0264
:101AF0001092470285C03197DF01AA0FBB1FAA0FC2
:101B0000BB1FA25ABD4FCD90DD90ED90FC90EE0F23
:101B1000FF1FE25BFD4FC081D18160908002709019
:101B200081028090820290908302A7019601662D27
:101B3000772D882D992D0E940D3187FF25C0262DE8
:101B4000372D482D592DC701B6010E94A83020E03D
:101B500030E04AEF54E40E9411315B018C012A2DE0
:101B60003B2D402F512F662D772D882D992D0E94CA
:101B7000A9303B014C01A7019601772D992D0E94B8
:101B80000D31181664F72EC0A7019601662D772D2A
:101B9000882D992D0E945C32181634F5A701960104
:101BA000662D772D882D992D0E94A83020E030E0F9
:101BB0004AEF54E40E9411315B018C012A2D3B2D28
:101BC000402F512F662D772D882D992D0E94A830FA
:101BD0003B014C01A7019601772D992D0E945C32A3
:101BE00087FFECCF10924D02C0928002D09281020A
:101BF000E0928202F0928302D0937F02C0937E0231
:101C0000DF91CF911F910F91FF90EF90DF90CF90D8
:101C1000BF90AF909F908F907F906F9008953E9A65
:101C2000E1E7F0E080818D7F808382E08093900007
:101C30008AE18093910008951F920F920FB60F9240
:101C40001124CF92DF92EF92FF922F933F934F9305
:101C50005F936F937F938F939F93AF93BF93CF9334
:101C6000DF93EF93FF9380914702882309F479C0B3
:101C700020E030E0A90160918002709181028091A2
:101C80008202909183020E945C3218160CF069C0A7
:101C900020E030E040E251E46091490270914A0254
:101CA00080914B0290914C020E945C321816BCF459
:101CB00080918402909185020196609186027091D4
:101CC00087020E9448349093850280938402109288
:101CD000490210924A0210924B0210924C02C0919B
:101CE0008402D0918502CC0FDD1FCC0FDD1FC25ABC
:101CF000DD4F288139814A815B8160E074E284E7AD
:101D00009BE40E9411310E94793170939700609397
:101D10009600288139814A815B8160E074E284E722
:101D20009BE40E9411310E947931759567957093FB
:101D300099006093980020E030E040E85FE3609114
:101D4000490270914A0280914B0290914C020E948C
:101D5000A9306093490270934A0280934B0290939A
:101D60004C0280914802882309F493C0C09043023A
:101D7000D0904402E0904502F090460220E030E02E
:101D8000A901C701B6010E945C321816F4F4A7013C
:101D9000960160E074E284E79BE40E9411310E94A6
:101DA00079317093970060939600A701960160E0E7
:101DB00074E284E79BE40E9411310E9479317595A9
:101DC0006795709399006093980060913D027091BF
:101DD0003E026F5F7F4F70933E0260933D0280E052
:101DE00090E00E94AA3120913F0230914002409140
:101DF0004102509142020E945C3287FD4AC08091AC
:101E00003C028F5F80933C029091F0038917A0F011
:101E10008091F503882319F010923C020DC0809147
:101E200071008D7F80937100809190008F778093F7
:101E30009000109248022DC0E091F103F091F2035E
:101E400080913C0298E0899FE00DF11D1124808172
:101E50009181A281B3818093430290934402A09325
:101E60004502B093460220E030E040E85EE3648142
:101E70007581868197810E94603260933F027093E2
:101E80004002809341029093420210923E021092CF
:101E90003D02FF91EF91DF91CF91BF91AF919F9163
:101EA0008F917F916F915F914F913F912F91FF9013
:101EB000EF90DF90CF900F900FBE0F901F9018956E
:101EC0000F931F93CF93DF9300D0CDB7DEB78C0174
:101ED00080914702882331F04A8369830E94BE0CB7
:101EE00069814A8181E0809348021093F203009354
:101EF000F1036093F0034093F503109249021092AE
:101F00004A0210924B0210924C0210923C02F801CD
:101F10004081518162817381409343025093440216
:101F2000609345027093460220E030E040E85EE3B3
:101F300064817581868197810E94603260933F023F
:101F400070934002809341029093420210923E02AD
:101F500010923D02809171008260809371008091A7
:101F600090008068809390000F900F90DF91CF9148
:101F70001F910F9108956F927F928F929F92AF92CF
:101F8000BF92CF92DF92EF92FF920F931F93CF9366
:101F9000DF936B017C01EA018091480281110E946C
:101FA000BE0C81E08093470220E030E0A901C70128
:101FB000B6010E945C3218160CF09AC06090800244
:101FC00070908102809082029090830220E030E045
:101FD000A901662D772D882D992D0E940D31811133
:101FE00028C0C0928002D0928102E0928202F092D8
:101FF0008302D0937F02C0937E02809186029091EB
:102000008702FC01EE0FFF1FEE0FFF1FE25AFD4F8C
:10201000C082D182E282F382FC01EE0FFF1FE25BFD
:10202000FD4FD183C08301969093870280938602EF
:102030005FC0A7019601662D772D882D992D0E94EE
:102040000D3187FF25C0262D372D482D592DC7016D
:10205000B6010E94A83020E030E04AEF54E40E942C
:1020600011315B018C012A2D3B2D402F512F662D04
:10207000772D882D992D0E94A9303B014C01A70195
:102080009601772D992D0E940D31181664F7A9CF6E
:10209000A7019601662D772D882D992D0E945C321F
:1020A00018160CF09ECFA7019601662D772D882D6E
:1020B000992D0E94A83020E030E04AEF54E40E94BD
:1020C00011315B018C012A2D3B2D402F512F662DA4
:1020D000772D882D992D0E94A8303B014C01A70136
:1020E0009601772D992D0E945C3287FFECCF79CF36
:1020F000809171008260809371008091900080686F
:1021000080939000DF91CF911F910F91FF90EF90FE
:10211000DF90CF90BF90AF909F908F907F906F9007
:102120000895809191020895CF93DF9300D01F927C
:10213000CDB7DEB72091FA03243021F523E02983BF
:102140009B838A832093E9008FEF06C095ED9A95D3
:10215000F1F70000882329F09091E800815095FF65
:10216000F5CF8091E80085FF0DC040E050E063E0CE
:1021700070E0CE0101960E947E148091E8008E7777
:102180008093E8000F900F900F90DF91CF9108950A
:10219000CF93DF9300D01F92CDB7DEB72091FA0323
:1021A000243029F522E029839B838A8383E080936E
:1021B000E9008FEF06C095ED9A95F1F700008823AE
:1021C00029F09091E800815095FFF5CF8091E800CB
:1021D00085FF0DC040E050E063E070E0CE01019665
:1021E0000E947E148091E8008E778093E8000F9023
:1021F0000F900F90DF91CF9108952091FA03243032
:10220000F9F422E02093E9002FEF06C035ED3A956E
:10221000F1F70000222329F03091E800215035FF2A
:10222000F5CF2091E80025FF0BC040E050E065E0CD
:1022300070E00E947E148091E8008E778093E80021
:102240000895CF93DF93EC018091FA03843041F538
:1022500081E08093E9008FEF06C095ED9A95F1F744
:102260000000882329F09091E800815095FFF5CF78
:102270008091E80085FF14C040E050E068E070E025
:10228000CE010E947E148091E8008E778093E80052
:1022900088E0FE01A9E8B2E001900D928A95E1F78D
:1022A000DF91CF910895BF92CF92DF92EF92FF928C
:1022B0000F931F93CF93DF937C01B62EE90100E0CB
:1022C00010E0C42ED12C0BC04991202F2B0D2F775D
:1022D0004F776FE0C7010E94B4190F5F1F4F0C15B5
:1022E0001D0594F3DF91CF911F910F91FF90EF9017
:1022F000DF90CF90BF90089570E06F5F7F4F6F7059
:1023000077270C94B4190F931F93CF93C42F633086
:10231000710509F04AC0842F807F803849F18039E7
:1023200009F043C0622F6F7770E080E090E00E9478
:10233000AC3120E030E040E451E40E9411319B01D7
:10234000AC0160E070E080E090E40E94C3320F775F
:1023500010E023E0159507952A95E1F72DEC3CEC6C
:1023600042E053E40E946032A8010E94BB0F1DC0EE
:10237000622F6F7770E080E090E00E94AC3120E047
:1023800030E040E451E40E9411319B01AC0160E077
:1023900070E080E090E40E94C3322DEC3CEC42E01F
:1023A00053E40E9460320E94EB0CCC3F29F4CF91A1
:1023B0001F910F910C94BE0CCF911F910F91089516
:1023C0000F931F93CF93DF93CDB7DEB727970FB649
:1023D000F894DEBF0FBECDBF8C0114C08A810E946D
:1023E0008E199A819D839B819E839C819F838111FD
:1023F0001EC089818430B1F08730A1F08630A1F011
:102400008530A1F0BE016F5F7F4F84E791E00E94AD
:10241000FB1C8111E3CF84E791E00E94EC1C0E9439
:1024200067190DC083E003C082E001C081E0AE0106
:102430004B5F5F4F682FC8010E94211AE3CF279698
:102440000FB6F894DEBF0FBECDBFDF91CF911F91C5
:102450000F910895EF92FF920F93CF93DF9300D0E7
:1024600000D000D0CDB7DEB77B014A832B830C832D
:10247000842F2E834D830E948E192E814D818111D0
:102480001BC082E0E816F10479F083E0E816F1045D
:1024900021F0EA94EF2821F50BC0073F11F487E003
:1024A00001C084E089830BC0273FD9F786E0FACFCB
:1024B000473FB9F785E0F6CF42954F704983BE019B
:1024C0006F5F7F4F84E791E00E94B11C84E791E049
:1024D0000E94CF1C84E791E00E94EC1C0E946719C7
:1024E00026960FB6F894DEBF0FBECDBFDF91CF9119
:1024F0000F91FF90EF9008958091F903811109C029
:102500000E946D160E94CA168091E200846080933A
:10251000E20008951092F9030895089508950C9427
:102520006129809192028F5F8093920262E30E9400
:102530002834911135C01092920280919302882321
:1025400079F18091FA03843049F58091E9008F7028
:102550009091EC0090FF02C090E801C090E0982BB1
:1025600084E08093E9008091EB0080FF14C08091AB
:10257000EE0087FD03C00FC01092F1008091E800CB
:1025800085FDFACF8091E80080FF05C08091E800CA
:102590008E778093E8009F709093E90010929302E9
:1025A000089542E061EC81E00E94E31542E061ECB5
:1025B00082E00E94E31542E061EC83E00E94E315B3
:1025C00042E261EC84E00E94E31542E361E885E0C9
:1025D0000E94E31542E360E886E00C94E3158091E5
:1025E000FC03833009F454C030F4813071F0823040
:1025F00009F0A5C08CC08A3009F479C08B3009F489
:102600005FC0893009F09BC020C08091FB03813AF4
:1026100009F095C08091E800877F8093E800809161
:10262000FF0390910004892B21F060E080E090E0AE
:1026300003C068E089E892E070E00E941C15809178
:10264000E8008B778093E80008958091FB03813246
:1026500009F075C08091FF0390910004892B09F067
:102660006EC08091E800877F8093E80005C080916C
:10267000FA03882309F463C08091E80082FFF7CF52
:102680008091F100809391028091E8008B7753C094
:102690008091FB03813A09F052C08091FF03909131
:1026A0000004892B09F04BC08091E800877F80935C
:1026B000E8008091E80080FFFCCF80918A0136C05D
:1026C0008091FB038132D9F58091FF039091000442
:1026D000892BA9F58091E800877F8093E8000E940C
:1026E0001A168091FD0380938A010C9456238091E1
:1026F000FB03813221F58091E800877F8093E80019
:102700000E941A168091FE0380938802089580919A
:10271000FB03813AA1F48091E800877F8093E80071
:102720008091E80080FFFCCF809188028093F100C7
:102730008091E8008E778093E8000C941A16089533
:1027400083E093E00E94F0196AE272E183E093E093
:102750000E94461A60EE71E183E093E00E944A1AFB
:1027600084B7877F84BF88E10FB6F89480936000B8
:10277000109260000FBE90E080E80FB6F89480934E
:102780006100909361000FBE0E94741D0E946D163F
:102790000E94CA168091E20084608093E2007894DF
:1027A00063E871E183E093E00E94EC196CE771E16A
:1027B00083E093E00E94E41963E571E183E093E034
:1027C0000E94E8190E940F0E0E9467190E94761D50
:1027D00080E891E00E94201D0BC00E941E2980917C
:1027E000F803882329F00E94492981110E94681466
:1027F0008091FA03853089F383E093E00E94F91B0E
:102800000E94801DF5CF292F332723303105B1F0E9
:102810004CF42130310509F44DC02230310509F066
:102820004EC007C02132310541F12232310591F10C
:1028300046C0E0EDF0E084EE93E045C0992781309A
:10284000910569F08230910589F0892B09F037C034
:10285000E0EEF3E0E491F0E080EE93E034C0E2EBF0
:10286000F3E0E491F0E082EB93E02DC0E6E8F3E0E2
:10287000E491F0E086E893E026C0643000F5E62FAE
:10288000F0E0EE0FFF1FE550FE4F80819181E9E0FF
:10289000F0E019C0643098F4E62FF0E0DF01AA0FF1
:1028A000BB1FAD5FBD4F8D919C91E55FFD4FE081FA
:1028B000F0E009C0E2E1F0E084EB94E004C0E0E085
:1028C000F0E080E090E0DA018D939C93CF010895D1
:1028D00080E189BD82E189BD09B400FEFDCF809110
:1028E000D8008F7D8093D8008091E0008260809333
:1028F000E0008091E00081FDFCCF0895BF92CF926F
:10290000DF92EF92FF920F931F93CF93DF937C019F
:102910008B01EA010E943B16B82E811133C020972B
:1029200031F028813981021B130BE20EF31EC12CFA
:10293000D12C23C08091E80085FD15C08091E8006E
:102940008E778093E800209749F0888199818C0DDB
:102950009D1D9983888325E0B22E14C00E943B16EA
:10296000882359F00EC0F70181917F018093F10017
:1029700001501109FFEFCF1ADF0A01151105D1F639
:1029800001C0B82E8B2DDF91CF911F910F91FF9039
:10299000EF90DF90CF90BF900895BF92CF92DF92DB
:1029A000EF92FF920F931F93CF93DF937C018B01E4
:1029B000EA010E943B16B82E811133C0209731F0F6
:1029C00028813981021B130BE20EF31EC12CD12C7E
:1029D00023C08091E80085FD15C08091E8008B77C9
:1029E0008093E800209749F0888199818C0D9D1D86
:1029F0009983888345E0B42E14C00E943B16882337
:102A000059F00EC08091F100F70181937F010150D0
:102A10001109FFEFCF1ADF0A01151105D1F601C028
:102A2000B82E8B2DDF91CF911F910F91FF90EF90DA
:102A3000DF90CF90BF90089540910104509102041F
:102A40004617570748F06115710539F44091E800C1
:102A50004E774093E80001C0BA01FC0140E033C06A
:102A60008091FA03882309F444C0853009F443C0F7
:102A70008091E80083FD41C08091E80082FD33C071
:102A80008091E80080FF1FC09091F3008091F200D8
:102A9000392F20E0A901482BCA0106C0419140937B
:102AA000F1006150710901966115710519F08830C6
:102AB0009105A0F341E0089709F040E08091E8001B
:102AC0008E778093E8006115710551F64111C8CFEA
:102AD0000AC08091FA03882361F0853061F080910B
:102AE000E80083FD0AC08091E80082FFF2CF80E019
:102AF000089582E0089583E0089581E0089540916B
:102B00000104509102044617570748F061157105FA
:102B100039F44091E8004E774093E80001C0BA01D3
:102B2000FC0140E034C08091FA03882309F445C0D9
:102B3000853009F444C08091E80083FD42C0809153
:102B4000E80082FD34C08091E80080FF20C09091B1
:102B5000F3008091F200392F20E0A901482BCA012F
:102B600007C044914093F10031966150710901967C
:102B70006115710519F08830910598F341E00897C7
:102B800009F040E08091E8008E778093E8006115BD
:102B9000710549F64111C7CF0AC08091FA03882315
:102BA00061F0853061F08091E80083FD0AC080917A
:102BB000E80082FFF2CF80E0089582E0089583E08C
:102BC000089581E00895982F2CC09093E9009817FC
:102BD00039F07091EC002091ED005091F00003C0AD
:102BE000242F762F50E021FD02C09F5F1AC0309144
:102BF000EB003E7F3093EB003091ED003D7F309352
:102C0000ED003091EB0031603093EB007093EC00FD
:102C10002093ED005093F0002091EE0027FDE5CFCA
:102C200007C0973090F28F708093E90081E008959B
:102C300080E008958091FB0387FD05C08091E80046
:102C400080FF0EC012C08091E80082FD05C0809117
:102C5000FA038111F8CF08958091E8008B7708C0BE
:102C60008091FA038111EACF08958091E8008E7770
:102C70008093E80008958091E4009091E50045E696
:102C80002091EC0020FD1FC023C02091FA032223D5
:102C900091F0253091F02091EB0025FD10C020919E
:102CA000E4003091E5002817390751F34150C9017C
:102CB00039F784E0089582E0089583E0089581E083
:102CC000089580E008952091E80020FFDECFF9CF3D
:102CD0002091E80022FFD9CFF4CF0E94DB160E949A
:102CE000E316E0EEF0E0808181608083E8EDF0E0C3
:102CF00080818F77808319BCA7EDB0E08C918E7FA7
:102D00008C9380818F7E80831092F90308950F93B6
:102D10001F93CF93DF930E94DB160E94E316C8ED4A
:102D2000D0E088818F7788838881806888838881D4
:102D30008F7D888319BC1092FA031092F6031092CB
:102D4000F8031092F70300EE10E0F80180818B7F0A
:102D5000808388818160888342E060E080E00E9417
:102D6000E315E1EEF0E080818E7F8083E2EEF0E01B
:102D7000808181608083808188608083F801808188
:102D80008E7F8083888180618883DF91CF911F91BE
:102D90000F910895E8EDF0E080818F7E8083E7ED6C
:102DA000F0E080818160808384E082BF81E0809355
:102DB000F9030C948716E8EDF0E080818E7F808324
:102DC0001092E20008951092DA001092E100089546
:102DD0001F920F920FB60F9211242F933F934F9390
:102DE0005F936F937F938F939F93AF93BF93EF9373
:102DF000FF938091E10082FF0BC08091E20082FF8F
:102E000007C08091E1008B7F8093E1000E949112C6
:102E10008091DA0080FF1FC08091D80080FF1BC026
:102E20008091DA008E7F8093DA008091D90080FF54
:102E30000DC080E189BD82E189BD09B400FEFDCFEE
:102E400081E08093FA030E947C1205C019BC1092A5
:102E5000FA030E948A128091E10080FF19C08091DC
:102E6000E20080FF15C08091E2008E7F8093E20037
:102E70008091E20080618093E2008091D8008062BE
:102E80008093D80019BC85E08093FA030E948E12CB
:102E90008091E10084FF30C08091E20084FF2CC06B
:102EA00080E189BD82E189BD09B400FEFDCF80913A
:102EB000D8008F7D8093D8008091E1008F7E809331
:102EC000E1008091E2008F7E8093E2008091E20039
:102ED00081608093E2008091F603882311F084E002
:102EE00007C08091E30087FF02C083E001C081E05A
:102EF0008093FA030E948F128091E10083FF29C022
:102F00008091E20083FF25C08091E100877F80935C
:102F1000E10082E08093FA031092F6038091E100D1
:102F20008E7F8093E1008091E2008E7F8093E200AB
:102F30008091E20080618093E20042E060E080E006
:102F40000E94E3158091F00088608093F0000E9459
:102F50008D12FF91EF91BF91AF919F918F917F91D2
:102F60006F915F914F913F912F910F900FBE0F90F6
:102F70001F9018951F920F920FB60F9211242F9346
:102F80003F934F935F936F937F938F939F93AF93F1
:102F9000BF93CF93EF93FF938091E9008F7090914F
:102FA000EC0090FF02C090E801C090E0C92FC82B50
:102FB0001092E9008091F000877F8093F000789470
:102FC0000E94FE171092E9008091F00088608093C3
:102FD000F000CF70C093E900FF91EF91CF91BF91C6
:102FE000AF919F918F917F916F915F914F913F91A1
:102FF0002F910F900FBE0F901F9018951F93CF9396
:10300000DF93CDB7DEB7AC970FB6F894DEBF0FBE37
:10301000CDBFEBEFF3E08091F100819324E0E3304A
:10302000F207C9F70E94EF128091E80083FF37C1D1
:103030008091FB039091FC03953009F488C038F42B
:103040009130B1F170F0933009F029C131C098305E
:1030500009F4F8C0993009F404C1963009F01FC191
:103060009DC0803821F0823809F019C108C08091D4
:10307000F7039091F803992389F082600FC0809143
:10308000FF03909100048F7099278093E90080914D
:10309000EB0085FB882780F91092E9009091E80009
:1030A000977F9093E8008093F1001092F100D5C0D3
:1030B000882319F0823009F0F2C08F7121F082303C
:1030C00009F0EDC00BC08091FD03813009F0E7C02D
:1030D000933009F080E08093F8032FC08091FD03C6
:1030E00081112BC08091FF03909100048F7099276C
:1030F000009709F4D4C08093E9002091EB0020FFF1
:103100001CC02091FC03233021F48091EB008062ED
:1031100012C09091EB0090619093EB0021E030E0C1
:1031200001C0220F8A95EAF72093EA001092EA0084
:103130008091EB0088608093EB001092E900809111
:10314000E800877F8093E8000E941A16A8C08111CA
:10315000A6C08091FD039091FE038F779927182FC9
:103160009091E3009078982B9093E3008091E80091
:10317000877F8093E8000E941A168091E80080FF04
:10318000FCCF8091E30080688093E300112311F06D
:1031900083E001C082E08093FA0381C080588230CE
:1031A00008F07DC08091FD039091FE038C3D23E0EB
:1031B000920779F583E08A838AE289834FB7F8948E
:1031C000DE01139620E03EE051E2E32FF0E0509361
:1031D0005700E49120FF03C0E295EF703F5FEF706E
:1031E0008E2F90E0EA3010F0C79601C0C0968D9304
:1031F0009D932F5F243149F74FBF8091E800877F6F
:103200008093E8006AE270E0CE0101960E941C15EE
:1032100013C0AE01455D5F4F6091FF030E94031430
:103220000097E9F12091E800277F2093E800BC0196
:103230008BA59CA50E947F158091E8008B778093D9
:10324000E8002DC0803859F58091E800877F809391
:10325000E8008091F6038093F1008091E8008E777A
:1032600071CF81111CC09091FD039230C0F4809108
:10327000E800877F8093E8009093F6030E941A1677
:103280008091F603811104C08091E30087FF02C0A2
:1032900084E001C081E08093FA030E94D112809102
:1032A000E80083FF0AC08091E800877F8093E800F0
:1032B0008091EB0080628093EB00AC960FB6F8949F
:1032C000DEBF0FBECDBFDF91CF911F910895CF9389
:1032D0008091FA038823B1F08091E9008F7090917A
:1032E000EC0090FF02C090E801C090E0C92FC82B0D
:1032F0001092E9008091E80083FD0E94FE17CF70D4
:10330000C093E900CF910895881F8827881F0895EA
:1033100091E0883F08F490E0892F0895982F907FDE
:10332000903B99F038F4903981F0903A71F09038F0
:10333000C9F40BC0903DA1F018F4903C99F410C072
:10334000903E19F0903F71F402C083E00895E82F99
:10335000E15FEF3038F4F0E0E15FFD4F80810895E8
:1033600082E0089580E008950F932F774F776F7074
:10337000606BDC01ED91FC91022F242F462F63E05E
:1033800070E009950F9108950F932F774F776F7025
:103390006069DC01ED91FC91022F242F462F63E040
:1033A00070E009950F9108950F932F774F776F7005
:1033B0006068DC01ED91FC91022F242F462F63E021
:1033C00070E009950F910895FC017383628308955D
:1033D000FC01738F628F0895FC01758F648F0895CF
:1033E000CF93DF93EC011DA21FA21EA2BC01685D5A
:1033F0007F4F40EC88519F4F0E942D1C1B821A82E8
:103400001D821C821F821E82198618861B861A86C0
:103410001D861C861F861E86198A188A1B8A1A8A90
:103420001D8A1C8A1F8A1E8A198E188E1B8E1A8E60
:103430001D8E1C8E1F8E1E8E19A218A2DF91CF9199
:103440000895CF92DF92FF920F931F93CF93DF9354
:103450001F92CDB7DEB7F62E6A018C0108511F4FBF
:1034600008C0F60161916F01C80149830E94341CB4
:1034700049818C2D841B8F15A0F30F90DF91CF9184
:103480001F910F91FF90DF90CF900895FC01718301
:1034900060830895FC0171A360A30895AF92BF9269
:1034A000CF92DF92EF92FF920F931F93CF93DF9310
:1034B00000D01F92CDB7DEB77C016B01142FB22E66
:1034C000A02EDC0195968C9195978430F1F45A9654
:1034D000ED91FC915B97309709F4D8C0CB0101972F
:1034E00063E070E00E943434DB01AA0FBB1FA60F1B
:1034F000B71F49832A830B834C2D4A1B9E012F5FE4
:103500003F4FBD01C7010995B1C06230710509F493
:1035100053C06330710529F06130710509F09CC01A
:1035200083C0842F807F803A01F130F48038B9F075
:10353000803909F0ABC00DC0803EE9F0803F09F151
:10354000803B09F0A3C0D7011296ED91FC9113972F
:1035500023C0D7011496ED91FC9115971DC0D7019A
:103560001696ED91FC91179717C0D7011896ED911B
:10357000FC91199711C0D7011A96ED91FC911B97F8
:103580000BC0423F09F082C0D7011C96ED91FC911F
:103590001D97309731F47AC0309709F477C0123F05
:1035A00021F42A2D4B2D62EF04C0612F6F702A2D5C
:1035B0004B2DC70109955AC0842F807F803D59F05B
:1035C000803F79F0803C09F061C0D7011E96ED91F3
:1035D000FC911F9719C0D7015096ED91FC9151971E
:1035E00013C0433F31F4D7015296ED91FC915397AC
:1035F00008C0413F09F04AC0D7015496ED91FC91B3
:103600005597309741F442C0309709F43FC0133FBB
:1036100011F0113F19F44B2D612F03C0612F6F7012
:103620004B2DC701099522C0842F0E948819882339
:1036300031F0D7015696ED91FC91579707C0163F90
:1036400029F5D7015896ED91FC9159973097F1F0F3
:10365000612FC70109950AC064307105A8F416C02E
:103660000A2D2B2D412FB601C7010995D7015E9672
:10367000ED91FC915F97309789F00A2D2B2D412F0A
:10368000B601C70109950AC0C12CD12CD7015C969F
:10369000ED91FC915D97309719F7E8CF0F900F905F
:1036A0000F90DF91CF911F910F91FF90EF90DF90DE
:1036B000CF90BF90AF900895EF92FF920F931F931A
:1036C000CF93DF93EC01162F862F0E948819882351
:1036D00069F0FDA081E08DA300E020E0412F61E0D2
:1036E00070E0CE010E944E1AFDA27CC0812F0E9484
:1036F00084194DA1882309F440C0443029F01AA34D
:1037000021E030E03FA32EA3812F0E948E1981304B
:1037100031F070F0823051F0833059F507C08DA33D
:1037200000E020E0412F61E070E01EC08DA35AC090
:10373000103F19F0173FE9F404C084E08DA31AA3E9
:103740003FC02EA13FA1C90163E070E00E94343464
:103750008C0F9D1FFC0112A3B9016F5F7F4F7FA3E8
:103760006EA30CA12BA14AA1CE010E944E1A1DA24C
:1037700039C01DA21FA21EA235C0442399F12EA15B
:103780003FA1C90163E070E00E9434347C01FE0176
:10379000E80FF91F12A3B9016F5F7F4F7FA36EA3DC
:1037A0008130910591F082E0E816F104D9F40CA182
:1037B0002BA14AA1CE010E944E1A8DA1843091F016
:1037C00081E090E09FA38EA30DC0423059F400E049
:1037D0002BA14AA1CE010E944E1A8DA1843011F076
:1037E000FFA2EEA2DF91CF911F910F91FF90EF907A
:1037F0000895CF92DF92EF92FF920F931F93CF9392
:10380000DF93EC01E8A1F9A1309709F009958E0149
:1038100008511F4FC8010E94661CE12CF12CC82ED4
:10382000D12C0FC060E0C8010E947A1C682FCE0125
:103830000E945C1B61E0C8010E948B1C8FEFE81A9C
:10384000F80AEC14FD0470F3DF91CF911F910F91F2
:10385000FF90EF90DF90CF900895FC014283748336
:1038600063831182108208950F931F93CF93DF9388
:10387000EC01062F0E94AC1C182F298130E0C901F1
:1038800001966A8170E00E944834488150E08417B4
:10389000950729F4812F0E94AF1C80E012C0EB81B4
:1038A000FC81E20FF31F00832981822F90E00196B3
:1038B0006A8170E00E9448348983812F0E94AF1C86
:1038C00081E0DF91CF911F910F910895CF93DF9306
:1038D000EC010E94AC1C29819881291710F0C22F9D
:1038E00002C0CA81C20FC91B0E94AF1C8C2FDF917E
:1038F000CF910895FC012081862F90E0820F911DC9
:10390000628170E00E9448340380F481E02DE80F6A
:10391000F91F808108950F931F93CF93DF931F9218
:10392000CDB7DEB78C0169830E94AC1C482FF8012B
:1039300080816981262F30E0280F311D6281C90105
:1039400070E00E9448348083842F0F90DF91CF91E4
:103950001F910F910C94AF1C8FB7F89408958FBFEF
:103960000895FC01CB012091FA032430B1F42181A8
:103970002F702093E90040E050E064E070E00E9486
:103980007E1481110BC09091E80095FD07C09091C5
:10399000E8009E779093E800089582E008952091D2
:1039A000FA032430A9F4FC0181818F708093E9002F
:1039B0003091F3002091F200932F80E0822B892B2D
:1039C00049F08091E8008E778093E8000C943B16D4
:1039D00082E0089580E008952091FA03243051F4A4
:1039E000FC0121812F702093E9002091E80020FD47
:1039F0000C94CF1C0895FC01CB012091FA032430D4
:103A000011F080E0089526812F702093E900209125
:103A1000E80022FFF6CF2091E80025FFF2CF40E03A
:103A200050E064E070E00E94CD148091E80085FDD4
:103A300005C08091E8008B778093E80081E00895CD
:103A400090939502809394020895E0919402F091EE
:103A50009502309721F00190F081E02D099480E0EB
:103A60000895E0919402F0919502309721F0028040
:103A7000F381E02D09940895E0919402F09195026C
:103A8000309721F00480F581E02D0994089520916C
:103A90009602309197028217930771F090939702E4
:103AA00080939602E0919402F0919502309721F074
:103AB0000680F781E02D09940895209198023091B5
:103AC00099028217930771F090939902809398025C
:103AD000E0919402F0919502309721F00084F185F5
:103AE000E02D0994089508950C94731D0E94952962
:103AF0000E94AD060E94692A0C9411300C94E705CF
:103B00005F926F927F928F929F92AF92BF92CF926D
:103B1000DF92EF92FF920F931F93CF93DF93CDB776
:103B2000DEB72A970FB6F894DEBF0FBECDBF0E9456
:103B3000BD079AE9C92E92E0D92E00E010E0AA2430
:103B4000A394B12C502E802F0E9411093C01F60144
:103B5000E190F1906F01E826F926E114F10431F4C7
:103B60000F5F1F4F0530110569F73AC08091F002D1
:103B700081FD0E941A0920E030E04501022E02C0BA
:103B8000880C991C0A94E2F7C4018E219F21892B8D
:103B900009F12E835F826820792081E0672809F48B
:103BA00080E088870E949E298160782F9A87898784
:103BB0004E815F8168858A850E94391EF801EE0F6B
:103BC000FF1FE656FD4F80819181882599259183BD
:103BD000808316C02F5F3F4F2C30310571F6C0CF68
:103BE0008FEF89838A831B820E949E298160782FB0
:103BF0009D838C8349815A816B818D810E94391EFE
:103C00000E94562D1091A4020E94251D1817D9F06C
:103C10000E94251D8093A4022A960FB6F894DEBF59
:103C20000FBECDBFDF91CF911F910F91FF90EF900D
:103C3000DF90CF90BF90AF909F908F907F906F90CC
:103C40005F900C947E1D2A960FB6F894DEBF0FBECF
:103C5000CDBFDF91CF911F910F91FF90EF90DF903B
:103C6000CF90BF90AF909F908F907F906F905F901C
:103C70000895CF93DF93CDB7DEB72B970FB6F894A7
:103C8000DEBF0FBECDBF4F83588769877A878B878A
:103C9000DE01119686E0FD0111928A95E9F785E033
:103CA000FE01379601900D928A95E1F749815A817C
:103CB0006B817C818D819E810E9415262B960FB68B
:103CC000F894DEBF0FBECDBFDF91CF910895CF93A3
:103CD000C82F882309F4C1C0823859F40E94251DD9
:103CE00081FDBBC089E30E947C280E94F82889E3FB
:103CF0000CC0833879F40E94251D80FDAEC083E599
:103D00000E947C280E94F82883E50E949E28CF917B
:103D10000C94F828843859F40E94251D82FD9DC01A
:103D200087E40E947C280E94F82887E4EECF845024
:103D3000813A48F48C2F0E94732F81118EC08C2FF2
:103D40000E947C28E4CF8C2F805E883050F4C770AE
:103D500081E090E001C0880FCA95EAF70E94BF2871
:103D6000D6CF8C2F855A833078F4C53A29F0C63ADD
:103D700031F482E890E005C081E890E002C083E879
:103D800090E0CF910C94471D8C2F885A833108F016
:103D900064C0C83A39F1C93A41F1CA3A49F1CB3A5B
:103DA00051F1CC3A59F1CD3A61F1C03B69F1CE3ACB
:103DB00071F1CF3A79F1C13B81F1C23B89F1C33B4B
:103DC00091F1C43B99F1C53BA1F1C63BA9F1C73BB9
:103DD000B1F1C83BB9F1C93BC1F1CA3BC9F58AE2AF
:103DE00092E038C082EE90E035C089EE90E032C0BB
:103DF0008AEE90E02FC085EB90E02CC086EB90E03F
:103E000029C087EB90E026C08CEC90E023C08DECBD
:103E100090E020C083E891E01DC08AE891E01AC0DC
:103E200082E991E017C084E991E014C081E292E058
:103E300011C083E292E00EC084E292E00BC085E202
:103E400092E008C086E292E005C087E292E002C0FC
:103E500080E090E0CF910C945D1DCF910895882370
:103E600009F44DC0823859F40E94251D81FF47C0D6
:103E700089E30E947C280E94F82889E30CC08338DB
:103E800071F40E94251D80FF3AC083E50E947C28C2
:103E90000E94F82883E50E949E280C94F828843814
:103EA00059F40E94251D82FF2AC087E40E947C28C5
:103EB0000E94F82887E4EFCF982F9450913A08F4A5
:103EC000EACF982F905E983058F4282F277081E021
:103ED00090E001C0880F2A95EAF70E94C528DDCF3F
:103EE000982F955A933020F480E090E00C94471D71
:103EF000885A833120F480E090E00C945D1D089591
:103F0000882321F00E94BF280C94F8280895882364
:103F100021F00E94C5280C94F8280895BF92CF92F2
:103F2000DF92EF92FF920F931F93CF93DF93CDB762
:103F3000DEB727970FB6F894DEBF0FBECDBF8C015A
:103F400085E0F801DE01119601900D928A95E1F766
:103F5000F80130812181F280558152955F70838113
:103F60009481892B39F02F3F41F481E090E03F3F6D
:103F700031F003C081E090E002C080E090E080FD7D
:103F800073C339832A8389819A815E830E94392889
:103F9000B92E8F830E9438280E9460272B2D2295EE
:103FA0002F7030E05E816F812530310509F4E6C065
:103FB0006CF4243031050CF0A2C04B2D407F8B2DCA
:103FC0008F70223031050CF045C017C02C30310500
:103FD0004CF42A3031050CF0E7C12830310509F0E6
:103FE00043C3E5C02D30310509F4BAC20CF4A2C2B6
:103FF0002F30310509F038C323C3182F411101C0F8
:1040000002C01295107FFF2059F0112309F46BC2F2
:10401000812F6F830E94CF280E94F8286F8163C28E
:10402000862F0E942F1F112309F41EC3812F0E9487
:10403000D52827960FB6F894DEBF0FBECDBFDF910F
:10404000CF911F910F91FF90EF90DF90CF90BF9095
:104050000C94F828403211F08295807F662319F085
:10406000613071F523C0FF20B1F0511101C032C0A1
:10407000513081F527960FB6F894DEBF0FBECDBF45
:10408000DF91CF911F910F91FF90EF90DF90CF9034
:10409000BF900C94DF28511101C003C0513009F4C6
:1040A000E3C28E830E94E2288E819AC1FF2021F014
:1040B000563008F0D9C20EC0553008F0D5C290C1B4
:1040C000FF20C9F0552331F0F801958190FF0BC214
:1040D0009F70958327960FB6F894DEBF0FBECDBFB5
:1040E000DF91CF911F910F91FF90EF90DF90CF90D4
:1040F000BF900C94801F552309F472C109C22B2D67
:1041000026952695237030E02115310529F02130C0
:10411000310509F0A9C219C0FF2021F0862F9B2D7F
:10412000937002C080E090E027960FB6F894DEBF4F
:104130000FBECDBFDF91CF911F910F91FF90EF90F8
:10414000DF90CF90BF900C94471DFF2021F0862F69
:104150009B2D937002C080E090E027960FB6F894F4
:10416000DEBF0FBECDBFDF91CF911F910F91FF90AA
:10417000EF90DF90CF90BF900C945D1D862FFF20B5
:1041800019F00E945C2C02C00E94C42C27960FB626
:10419000F894DEBF0FBECDBFDF91CF911F910F917D
:1041A000FF90EF90DF90CF90BF900C944B2D8B2D14
:1041B000837009F079C0F11057C2262F22952695F9
:1041C0002770220F220F862F8F70C82ED12CE12C42
:1041D000F12C022E04C0CC0CDD1CEE1CFF1C0A943A
:1041E000D2F764FF10C06FE070E080E090E004C0A0
:1041F000660F771F881F991F2A95D2F760957095D3
:104200008095909503C060E070E0CB012B2D269542
:1042100026952370422F50E042305105D9F04330AB
:10422000510569F16C297D298E299F29413051055D
:1042300051F127960FB6F894DEBF0FBECDBFDF91C8
:10424000CF911F910F91FF90EF90DF90CF90BF9093
:104250000C9475276C297D298E299F2927960FB6E6
:10426000F894DEBF0FBECDBFDF91CF911F910F91AC
:10427000FF90EF90DF90CF90BF900C9487270E9423
:104280007527C701B60127960FB6F894DEBF0FBE9B
:10429000CDBFDF91CF911F910F91FF90EF90DF90F5
:1042A000CF90BF900C946327FF2019F08B2D817065
:1042B00001C08695882309F4D7C1262F229526951B
:1042C0002770220F220F862F8F70C82ED12CE12C41
:1042D000F12C022E04C0CC0CDD1CEE1CFF1C0A9439
:1042E000D2F764FF10C06FE070E080E090E004C09F
:1042F000660F771F881F991F2A95D2F760957095D2
:104300008095909503C060E070E0CB012B2D269541
:1043100026952370422F50E042305105D9F04330AA
:10432000510569F16C297D298E299F29413051055C
:1043300051F127960FB6F894DEBF0FBECDBFDF91C7
:10434000CF911F910F91FF90EF90DF90CF90BF9092
:104350000C9414286C297D298E299F2927960FB645
:10436000F894DEBF0FBECDBFDF91CF911F910F91AB
:10437000FF90EF90DF90CF90BF900C9426280E9482
:104380001428C701B60127960FB6F894DEBF0FBEFA
:10439000CDBFDF91CF911F910F91FF90EF90DF90F4
:1043A000CF90BF900C940228603F59F120F4603EFA
:1043B00008F494C008C0623F09F467C0F0F1633F9D
:1043C00009F08CC065C0162F1F708B2D8F71FF20D8
:1043D00021F00E94AD27812F7DCE0E94C827812F1A
:1043E00027960FB6F894DEBF0FBECDBFDF91CF91F9
:1043F0001F910F91FF90EF90DF90CF90BF900C94A2
:10440000871FFF20B1F0553008F02EC18B2D8F7122
:1044100027960FB6F894DEBF0FBECDBFDF91CF91C8
:104420001F910F91FF90EF90DF90CF90BF900C9471
:10443000E727563008F018C1E9CFFF2099F08B2DFF
:104440008F7127960FB6F894DEBF0FBECDBFDF91F8
:10445000CF911F910F91FF90EF90DF90CF90BF9081
:104460000C94AD278B2D8F7127960FB6F894DEBF75
:104470000FBECDBFDF91CF911F910F91FF90EF90B5
:10448000DF90CF90BF900C94C827F110EBCFD7CF1F
:10449000FF2099F08B2D8F7127960FB6F894DEBF11
:1044A0000FBECDBFDF91CF911F910F91FF90EF9085
:1044B000DF90CF90BF900C949E2727960FB6F8946C
:1044C000DEBF0FBECDBFDF91CF911F910F91FF9047
:1044D000EF90DF90CF90BF900C949927FF20A9F028
:1044E000552309F4ACCF862F27960FB6F894DEBF7C
:1044F0000FBECDBFDF91CF911F910F91FF90EF9035
:10450000DF90CF90BF900C94671E552309F4AACF7B
:10451000862F27960FB6F894DEBF0FBECDBFDF9172
:10452000CF911F910F91FF90EF90DF90CF90BF90B0
:104530000C942F1F4B2D4F70C8010E941A03279611
:104540000FB6F894DEBF0FBECDBFDF91CF911F91A4
:104550000F91FF90EF90DF90CF90BF900C94CB26FF
:10456000F11082C09B2D9F70492F50E042305105C1
:1045700099F144F44115510569F04130510509F0B4
:1045800073C019C043305105C1F14430510509F0E1
:104590006BC044C027960FB6F894DEBF0FBECDBFE8
:1045A000DF91CF911F910F91FF90EF90DF90CF900F
:1045B000BF900C94223027960FB6F894DEBF0FBE42
:1045C000CDBFDF91CF911F910F91FF90EF90DF90C2
:1045D000CF90BF900C94393027960FB6F894DEBF79
:1045E0000FBECDBFDF91CF911F910F91FF90EF9044
:1045F000DF90CF90BF900C94553027960FB6F8946B
:10460000DEBF0FBECDBFDF91CF911F910F91FF9005
:10461000EF90DF90CF90BF900C946830862F279654
:104620000FB6F894DEBF0FBECDBFDF91CF911F91C3
:104630000F91FF90EF90DF90CF90BF900C948C3053
:104640004B2D4F70C80127960FB6F894DEBF0FBEF2
:10465000CDBFDF91CF911F910F91FF90EF90DF9031
:10466000CF90BF900C941B0927960FB6F894DEBF2D
:104670000FBECDBFDF91CF911F910F91FF90EF90B3
:10468000DF90CF90BF9008950E94DC280E94B1284F
:104690000E94F8280E94F72D0E944B2D80E090E0A8
:1046A0000E94471D80E090E00C945D1D0E94CC2884
:1046B0000C9444230E943928292F22952F7030E032
:1046C0002C3031054CF42A3031056CF4225031097C
:1046D0002230310590F407C02C30310551F02F30D5
:1046E000310559F406C0803E10F0803F31F481E07E
:1046F000089593FB882780F9089580E00895CF936B
:10470000DF9300D000D01F92CDB7DEB70F900F908F
:104710000F900F900F90DF91CF910895CF93DF937B
:1047200000D000D000D0CDB7DEB726960FB6F894F3
:10473000DEBF0FBECDBFDF91CF9108951F93CF9302
:10474000DF93C091DB0216E012C0D0E01C9FF001A5
:104750001D9FF00D1124E555FD4F4081518162816F
:104760007381848195810E948E232196C7708091E8
:10477000DC02C813EACFDF91CF911F9108954091D9
:10478000A5025091A6026091A7027091A8028091A3
:10479000A9029091AA020C948E230F931F93CF939A
:1047A000DF938091AA0282958F7009F069C0809191
:1047B000A702882309F464C0A091DB02D091DC0237
:1047C000B091A502C091A6028091A8029091A90281
:1047D00021E030E0BF3F11F020E030E0122FBC01BB
:1047E0006095709506E04AC0009721F0CF3F29F40C
:1047F000212F05C021E030E002C020E030E020FDA4
:104800003BC04A2F50E0049FF001059FF00D11249A
:10481000E555FD4F2181C2132FC02081B2132CC05A
:104820002281211129C0238134812817390718F0EA
:10483000281B390B02C0260F371F283C3105E0F436
:104840008091AA028F7080618093AA0286E0849F83
:10485000F001859FF00D1124E055FD4F80818F7090
:104860008061808385EA92E00E948E1FDF91CF9164
:104870001F910F910C949E23AF5FA770AD13B4CF1F
:10488000DF91CF911F910F910895EF92FF920F93B7
:104890001F93CF93DF93CDB7DEB762970FB6F8942F
:1048A000DEBF0FBECDBF8C0185E0F801DE011D9695
:1048B00001900D928A95E1F7D8014C9111965C9187
:1048C000119712966C9112971396ED90FC90149795
:1048D0007091A502E091A6028091A8029091A90290
:1048E000009739F0EF3F41F421E030E07F3F31F0B5
:1048F00003C021E030E002C020E030E020FD5CC1D8
:104900002091A702222309F4F1C0E816F90628F045
:104910009701281B390BC90104C0809590958E0D15
:104920009F1D883C910508F098C08091AA02982F9D
:10493000907F09F064C0E51314C0741312C06111B4
:1049400010C08F7080618093AA020E94BF2385EA05
:1049500092E00E948E1F8091AA02D80115968C9336
:1049600043C1EF2839F05F3F41F481E090E04F3FD1
:1049700031F003C081E090E002C080E090E080FD73
:1049800003C081E0862702C080E090E080FF2EC057
:104990008091DB022091DC0236E013C090E0389F6A
:1049A000F001399FF00D1124E555FD4F718157132A
:1049B00006C07081471303C07281671317C0019648
:1049C00087708213EBCF12C19F7059F0882309F4CE
:1049D0000BC107C09F7029F0F8019581907F09F401
:1049E00003C1805E883008F4FFC0D2C0662309F49A
:1049F000FBC08091AA0281608093AA02F5C0E513F2
:104A000008C0741306C0611104C0D80115968C93B8
:104A10009DC04D875E878D859E856A8B0E945A2337
:104A20006A89882309F4B4C0662309F4B1C02091CF
:104A3000AA02822F82958F7090E002970CF4C6C074
:104A40008091A5029091A60298878F831986FB8694
:104A5000EA862C87CE01079646C08091AA02982F3D
:104A6000907F59F47E2DF98AE88A89890E947F23F4
:104A700085EA92E00E948E1F95C0E51311C0741361
:104A80000FC061110DC0F8018583C8010E948E1FFF
:104A9000E5EAF2E086E0DF011D928A95E9F7A2C01F
:104AA0004D875E878D859E856A8B0E945A236A8911
:104AB000882309F46DC0662309F46AC02091AA0214
:104AC000822F82958F7090E002970CF47FC08091C6
:104AD000A5029091A6029A8389831B82FD82EC82B3
:104AE0002E83CE0101960E948E1F70C0E816F90633
:104AF00028F09701281B390BC90104C080959095B7
:104B00008E0D9F1D883C910508F046C0662309F470
:104B10003FC0E51330C074132EC02091AA0220FDBF
:104B200021C0322F32953F70832F90E00097D1F053
:104B3000D80115962C9315970F9741F0832F8F5F0F
:104B40008295807F2F70282B15962C93C8010E9488
:104B50008E1F86E0F801A5EAB2E001900D928A95D9
:104B6000E1F73EC086E0F801A5EAB2E001900D92BF
:104B70008A95E1F737C04D875E878D859E850E94B7
:104B80005A23811123C08091AA0281608093AA02D6
:104B9000C8010E948E1F26C07E2DF98AE88A898965
:104BA0000E947F23E5EAF2E086E0DF011D928A950C
:104BB000E9F70E94BF2318C0662351F34D875E8733
:104BC0008D859E850E945A23882311F386E0F80183
:104BD000A5EAB2E001900D928A95E1F70E94CD23FB
:104BE0000E94BF2381E014C080E012C04D875E8721
:104BF0008D859E850E943928292F22952F7030E0BF
:104C0000223031050CF4E0CE243031050CF6E2CE32
:104C100062960FB6F894DEBF0FBECDBFDF91CF9185
:104C20001F910F91FF90EF9008951F93CF93DF9303
:104C3000CDB7DEB72C970FB6F894DEBF0FBECDBF51
:104C40004F83588769877A878B879C87CE01079621
:104C50000E9445248823D9F02F8138858A859B8539
:104C6000892B39F03F3F19F080E090E004C02F3FDE
:104C7000D9F781E090E0892B09F06DC04F8158850C
:104C800069857A858B859C850E948E2364C086E029
:104C9000FE013796DE01119601900D928A95E1F79B
:104CA000FF81E8854A855B854115510539F0EF3F65
:104CB00041F481E090E0FF3F31F003C081E090E0FB
:104CC00002C080E090E080FD46C02091DC0230E030
:104CD000C9010196877099276091DB0270E0861701
:104CE000970709F440C0F983EA835D834C8396E01B
:104CF000929FD001939FB00D1124A555BD4FFE0189
:104D0000319601900D929A95E1F78093DC020E9412
:104D10009E2321C0189FC001112485559D4F0E94DC
:104D20004524882371F1E091DB021E9FF0011124DC
:104D3000E555FD4F40815181628173818481958168
:104D40000E948E238091DB0290E001968770992764
:104D50008093DB0201C016E08091DB029091DC02BF
:104D60008913D8CF0EC00E9456231092DC021092F5
:104D7000DB02E5EAF2E086E0DF011D928A95E9F7C1
:104D8000EACF2C960FB6F894DEBF0FBECDBFDF91F1
:104D9000CF911F910895DF92EF92FF920F931F938F
:104DA000CF93DF93EC01009709F46EC0D12CEE2471
:104DB000E394F12C8E010F5F1F4FFE018491843725
:104DC00048F4843008F04CC0813071F0823009F032
:104DD0005BC01EC0853709F43FC080F1982F9458FE
:104DE000903708F051C03FC02296F8018491982F67
:104DF000905E983050F48770FE2D01C0FF0F8A95A9
:104E0000EAF78F2F0E94CF2813C00E94671E2FC081
:104E10002296F8018491982F905E983060F4877004
:104E2000FE2D01C0FF0F8A95EAF78F2F0E94D5282B
:104E30000E94F8281CC00E942F1F19C02296F8015A
:104E4000049107C08FE99FE00197F1F700C00000CF
:104E500001500111F7CF0BC02296F801D49007C082
:104E60000E94671E03C08F770E942F1FE8018D2DBF
:104E700007C08150EFE9FFE03197F1F700C0000073
:104E8000882309F497CFF5CFDF91CF911F910F9130
:104E9000FF90EF90DF9008956093E1027093E2023B
:104EA0008093E3029093E4020C9444236093DD0228
:104EB0007093DE028093DF029093E0020C9444230F
:104EC00008950C944C270F931F930091E1021091C9
:104ED000E2022091E3023091E402602B712B822BDD
:104EE000932B1F910F910C944C270F931F930091BC
:104EF000E1021091E2022091E3023091E40260238A
:104F00007123822393231F910F910C944C270F93AD
:104F10001F930091E1021091E2022091E30230918F
:104F2000E40260277127822793271F910F910C9429
:104F30004C2760E070E0CB010C94562741E050E034
:104F400060E070E004C0440F551F661F771F8A950C
:104F5000D2F7CB01BA010C94562741E050E060E053
:104F600070E004C0440F551F661F771F8A95D2F763
:104F70008091DD029091DE02A091DF02B091E0020B
:104F8000482B592B6A2B7B2BCB01BA010C9456274B
:104F900041E050E060E070E004C0440F551F661F20
:104FA000771F8A95D2F740955095609570958091BE
:104FB000DD029091DE02A091DF02B091E002482371
:104FC00059236A237B23CB01BA010C94562741E075
:104FD00050E060E070E004C0440F551F661F771F6B
:104FE0008A95D2F78091DD029091DE02A091DF02D6
:104FF000B091E002482759276A277B27CB01BA01E5
:105000000C9456270F931F930091DD021091DE023E
:105010002091DF023091E002602B712B822B932BC9
:105020001F910F910C9456270F931F930091DD024F
:105030001091DE022091DF023091E00260237123A3
:10504000822393231F910F910C9456270F931F9344
:105050000091DD021091DE022091DF023091E0022A
:1050600060277127822793271F910F910C94562751
:105070000895CF92DF92EF92FF920F931F93CF93F9
:10508000DF93EC01C090E102D090E202E090E302F5
:10509000F090E4028091DD029091DE02A091DF02A7
:1050A000B091E002C82AD92AEA2AFB2A0FE110E0CF
:1050B000B701A601002E04C07695679557954795D0
:1050C0000A94D2F740FF08C0BE01802F0E947104ED
:1050D0008130910509F007C00150110948F7BE0160
:1050E00080E00E947104DF91CF911F910F91FF909A
:1050F000EF90DF90CF90089540918B0150918C01FB
:1051000020E030E09FEFFA01E20FF31F62816817A1
:10511000A1F09F3F19F4611101C0922F2F5F3F4F03
:105120002630310581F707C0FA01E90FF11D97FD1F
:10513000FA95828308959F3FB9F7089540918B01B6
:1051400050918C0120E030E0FA01E20FF31F9281D0
:10515000981301C012822F5F3F4F26303105A1F70F
:10516000089581E090E0E0918B01F0918C01E80FCF
:10517000F91F1082019688309105A9F70895909142
:10518000E502982B9093E502089580959091E502B1
:1051900098239093E50208951092E5020895909166
:1051A000E602982B9093E602089580959091E6028E
:1051B00098239093E60208951092E6020895809352
:1051C000E70208951092E702089540918B015091F3
:1051D0008C0120E030E080E0FA01E20FF31F9181C2
:1051E00091118F5F2F5F3F4F27303105A9F7089549
:1051F000E0918B01F0918C018091E5028083E09138
:105200008B01F0918C0180819091E602892B808343
:105210009091E702992361F0E0918B01F0918C016C
:105220008081892B80830E94E52881110E94E228D9
:1052300080918B0190918C010C94311D8091FA0327
:10524000843021F11092F10220E488E190E00FB661
:10525000F894A895809360000FBE2093600080E0D2
:105260000E94590383B7817F846083BF83B78160C5
:1052700083BF7894889583B78E7F83BF88E10FB60C
:10528000F89480936000109260000FBE0895089516
:105290000895CF9380E00E9459030E9447290E94FD
:1052A000BD070E944829C0E08C2F0E941109892B5C
:1052B00029F4CF5FC530C1F780E001C081E0CF9114
:1052C00008950E94562380E00E9459030E941130E5
:1052D0000E94251D0C94E7051F920F920FB60F92A6
:1052E00011248F939F93AF93BF938091F10281110B
:1052F00013C08091F2029091F302A091F402B09158
:10530000F5024196A11DB11D8093F2029093F30224
:10531000A093F402B093F502BF91AF919F918F914A
:105320000F900FBE0F901F90189582E084BD93E000
:1053300095BD9AEF97BD80936E0008958FB7F8944E
:105340004091F2025091F3026091F4027091F502E3
:105350008FBFCA010895CF92DF92EF92FF920F9311
:105360001F932FB7F8944091F2025091F30260918D
:10537000F4027091F5022FBF6A017B01EE24FF2435
:105380008C0120E030E0C016D106E206F30620F0E2
:105390009A01281B390B05C09C0120953095240FDC
:1053A000351FC9011F910F91FF90EF90DF90CF90B3
:1053B00008951F920F920FB60F9211248F939F930F
:1053C000AF93BF938091F2029091F302A091F40207
:1053D000B091F5020196A11DB11D8093F202909348
:1053E000F302A093F402B093F502BF91AF919F91A5
:1053F0008F910F900FBE0F901F9018950E946D1601
:10540000F8942FEF87EA91E6215080409040E1F731
:1054100000C0000087E090EBDC01809304049093CF
:105420000504A0930604B09307042CE088E190E003
:105430000FB6F894A895809360000FBE209360008B
:10544000FFCFCF92DF92EF92FF920F931F93CF93F4
:10545000DF93C82ED12C01E010E08D2D0E941109A0
:105460007C01C0E0D0E098010C2E02C0220F331F57
:105470000A94E2F72E213F21232B29F42196CC30E8
:10548000D10589F708C06C2F7D2D80E00E944C0467
:10549000C812F4CF06C0D39485E0D812DECF80E0E6
:1054A00001C081E0DF91CF911F910F91FF90EF90AC
:1054B000DF90CF900895CF93C82F8CE20E94212ACD
:1054C000882321F08C2FCF910C94212A80E0CF915A
:1054D0000895CF930E94AC2B811102C00E948D2BA6
:1054E000C5E608C00E94BD078FE39CE90197F1F76C
:1054F00000C00000C150B1F789E20E945B2A81110F
:105500000AC18AE20E945B2A81110E948D2B85E0EC
:105510000E945B2A81110E94FE290E94B72B809372
:10552000F00287E00E945B2A882399F18BE10E94B8
:105530005B2A882351F09091F00291FB882780F933
:1055400021E0822780FB91F922C08EE00E945B2A35
:10555000882351F09091F00292FB882780F921E096
:10556000822780FB92F913C080E10E945B2A909110
:10557000F002882341F093FB882780F921E08227FD
:1055800080FB93F904C0892F809580FB90F990935C
:10559000F0028091F0020E94BB2B0E94C92B8093E5
:1055A000010380EE0E945B2A882341F08091010371
:1055B000982F909590FB80F98093010389E30E94D6
:1055C0005B2A882359F09091010391FB882780F989
:1055D00021E0822780FB91F99093010382EE0E94E3
:1055E0005B2A882359F09091010392FB882780F968
:1055F00021E0822780FB92F99093010386EE0E94BE
:105600005B2A882359F09091010393FB882780F946
:1056100021E0822780FB93F99093010383EE0E949F
:105620005B2A882359F09091010394FB882780F925
:1056300021E0822780FB94F99093010385E30E9487
:105640005B2A882359F09091010395FB882780F904
:1056500021E0822780FB95F99093010381E30E946A
:105660005B2A882359F09091010396FB882780F9E3
:1056700021E0822780FB96F99093010381E10E944B
:105680005B2A882359F09091010397FB882780F9C2
:1056900021E0822780FB97F9909301038091010319
:1056A0000E94CD2B87E20E945B2AC82F8EE10E94C8
:1056B0005B2A8111C2608FE10E945B2A8111C46064
:1056C00080E20E945B2A8111C86081E20E945B2A0D
:1056D0008111C06182E20E945B2A8111C06283E273
:1056E0000E945B2A8111C06484E20E945B2A8823A5
:1056F00011F0C06802C0CC2329F08C2F0E94C42B6B
:105700006C2F03C00E94C02B682F70E080E090E0F7
:10571000CF910C946127CF9108956DEE7EEF80E0DC
:1057200090E00E94783460E082E090E00E946A3469
:1057300060E083E090E00E946A3460E084E090E002
:105740000E946A3460E085E090E00E946A3460E084
:1057500086E090E00C946A3480E090E00E9464342B
:1057600021E08D3E9E4F09F020E0822F089582E0D7
:1057700090E00C945C34682F82E090E00C946A34E2
:1057800083E090E00C945C34682F83E090E00C940C
:105790006A3484E090E00C945C34682F84E090E0FC
:1057A0000C946A3486E090E00C945C34682F86E0B8
:1057B00090E00C946A348091FE0280FF0BC06091EF
:1057C000900185E0689FB0011124759567957595E6
:1057D00067952AC081FF09C06091900185E0689FAC
:1057E000B0011124759567951FC082FF07C06091B5
:1057F000900185E0689FB001112416C04091F80225
:105800004423C9F060918F01461788F720919001D9
:1058100085E0289F90011124429FC001439F900D75
:10582000112470E00E9448346038710540F461151D
:10583000710539F002C065E070E0862F08958FE7AA
:10584000089581E008958091FE0280FF08C0609174
:105850008E0170E0759567957595679521C081FFFC
:1058600006C060918E0170E07595679519C082FF42
:1058700004C060918E0170E010C08091F80288230E
:10588000C1F060918D018617A0F790918E01989FCD
:10589000C001112470E00E9448346038710528F47A
:1058A0006115710521F0862F08958FE7089581E035
:1058B000089561E070E0F4CF803F21F40E94DB2B7B
:1058C000819504C0813F29F40E94DB2B8093FB0269
:1058D0000895823F21F40E94DB2B819504C0833F11
:1058E00029F40E94DB2B8093FA020895893F19F472
:1058F0000E94232C05C08A3F31F40E94232C8195FD
:105900008093FC0208958B3F21F40E94232C819503
:1059100004C08C3F29F40E94232C8093FD0208953B
:10592000843F21F48091F902816017C0853F21F402
:105930008091F902826011C0863F21F48091F902C2
:1059400084600BC0873F21F48091F902886005C014
:10595000883F31F48091F90280618093F9020895C3
:105960008D3F21F48091FE0281600BC08E3F21F4B7
:105970008091FE02826005C08F3F29F48091FE0273
:1059800084608093FE020895803F29F48091FB0299
:1059900087FF6EC007C0813F41F48091FB0218165B
:1059A0000CF066C01092FB0263C09091FA02823F35
:1059B00019F497FF5DC005C0833F31F419160CF050
:1059C00057C01092FA0254C0893F31F48091FC0212
:1059D00018160CF04DC006C08A3F39F48091FC02C5
:1059E00087FF46C01092FC0243C08B3F29F4809190
:1059F000FD0287FF3DC006C08C3F39F48091FD0257
:105A00001816B4F51092FD0233C0843F21F4809142
:105A1000F9028E7F05C0853F31F48091F9028D7FB8
:105A20008093F90225C0863F21F48091F9028B7F93
:105A3000F7CF873F21F48091F902877FF1CF883F2C
:105A400021F48091F9028F7EEBCF8D3F21F480917C
:105A5000FE028E7F0BC08E3F21F48091FE028D7F6F
:105A600005C08F3F29F48091FE028B7F8093FE0258
:105A70008091FA0281110EC08091FB0281110AC04F
:105A80008091FC02811106C08091FD02811102C04B
:105A90001092F802089589EF92E00E943C1D0E9446
:105AA0009E299093F7028093F6020895CF938091F8
:105AB000F6029091F7020E94AB294091F80244232C
:105AC00021F02091910130E006C0209192015AE02E
:105AD000259F900111248217930708F486C08091B6
:105AE000FA0281110DC09091FB02911109C09091B1
:105AF000FC02911105C09091FD02992309F475C033
:105B00004F3F19F04F5F4093F802181624F40E949B
:105B1000DB2B8093FA028091FA0287FF05C00E9476
:105B2000DB2B81958093FA028091FB02181624F4F6
:105B30000E94DB2B8093FB028091FB0287FF05C054
:105B40000E94DB2B81958093FB026091FA02662311
:105B500039F1C091FB02CC2319F1772767FD7095CD
:105B6000872F972F0E94AC3123E333E343E35FE3B6
:105B70000E9460320E9479316093FA026C2F77277D
:105B800067FD7095872F972F0E94AC3123E333E395
:105B900043E35FE30E9460320E9479316093FB022D
:105BA0008091FC02181624F40E94232C8093FC029E
:105BB0008091FC0287FF05C00E94232C8195809371
:105BC000FC028091FD02181624F40E94232C80937D
:105BD000FD028091FD0287FF05C00E94232C819564
:105BE0008093FD02CF910C944B2DCF910895E9EF56
:105BF000F2E085E0DF011D928A95E9F71092F80244
:105C00001092FE020895833089F130F4813061F002
:105C1000823009F06EC019C0853009F449C0B8F16E
:105C2000863009F066C055C020919201862F90E021
:105C3000820F911D8F3F910520F4620F60939201B6
:105C400008958FEF80939201089520919101862FFE
:105C500090E0820F911D8F3F910520F4620F6093B9
:105C6000910108958FEF8093910108952091900103
:105C7000862F90E0820F911D8F3F910520F4620FD7
:105C80006093900108958FEF809390010895209183
:105C90008F01862F90E0820F911D8F3F910520F498
:105CA000620F60938F0108958FEF80938F010895A5
:105CB00020918E01862F90E0820F911D8F3F9105DC
:105CC00020F4620F60938E0108958FEF80938E0110
:105CD000089520918D01862F90E0820F911D8F3FB6
:105CE000910520F4620F60938D0108958FEF8093EA
:105CF0008D010895833021F130F4813059F08230E4
:105D000009F049C012C0853089F128F1863009F0C8
:105D100042C037C080919201681720F4861B80939F
:105D2000920108951092920108958091910168174F
:105D300020F4861B8093910108951092910108959B
:105D400080919001681720F4861B8093900108953C
:105D500010929001089580918F01681720F4861B9E
:105D600080938F01089510928F01089580918E0184
:105D7000681720F4861B80938E01089510928E017F
:105D8000089580918D01681720F4861B80938D0102
:105D9000089510928D01089541E050E060E070E0B8
:105DA00004C0440F551F661F771F8A95D2F7CB0199
:105DB000BA010E9461270C945623873200F58E3178
:105DC00008F086C08E3009F466C060F4873009F4AC
:105DD0004DC018F4863049F531C0883041F18B3020
:105DE00021F57BC0863109F478C018F48031E9F4DC
:105DF0005CC0893109F471C08B31B9F442C0883379
:105E000009F46BC048F4893209F460C0853309F4A1
:105E10005DC0873251F45AC0833409F457C018F476
:105E20008A3318F057C0883499F080E008950E94B2
:105E3000B72B0E94C92B0E94D22B4FC08091F00239
:105E4000817F8E7F8093F00281E08093FF0208952E
:105E50000E9456232FEF83ED90E321508040904025
:105E6000E1F700C000000E94FE2937C08091F002D7
:105E700080FF03C0817F8E7F01C081608093F0022C
:105E80002CC09091F00291FB882780F921E08227B5
:105E900080FB91F913C09091F00292FB882780F962
:105EA00021E0822780FB92F909C09091F00293FBD8
:105EB000882780F921E0822780FB93F99093F002F4
:105EC000882359F091609093F00207C080E003C0EE
:105ED0008D5101C089530E94CC2E81E0089580E04D
:105EE000089580E00895CF93C82F8091FF028130FC
:105EF00071F020F0823009F089C037C0A0918B0189
:105F0000B0918C018C91823209F082C007C0A091BF
:105F10008B01B0918C018C91823249F48C2F0E94BC
:105F20006F2F81111EC08C2F0E94DD2E1CC08C2F64
:105F30000E94712F811115C0C43169F030F4CB304B
:105F400081F0C03109F068C009C0C93221F0C833FE
:105F500009F062C006C01092FF025EC082E080932A
:105F6000FF0281E090E081705AC0C932C9F060F44C
:105F7000C431B1F020F4C73009F04CC034C0CE5168
:105F8000C63008F047C017C0CE3439F120F4CB3406
:105F900009F040C01CC0C135C1F0C235D9F513C0ED
:105FA00080910003882319F01092000333C081E030
:105FB0008093FF0234C0EC2FF0E0E25EFD4F808161
:105FC0008093000327C061E003C061E007C06AE07E
:105FD000809100030E94032E1DC06AE0809100039F
:105FE0000E947A2E17C08EE18093920182E3809303
:105FF00091018AE08093900184E180938F0188E091
:1060000080938E0188E280938D0104C01092FF027C
:1060100080E005C081E003C080E090E0A4CFCF9194
:1060200008950E94AC2B811102C00E948D2B0E940A
:10603000D22B8093030480FF02C0869501C080E0CC
:106040000C94590380910304982F9695292F30E0E2
:10605000233031054CF49F5F990F8170892B81604B
:10606000809303040E94D62B8091030486950C94A0
:10607000590380910304982F969591F09158990FA8
:106080008170892B809303048E7F91E009F490E066
:106090008091030490FB80F9809303040E94D62B27
:1060A0008091030486950C94590380910304982FE2
:1060B000909590FB80F9809303040E94D62B8091E9
:1060C000030480FF02C0869501C080E00C94590350
:1060D00030910304232F26952F5F2F77822F90E096
:1060E000317004972CF4220F232B2093030402C059
:1060F0003093030480910304282F2E7F91E009F44C
:1061000090E090FB80F9809303040E94D62B80914D
:10611000030486950C94590320910304922F9695BD
:106120009827990F822F8170892B809303048E7F8B
:1061300091E009F490E08091030490FB80F9809352
:1061400003040E94D62B8091030486950C94590376
:106150005058BB27AA270ED075C166D130F06BD13D
:1061600020F031F49F3F11F41EF45BC10EF4E09572
:10617000E7FB51C1E92F77D180F3BA1762077307A4
:106180008407950718F071F49EF58FC10EF4E09521
:106190000B2EBA2FA02D0B01B90190010C01CA01E1
:1061A000A0011124FF27591B99F0593F50F4503E8C
:1061B00068F11A16F040A22F232F342F4427585F7E
:1061C000F3CF469537952795A795F0405395C9F796
:1061D0007EF41F16BA0B620B730B840BBAF091504E
:1061E000A1F0FF0FBB1F661F771F881FC2F70EC0ED
:1061F000BA0F621F731F841F48F4879577956795C0
:10620000B795F7959E3F08F0B3CF9395880F08F0A8
:106210009927EE0F979587950895D9D008F481E0D6
:1062200008950CD00FC107D140F0FED030F021F41A
:106230005F3F19F0F0C0511139C1F3C014D198F388
:106240009923C9F35523B1F3951B550BBB27AA27F7
:1062500062177307840738F09F5F5F4F220F331F69
:10626000441FAA1FA9F333D00E2E3AF0E0E830D035
:1062700091505040E695001CCAF729D0FE2F27D038
:10628000660F771F881FBB1F261737074807AB0706
:10629000B0E809F0BB0B802DBF01FF2793585F4F7B
:1062A0002AF09E3F510568F0B6C000C15F3FECF395
:1062B000983EDCF3869577956795B795F7959F5F40
:1062C000C9F7880F911D9695879597F90895E1E094
:1062D000660F771F881FBB1F621773078407BA07F3
:1062E00020F0621B730B840BBA0BEE1F88F7E0954E
:1062F000089504D06894B111D9C00895BCD088F035
:106300009F5790F0B92F9927B751A0F0D1F0660FA1
:10631000771F881F991F1AF0BA95C9F712C0B130BC
:1063200081F0C3D0B1E00895C0C0672F782F8827CF
:10633000B85F39F0B93FCCF3869577956795B395FB
:10634000D9F73EF490958095709561957F4F8F4F6A
:106350009F4F0895E89409C097FB3EF4909580956F
:10636000709561957F4F8F4F9F4F9923A9F0F92F1B
:1063700096E9BB279395F695879577956795B79599
:10638000F111F8CFFAF4BB0F11F460FF1BC06F5F7F
:106390007F4F8F4F9F4F16C0882311F096E911C091
:1063A000772321F09EE8872F762F05C0662371F0B2
:1063B00096E8862F70E060E02AF09A95660F771FC6
:1063C000881FDAF7880F9695879597F90895990FA2
:1063D0000008550FAA0BE0E8FEEF16161706E807AF
:1063E000F907C0F012161306E407F50798F0621BD0
:1063F000730B840B950B39F40A2661F0232B242BA5
:10640000252B21F408950A2609F4A140A6958FEFC3
:10641000811D811D089597F99F6780E870E060E015
:1064200008959FEF80EC089500240A94161617062D
:1064300018060906089500240A9412161306140675
:1064400005060895092E0394000C11F4882352F0D8
:10645000BB0F40F4BF2B11F460FF04C06F5F7F4F90
:106460008F4F9F4F089557FD9058440F551F59F077
:106470005F3F71F04795880F97FB991F61F09F3F31
:1064800079F087950895121613061406551FF2CF5A
:106490004695F1DF08C0161617061806991FF1CFAA
:1064A00086957105610508940895E894BB276627D1
:1064B0007727CB0197F908958ADF08F48FEF0895C5
:1064C0000BD0C0CFB1DF28F0B6DF18F0952309F06C
:1064D000A2CFA7CF1124EACFC6DFA0F3959FD1F3B7
:1064E000950F50E0551F629FF001729FBB27F00D82
:1064F000B11D639FAA27F00DB11DAA1F649F6627D7
:10650000B00DA11D661F829F2227B00DA11D621F25
:10651000739FB00DA11D621F839FA00D611D221FDF
:10652000749F3327A00D611D231F849F600D211DC3
:10653000822F762F6A2F11249F5750408AF0E1F066
:1065400088234AF0EE0FFF1FBB1F661F771F881FAF
:1065500091505040A9F79E3F510570F05CCFA6CFF7
:106560005F3FECF3983EDCF3869577956795B7959A
:10657000F795E7959F5FC1F7FE2B880F911D9695C4
:10658000879597F90895FA01EE0FFF1F30962105C0
:10659000310599F16115710561F48038BFE39B07FE
:1065A00049F168949038810561F08038BFEF9B070E
:1065B00041F0992342F5FF3FE1053105210511F135
:1065C000E8940894E795D901AA2329F4AB2FBE2FAC
:1065D000F85FD0F310C0FF5F70F4A695E0F7F739CD
:1065E00050F019F0FF3A38F49F779F930CD00F903A
:1065F00007FC905808953EF014CF60E070E080E80A
:106600009FE308954FE79F775F934F933F932F93B7
:106610009ED02F913F914F915F9152DF05C019F4A9
:106620000EF0F9CE42CFFDCE26DFC8F39638C0F784
:1066300007F80F92E8942BE33AEA48EB5FE74EDF66
:106640000F920F920F924DB75EB70F92C0D0ECEA47
:10665000F0E016D04F915F91EF91FF91E595EE1F1D
:10666000FF1F49F0FE57E0684427EE0F441FFA95DC
:10667000E1F74195550B32D00F9007FE26C00895E3
:10668000DF93CF931F930F93FF92EF92DF927B01E3
:106690008C01689405C0DA2EEF011EDFFE01E8943C
:1066A000A5912591359145915591AEF3EF0162DDAC
:1066B000FE019701A801DA9479F7DF90EF90FF903F
:1066C0000F911F91CF91DF9108959B01AC0160E084
:1066D00070E080E89FE3A5CD9ECEACC0CCDEE8F3B1
:1066E0009923D9F3940F511DBBF39150504094F06E
:1066F00059F0882332F0660F771F881F9150504061
:10670000C1F79E3F510544F7880F911D96958795D7
:1067100097F908955F3FACF0983E9CF0BB278695B3
:1067200077956795B79508F4B1609395C1F7BB0F5E
:1067300058F711F460FFE8CF6F5F7F4F8F4F9F4F87
:10674000E3CFB4CE0EF076C06CCE689464CE93DE08
:10675000C8F39923D1F3C6F3DF93CF931F930F931D
:10676000FF92C92FDD2788232AF02197660F771F14
:10677000881FDAF720E030E040E85FEB9FE38839DC
:1067800020F0803E30F021968F77E3DCE4EDF0E0FE
:1067900003C0DFDCE1E0F1E073DF8B01BE01EC015F
:1067A000FB2E6F5771097595771F880B990BD4DDF8
:1067B00028E132E741E35FE38FDEAF2D9801AE01C0
:1067C000FF900F911F91CF91DF91D4DC3BCEFA0166
:1067D000DC01AA0FBB1F9B01AC01BF5728F4222785
:1067E0003327442750781FC0B75188F4AB2F0024BB
:1067F000469537952795011CA395D2F3002069F0A3
:10680000220F331F441FB395DAF30DD0A1CC6130B2
:106810007105A0E88A07B94630F49B01AC016627F0
:10682000772788279078309621F020833183428320
:10683000538308959F3F31F0915020F487957795C9
:106840006795B795880F911D9695879597F9089547
:10685000991B79E004C0991F961708F0961B881FB2
:106860007A95C9F780950895AA1BBB1B51E107C013
:10687000AA1FBB1FA617B70710F0A61BB70B881FD0
:10688000991F5A95A9F780959095BC01CD0108955F
:1068900097FB072E16F4009407D077FD09D00E94CD
:1068A000343407FC05D03EF4909581959F4F0895B0
:1068B000709561957F4F0895F999FECF92BD81BD86
:1068C000F89A992780B50895A8E1B0E042E050E039
:1068D0000C947F34262FF999FECF1FBA92BD81BD4B
:1068E00020BD0FB6F894FA9AF99A0FBE0196089552
:1068F0000E946A34272F0C946B34DC01CB01FC011D
:10690000F999FECF06C0F2BDE1BDF89A319600B408
:0E6910000D9241505040B8F70895F894FFCF13
:10691E0055D0A44600001644000000000000484276
:10692E0061978A460000C8430000000000004842FC
:10693E0055D024460000C843000000000000484225
:10694E0000005C460000C843000000000000484202
:10695E0061978A4600007A4455D0A4460000C84389
:10696E00000000000000484200005C460000C843E2
:10697E00000000000000484255D024460000164496
:10698E000507000C058540000001064000000100CF
:10699E0091102111FD10C810941001E8022808145E
:1069AE000A321E42004500250026004300610060A9
:1069BE000020003700640065006600670044004652
:1069CE000024004700000002000400050007000933
:1069DE00000B000C000E0010001100130015001724
:1069EE000018001A001C001D001F002100230024A7
:1069FE00002600280029002B002D002F0030003229
:106A0E000034003500370039003B00F6030F042830
:106A1E0004410469051C05E604C6043F4D362002F8
:106A2E000302000001000101010101000101010248
:086A3E00030405060708090026
:00000001FF

@ -0,0 +1,1189 @@
:100000000C9465020C94A9020C94A9020C94A90208
:100010000C94A9020C94A9020C94A9020C94A902B4
:100020000C94A9020C94A9020C94430D0C94150E87
:100030000C942B1C0C94A9020C94A9020C94A902F8
:100040000C94A9020C94A9020C94A9020C94A90284
:100050000C94A9020C94981C0C94A9020C94A9026B
:100060000C94A9020C94A9020C94A9020C94A90264
:100070000C94A9020C94A9020C94A9020C94A90254
:100080000C94A9020C94A9020C94A9020C94A90244
:100090000C94A9020C94A9020C94A9020C94A90234
:1000A0000C94A9020C94A9020C94A90235001E001C
:1000B0001F0020002100220023002400250026002C
:1000C00027002A002B0014001A0008001500170052
:1000D0001C0018000C00120013002A002900040064
:1000E0001600070009000A000B000D000E000F00AB
:1000F00033003400E1001D001B000600190005005C
:100100001100100036003700380028000030E000F1
:10011000E200E30003522C002C0004525000510076
:1001200052004F0035001E001F0020002100220059
:10013000230024002500260027002A002B0014009D
:100140001A00090013000A000D000F0018001C001F
:1001500033002A00290004001500160017000700CC
:100160000B00110008000C0012003400E1001D001B
:100170001B000600190005000E00100036003700B5
:10018000380028000030E000E200E30003522C00B9
:100190002C0004525000510052004F0035001E0048
:1001A0001F0020002100220023002400250026003B
:1001B00027002A002B0034003600370013001C00F3
:1001C00009000A00060015000F002A00290004009B
:1001D0001200080018000C0007000B0017001100A7
:1001E00016003800E100330014000D000E001B0063
:1001F000050010001A0019001D0028000030E00062
:10020000E200E30003522C002C0004525000510085
:1002100052004F0035001E001F0020002100220068
:10022000230024002500260027002A0035021E0294
:100230001F0220022102220223022402250226029A
:1002400027022A0001003A003B003C003D003E002E
:100250003F002D022E022F02300231020100400029
:100260004100420043004400450000530153025343
:100270000050010001000100010001000100010027
:1002800001000100AB00AA00A900AE0035001E006D
:100290001F0020002100220023002400250026004A
:1002A00027002A0035001E001F0020002100220028
:1002B000230024002500260027002A0001003A0020
:1002C0003B003C003D003E003F002D002E002F0073
:1002D0003000310001004000410042004300440072
:1002E000450000530153025300500100010001007A
:1002F000010001000100010001000100AB00AA00A3
:10030000A900AE002A0354006800650020005000D8
:10031000720065006F006E006900630020004B00F2
:100320006500790062006F006100720064000000E7
:100330002C034F007200740068006F006C006900AD
:100340006E0065006100720020004B0065007900BE
:1003500062006F006100720064007300000004031B
:10036000090409027400040100A0FA090400000154
:1003700003010100092111010001223F000705814D
:100380000308000A09040100010301020009211108
:10039000010001224D000705820308000A0904023A
:1003A00000010300000009211101000122360007AD
:1003B00005830308000A0904030002030000000982
:1003C00021110100012220000705840320000107FC
:1003D0000504032000011201100100000008EDFED9
:1003E00061600100010200010631FF0974A10109E9
:1003F00075150025FF9520750881020976150025E1
:10040000FF952075089102C005010980A1018502B0
:1004100016010026B7001A01002AB70075109501D1
:100420008100C0050C0901A1018503160100269C6D
:10043000021A01002A9C02751095018100C0050175
:100440000902A1010901A1000509190129051500E9
:10045000250195057501810295017503810105014D
:10046000093009311581257F950275088106093803
:100470001581257F950175088106050C0A3802153E
:1004800081257F950175088106C0C005010906A177
:1004900001050719E029E715002501950875018177
:1004A0000295017508810105081901290595057551
:1004B0000191029501750391010507190029FF15A6
:1004C0000025FF950675088100C011241FBECFEFDF
:1004D000DAE0DEBFCDBF04B603FE24C08091F10197
:1004E0009091F201A091F301B091F4018730904B0B
:1004F000A740B04BB9F41092F1011092F2011092A2
:10050000F3011092F40114BE84B7877F84BF88E1A1
:100510000FB6F89480936000109260000FBEE0E088
:10052000F8E3099511E0A0E0B1E0E0EEF9E402C0E3
:1005300005900D92A435B107D9F711E0A4E5B1E01B
:1005400001C01D92A13FB107E1F70E94720A0C940D
:10055000EE240C94000061110DC0FC0182818823FF
:1005600031F085EE0E9426110E94272303C085EEFC
:100570000E94EE1180E090E00895089508950E9491
:10058000D1026E9A769A8DEB92E0892B11F00C9441
:10059000BD0208958EEB92E0892B11F00C94BE02FF
:1005A0000895279A2F988FEF9FEF9093870080935D
:1005B00086008AE08093800089E1809381000C941A
:1005C000D02281110BC080918000877F80938000B2
:1005D00010928D0010928C002F9808952F988330E0
:1005E00041F4809180008860809380008FEF9FEFBE
:1005F00012C09091800098609093800023E030E0DA
:10060000281B3109220F331F8FEF9FEF02C09695F1
:1006100087952A95E2F790938D0080938C0008953A
:100620008B3B910568F4883A910530F5853A910540
:10063000C0F48430910598F4019709F06FC071C03F
:10064000803E910508F46AC0883E910540F09C0107
:10065000205F31092031310508F060C05CC09C0189
:10066000A1C0853A910509F45FC0863A910509F465
:100670005EC023E830E496C0883A910509F45AC078
:10068000893A910509F459C08A3A910509F458C08C
:100690008B3A910509F457C08C3A910509F456C07C
:1006A0008D3A910509F455C0803B910509F454C079
:1006B0008E3A910509F453C08F3A910509F452C05E
:1006C000813B910509F451C0823B910509F450C06A
:1006D000833B910509F44FC0843B910509F44EC05A
:1006E000853B910509F44DC0863B910509F44CC04A
:1006F000873B910509F44BC0883B910509F44AC03A
:10070000893B910509F449C08A3B910509F048C02D
:100710002AE236E447C09C01306544C020E030E066
:1007200041C021E030E03EC021E830E43BC022E897
:1007300030E438C022EE34E435C029EE34E432C06F
:100740002AEE34E42FC025EB34E42CC026EB34E44D
:1007500029C027EB34E426C02CEC34E423C02DEC74
:1007600034E420C023E835E41DC02AE835E41AC08B
:1007700022E935E417C024E935E414C021E236E467
:1007800011C023E236E40EC024E236E40BC025E2B9
:1007900036E408C026E236E405C027E236E402C0AB
:1007A00020E034E4C901089508959CE0799FF001A8
:1007B00011249CE3899FE00DF11D1124E60FF11D2A
:1007C000EE0FFF1FE455FF4F25913491C9010895A5
:1007D000880F991F845D9040FC0125913491C901D7
:1007E0000895880F991F84559F4FFC0125913491DE
:1007F000C90108950E94D5039C019A9581159F41D6
:1008000010F4C9010895C90190528115904128F44E
:10081000C9019F700E94F1030895C9019053811589
:10082000904120F4C9019927906C0895C901905412
:10083000409728F4C9018F709927946D089520314D
:1008400080E4380719F480E091ED0895213190E4B7
:10085000390719F480E090ED0895223140E434071F
:1008600019F480E092ED0895233180E4380719F4FB
:1008700080E093ED0895211590E5390769F40E9411
:1008800015162FEF44E38CE0215040408040E1F703
:1008900000C000000C94BD1C213090E5390731F4F4
:1008A0008091D00181608093D0010895C901905555
:1008B0008115904108F062C0432F55274F7055278E
:1008C00041305105F9F4C90174E0880F991F7A95F8
:1008D000E1F788279370B901E3E0660F771FEA9587
:1008E000E1F760767727862B972B9C682370332758
:1008F00002C0440F551F2A95E2F74F715527842BEC
:10090000952B08954230510529F4922F8827816F45
:10091000906A089543305105B9F4C90153E0880F36
:10092000991F5A95E1F7807E97702370332741E035
:1009300050E002C0440F551F2A95E2F74F7155272A
:10094000842B952B9C6808954430510549F5C901C5
:1009500043E0880F991F4A95E1F7807E97702370D6
:10096000332741E050E002C0440F551F2A95E2F7BB
:100970004F715527842B952B9A680895C90190577C
:100980008115904120F4C9019F7090620895C901BA
:1009900090588115904120F4C9019F70906A089584
:1009A000203E3105E0F4203C310568F52133310566
:1009B00009F475C048F42932310509F46BC02A32B4
:1009C000310509F07BC075C02933310501F12238AA
:1009D0003105E9F02533310509F070C051C0233EDF
:1009E0003105B1F140F4203E3105D1F0223E310510
:1009F00009F064C01CC0263E310579F1273E31055F
:100A000009F05CC038C0C9010E94E80308958091D4
:100A1000E10180FD02C081FF51C080EE90E04FC037
:100A20008091E10180FFF9CF89E390E048C0809197
:100A3000E10182FF0AC08091E10184FF03C080E0F0
:100A400090E03DC083EE90E03AC082EE90E037C087
:100A50008091E10182FFEFCFF8CF8091E10183FF28
:100A600007C08091E10184FDEACF87EE90E027C0C6
:100A700086EE90E024C08091E10183FFF2CFF8CFB1
:100A80008091E10185FF03C089E290E018C085E311
:100A900090E015C08091E10185FDF9CFF5CF8091FF
:100AA000E10186FF03C08AE290E009C081E390E0A3
:100AB00006C08091E10186FDF9CFF5CFC9010E9402
:100AC0001003089508955F926F927F928F929F9284
:100AD000AF92BF92CF92DF92EF92FF920F931F934C
:100AE000CF93DF93CDB7DEB72A970FB6F894DEBF6A
:100AF0000FBECDBF9E012F5F3F4F4E018BE0880E92
:100B0000911C60E070E000E010E0E12CF12CC12CC1
:100B1000D12CA12CB12C8AE0782E622E532E41E0EC
:100B200050E0E4E1F1E0A62DB52D872D01900D9266
:100B30008A95E1F7F901819191919F01FC01E07F94
:100B4000FF27E032F10559F48F709927FA0102C0AE
:100B5000EE0FFF1F8A95E2F7AE2ABF2A37C0E033B7
:100B6000F10559F48F709927FA0102C0EE0FFF1FAB
:100B70008A95E2F7CE2ADF2A29C0E034F10559F43C
:100B80008F709927FA0102C0EE0FFF1F8A95E2F7D6
:100B9000EE2AFF2A1BC0E035F10559F48F70992722
:100BA000FA0102C0EE0FFF1F8A95E2F70E2B1F2BF2
:100BB0000DC0E036F10551F48F709927FA0102C09B
:100BC000EE0FFF1F8A95E2F76E2B7F2B2815390554
:100BD00009F0A7CF94B18A2D8095892384B985B176
:100BE0008A2985B997B18C2D8095892387B988B1D9
:100BF0008C2988B99AB18E2D809589238AB98BB1B9
:100C00008E298BB99DB1802F809589238DB98EB1A6
:100C1000802B8EB990B3862F8095892380BB81B3BA
:100C2000862B81BB2A960FB6F894DEBF0FBECDBFD0
:100C3000DF91CF911F910F91FF90EF90DF90CF90B8
:100C4000BF90AF909F908F907F906F905F9008952E
:100C50005F926F927F928F929F92AF92BF92CF924C
:100C6000DF92EF92FF920F931F93CF93DF93CDB755
:100C7000DEB768970FB6F894DEBF0FBECDBF85B75D
:100C8000806885BF85B7806885BF0E9463059E0127
:100C90002F5F3F4F4E0189E1880E911C60E070E0AC
:100CA00000E010E0E12CF12CC12CD12CA12CB12CB6
:100CB00098E1792E622E532E41E050E0EEE1F1E012
:100CC000A62DB52D872D01900D928A95E1F7F9019A
:100CD000819191919F01FC01E07FFF27E032F105B6
:100CE00059F48F709927FA0102C0EE0FFF1F8A9501
:100CF000E2F7AE2ABF2A37C0E033F10559F48F700E
:100D00009927FA0102C0EE0FFF1F8A95E2F7CE2A5B
:100D1000DF2A29C0E034F10559F48F709927FA01D0
:100D200002C0EE0FFF1F8A95E2F7EE2AFF2A1BC0D2
:100D3000E035F10559F48F709927FA0102C0EE0FE2
:100D4000FF1F8A95E2F70E2B1F2B0DC0E036F10531
:100D500051F48F709927FA0102C0EE0FFF1F8A9598
:100D6000E2F76E2B7F2B2815390509F0A7CF94B138
:100D70008A2D8095892384B985B18A2985B997B14F
:100D80008C2D8095892387B988B18C2988B99AB12F
:100D90008E2D809589238AB98BB18E298BB99DB10F
:100DA000802F809589238DB98EB1802B8EB990B319
:100DB000862F8095892380BB81B3862B81BB1092BF
:100DC00055011092540110925F0110925E01109231
:100DD0005701109256011092610110926001109219
:100DE0005901109258011092630110926201109201
:100DF0005B0110925A0110926501109264011092E9
:100E00005D0110925C0110926701109266018FEBF8
:100E100092E0892BB9F068960FB6F894DEBF0FBE4A
:100E2000CDBFDF91CF911F910F91FF90EF90DF9099
:100E3000CF90BF90AF909F908F907F906F905F907A
:100E40000C94BF0268960FB6F894DEBF0FBECDBFFC
:100E5000DF91CF911F910F91FF90EF90DF90CF9096
:100E6000BF90AF909F908F907F906F905F9008950C
:100E70005F926F927F928F929F92AF92BF92CF922A
:100E8000DF92EF92FF920F931F93CF93DF93CDB733
:100E9000DEB7A2970FB6F894DEBF0FBECDBF7E01BE
:100EA00049E1E40EF11C2EE5C22E21E0D22E5E01B6
:100EB00053E2A50EB11C3AE0532E470101E010E0C9
:100EC00048E1642E55E0752EE4E1F1E0D401852D72
:100ED00001900D928A95E1F7F701819191917F013F
:100EE0009C01207F33272032310589F424B18F7093
:100EF0009927A80102C0440F551F8A95E2F7CA013D
:100F0000242B24B995B18095892385B94FC020330E
:100F1000310589F427B18F709927F80102C0EE0FCF
:100F2000FF1F8A95E2F7CF012E2B27B998B1809544
:100F3000892388B93BC02034310589F42AB18F70E8
:100F40009927A80102C0440F551F8A95E2F7CA01EC
:100F5000242B2AB99BB1809589238BB927C02035D2
:100F6000310589F42DB18F709927F80102C0EE0F79
:100F7000FF1F8A95E2F7CF012E2B2DB99EB18095E8
:100F800089238EB913C02036310581F420B38F70C8
:100F90009927A80102C0440F551F8A95E2F7CA019C
:100FA000242B20BB91B38095892381BB50EA5A95AD
:100FB000F1F7BE016F5F7F4F80E090E020E030E00E
:100FC000EEE1F1E0DE011196462D01900D924A9579
:100FD000E1F7FB0141915191BF01FA01E07FFF2749
:100FE000E032F10511F4E3B113C0E033F10511F47F
:100FF000E6B10EC0E034F10511F4E9B109C0E03505
:10100000F10511F4ECB104C0E036F105B9F4EFB12B
:10101000F0E04F70552702C0F595E7954A95E2F745
:10102000E0FD08C0A801022E02C0440F551F0A941B
:10103000E2F702C040E050E0842B952B2F5F3F4F3A
:101040002C30310509F0BCCFF60120813181281701
:10105000390721F091838083709200010E9463051B
:10106000F2E0CF0ED11CEA14FB0409F02DCF8091E1
:1010700000018823A1F1815080930001882339F079
:101080008FE99FE00197F1F700C0000028C0809130
:101090005E0190915F01909355018093540180917E
:1010A0006001909161019093570180935601809166
:1010B000620190916301909359018093580180914E
:1010C00064019091650190935B0180935A01809136
:1010D00066019091670190935D0180935C018AECB9
:1010E00092E0892B11F00E94CA0281E0A2960FB60D
:1010F000F894DEBF0FBECDBFDF91CF911F910F914E
:10110000FF90EF90DF90CF90BF90AF909F908F9027
:101110007F906F905F900895E82FF0E0EE0FFF1F33
:10112000EC5AFE4F8081918108950895809171015C
:101130000895CF93DF9300D01F92CDB7DEB72091F3
:10114000E701243021F523E029839B838A832093C0
:10115000E9008FEF06C095ED9A95F1F7000088231E
:1011600029F09091E800815095FFF5CF8091E8003B
:1011700085FF0DC040E050E063E070E0CE010196D5
:101180000E94280B8091E8008E778093E8000F90F2
:101190000F900F90DF91CF910895CF93DF9300D000
:1011A0001F92CDB7DEB72091E701243029F522E068
:1011B00029839B838A8383E08093E9008FEF06C0B5
:1011C00095ED9A95F1F70000882329F09091E800B9
:1011D000815095FFF5CF8091E80085FF0DC040E07C
:1011E00050E063E070E0CE0101960E94280B8091F0
:1011F000E8008E778093E8000F900F900F90DF91BA
:10120000CF9108952091E7012430F9F422E0209352
:10121000E9002FEF06C035ED3A95F1F700002223E3
:1012200029F03091E800215035FFF5CF2091E800FA
:1012300025FF0BC040E050E065E070E00E94280B05
:101240008091E8008E778093E8000895CF93DF9334
:10125000EC018091E701843041F581E08093E90061
:101260008FEF06C095ED9A95F1F70000882329F0DD
:101270009091E800815095FFF5CF8091E80085FFBF
:1012800014C040E050E068E070E0CE010E94280BFE
:101290008091E8008E778093E80088E0FE01A9E65F
:1012A000B1E001900D928A95E1F7DF91CF91089519
:1012B0008091E601811109C00E94C80C0E94250D91
:1012C0008091E20084608093E20008951092E6012C
:1012D0000895089508950C94201C809172018F5FE9
:1012E0008093720162E30E948924911135C01092AB
:1012F000720180917301882379F18091E701843034
:1013000049F58091E9008F709091EC0090FF02C048
:1013100090E801C090E0982B84E08093E9008091F0
:10132000EB0080FF14C08091EE0087FD03C00FC06A
:101330001092F1008091E80085FDFACF8091E800DD
:1013400080FF05C08091E8008E778093E8009F7051
:101350009093E90010927301089542E061EC81E0FE
:101360000E943E0C42E061EC82E00E943E0C42E0B2
:1013700061EC83E00E943E0C42E261EC84E00C945C
:101380003E0C8091E901833009F454C030F481307F
:1013900071F0823009F0A5C08CC08A3009F479C0A0
:1013A0008B3009F45FC0893009F09BC020C0809168
:1013B000E801813A09F095C08091E800877F809329
:1013C000E8008091EC019091ED01892B21F060E023
:1013D00080E090E003C068E089E691E070E00E9460
:1013E000770B8091E8008B778093E80008958091D7
:1013F000E801813209F075C08091EC019091ED0116
:10140000892B09F06EC08091E800877F8093E80007
:1014100005C08091E701882309F463C08091E8004A
:1014200082FFF7CF8091F100809371018091E800F5
:101430008B7753C08091E801813A09F052C08091C6
:10144000EC019091ED01892B09F04BC08091E800EF
:10145000877F8093E8008091E80080FFFCCF809137
:101460000B0136C08091E8018132D9F58091EC0101
:101470009091ED01892BA9F58091E800877F8093F9
:10148000E8000E94750C8091EA0180930B010C9496
:1014900015168091E801813221F58091E800877F5F
:1014A0008093E8000E94750C8091EB0180936801A5
:1014B00008958091E801813AA1F48091E800877F46
:1014C0008093E8008091E80080FFFCCF8091680164
:1014D0008093F1008091E8008E778093E8000C946F
:1014E000750C089584B7877F84BF88E10FB6F894A0
:1014F00080936000109260000FBE90E080E80FB60D
:10150000F89480936100909361000FBE0E943310A5
:101510000E94C80C0E94250D8091E2008460809397
:10152000E20078940E94C20F0E94351081E091E0A1
:101530000E94DF0F0BC00E94DD1B8091E501882314
:1015400029F00E94081C81110E94120B8091E70172
:10155000853089F30E943F10F9CF292F332723309C
:101560003105B1F04CF42130310509F44DC0223081
:10157000310509F04EC007C02132310541F1223258
:10158000310591F146C0E4E7F0E082E693E045C022
:1015900099278130910569F08230910589F0892B76
:1015A00009F037C0EEE5F3E0E491F0E08EE593E07A
:1015B00034C0E0E3F3E0E491F0E080E393E02DC099
:1015C000E4E0F3E0E491F0E084E093E026C06430EE
:1015D00000F5E62FF0E0EE0FFF1FEA5CFE4F808182
:1015E0009181E9E0F0E019C0643098F4E62FF0E072
:1015F000DF01AA0FBB1FA25CBE4F8D919C91EA5BDD
:10160000FE4FE081F0E009C0E2E1F0E086ED93E01A
:1016100004C0E0E0F0E080E090E0DA018D939C937C
:10162000CF01089580E189BD82E189BD09B400FE42
:10163000FDCF8091D8008F7D8093D8008091E0000D
:1016400082608093E0008091E00081FDFCCF0895EE
:10165000BF92CF92DF92EF92FF920F931F93CF939F
:10166000DF937C018B01EA010E94960CB82E811158
:1016700033C0209731F028813981021B130BE20E11
:10168000F31EC12CD12C23C08091E80085FD15C02C
:101690008091E8008E778093E800209749F0888158
:1016A00099818C0D9D1D9983888325E0B22E14C0ED
:1016B0000E94960C882359F00EC0F70181917F019A
:1016C0008093F10001501109FFEFCF1ADF0A0115D5
:1016D0001105D1F601C0B82E8B2DDF91CF911F914E
:1016E0000F91FF90EF90DF90CF90BF9008954091C1
:1016F000EE015091EF014617570748F0611571054B
:1017000039F44091E8004E774093E80001C0BA01F7
:10171000FC0140E033C08091E701882309F444C014
:10172000853009F443C08091E80083FD41C0809179
:10173000E80082FD33C08091E80080FF1FC09091D7
:10174000F3008091F200392F20E0A901482BCA0153
:1017500006C041914093F1006150710901966115F5
:10176000710519F088309105A0F341E0089709F060
:1017700040E08091E8008E778093E8006115710564
:1017800051F64111C8CF0AC08091E701882361F06A
:10179000853061F08091E80083FD0AC08091E80007
:1017A00082FFF2CF80E0089582E0089583E00895FB
:1017B00081E008954091EE015091EF0146175707DF
:1017C00048F06115710539F44091E8004E77409377
:1017D000E80001C0BA01FC0140E034C08091E7019B
:1017E000882309F445C0853009F444C08091E8009D
:1017F00083FD42C08091E80082FD34C08091E80002
:1018000080FF20C09091F3008091F200392F20E0FA
:10181000A901482BCA0107C044914093F1003196B9
:101820006150710901966115710519F088309105B3
:1018300098F341E0089709F040E08091E8008E7746
:101840008093E8006115710549F64111C7CF0AC0C0
:101850008091E701882361F0853061F08091E80094
:1018600083FD0AC08091E80082FFF2CF80E00895F6
:1018700082E0089583E0089581E00895982F2CC0B8
:101880009093E900981739F07091EC002091ED00E9
:101890005091F00003C0242F762F50E021FD02C0AC
:1018A0009F5F1AC03091EB003E7F3093EB00309188
:1018B000ED003D7F3093ED003091EB0031603093CF
:1018C000EB007093EC002093ED005093F00020911A
:1018D000EE0027FDE5CF07C0973090F28F70809320
:1018E000E90081E0089580E008958091E80187FD96
:1018F00005C08091E80080FF0EC012C08091E80012
:1019000082FD05C08091E7018111F8CF0895809193
:10191000E8008B7708C08091E7018111EACF089534
:101920008091E8008E778093E80008958091E4002C
:101930009091E50045E62091EC0020FD1FC023C0FA
:101940002091E701222391F0253091F02091EB00C6
:1019500025FD10C02091E4003091E50028173907DB
:1019600051F34150C90139F784E0089582E00895A8
:1019700083E0089581E0089580E008952091E800D3
:1019800020FFDECFF9CF2091E80022FFD9CFF4CF9E
:101990000E94360D0E943E0DE0EEF0E080818160F5
:1019A0008083E8EDF0E080818F77808319BCA7ED1C
:1019B000B0E08C918E7F8C9380818F7E808310929B
:1019C000E60108950F931F93CF93DF930E94360D86
:1019D0000E943E0DC8EDD0E088818F778883888192
:1019E0008068888388818F7D888319BC1092E70185
:1019F0001092E3011092E5011092E40100EE10E074
:101A0000F80180818B7F808388818160888342E0B8
:101A100060E080E00E943E0CE1EEF0E080818E7F8D
:101A20008083E2EEF0E08081816080838081886045
:101A30008083F80180818E7F8083888180618883A4
:101A4000DF91CF911F910F910895E8EDF0E0808133
:101A50008F7E8083E7EDF0E080818160808384E089
:101A600082BF81E08093E6010C94E20CE8EDF0E0A7
:101A700080818E7F80831092E20008951092DA00B8
:101A80001092E10008951F920F920FB60F92112449
:101A90002F933F934F935F936F937F938F939F9376
:101AA000AF93BF93EF93FF938091E10082FF0BC050
:101AB0008091E20082FF07C08091E1008B7F8093DC
:101AC000E1000E946D098091DA0080FF1FC08091C3
:101AD000D80080FF1BC08091DA008E7F8093DA00EF
:101AE0008091D90080FF0DC080E189BD82E189BD70
:101AF00009B400FEFDCF81E08093E7010E94580900
:101B000005C019BC1092E7010E9466098091E100AE
:101B100080FF19C08091E20080FF15C08091E20033
:101B20008E7F8093E2008091E20080618093E200EA
:101B30008091D80080628093D80019BC85E08093A2
:101B4000E7010E946A098091E10084FF30C0809122
:101B5000E20084FF2CC080E189BD82E189BD09B427
:101B600000FEFDCF8091D8008F7D8093D8008091BA
:101B7000E1008F7E8093E1008091E2008F7E809370
:101B8000E2008091E20081608093E2008091E301B5
:101B9000882311F084E007C08091E30087FF02C032
:101BA00083E001C081E08093E7010E946B0980918E
:101BB000E10083FF29C08091E20083FF25C080916E
:101BC000E100877F8093E10082E08093E70110923B
:101BD000E3018091E1008E7F8093E1008091E2003B
:101BE0008E7F8093E2008091E20080618093E2002A
:101BF00042E060E080E00E943E0C8091F00088604E
:101C00008093F0000E946909FF91EF91BF91AF911D
:101C10009F918F917F916F915F914F913F912F9104
:101C20000F900FBE0F901F9018951F920F920FB636
:101C30000F9211242F933F934F935F936F937F9352
:101C40008F939F93AF93BF93CF93EF93FF93809125
:101C5000E9008F709091EC0090FF02C090E801C005
:101C600090E0C92FC82B1092E9008091F000877F87
:101C70008093F00078940E94590E1092E9008091B0
:101C8000F00088608093F000CF70C093E900FF916E
:101C9000EF91CF91BF91AF919F918F917F916F9174
:101CA0005F914F913F912F910F900FBE0F901F901A
:101CB00018951F93CF93DF93CDB7DEB7AC970FB6D0
:101CC000F894DEBF0FBECDBFE8EEF1E08091F100E9
:101CD000819321E0E03FF207C9F70E94C10980919A
:101CE000E80083FF37C18091E8019091E9019530C8
:101CF00009F488C038F49130B1F170F0933009F0F4
:101D000029C131C0983009F4F8C0993009F404C1F0
:101D1000963009F01FC19DC0803821F0823809F04B
:101D200019C108C08091E4019091E501992389F0DF
:101D300082600FC08091EC019091ED018F70992726
:101D40008093E9008091EB0085FB882780F9109251
:101D5000E9009091E800977F9093E8008093F1006C
:101D60001092F100D5C0882319F0823009F0F2C03A
:101D70008F7121F0823009F0EDC00BC08091EA0133
:101D8000813009F0E7C0933009F080E08093E501ED
:101D90002FC08091EA0181112BC08091EC019091BC
:101DA000ED018F709927009709F4D4C08093E90062
:101DB0002091EB0020FF1CC02091E901233021F489
:101DC0008091EB00806212C09091EB009061909343
:101DD000EB0021E030E001C0220F8A95EAF7209362
:101DE000EA001092EA008091EB0088608093EB009B
:101DF0001092E9008091E800877F8093E8000E94BC
:101E0000750CA8C08111A6C08091EA019091EB01E8
:101E10008F779927182F9091E3009078982B9093C3
:101E2000E3008091E800877F8093E8000E94750CB2
:101E30008091E80080FFFCCF8091E3008068809370
:101E4000E300112311F083E001C082E08093E701F9
:101E500081C08058823008F07DC08091EA01909165
:101E6000EB018C3D23E0920779F583E08A838AE2D7
:101E700089834FB7F894DE01139620E03EE051E2EB
:101E8000E32FF0E050935700E49120FF03C0E29568
:101E9000EF703F5FEF708E2F90E0EA3010F0C79642
:101EA00001C0C0968D939D932F5F243149F74FBF9A
:101EB0008091E800877F8093E8006AE270E0CE01BD
:101EC00001960E94770B13C0AE01455D5F4F609194
:101ED000EC010E94AD0A0097E9F12091E800277F0C
:101EE0002093E800BC018BA59CA50E94DA0B809191
:101EF000E8008B778093E8002DC0803859F58091F9
:101F0000E800877F8093E8008091E3018093F100EF
:101F10008091E8008E7771CF81111CC09091EA0109
:101F20009230C0F48091E800877F8093E80090931E
:101F3000E3010E94750C8091E301811104C080913E
:101F4000E30087FF02C084E001C081E08093E701E5
:101F50000E94AD098091E80083FF0AC08091E800EB
:101F6000877F8093E8008091EB0080628093EB0094
:101F7000AC960FB6F894DEBF0FBECDBFDF91CF9108
:101F80001F910895CF938091E7018823B1F080914C
:101F9000E9008F709091EC0090FF02C090E801C0C2
:101FA00090E0C92FC82B1092E9008091E80083FDD2
:101FB0000E94590ECF70C093E900CF91089590937D
:101FC0007501809374010895E0917401F091750199
:101FD000309721F00190F081E02D099480E0089580
:101FE000E0917401F0917501309721F00280F38146
:101FF000E02D09940895E0917401F09175013097F6
:1020000021F00480F581E02D099408952091760156
:10201000309177018217930771F090937701809345
:102020007601E0917401F0917501309721F00680FE
:10203000F781E02D0994089520917801309179017C
:102040008217930771F09093790180937801E09162
:102050007401F0917501309721F00084F185E02D35
:102060000994089508950C9432100E94541C0E9403
:1020700028060E94281D0C94D0220C9462055F92C1
:102080006F927F928F929F92AF92BF92CF92DF9288
:10209000EF92FF920F931F93CF93DF93CDB7DEB7ED
:1020A0002A970FB6F894DEBF0FBECDBF0E94380747
:1020B0009AE7C92E91E0D92E00E010E0AA24A3945B
:1020C000B12C502E802F0E948C083C01F601E1902B
:1020D000F1906F01E826F926E114F10431F40F5F65
:1020E0001F4F0530110569F73AC08091D00181FD7D
:1020F0000E94950820E030E04501022E02C0880CC5
:10210000991C0A94E2F7C4018E219F21892B09F1C1
:102110002E835F826820792081E0672809F480E0BF
:1021200088870E945D1C8160782F9A8789874E81FD
:102130005F8168858A850E94F810F801EE0FFF1F05
:10214000E658FE4F8081918188259925918380836F
:1021500016C02F5F3F4F2C30310571F6C0CF8FEF87
:1021600089838A831B820E945D1C8160782F9D83F6
:102170008C8349815A816B818D810E94F8100E9465
:102180001520109184010E94E40F1817D9F00E94C5
:10219000E40F809384012A960FB6F894DEBF0FBE39
:1021A000CDBFDF91CF911F910F91FF90EF90DF9006
:1021B000CF90BF90AF909F908F907F906F905F90E7
:1021C0000C943D102A960FB6F894DEBF0FBECDBF1B
:1021D000DF91CF911F910F91FF90EF90DF90CF9003
:1021E000BF90AF909F908F907F906F905F90089579
:1021F000CF93DF93CDB7DEB72B970FB6F894DEBF42
:102200000FBECDBF4F83588769877A878B87DE01E2
:10221000119686E0FD0111928A95E9F785E0FE01AD
:10222000379601900D928A95E1F749815A816B8129
:102230007C818D819E810E94D4182B960FB6F894D4
:10224000DEBF0FBECDBFDF91CF910895CF93C82FD2
:10225000882309F4C1C0823859F40E94E40F81FD3B
:10226000BBC089E30E943B1B0E94B71B89E30CC0E3
:10227000833879F40E94E40F80FDAEC083E50E94AC
:102280003B1B0E94B71B83E50E945D1BCF910C9402
:10229000B71B843859F40E94E40F82FD9DC087E487
:1022A0000E943B1B0E94B71B87E4EECF8450813A0B
:1022B00048F48C2F0E94322281118EC08C2F0E94F4
:1022C0003B1BE4CF8C2F805E883050F4C77081E0D8
:1022D00090E001C0880FCA95EAF70E947E1BD6CF16
:1022E0008C2F855A833078F4C53A29F0C63A31F4F8
:1022F00082E890E005C081E890E002C083E890E0C9
:10230000CF910C9406108C2F885A833108F064C04A
:10231000C83A39F1C93A41F1CA3A49F1CB3A51F1D7
:10232000CC3A59F1CD3A61F1C03B69F1CE3A71F145
:10233000CF3A79F1C13B81F1C23B89F1C33B91F1C5
:10234000C43B99F1C53BA1F1C63BA9F1C73BB1F133
:10235000C83BB9F1C93BC1F1CA3BC9F58AE292E079
:1023600038C082EE90E035C089EE90E032C08AEE4F
:1023700090E02FC085EB90E02CC086EB90E029C068
:1023800087EB90E026C08CEC90E023C08DEC90E0D1
:1023900020C083E891E01DC08AE891E01AC082E97C
:1023A00091E017C084E991E014C081E292E011C08D
:1023B00083E292E00EC084E292E00BC085E292E0FC
:1023C00008C086E292E005C087E292E002C080E0A9
:1023D00090E0CF910C941C10CF910895882309F4BC
:1023E0004DC0823859F40E94E40F81FF47C089E351
:1023F0000E943B1B0E94B71B89E30CC0833871F419
:102400000E94E40F80FF3AC083E50E943B1B0E94BC
:10241000B71B83E50E945D1B0C94B71B843859F4ED
:102420000E94E40F82FF2AC087E40E943B1B0E94A7
:10243000B71B87E4EFCF982F9450913A08F4EACF76
:10244000982F905E983058F4282F277081E090E004
:1024500001C0880F2A95EAF70E94841BDDCF982FD0
:10246000955A933020F480E090E00C940610885A3E
:10247000833120F480E090E00C941C1008958823B0
:1024800021F00E947E1B0C94B71B0895882321F035
:102490000E94841B0C94B71B0895BF92CF92DF92C9
:1024A000EF92FF920F931F93CF93DF93CDB7DEB7D9
:1024B00027970FB6F894DEBF0FBECDBF8C0185E025
:1024C000F801DE01119601900D928A95E1F7F8016D
:1024D00030812181F280558152955F708381948192
:1024E000892B39F02F3F41F481E090E03F3F31F0FC
:1024F00003C081E090E002C080E090E080FD73C303
:1025000039832A8389819A815E830E94F81AB92EC1
:102510008F830E94F71A0E941F1A2B2D22952F706D
:1025200030E05E816F812530310509F4E6C06CF43E
:10253000243031050CF0A2C04B2D407F8B2D8F70C5
:10254000223031050CF045C017C02C3031054CF459
:102550002A3031050CF0E7C12830310509F043C3BA
:10256000E5C02D30310509F4BAC20CF4A2C22F30F7
:10257000310509F038C323C3182F411101C002C02F
:102580001295107FFF2059F0112309F46BC2812F9F
:102590006F830E948E1B0E94B71B6F8163C2862FC0
:1025A0000E94EE11112309F41EC3812F0E94941B77
:1025B00027960FB6F894DEBF0FBECDBFDF91CF9147
:1025C0001F910F91FF90EF90DF90CF90BF900C94F0
:1025D000B71B403211F08295807F662319F061307D
:1025E00071F523C0FF20B1F0511101C032C051304C
:1025F00081F527960FB6F894DEBF0FBECDBFDF91F1
:10260000CF911F910F91FF90EF90DF90CF90BF90EF
:102610000C949E1B511101C003C0513009F4E3C258
:102620008E830E94A11B8E819AC1FF2021F056301B
:1026300008F0D9C20EC0553008F0D5C290C1FF20B5
:10264000C9F0552331F0F801958190FF0BC29F70BE
:10265000958327960FB6F894DEBF0FBECDBFDF91EE
:10266000CF911F910F91FF90EF90DF90CF90BF908F
:102670000C943F12552309F472C109C22B2D2695E3
:102680002695237030E02115310529F021303105E0
:1026900009F0A9C219C0FF2021F0862F9B2D93704D
:1026A00002C080E090E027960FB6F894DEBF0FBE20
:1026B000CDBFDF91CF911F910F91FF90EF90DF90F1
:1026C000CF90BF900C940610FF2021F0862F9B2DF9
:1026D000937002C080E090E027960FB6F894DEBFBA
:1026E0000FBECDBFDF91CF911F910F91FF90EF9063
:1026F000DF90CF90BF900C941C10862FFF2019F014
:102700000E941B1F02C00E94831F27960FB6F894D9
:10271000DEBF0FBECDBFDF91CF911F910F91FF9014
:10272000EF90DF90CF90BF900C940A208B2D837098
:1027300009F079C0F11057C2262F229526952770EF
:10274000220F220F862F8F70C82ED12CE12CF12C56
:10275000022E04C0CC0CDD1CEE1CFF1C0A94D2F728
:1027600064FF10C06FE070E080E090E004C0660F8E
:10277000771F881F991F2A95D2F7609570958095CD
:10278000909503C060E070E0CB012B2D2695269537
:102790002370422F50E042305105D9F043305105AB
:1027A00069F16C297D298E299F294130510551F10C
:1027B00027960FB6F894DEBF0FBECDBFDF91CF9145
:1027C0001F910F91FF90EF90DF90CF90BF900C94EE
:1027D000341A6C297D298E299F2927960FB6F894E3
:1027E000DEBF0FBECDBFDF91CF911F910F91FF9044
:1027F000EF90DF90CF90BF900C94461A0E94341A4D
:10280000C701B60127960FB6F894DEBF0FBECDBF45
:10281000DF91CF911F910F91FF90EF90DF90CF90BC
:10282000BF900C94221AFF2019F08B2D817001C0EB
:102830008695882309F4D7C1262F229526952770DF
:10284000220F220F862F8F70C82ED12CE12CF12C55
:10285000022E04C0CC0CDD1CEE1CFF1C0A94D2F727
:1028600064FF10C06FE070E080E090E004C0660F8D
:10287000771F881F991F2A95D2F7609570958095CC
:10288000909503C060E070E0CB012B2D2695269536
:102890002370422F50E042305105D9F043305105AA
:1028A00069F16C297D298E299F294130510551F10B
:1028B00027960FB6F894DEBF0FBECDBFDF91CF9144
:1028C0001F910F91FF90EF90DF90CF90BF900C94ED
:1028D000D31A6C297D298E299F2927960FB6F89443
:1028E000DEBF0FBECDBFDF91CF911F910F91FF9043
:1028F000EF90DF90CF90BF900C94E51A0E94D31A0E
:10290000C701B60127960FB6F894DEBF0FBECDBF44
:10291000DF91CF911F910F91FF90EF90DF90CF90BB
:10292000BF900C94C11A603F59F120F4603E08F446
:1029300094C008C0623F09F467C0F0F1633F09F03A
:102940008CC065C0162F1F708B2D8F71FF2021F05A
:102950000E946C1A812F7DCE0E94871A812F2796A4
:102960000FB6F894DEBF0FBECDBFDF91CF911F91A0
:102970000F91FF90EF90DF90CF90BF900C94461294
:10298000FF20B1F0553008F02EC18B2D8F712796A6
:102990000FB6F894DEBF0FBECDBFDF91CF911F9170
:1029A0000F91FF90EF90DF90CF90BF900C94A61AFC
:1029B000563008F018C1E9CFFF2099F08B2D8F71A8
:1029C00027960FB6F894DEBF0FBECDBFDF91CF9133
:1029D0001F910F91FF90EF90DF90CF90BF900C94DC
:1029E0006C1A8B2D8F7127960FB6F894DEBF0FBE31
:1029F000CDBFDF91CF911F910F91FF90EF90DF90AE
:102A0000CF90BF900C94871AF110EBCFD7CFFF2057
:102A100099F08B2D8F7127960FB6F894DEBF0FBEFD
:102A2000CDBFDF91CF911F910F91FF90EF90DF907D
:102A3000CF90BF900C945D1A27960FB6F894DEBF26
:102A40000FBECDBFDF91CF911F910F91FF90EF90FF
:102A5000DF90CF90BF900C94581AFF20A9F0552317
:102A600009F4ACCF862F27960FB6F894DEBF0FBEC1
:102A7000CDBFDF91CF911F910F91FF90EF90DF902D
:102A8000CF90BF900C942611552309F4AACF862F1E
:102A900027960FB6F894DEBF0FBECDBFDF91CF9162
:102AA0001F910F91FF90EF90DF90CF90BF900C940B
:102AB000EE114B2D4F70C8010E94AB0227960FB646
:102AC000F894DEBF0FBECDBFDF91CF911F910F9164
:102AD000FF90EF90DF90CF90BF900C948A19F11087
:102AE00082C09B2D9F70492F50E04230510599F1D3
:102AF00044F44115510569F04130510509F073C0A6
:102B000019C043305105C1F14430510509F06BC083
:102B100044C027960FB6F894DEBF0FBECDBFDF913D
:102B2000CF911F910F91FF90EF90DF90CF90BF90CA
:102B30000C94E12227960FB6F894DEBF0FBECDBFEE
:102B4000DF91CF911F910F91FF90EF90DF90CF9089
:102B5000BF900C94F82227960FB6F894DEBF0FBEF4
:102B6000CDBFDF91CF911F910F91FF90EF90DF903C
:102B7000CF90BF900C94142327960FB6F894DEBF25
:102B80000FBECDBFDF91CF911F910F91FF90EF90BE
:102B9000DF90CF90BF900C942723862F27960FB6F7
:102BA000F894DEBF0FBECDBFDF91CF911F910F9183
:102BB000FF90EF90DF90CF90BF900C944B234B2D64
:102BC0004F70C80127960FB6F894DEBF0FBECDBF79
:102BD000DF91CF911F910F91FF90EF90DF90CF90F9
:102BE000BF900C94D40327960FB6F894DEBF0FBEA7
:102BF000CDBFDF91CF911F910F91FF90EF90DF90AC
:102C0000CF90BF9008950E949B1B0E94701B0E9452
:102C1000B71B0E94B6200E940A2080E090E00E942C
:102C2000061080E090E00C941C100E948B1B0C940A
:102C300003160E94F81A292F22952F7030E02C30AD
:102C400031054CF42A3031056CF422503109223020
:102C5000310590F407C02C30310551F02F3031058B
:102C600059F406C0803E10F0803F31F481E00895B1
:102C700093FB882780F9089580E00895CF93DF9330
:102C800000D000D01F92CDB7DEB70F900F900F90FD
:102C90000F900F90DF91CF910895CF93DF9300D0E5
:102CA00000D000D0CDB7DEB726960FB6F894DEBFC1
:102CB0000FBECDBFDF91CF9108951F93CF93DF93C8
:102CC000C091BB0116E012C0D0E01C9FF0011D9F17
:102CD000F00D1124E557FE4F4081518162817381CF
:102CE000848195810E944D162196C7708091BC0108
:102CF000C813EACFDF91CF911F91089540918501CC
:102D000050918601609187017091880180918901BD
:102D100090918A010C944D160F931F93CF93DF93DC
:102D200080918A0182958F7009F069C08091870136
:102D3000882309F464C0A091BB01D091BC01B0917B
:102D40008501C0918601809188019091890121E0DF
:102D500030E0BF3F11F020E030E0122FBC01609561
:102D6000709506E04AC0009721F0CF3F29F4212F4B
:102D700005C021E030E002C020E030E020FD3BC093
:102D80004A2F50E0049FF001059FF00D1124E557F4
:102D9000FE4F2181C2132FC02081B2132CC022818B
:102DA000211129C0238134812817390718F0281BE5
:102DB000390B02C0260F371F283C3105E0F4809103
:102DC0008A018F70806180938A0186E0849FF00180
:102DD000859FF00D1124E057FE4F80818F70806138
:102DE000808385E891E00E944D12DF91CF911F9181
:102DF0000F910C945D16AF5FA770AD13B4CFDF9148
:102E0000CF911F910F910895EF92FF920F931F930F
:102E1000CF93DF93CDB7DEB762970FB6F894DEBFDE
:102E20000FBECDBF8C0185E0F801DE011D9601903B
:102E30000D928A95E1F7D8014C9111965C9111970A
:102E400012966C9112971396ED90FC9014977091D6
:102E50008501E09186018091880190918901009718
:102E600039F0EF3F41F421E030E07F3F31F003C023
:102E700021E030E002C020E030E020FD5CC1209184
:102E80008701222309F4F1C0E816F90628F097011A
:102E9000281B390BC90104C0809590958E0D9F1D8C
:102EA000883C910508F098C080918A01982F907F06
:102EB00009F064C0E51314C0741312C0611110C08E
:102EC0008F70806180938A010E947E1685E891E070
:102ED0000E944D1280918A01D80115968C9343C1AE
:102EE000EF2839F05F3F41F481E090E04F3F31F04F
:102EF00003C081E090E002C080E090E080FD03C06C
:102F000081E0862702C080E090E080FF2EC08091A3
:102F1000BB012091BC0136E013C090E0389FF00166
:102F2000399FF00D1124E557FE4F7181571306C0EC
:102F30007081471303C07281671317C001968770B1
:102F40008213EBCF12C19F7059F0882309F40BC193
:102F500007C09F7029F0F8019581907F09F403C1A3
:102F6000805E883008F4FFC0D2C0662309F4FBC03D
:102F700080918A01816080938A01F5C0E51308C0C1
:102F8000741306C0611104C0D80115968C939DC0BE
:102F90004D875E878D859E856A8B0E9419166A898A
:102FA000882309F4B4C0662309F4B1C020918A01D2
:102FB000822F82958F7090E002970CF4C6C08091AA
:102FC00085019091860198878F831986FB86EA8612
:102FD0002C87CE01079646C080918A01982F907F5A
:102FE00059F47E2DF98AE88A89890E943E1685E87F
:102FF00091E00E944D1295C0E51311C074130FC0EB
:1030000061110DC0F8018583C8010E944D12E5E8E9
:10301000F1E086E0DF011D928A95E9F7A2C04D87B5
:103020005E878D859E856A8B0E9419166A89882322
:1030300009F46DC0662309F46AC020918A01822FC9
:1030400082958F7090E002970CF47FC0809185018B
:10305000909186019A8389831B82FD82EC822E8364
:10306000CE0101960E944D1270C0E816F90628F0B4
:103070009701281B390BC90104C0809590958E0DCE
:103080009F1D883C910508F046C0662309F43FC0A7
:10309000E51330C074132EC020918A0120FD21C099
:1030A000322F32953F70832F90E00097D1F0D801F6
:1030B00015962C9315970F9741F0832F8F5F82956C
:1030C000807F2F70282B15962C93C8010E944D12DB
:1030D00086E0F801A5E8B1E001900D928A95E1F74C
:1030E0003EC086E0F801A5E8B1E001900D928A9516
:1030F000E1F737C04D875E878D859E850E94191642
:10310000811123C080918A01816080938A01C80166
:103110000E944D1226C07E2DF98AE88A89890E9474
:103120003E16E5E8F1E086E0DF011D928A95E9F7B9
:103130000E947E1618C0662351F34D875E878D85E9
:103140009E850E941916882311F386E0F801A5E8F0
:10315000B1E001900D928A95E1F70E948C160E94D1
:103160007E1681E014C080E012C04D875E878D8599
:103170009E850E94F81A292F22952F7030E0223068
:1031800031050CF4E0CE243031050CF6E2CE629627
:103190000FB6F894DEBF0FBECDBFDF91CF911F9168
:1031A0000F91FF90EF9008951F93CF93DF93CDB7CA
:1031B000DEB72C970FB6F894DEBF0FBECDBF4F839E
:1031C000588769877A878B879C87CE0107960E94EC
:1031D00004178823D9F02F8138858A859B85892B10
:1031E00039F03F3F19F080E090E004C02F3FD9F75D
:1031F00081E090E0892B09F06DC04F815885698589
:103200007A858B859C850E944D1664C086E0FE0100
:103210003796DE01119601900D928A95E1F7FF81B4
:10322000E8854A855B854115510539F0EF3F41F44A
:1032300081E090E0FF3F31F003C081E090E002C008
:1032400080E090E080FD46C02091BC0130E0C901E3
:103250000196877099276091BB0170E086179707E8
:1032600009F440C0F983EA835D834C8396E0929F22
:10327000D001939FB00D1124A557BE4FFE0131968A
:1032800001900D929A95E1F78093BC010E945D1622
:1032900021C0189FC001112485579E4F0E9404171A
:1032A000882371F1E091BB011E9FF0011124E557C5
:1032B000FE4F4081518162817381848195810E949A
:1032C0004D168091BB0190E00196877099278093FD
:1032D000BB0101C016E08091BB019091BC01891334
:1032E000D8CF0EC00E9415161092BC011092BB01DF
:1032F000E5E8F1E086E0DF011D928A95E9F7EACF83
:103300002C960FB6F894DEBF0FBECDBFDF91CF91E4
:103310001F910895DF92EF92FF920F931F93CF9327
:10332000DF93EC01009709F46EC0D12CEE24E394F6
:10333000F12C8E010F5F1F4FFE018491843748F4FA
:10334000843008F04CC0813071F0823009F05BC0ED
:103350001EC0853709F43FC080F1982F94589037EC
:1033600008F051C03FC02296F8018491982F905EDA
:10337000983050F48770FE2D01C0FF0F8A95EAF750
:103380008F2F0E948E1B13C00E9426112FC02296E1
:10339000F8018491982F905E983060F48770FE2D2C
:1033A00001C0FF0F8A95EAF78F2F0E94941B0E949D
:1033B000B71B1CC00E94EE1119C02296F80104919F
:1033C00007C08FE99FE00197F1F700C000000150AE
:1033D0000111F7CF0BC02296F801D49007C00E94CC
:1033E000261103C08F770E94EE11E8018D2D07C0D2
:1033F0008150EFE9FFE03197F1F700C0000088232A
:1034000009F497CFF5CFDF91CF911F910F91FF90E6
:10341000EF90DF9008956093C1017093C201809393
:10342000C3019093C4010C9403166093BD01709383
:10343000BE018093BF019093C0010C9403160895C0
:103440000C940B1A0F931F930091C1011091C201AC
:103450002091C3013091C401602B712B822B932BDF
:103460001F910F910C940B1A0F931F930091C101A0
:103470001091C2012091C3013091C40160237123D6
:10348000822393231F910F910C940B1A0F931F9378
:103490000091C1011091C2012091C3013091C4017A
:1034A00060277127822793271F910F910C940B1A85
:1034B00060E070E0CB010C94151A41E050E060E050
:1034C00070E004C0440F551F661F771F8A95D2F71E
:1034D000CB01BA010C94151A41E050E060E070E0B5
:1034E00004C0440F551F661F771F8A95D2F780913D
:1034F000BD019091BE01A091BF01B091C001482BC8
:10350000592B6A2B7B2BCB01BA010C94151A41E085
:1035100050E060E070E004C0440F551F661F771F45
:103520008A95D2F740955095609570958091BD0130
:103530009091BE01A091BF01B091C00148235923D1
:103540006A237B23CB01BA010C94151A41E050E0A9
:1035500060E070E004C0440F551F661F771F8A9516
:10356000D2F78091BD019091BE01A091BF01B091B1
:10357000C001482759276A277B27CB01BA010C9441
:10358000151A0F931F930091BD011091BE01209158
:10359000BF013091C001602B712B822B932B1F91A7
:1035A0000F910C94151A0F931F930091BD01109168
:1035B000BE012091BF013091C0016023712382239D
:1035C00093231F910F910C94151A0F931F93009141
:1035D000BD011091BE012091BF013091C001602753
:1035E0007127822793271F910F910C94151A089524
:1035F000CF92DF92EF92FF920F931F93CF93DF93BF
:10360000EC01C090C101D090C201E090C301F090E4
:10361000C4018091BD019091BE01A091BF01B09104
:10362000C001C82AD92AEA2AFB2A0FE110E0B70113
:10363000A601002E04C076956795579547950A9484
:10364000D2F740FF08C0BE01802F0E94FA038130EC
:10365000910509F007C00150110948F7BE0180E04B
:103660000E94FA03DF91CF911F910F91FF90EF908D
:10367000DF90CF90089540910C0150910D0120E012
:1036800030E09FEFFA01E20FF31F62816817A1F0AB
:103690009F3F19F4611101C0922F2F5F3F4F2630D9
:1036A000310581F707C0FA01E90FF11D97FDFA9581
:1036B000828308959F3FB9F7089540910C0150917E
:1036C0000D0120E030E0FA01E20FF31F9281981320
:1036D00001C012822F5F3F4F26303105A1F70895B8
:1036E00081E090E0E0910C01F0910D01E80FF91FED
:1036F0001082019688309105A9F708959091C5012F
:10370000982B9093C501089580959091C5019823B9
:103710009093C50108951092C50108959091C60136
:10372000982B9093C601089580959091C601982397
:103730009093C60108951092C60108958093C70121
:1037400008951092C701089540910C0150910D0108
:1037500020E030E080E0FA01E20FF31F9181911147
:103760008F5F2F5F3F4F27303105A9F70895E09114
:103770000C01F0910D018091C5018083E0910C0155
:10378000F0910D0180819091C601892B80839091E9
:10379000C701992361F0E0910C01F0910D01808146
:1037A000892B80830E94A41B81110E94A11B809100
:1037B0000C0190910D010C94F00F8091E701843081
:1037C00021F11092D10120E488E190E00FB6F89445
:1037D000A895809360000FBE2093600080E00E9457
:1037E000E10283B7817F846083BF83B7816083BF39
:1037F0007894889583B78E7F83BF88E10FB6F8945D
:1038000080936000109260000FBE0895089508959F
:10381000CF9380E00E94E1020E94061C0E943807BC
:103820000E94071CC0E08C2F0E948C08892B29F471
:10383000CF5FC530C1F780E001C081E0CF9108952E
:103840000E94151680E00E94E1020E94D0220E9490
:10385000E40F0C9462051F920F920FB60F92112481
:103860008F939F93AF93BF938091D101811113C028
:103870008091D2019091D301A091D401B091D50152
:103880004196A11DB11D8093D2019093D301A093C5
:10389000D401B093D501BF91AF919F918F910F90BB
:1038A0000FBE0F901F90189582E084BD93E095BDE8
:1038B0009AEF97BD80936E0008958FB7F89440916A
:1038C000D2015091D3016091D4017091D5018FBF85
:1038D000CA010895CF92DF92EF92FF920F931F9348
:1038E0002FB7F8944091D2015091D3016091D40147
:1038F0007091D5012FBF6A017B01EE24FF248C015A
:1039000020E030E0C016D106E206F30620F09A016E
:10391000281B390B05C09C0120953095240F351FBD
:10392000C9011F910F91FF90EF90DF90CF90089504
:103930001F920F920FB60F9211248F939F93AF9304
:10394000BF938091D2019091D301A091D401B09105
:10395000D5010196A11DB11D8093D2019093D30191
:10396000A093D401B093D501BF91AF919F918F9156
:103970000F900FBE0F901F9018950E94C80CF894DE
:103980002FEF87EA91E6215080409040E1F700C098
:10399000000087E090EBDC018093F1019093F2014D
:1039A000A093F301B093F4012CE088E190E00FB60E
:1039B000F894A895809360000FBE20936000FFCF1D
:1039C000CF92DF92EF92FF920F931F93CF93DF93EB
:1039D000C82ED12C01E010E08D2D0E948C087C01B6
:1039E000C0E0D0E098010C2E02C0220F331F0A94D1
:1039F000E2F72E213F21232B29F42196CC30D1054B
:103A000089F708C06C2F7D2D80E00E94D503C81275
:103A1000F4CF06C0D39485E0D812DECF80E001C099
:103A200081E0DF91CF911F910F91FF90EF90DF9098
:103A3000CF900895CF93C82F8CE20E94E01C88237A
:103A400021F08C2FCF910C94E01C80E0CF91089551
:103A5000CF930E946B1E811102C00E944C1EC5E6CE
:103A600008C00E9438078FE39CE90197F1F700C076
:103A70000000C150B1F789E20E941A1D81110AC1EC
:103A80008AE20E941A1D81110E944C1E85E00E944C
:103A90001A1D81110E94BD1C0E94761E8093D001C8
:103AA00087E00E941A1D882399F18BE10E941A1D5C
:103AB000882351F09091D00191FB882780F921E073
:103AC000822780FB91F922C08EE00E941A1D882374
:103AD00051F09091D00192FB882780F921E0822754
:103AE00080FB92F913C080E10E941A1D9091D001D1
:103AF000882341F093FB882780F921E0822780FB0F
:103B000093F904C0892F809580FB90F99093D001A0
:103B10008091D0010E947A1E0E94881E8093E1014C
:103B200080EE0E941A1D882341F08091E101982FB8
:103B3000909590FB80F98093E10189E30E941A1D22
:103B4000882359F09091E10191FB882780F921E0C9
:103B5000822780FB91F99093E10182EE0E941A1D69
:103B6000882359F09091E10192FB882780F921E0A8
:103B7000822780FB92F99093E10186EE0E941A1D44
:103B8000882359F09091E10193FB882780F921E087
:103B9000822780FB93F99093E10183EE0E941A1D26
:103BA000882359F09091E10194FB882780F921E066
:103BB000822780FB94F99093E10185E30E941A1D0E
:103BC000882359F09091E10195FB882780F921E045
:103BD000822780FB95F99093E10181E30E941A1DF1
:103BE000882359F09091E10196FB882780F921E024
:103BF000822780FB96F99093E10181E10E941A1DD2
:103C0000882359F09091E10197FB882780F921E002
:103C1000822780FB97F99093E1018091E1010E9456
:103C20008C1E87E20E941A1DC82F8EE10E941A1D69
:103C30008111C2608FE10E941A1D8111C46080E26F
:103C40000E941A1D8111C86081E20E941A1D811113
:103C5000C06182E20E941A1D8111C06283E20E944B
:103C60001A1D8111C06484E20E941A1D882311F07C
:103C7000C06802C0CC2329F08C2F0E94831E6C2FB9
:103C800003C00E947F1E682F70E080E090E0CF911B
:103C90000C94201ACF9108956DEE7EEF80E090E0B5
:103CA0000E94D92460E082E090E00E94CB2460E092
:103CB00083E090E00E94CB2460E084E090E00E94EA
:103CC000CB2460E085E090E00E94CB2460E086E0B9
:103CD00090E00C94CB2480E090E00E94C52421E089
:103CE0008D3E9E4F09F020E0822F089582E090E003
:103CF0000C94BD24682F82E090E00C94CB2483E0E8
:103D000090E00C94BD24682F83E090E00C94CB24C9
:103D100084E090E00C94BD24682F84E090E00C9443
:103D2000CB2486E090E00C94BD24682F86E090E0E0
:103D30000C94CB248091DE0180FF0BC060911101B7
:103D400085E0689FB0011124759567957595679515
:103D50002AC081FF09C06091110185E0689FB00110
:103D60001124759567951FC082FF07C060911101EE
:103D700085E0689FB001112416C04091D80144230A
:103D8000C9F060911001461788F72091110185E074
:103D9000289F90011124429FC001439F900D112440
:103DA00070E00E9495246038710540F4611571053A
:103DB00039F002C065E070E0862F08958FE708951E
:103DC00081E008958091DE0180FF08C060910F01BD
:103DD00070E0759567957595679521C081FF06C060
:103DE00060910F0170E07595679519C082FF04C05E
:103DF00060910F0170E010C08091D8018823C1F05C
:103E000060910E018617A0F790910F01989FC00155
:103E1000112470E00E9495246038710528F4611522
:103E2000710521F0862F08958FE7089581E00895A8
:103E300061E070E0F4CF803F21F40E949A1E8195EA
:103E400004C0813F29F40E949A1E8093DB010895EB
:103E5000823F21F40E949A1E819504C0833F29F479
:103E60000E949A1E8093DA010895893F19F40E94F6
:103E7000E21E05C08A3F31F40E94E21E81958093C4
:103E8000DC0108958B3F21F40E94E21E819504C05D
:103E90008C3F29F40E94E21E8093DD010895843F47
:103EA00021F48091D901816017C0853F21F4809170
:103EB000D901826011C0863F21F48091D9018460CC
:103EC0000BC0873F21F48091D901886005C0883FED
:103ED00031F48091D90180618093D90108958D3F9B
:103EE00021F48091DE0181600BC08E3F21F480912E
:103EF000DE01826005C08F3F29F48091DE0184607D
:103F00008093DE010895803F29F48091DB0187FFD3
:103F10006EC007C0813F41F48091DB0118160CF0A0
:103F200066C01092DB0163C09091DA01823F19F400
:103F300097FF5DC005C0833F31F419160CF057C0E0
:103F40001092DA0154C0893F31F48091DC011816D7
:103F50000CF04DC006C08A3F39F48091DC0187FF28
:103F600046C01092DC0143C08B3F29F48091DD01F3
:103F700087FF3DC006C08C3F39F48091DD011816E3
:103F8000B4F51092DD0133C0843F21F48091D90152
:103F90008E7F05C0853F31F48091D9018D7F80935C
:103FA000D90125C0863F21F48091D9018B7FF7CFBD
:103FB000873F21F48091D901877FF1CF883F21F499
:103FC0008091D9018F7EEBCF8D3F21F48091DE016E
:103FD0008E7F0BC08E3F21F48091DE018D7F05C066
:103FE0008F3F29F48091DE018B7F8093DE018091E9
:103FF000DA0181110EC08091DB0181110AC080912C
:10400000DC01811106C08091DD01811102C0109296
:10401000D801089589ED91E00E94FB0F0E945D1C7C
:104020009093D7018093D6010895CF938091D601C4
:104030009091D7010E946A1C4091D801442321F03D
:104040002091120130E006C0209113015AE0259F13
:10405000900111248217930708F486C08091DA0139
:1040600081110DC09091DB01911109C09091DC018B
:10407000911105C09091DD01992309F475C04F3F5E
:1040800019F04F5F4093D801181624F40E949A1E2D
:104090008093DA018091DA0187FF05C00E949A1EA1
:1040A00081958093DA018091DB01181624F40E9437
:1040B0009A1E8093DB018091DB0187FF05C00E947F
:1040C0009A1E81958093DB016091DA01662339F1B4
:1040D000C091DB01CC2319F1772767FD7095872FFD
:1040E000972F0E949A2323E333E343E35FE30E9485
:1040F000FE230E9467236093DA016C2F772767FD08
:104100007095872F972F0E949A2323E333E343E38D
:104110005FE30E94FE230E9467236093DB0180918E
:10412000DC01181624F40E94E21E8093DC018091C9
:10413000DC0187FF05C00E94E21E81958093DC01AF
:104140008091DD01181624F40E94E21E8093DD01A7
:104150008091DD0187FF05C00E94E21E819580935A
:10416000DD01CF910C940A20CF910895E9EDF1E0A3
:1041700085E0DF011D928A95E9F71092D80110922F
:10418000DE010895833089F130F4813061F08230AE
:1041900009F06EC019C0853009F449C0B8F1863005
:1041A00009F066C055C020911301862F90E0820F60
:1041B000911D8F3F910520F4620F609313010895C4
:1041C0008FEF80931301089520911201862F90E0C4
:1041D000820F911D8F3F910520F4620F60931201B1
:1041E00008958FEF80931201089520911101862F79
:1041F00090E0820F911D8F3F910520F4620F609334
:10420000110108958FEF80931101089520911001FD
:10421000862F90E0820F911D8F3F910520F4620F51
:104220006093100108958FEF8093100108952091FD
:104230000F01862F90E0820F911D8F3F910520F492
:10424000620F60930F0108958FEF80930F0108951F
:1042500020910E01862F90E0820F911D8F3F9105D6
:1042600020F4620F60930E0108958FEF80930E018A
:104270000895833021F130F4813059F0823009F013
:1042800049C012C0853089F128F1863009F042C05A
:1042900037C080911301681720F4861B80931301A7
:1042A000089510921301089580911201681720F467
:1042B000861B809312010895109212010895809137
:1042C0001101681720F4861B809311010895109244
:1042D0001101089580911001681720F4861B8093C6
:1042E0001001089510921001089580910F01681730
:1042F00020F4861B80930F01089510920F010895FA
:1043000080910E01681720F4861B80930E0108959A
:1043100010920E01089541E050E060E070E004C0AA
:10432000440F551F661F771F8A95D2F7CB01BA013C
:104330000E94201A0C941516873200F58E3108F071
:1043400086C08E3009F466C060F4873009F44DC031
:1043500018F4863049F531C0883041F18B3021F5B1
:104360007BC0863109F478C018F48031E9F45CC070
:10437000893109F471C08B31B9F442C0883309F432
:104380006BC048F4893209F460C0853309F45DC01C
:10439000873251F45AC0833409F457C018F48A3371
:1043A00018F057C0883499F080E008950E94761E76
:1043B0000E94881E0E94911E4FC08091D001817F73
:1043C0008E7F8093D00181E08093DF0108950E9469
:1043D00015162FEF83ED90E3215080409040E1F7D8
:1043E00000C000000E94BD1C37C08091D00180FF3A
:1043F00003C0817F8E7F01C081608093D0012CC07B
:104400009091D00191FB882780F921E0822780FBE1
:1044100091F913C09091D00192FB882780F921E097
:10442000822780FB92F909C09091D00193FB8827E5
:1044300080F921E0822780FB93F99093D0018823B3
:1044400059F091609093D00107C080E003C08D5176
:1044500001C089530E948B2181E0089580E0089576
:1044600080E00895CF93C82F8091DF01813071F0F3
:1044700020F0823009F089C037C0A0910C01B091C2
:104480000D018C91823209F082C007C0A0910C010D
:10449000B0910D018C91823249F48C2F0E942E2212
:1044A00081111EC08C2F0E949C211CC08C2F0E9449
:1044B0003022811115C0C43169F030F4CB3081F065
:1044C000C03109F068C009C0C93221F0C83309F011
:1044D00062C006C01092DF015EC082E08093DF01FF
:1044E00081E090E081705AC0C932C9F060F4C431F3
:1044F000B1F020F4C73009F04CC034C0CE51C63002
:1045000008F047C017C0CE3439F120F4CB3409F09D
:1045100040C01CC0C135C1F0C235D9F513C080916F
:10452000E001882319F01092E00133C081E080930C
:10453000DF0134C0EC2FF0E0E65BFE4F808180931A
:10454000E00127C061E003C061E007C06AE080913C
:10455000E0010E94C2201DC06AE08091E0010E943B
:10456000392117C08EE18093130182E380931201F9
:104570008AE08093110184E18093100188E08093A8
:104580000F0188E280930E0104C01092DF0180E0E9
:1045900005C081E003C080E090E0A4CFCF910895F2
:1045A0000E946B1E811102C00E944C1E0E94911E2F
:1045B0008093F00180FF02C0869501C080E00C94DA
:1045C000E1028091F001982F9695292F30E0233059
:1045D00031054CF49F5F990F8170892B8160809326
:1045E000F0010E94951E8091F00186950C94E102E5
:1045F0008091F001982F969591F09158990F8170C4
:10460000892B8093F0018E7F91E009F490E08091F6
:10461000F00190FB80F98093F0010E94951E80913B
:10462000F00186950C94E1028091F001982F90950D
:1046300090FB80F98093F0010E94951E8091F0011B
:1046400080FF02C0869501C080E00C94E1023091A9
:10465000F001232F26952F5F2F77822F90E0317066
:1046600004972CF4220F232B2093F00102C03093E7
:10467000F0018091F001282F2E7F91E009F490E065
:1046800090FB80F98093F0010E94951E8091F001CB
:1046900086950C94E1022091F001922F969598272F
:1046A000990F822F8170892B8093F0018E7F91E08A
:1046B00009F490E08091F00190FB80F98093F00183
:1046C0000E94951E8091F00186950C94E10204D021
:1046D0006894B1118DC0089570D088F09F5790F004
:1046E000B92F9927B751A0F0D1F0660F771F881F17
:1046F000991F1AF0BA95C9F712C0B13081F077D07E
:10470000B1E0089574C0672F782F8827B85F39F01B
:10471000B93FCCF3869577956795B395D9F73EF475
:1047200090958095709561957F4F8F4F9F4F08951D
:10473000E89409C097FB3EF490958095709561953B
:104740007F4F8F4F9F4F9923A9F0F92F96E9BB27F1
:104750009395F695879577956795B795F111F8CF6D
:10476000FAF4BB0F11F460FF1BC06F5F7F4F8F4FD8
:104770009F4F16C0882311F096E911C0772321F0CE
:104780009EE8872F762F05C0662371F096E8862F66
:1047900070E060E02AF09A95660F771F881FDAF7BD
:1047A000880F9695879597F9089557FD9058440F6F
:1047B000551F59F05F3F71F04795880F97FB991F80
:1047C00061F09F3F79F0879508951216130614063D
:1047D000551FF2CF4695F1DF08C0161617061806CA
:1047E000991FF1CF86957105610508940895E894A5
:1047F000BB2766277727CB0197F908950BD078C0A0
:1048000069D028F06ED018F0952309F05AC05FC027
:104810001124EECFCADFA0F3959FD1F3950F50E09E
:10482000551F629FF001729FBB27F00DB11D639F62
:10483000AA27F00DB11DAA1F649F6627B00DA11D08
:10484000661F829F2227B00DA11D621F739FB00DAE
:10485000A11D621F839FA00D611D221F749F33271E
:10486000A00D611D231F849F600D211D822F762FB7
:104870006A2F11249F5750408AF0E1F088234AF0B4
:10488000EE0FFF1FBB1F661F771F881F9150504000
:10489000A9F79E3F510570F014C0AACF5F3FECF31B
:1048A000983EDCF3869577956795B795F795E795EC
:1048B0009F5FC1F7FE2B880F911D9695879597F9FD
:1048C000089597F99F6780E870E060E008959FEF92
:1048D00080EC089500240A94161617061806090697
:1048E000089500240A941216130614060506089566
:1048F000092E0394000C11F4882352F0BB0F40F4EE
:10490000BF2B11F460FF04C06F5F7F4F8F4F9F4F2D
:104910000895991B79E004C0991F961708F0961B1B
:10492000881F7A95C9F78095089597FB072E16F48E
:10493000009407D077FD09D00E94A92407FC05D078
:104940003EF4909581959F4F0895709561957F4FA6
:104950000895AA1BBB1B51E107C0AA1FBB1FA617C6
:10496000B70710F0A61BB70B881F991F5A95A9F718
:1049700080959095BC01CD010895F999FECF92BD27
:1049800081BDF89A992780B50895A8E1B0E042E08A
:1049900050E00C94E024262FF999FECF1FBA92BD67
:1049A00081BD20BD0FB6F894FA9AF99A0FBE019610
:1049B00008950E94CB24272F0C94CC24DC01CB013A
:1049C000FC01F999FECF06C0F2BDE1BDF89A31961F
:1049D00000B40D9241505040B8F70895F894FFCFBD
:1049E00005960826090209CD08990801C80128087A
:1049F000140A321E420045002500260043006100D3
:104A00006000200037006400650066006700440015
:104A100046002400470074038D03A603BF038B04E4
:104A20003E040804E8033F4D362001020304050656
:044A3000070809006A
:00000001FF

@ -0,0 +1,140 @@
#----------------------------------------------------------------------------
# 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 = retro_refit
# Directory common source filess exist
TOP_DIR = ../..
TMK_DIR = ../../tmk_core
# Directory keyboard dependent files exist
TARGET_DIR = .
# # project specific files
SRC = retro_refit.c
ifdef KEYMAP
SRC := keymaps/$(KEYMAP).c $(SRC)
else
SRC := keymaps/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=512
# 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
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
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

@ -0,0 +1,24 @@
retro_refit keyboard firmware
======================
## Quantum MK Firmware
For the full Quantum feature list, see [the parent README.md](/README.md).
## Building
Download or clone the whole firmware and navigate to the keyboard/retro_refit folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```
$ make KEYMAP=[default|jack|<name>]
```
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.

@ -0,0 +1,122 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CONFIG_H
#define CONFIG_H
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER Nobody
#define PRODUCT retro_refit
#define DESCRIPTION Retro Refit
/* key matrix size */
#define MATRIX_ROWS 11
#define MATRIX_COLS 8
// See note in retro_refit.h for an explanation of how this matrix is wired up
#define COLS (int []){ B0, B1, B2, B3, D2, D3, C7, D5 }
#define ROWS (int []){ D4, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
#define BACKLIGHT_LEVELS 0
/* 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
/* Force NKRO Mode - If forced on, must be disabled via magic key (default = LShift+RShift+N) */
#define FORCE_NKRO
/*
* Magic key options
* These options allow the magic key functionality to be changed. This is useful
* if your keyboard/keypad is missing keys and you want magic key support.
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* remap magic keys */
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
#define MAGIC_KEY_LOCK BSLS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* 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

@ -0,0 +1,33 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
#include "retro_refit.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] =
KEYMAP( ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, NLCK, SLCK, PSCR, PAUS, \
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, HOME, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, PGUP, \
BSLS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, PGDN, \
LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, END, \
LCTL, LGUI, LALT, SPC, INS, DEL, LEFT, DOWN, RGHT),
};
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};

@ -0,0 +1,68 @@
#include "retro_refit.h"
__attribute__ ((weak))
void matrix_init_user(void) {
// leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void matrix_scan_user(void) {
// leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
// leave this function blank - it can be defined in a keymap file
};
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
// Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS)
DDRD |= (1<<6);
PORTD |= (1<<6);
matrix_init_user();
};
void amatrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
matrix_scan_user();
};
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
// output low
DDRD |= (1<<0);
PORTD &= ~(1<<0);
} else {
// Hi-Z
DDRD &= ~(1<<0);
PORTD &= ~(1<<0);
}
if (usb_led & (1<<USB_LED_NUM_LOCK)) {
// output low
DDRD |= (1<<1);
PORTD &= ~(1<<1);
} else {
// Hi-Z
DDRD &= ~(1<<1);
PORTD &= ~(1<<1);
}
if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
// output low
DDRC |= (1<<6);
PORTC &= ~(1<<6);
} else {
// Hi-Z
DDRC &= ~(1<<6);
PORTC &= ~(1<<6);
}
led_set_user(usb_led);
};

@ -0,0 +1,45 @@
#ifndef RETRO_REFIT_H
#define RETRO_REFIT_H
#include "matrix.h"
#include "keymap_common.h"
#include "led.h"
#include <stddef.h>
// This macro is an example of using a non-standard row-column matrix. The
// keyboard in question had 11 rows and 8 columns, but the rows were not all
// horizontal, and the columns were not all vertical. For example, row 2
// contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and
// "Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B",
// "Left Alt", "Up Arrow", and "Down Arrow".
//
// The macro makes programming the keys easier and in a more straight-forward
// manner because it realigns the keys into a 6x15 sensible keyboard layout
// instead of the obtuse 11x8 matrix.
#define KEYMAP( \
K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
K10, K06, K25, K07, K86, K85, K95, K90, K93 \
) { \
{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
}
void matrix_init_user(void);
void matrix_scan_user(void);
void led_set_user(uint8_t usb_led);
#endif

@ -25,6 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "backlight.h"
#include "keymap_midi.h"
#include "bootloader.h"
#include <stdio.h>
#include <inttypes.h>

@ -0,0 +1,311 @@
/* Keymap macros for the French BÉPO layout - http://bepo.fr */
#ifndef KEYMAP_BEPO_H
#define KEYMAP_BEPO_H
#include "keymap_common.h"
// Alt gr
#ifndef ALTGR
#define ALTGR(kc) RALT(kc)
#endif
#ifndef ALGR
#define ALGR(kc) ALTGR(kc)
#endif
#define BP_ALGR KC_RALT
// Normal characters
// First row (on usual keyboards)
#define BP_DOLLAR KC_GRAVE // $
#define BP_DLR BP_DOLLAR
#define BP_DOUBLE_QUOTE KC_1 // "
#define BP_DQOT BP_DOUBLE_QUOTE
#define BP_LEFT_GUILLEMET KC_2 // «
#define BP_LGIL BP_LEFT_GUILLEMET
#define BP_RIGHT_GUILLEMET KC_3 // »
#define BP_RGIL BP_RIGHT_GUILLEMET
#define BP_LEFT_PAREN KC_4 // (
#define BP_LPRN BP_LEFT_PAREN
#define BP_RIGHT_PAREN KC_5 // )
#define BP_RPRN BP_RIGHT_PAREN
#define BP_AT KC_6 // @
#define BP_PLUS KC_7 // +
#define BP_MINUS KC_8 // -
#define BP_MINS BP_MINUS
#define BP_SLASH KC_9 // /
#define BP_SLSH BP_SLASH
#define BP_ASTERISK KC_0 // *
#define BP_ASTR BP_ASTERISK
#define BP_EQUAL KC_MINUS // =
#define BP_EQL BP_EQUAL
#define BP_PERCENT KC_EQUAL // %
#define BP_PERC BP_PERCENT
// Second row
#define BP_B KC_Q
#define BP_E_ACUTE KC_W // é
#define BP_ECUT BP_E_ACUTE
#define BP_P KC_E
#define BP_O KC_R
#define BP_E_GRAVE KC_T // è
#define BP_EGRV BP_E_GRAVE
#define BP_DEAD_CIRCUMFLEX KC_Y // dead ^
#define BP_DCRC BP_DEAD_CIRCUMFLEX
#define BP_V KC_U
#define BP_D KC_I
#define BP_L KC_O
#define BP_J KC_P
#define BP_Z KC_LBRACKET
#define BP_W KC_RBRACKET
// Third row
#define BP_A KC_A
#define BP_U KC_S
#define BP_I KC_D
#define BP_E KC_F
#define BP_COMMA KC_G // ,
#define BP_COMM BP_COMMA
#define BP_C KC_H
#define BP_T KC_J
#define BP_S KC_K
#define BP_R KC_L
#define BP_N KC_SCOLON
#define BP_M KC_QUOTE
#define BP_C_CEDILLA KC_BSLASH // ç
#define BP_CCED BP_C_CEDILLA
// Fourth row
#define BP_E_CIRCUMFLEX KC_NONUS_BSLASH // ê
#define BP_ECRC BP_E_CIRCUMFLEX
#define BP_A_GRAVE KC_Z // à
#define BP_AGRV BP_A_GRAVE
#define BP_Y KC_X
#define BP_X KC_C
#define BP_DOT KC_V // .
#define BP_K KC_B
#define BP_APOSTROPHE KC_N
#define BP_APOS BP_APOSTROPHE // '
#define BP_Q KC_M
#define BP_G KC_COMMA
#define BP_H KC_DOT
#define BP_F KC_SLASH
// Shifted characters
// First row
#define BP_HASH LSFT(BP_DOLLAR) // #
#define BP_1 LSFT(KC_1)
#define BP_2 LSFT(KC_2)
#define BP_3 LSFT(KC_3)
#define BP_4 LSFT(KC_4)
#define BP_5 LSFT(KC_5)
#define BP_6 LSFT(KC_6)
#define BP_7 LSFT(KC_7)
#define BP_8 LSFT(KC_8)
#define BP_9 LSFT(KC_9)
#define BP_0 LSFT(KC_0)
#define BP_DEGREE LSFT(BP_EQUAL) // °
#define BP_DEGR BP_DEGREE
#define BP_GRAVE LSFT(BP_PERCENT) // `
#define BP_GRV BP_GRAVE
// Second row
#define BP_EXCLAIM LSFT(BP_DEAD_CIRCUMFLEX) // !
#define BP_EXLM BP_EXCLAIM
// Third row
#define BP_SCOLON LSFT(BP_COMMA) // ;
#define BP_SCLN BP_SCOLON
// Fourth row
#define BP_COLON LSFT(BP_DOT) // :
#define BP_COLN BP_COLON
#define BP_QUESTION LSFT(BP_QUOTE) // ?
#define BP_QEST BP_QUESTION
// Space bar
#define BP_NON_BREAKING_SPACE LSFT(KC_SPACE)
#define BP_NBSP BP_NON_BREAKING_SPACE
// AltGr-ed characters
// First row
#define BP_EN_DASH ALTGR(BP_DOLLAR) //
#define BP_NDSH BP_EN_DASH
#define BP_EM_DASH ALTGR(KC_1) // —
#define BP_MDSH BP_EM_DASH
#define BP_LESS ALTGR(KC_2) // <
#define BP_GREATER ALTGR(KC_3) // >
#define BP_GRTR BP_GREATER
#define BP_LBRACKET ALTGR(KC_4) // [
#define BP_LBRC BP_LBRACKET
#define BP_RBRACKET ALTGR(KC_5) // ]
#define BP_RBRC BP_RBRACKET
#define BP_CIRCUMFLEX ALTGR(KC_6) // ^
#define BP_CIRC BP_CIRCUMFLEX
#define BP_PLUS_MINUS ALTGR(KC_7) // ±
#define BP_PSMS BP_PLUS_MINUS
#define BP_MATH_MINUS ALTGR(KC_8) //
#define BP_MMNS BP_MATH_MINUS
#define BP_OBELUS ALTGR(KC_9) // ÷
#define BP_OBEL BP_OBELUS
// more conventional name of the symbol
#define BP_DIVISION_SIGN BP_OBELUS
#define BP_DVSN BP_DIVISION_SIGN
#define BP_TIMES ALTGR(KC_0) // ×
#define BP_TIMS BP_TIMES
#define BP_DIFFERENT ALTGR(BP_EQUAL) // ≠
#define BP_DIFF BP_DIFFERENT
#define BP_PERMILLE ALTGR(BP_PERCENT) // ‰
#define BP_PMIL BP_PERMILLE
// Second row
#define BP_PIPE ALTGR(BP_B) // |
#define BP_DEAD_ACUTE ALTGR(BP_E_ACUTE) // dead ´
#define BP_DACT BP_DEAD_ACUTE
#define BP_AMPERSAND ALTGR(BP_P) // &
#define BP_AMPR BP_AMPERSAND
#define BP_OE_LIGATURE ALTGR(BP_O) // œ
#define BP_OE BP_OE_LIGATURE
#define BP_DEAD_GRAVE ALTGR(BP_E_GRAVE) // `
#define BP_DGRV BP_DEAD_GRAVE
#define BP_INVERTED_EXCLAIM ALTGR(BP_DEAD_CIRCUMFLEX) // ¡
#define BP_IXLM BP_INVERTED_EXCLAIM
#define BP_DEAD_CARON ALTGR(BP_V) // dead ˇ
#define BP_DCAR BP_DEAD_CARON
#define BP_ETH ALTGR(BP_D) // ð
#define BP_DEAD_SLASH ALTGR(BP_L) // dead /
#define BP_DSLH BP_DEAD_SLASH
#define BP_IJ_LIGATURE ALTGR(BP_J) // ij
#define BP_IJ BP_IJ_LIGATURE
#define BP_SCHWA ALTGR(BP_Z) // ə
#define BP_SCWA BP_SCHWA
#define BP_DEAD_BREVE ALTGR(BP_W) // dead ˘
#define BP_DBRV BP_DEAD_BREVE
// Third row
#define BP_AE_LIGATURE ALTGR(BP_A) // æ
#define BP_AE BP_AE_LIGATURE
#define BP_U_GRAVE AGR(BP_U) // ù
#define BP_UGRV BP_U_GRAVE
#define BP_DEAD_TREMA ALTGR(BP_I) // dead ¨ (trema/umlaut/diaresis)
#define BP_DTRM BP_DEAD_TREMA
#define BP_EURO ALTGR(BP_E) // €
#define BP_TYPOGRAPHICAL_APOSTROPHE ALTGR(BP_COMMMA) //
#define BP_TAPO BP_TYPOGRAPHICAL_APOSTROPHE
#define BP_COPYRIGHT ALTGR(BP_C) // ©
#define BP_CPRT BP_COPYRIGHT
#define BP_THORN ALTGR(BP_T) // þ
#define BP_THRN BP_THORN
#define BP_SHARP_S ALTGR(BP_S) // ß
#define BP_SRPS BP_SHARP_S
#define BP_REGISTERED_TRADEMARK ALTGR(BP_R) // ®
#define BP_RTM BP_REGISTERED_TRADEMARK
#define BP_DEAD_TILDE ALTGR(BP_N) // dead ~
#define BP_DTLD BP_DEAD_TILDE
#define BP_DEAD_MACRON ALTGR(BP_M) // dead ¯
#define BP_DMCR BP_DEAD_MACRON
#define BP_DEAD_CEDILLA ALTGR(BP_C_CEDILLA) // dead ¸
#define BP_DCED BP_DEAD_CEDILLA
// Fourth row
#define BP_NONUS_SLASH ALTGR(BP_E_CIRCUMFLEX) // / on non-us backslash key (102nd key, ê in bépo)
#define BP_NUSL BP_NONUS_SLASH
#define BP_BACKSLASH ALTGR(BP_A_GRAVE) /* \ */
#define BP_BSLS BP_BACKSLASH
#define BP_LEFT_CURLY_BRACE ALTGR(BP_Y) // {
#define BP_LCBR BP_LEFT_CURLY_BRACE
#define BP_RIGHT_CURLY_BRACE ALTGR(BP_X) // }
#define BP_RCBR BP_RIGHT_CURLY_BRACE
#define BP_ELLIPSIS ALTGR(BP_DOT) // …
#define BP_ELPS BP_ELLIPSIS
#define BP_TILDE ALTGR(BP_K) // ~
#define BP_TILD BP_TILDE
#define BP_INVERTED_QUESTION ALTGR(BP_QUESTION) // ¿
#define BP_IQST BP_INVERTED_QUESTION
#define BP_DEAD_RING ALTGR(BP_Q) // dead °
#define BP_DRNG BP_DEAD_RING
#define BP_DEAD_GREEK ALTGR(BP_G) // dead Greek key (following key will make a Greek letter)
#define BP_DGRK BP_DEAD_GREEK
#define BP_DAGGER ALTGR(BP_H) // †
#define BP_DAGR BP_DAGGER
#define BP_DEAD_OGONEK ALTGR(BP_F) // dead ˛
#define BP_DOGO BP_DEAD_OGONEK
// Space bar
#define BP_UNDERSCORE ALTGR(KC_SPACE) // _
#define BP_UNDS BP_UNDERSCORE
// AltGr-Shifted characters (different from capitalised AltGr-ed characters)
// First row
#define BP_PARAGRAPH ALTGR(BP_HASH) // ¶
#define BP_PARG BP_PARAGRAPH
#define BP_LOW_DOUBLE_QUOTE ALTGR(BP_1) // „
#define BP_LWQT BP_LOW_DOUBLE_QUOTE
#define BP_LEFT_DOUBLE_QUOTE ALTGR(BP_2) // “
#define BP_LDQT BP_LEFT_DOUBLE_QUOTE
#define BP_RIGHT_DOUBLE_QUOTE ALTGR(BP_3) // ”
#define BP_RDQT BP_RIGHT_DOUBLE_QUOTE
#define BP_LESS_OR_EQUAL ALTGR(BP_4) // ≤
#define BP_LEQL BP_LESS_OR_EQUAL
#define BP_GREATER_OR_EQUAL ALTGR(BP_5) // ≥
#define BP_GEQL BP_GREATER_OR_EQUAL
// nothing on ALTGR(BP_6)
#define BP_NEGATION ALTGR(BP_7) // ¬
#define BP_NEGT BP_NEGATION
#define BP_ONE_QUARTER ALTGR(BP_8) // ¼
#define BP_1QRT BP_ONE_QUARTER
#define BP_ONE_HALF ALTGR(BP_9) // ½
#define BP_1HLF BP_ONE_HALF
#define BP_THREE_QUARTERS ALTGR(BP_0) // ¾
#define BP_3QRT BP_THREE_QUARTERS
#define BP_MINUTES ALTGR(BP_DEGREE) //
#define BP_MNUT BP_MINUTES
#define BP_SECONDS ALTGR(BP_GRAVE) // ″
#define BP_SCND BP_SECONDS
// Second row
#define BP_BROKEN_PIPE LSFT(BP_PIPE) // ¦
#define BP_BPIP BP_BROKEN_PIPE
#define BP_DEAD_DOUBLE_ACUTE LSFT(BP_DEAD_ACUTE) // ˝
#define BP_DDCT BP_DEAD_DOUBLE_ACUTE
#define BP_SECTION ALTGR(LSFT(BP_P)) // §
#define BP_SECT BP_SECTION
// LSFT(BP_DEAD_GRAVE) is actually the same character as LSFT(BP_PERCENT)
#define BP_GRAVE_BIS LSFT(BP_DEAD_GRAVE) // `
#define BP_GRVB BP_GRAVE_BIS
// Third row
#define BP_DEAD_DOT_ABOVE LSFT(BP_DEAD_TREMA) // dead ˙
#define BP_DDTA BP_DEAD_DOT_ABOVE
#define BP_DEAD_CURRENCY LSFT(BP_EURO) // dead ¤ (next key will generate a currency code like ¥ or £)
#define BP_DCUR BP_DEAD_CURRENCY
#define BP_DEAD_HORN LSFT(ALTGR(BP_COMMA)) // dead ̛
#define BP_DHRN BP_DEAD_HORN
#define BP_LONG_S LSFT(ALTGR(BP_C)) // ſ
#define BP_LNGS BP_LONG_S
#define BP_TRADEMARK LSFT(BP_REGISTERED_TRADEMARK) // ™
#define BP_TM BP_TRADEMARK
#define BP_ORDINAL_INDICATOR_O LSFT(ALTGR(BP_M)) // º
#define BP_ORDO BP_ORDINAL_INDICATOR_O
#define BP_DEAD_COMMA LSFT(BP_DEAD_CEDILLA) // dead ˛
#define BP_DCOM BP_DEAD_COMMA
// Fourth row
#define BP_LEFT_QUOTE LSFT(ALTGR(BP_Y)) //
#define BP_LQOT BP_LEFT_QUOTE
#define BP_RIGHT_QUOTE LSFT(ALTGR(BP_X)) //
#define BP_RQOT BP_RIGHT_QUOTE
#define BP_INTERPUNCT LSFT(ALTGR(BP_DOT)) // ·
#define BP_IPCT BP_INTERPUNCT
#define BP_DEAD_HOOK_ABOVE LSFT(ALTGR(BP_QUESTION)) // dead ̉
#define BP_DHKA BP_DEAD_HOOK_ABOVE
#define BP_DEAD_UNDERDOT LSFT(BP_DEAD_RING) // dead ̣
#define BP_DUDT BP_DEAD_UNDERDOT
#define BP_DOUBLE_DAGGER LSFT(BP_DAGGER) // ‡
#define BP_DDGR BP_DOUBLE_DAGGER
#define BP_ORDINAL_INDICATOR_A LSFT(ALTGR(BP_F)) // ª
#define BP_ORDA BP_ORDINAL_INDICATOR_A
// Space bar
#define BP_NARROW_NON_BREAKING_SPACE ALTGR(BP_NON_BREAKING_SPACE)
#define BP_NNBS BP_NARROW_NON_BREAKING_SPACE
#endif

@ -9,92 +9,92 @@
// Alt gr
// normal characters
#define DE_Z KC_Y
#define DE_Y KC_Z
#define DE_OSX_Z KC_Y
#define DE_OSX_Y KC_Z
#define DE_A KC_A
#define DE_B KC_B
#define DE_C KC_C
#define DE_D KC_D
#define DE_E KC_E
#define DE_F KC_F
#define DE_G KC_G
#define DE_H KC_H
#define DE_I KC_I
#define DE_J KC_J
#define DE_K KC_K
#define DE_L KC_L
#define DE_M KC_M
#define DE_N KC_N
#define DE_O KC_O
#define DE_P KC_P
#define DE_Q KC_Q
#define DE_R KC_R
#define DE_S KC_S
#define DE_T KC_T
#define DE_U KC_U
#define DE_V KC_V
#define DE_W KC_W
#define DE_X KC_X
#define DE_OSX_A KC_A
#define DE_OSX_B KC_B
#define DE_OSX_C KC_C
#define DE_OSX_D KC_D
#define DE_OSX_E KC_E
#define DE_OSX_F KC_F
#define DE_OSX_G KC_G
#define DE_OSX_H KC_H
#define DE_OSX_I KC_I
#define DE_OSX_J KC_J
#define DE_OSX_K KC_K
#define DE_OSX_L KC_L
#define DE_OSX_M KC_M
#define DE_OSX_N KC_N
#define DE_OSX_O KC_O
#define DE_OSX_P KC_P
#define DE_OSX_Q KC_Q
#define DE_OSX_R KC_R
#define DE_OSX_S KC_S
#define DE_OSX_T KC_T
#define DE_OSX_U KC_U
#define DE_OSX_V KC_V
#define DE_OSX_W KC_W
#define DE_OSX_X KC_X
#define DE_0 KC_0
#define DE_1 KC_1
#define DE_2 KC_2
#define DE_3 KC_3
#define DE_4 KC_4
#define DE_5 KC_5
#define DE_6 KC_6
#define DE_7 KC_7
#define DE_8 KC_8
#define DE_9 KC_9
#define DE_OSX_0 KC_0
#define DE_OSX_1 KC_1
#define DE_OSX_2 KC_2
#define DE_OSX_3 KC_3
#define DE_OSX_4 KC_4
#define DE_OSX_5 KC_5
#define DE_OSX_6 KC_6
#define DE_OSX_7 KC_7
#define DE_OSX_8 KC_8
#define DE_OSX_9 KC_9
#define DE_DOT KC_DOT
#define DE_COMM KC_COMM
#define DE_OSX_DOT KC_DOT
#define DE_OSX_COMM KC_COMM
#define DE_SS KC_MINS
#define DE_AE KC_QUOT
#define DE_UE KC_LBRC
#define DE_OE KC_SCLN
#define DE_OSX_SS KC_MINS
#define DE_OSX_AE KC_QUOT
#define DE_OSX_UE KC_LBRC
#define DE_OSX_OE KC_SCLN
#define DE_CIRC KC_NUBS // accent circumflex ^ and ring °
#define DE_ACUT KC_EQL // accent acute ´ and grave `
#define DE_PLUS KC_RBRC // + and * and ~
#define DE_HASH KC_BSLS // # and '
#define DE_LESS KC_GRV // < and > and |
#define DE_MINS KC_SLSH // - and _
#define DE_OSX_CIRC KC_NUBS // accent circumflex ^ and ring °
#define DE_OSX_ACUT KC_EQL // accent acute ´ and grave `
#define DE_OSX_PLUS KC_RBRC // + and * and ~
#define DE_OSX_HASH KC_BSLS // # and '
#define DE_OSX_LESS KC_GRV // < and > and |
#define DE_OSX_MINS KC_SLSH // - and _
// shifted characters
#define DE_RING LSFT(DE_CIRC) // °
#define DE_EXLM LSFT(KC_1) // !
#define DE_DQOT LSFT(KC_2) // "
#define DE_PARA LSFT(KC_3) // §
#define DE_DLR LSFT(KC_4) // $
#define DE_PERC LSFT(KC_5) // %
#define DE_AMPR LSFT(KC_6) // &
#define DE_SLSH LSFT(KC_7) // /
#define DE_LPRN LSFT(KC_8) // (
#define DE_RPRN LSFT(KC_9) // )
#define DE_EQL LSFT(KC_0) // =
#define DE_QST LSFT(DE_SS) // ?
#define DE_GRV LSFT(DE_ACUT) // `
#define DE_ASTR LSFT(DE_PLUS) // *
#define DE_QUOT LSFT(DE_HASH) // '
#define DE_MORE LSFT(DE_LESS) // >
#define DE_COLN LSFT(KC_DOT) // :
#define DE_SCLN LSFT(KC_COMM) // ;
#define DE_UNDS LSFT(DE_MINS) // _
#define DE_OSX_RING LSFT(DE_OSX_CIRC) // °
#define DE_OSX_EXLM LSFT(KC_1) // !
#define DE_OSX_DQOT LSFT(KC_2) // "
#define DE_OSX_PARA LSFT(KC_3) // §
#define DE_OSX_DLR LSFT(KC_4) // $
#define DE_OSX_PERC LSFT(KC_5) // %
#define DE_OSX_AMPR LSFT(KC_6) // &
#define DE_OSX_SLSH LSFT(KC_7) // /
#define DE_OSX_LPRN LSFT(KC_8) // (
#define DE_OSX_RPRN LSFT(KC_9) // )
#define DE_OSX_EQL LSFT(KC_0) // =
#define DE_OSX_QST LSFT(DE_OSX_SS) // ?
#define DE_OSX_GRV LSFT(DE_OSX_ACUT) // `
#define DE_OSX_ASTR LSFT(DE_OSX_PLUS) // *
#define DE_OSX_QUOT LSFT(DE_OSX_HASH) // '
#define DE_OSX_MORE LSFT(DE_OSX_LESS) // >
#define DE_OSX_COLN LSFT(KC_DOT) // :
#define DE_OSX_SCLN LSFT(KC_COMM) // ;
#define DE_OSX_UNDS LSFT(DE_OSX_MINS) // _
// Alt-ed characters
#define DE_SQ2 LALT(KC_2) // ²
#define DE_SQ3 LALT(KC_3) // ³
#define DE_LCBR LALT(KC_7) // {
#define DE_LBRC LALT(KC_5) // [
#define DE_RBRC LALT(KC_6) // ]
#define DE_RCBR LALT(KC_9) // }
#define DE_BSLS LALT(LSFT(KC_7)) // backslash
#define DE_AT LALT(DE_L) // @
#define DE_EURO LALT(KC_E) // €
#define DE_TILD LALT(DE_N) // ~
#define DE_PIPE LALT(DE_7) // |
#define DE_OSX_SQ2 LALT(KC_2) // ²
#define DE_OSX_SQ3 LALT(KC_3) // ³
#define DE_OSX_LCBR LALT(KC_8) // {
#define DE_OSX_LBRC LALT(KC_5) // [
#define DE_OSX_RBRC LALT(KC_6) // ]
#define DE_OSX_RCBR LALT(KC_9) // }
#define DE_OSX_BSLS LALT(LSFT(KC_7)) // backslash
#define DE_OSX_AT LALT(DE_OSX_L) // @
#define DE_OSX_EURO LALT(KC_E) // €
#define DE_OSX_TILD LALT(DE_OSX_N) // ~
#define DE_OSX_PIPE LALT(DE_OSX_7) // |
#endif

@ -99,11 +99,11 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
if (record->event.pressed) {
// midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
// midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
play_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
} else {
// midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
// midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127);
stop_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
}
}

@ -19,9 +19,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdint.h"
#include "led.h"
__attribute__ ((weak))
void led_set_kb(uint8_t usb_led) {
}
void led_set(uint8_t usb_led)
{
// Example LED Code
//
// // Using PE6 Caps Lock LED
// if (usb_led & (1<<USB_LED_CAPS_LOCK))
// {
@ -35,4 +42,6 @@ void led_set(uint8_t usb_led)
// DDRE &= ~(1<<6);
// PORTE &= ~(1<<6);
// }
led_set_kb(usb_led);
}

@ -48,14 +48,14 @@ static void unselect_rows(void);
static void select_row(uint8_t row);
__attribute__ ((weak))
void * matrix_init_kb(void) {
void matrix_init_kb(void) {
};
}
__attribute__ ((weak))
void * matrix_scan_kb(void) {
void matrix_scan_kb(void) {
};
}
inline
uint8_t matrix_rows(void)
@ -86,9 +86,7 @@ void matrix_init(void)
matrix_debouncing[i] = 0;
}
if (matrix_init_kb) {
(*matrix_init_kb)();
}
matrix_init_kb();
}
@ -152,9 +150,7 @@ uint8_t matrix_scan(void)
}
#endif
if (matrix_scan_kb) {
(*matrix_scan_kb)();
}
matrix_scan_kb();
return 1;
}

@ -118,9 +118,10 @@ 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
KEYBOARD_LOCK_ENABLE = yes # Allow locking of keyboard via magic key
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
#NKRO_ENABLE = yes # 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

@ -15,7 +15,7 @@ Depending on which keymap you would like to use, you will have to compile slight
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```

@ -32,34 +32,110 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROWS 2
#define MATRIX_COLS 3
// Planck PCB default pin-out
// Change this to how you wired your keyboard
// COLS: Left to right, ROWS: Top to bottom
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define COLS (int []){ F1, F0, B0 }
#define ROWS (int []){ D0, D5 }
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
#define BACKLIGHT_LEVELS 3
/* 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 */
/*
* Force NKRO
*
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
* makefile for this to work.)
*
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
* until the next keyboard reset.
*
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
* fully operational during normal computer usage.
*
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
* power-up.
*
*/
//#define FORCE_NKRO
/*
* Magic Key Options
*
* Magic keys are hotkey commands that allow control over firmware functions of
* the keyboard. They are best used in combination with the HID Listen program,
* found here: https://www.pjrc.com/teensy/hid_listen.html
*
* The options below allow the magic key functionality to be changed. This is
* useful if your keyboard/keypad is missing keys and you want magic key support.
*
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.

@ -1,29 +1,48 @@
#include "%KEYBOARD%.h"
__attribute__ ((weak))
void * matrix_init_user(void) {
// leave these blank
void matrix_init_user(void) {
// leave this function blank - it can be defined in a keymap file
};
__attribute__ ((weak))
void * matrix_scan_user(void) {
// leave these blank
};
void matrix_scan_user(void) {
// leave this function blank - it can be defined in a keymap file
}
__attribute__ ((weak))
void process_action_user(keyrecord_t *record) {
// leave this function blank - it can be defined in a keymap file
}
void * matrix_init_kb(void) {
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
// leave this function blank - it can be defined in a keymap file
}
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
if (matrix_init_user) {
(*matrix_init_user)();
}
};
matrix_init_user();
}
void * matrix_scan_kb(void) {
void matrix_scan_kb(void) {
// put your looping keyboard code here
// runs every cycle (a lot)
if (matrix_scan_user) {
(*matrix_scan_user)();
}
};
matrix_scan_user();
}
void process_action_kb(keyrecord_t *record) {
// put your per-action keyboard code here
// runs for every action, just before processing by the firmware
process_action_user(record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}

@ -19,7 +19,9 @@
{ k10, KC_NO, k11 }, \
}
void * matrix_init_user(void);
void * matrix_scan_user(void);
void matrix_init_user(void);
void matrix_scan_user(void);
void process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led);
#endif

@ -1 +0,0 @@
Subproject commit 19892c196894e6676fa69c732e05a03a68d5cb07

@ -110,6 +110,9 @@ action_t store_or_get_action(bool pressed, keypos_t key)
#endif
}
__attribute__ ((weak))
void process_action_kb(keyrecord_t *record) {}
void process_action(keyrecord_t *record)
{
keyevent_t event = record->event;
@ -119,6 +122,8 @@ void process_action(keyrecord_t *record)
if (IS_NOEVENT(event)) { return; }
process_action_kb(record);
action_t action = store_or_get_action(event.pressed, event.key);
dprint("ACTION: "); debug_action(action);
#ifndef NO_ACTION_LAYER
@ -127,6 +132,10 @@ void process_action(keyrecord_t *record)
#endif
dprintln();
if (event.pressed) {
// clear the potential weak mods left by previously pressed keys
clear_weak_mods();
}
switch (action.kind.id) {
/* Key and Mods */
case ACT_LMODS:
@ -557,6 +566,7 @@ void clear_keyboard(void)
void clear_keyboard_but_mods(void)
{
clear_weak_mods();
clear_macro_mods();
clear_keys();
send_keyboard_report();
#ifdef MOUSEKEY_ENABLE

@ -58,6 +58,9 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt);
/* user defined special function */
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt);
/* keyboard-specific key event (pre)processing */
void process_action_kb(keyrecord_t *record);
/* Utilities for actions. */
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
extern bool disable_action_cache;

@ -41,7 +41,7 @@ void action_macro_play(const macro_t *macro_p)
MACRO_READ();
dprintf("KEY_DOWN(%02X)\n", macro);
if (IS_MOD(macro)) {
add_weak_mods(MOD_BIT(macro));
add_macro_mods(MOD_BIT(macro));
send_keyboard_report();
} else {
register_code(macro);
@ -51,7 +51,7 @@ void action_macro_play(const macro_t *macro_p)
MACRO_READ();
dprintf("KEY_UP(%02X)\n", macro);
if (IS_MOD(macro)) {
del_weak_mods(MOD_BIT(macro));
del_macro_mods(MOD_BIT(macro));
send_keyboard_report();
} else {
unregister_code(macro);

@ -29,6 +29,7 @@ static inline void del_key_bit(uint8_t code);
static uint8_t real_mods = 0;
static uint8_t weak_mods = 0;
static uint8_t macro_mods = 0;
#ifdef USB_6KRO_ENABLE
#define RO_ADD(a, b) ((a + b) % KEYBOARD_REPORT_KEYS)
@ -55,6 +56,7 @@ static int16_t oneshot_time = 0;
void send_keyboard_report(void) {
keyboard_report->mods = real_mods;
keyboard_report->mods |= weak_mods;
keyboard_report->mods |= macro_mods;
#ifndef NO_ACTION_ONESHOT
if (oneshot_mods) {
#if (defined(ONESHOT_TIMEOUT) && (ONESHOT_TIMEOUT > 0))
@ -118,6 +120,13 @@ void del_weak_mods(uint8_t mods) { weak_mods &= ~mods; }
void set_weak_mods(uint8_t mods) { weak_mods = mods; }
void clear_weak_mods(void) { weak_mods = 0; }
/* macro modifier */
uint8_t get_macro_mods(void) { return macro_mods; }
void add_macro_mods(uint8_t mods) { macro_mods |= mods; }
void del_macro_mods(uint8_t mods) { macro_mods &= ~mods; }
void set_macro_mods(uint8_t mods) { macro_mods = mods; }
void clear_macro_mods(void) { macro_mods = 0; }
/* Oneshot modifier */
#ifndef NO_ACTION_ONESHOT
void set_oneshot_mods(uint8_t mods)

@ -47,6 +47,13 @@ void del_weak_mods(uint8_t mods);
void set_weak_mods(uint8_t mods);
void clear_weak_mods(void);
/* macro modifier */
uint8_t get_macro_mods(void);
void add_macro_mods(uint8_t mods);
void del_macro_mods(uint8_t mods);
void set_macro_mods(uint8_t mods);
void clear_macro_mods(void);
/* oneshot modifier */
void set_oneshot_mods(uint8_t mods);
void clear_oneshot_mods(void);

@ -66,9 +66,12 @@ static void power_down(uint8_t wdto)
wdt_intr_enable(wdto);
#ifdef BACKLIGHT_ENABLE
backlight_set(0);
backlight_set(0);
#endif
// Turn off LED indicators
led_set(0);
// TODO: more power saving
// See PicoPower application note
// - I/O port input with pullup

@ -52,6 +52,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
static bool command_common(uint8_t code);
static void command_common_help(void);
static void print_version(void);
static void print_status(void);
static bool command_console(uint8_t code);
static void command_console_help(void);
#ifdef MOUSEKEY_ENABLE
@ -112,35 +114,140 @@ bool command_console_extra(uint8_t code)
***********************************************************/
static void command_common_help(void)
{
print("\n\t- Magic -\n"
"d: debug\n"
"x: debug matrix\n"
"k: debug keyboard\n"
"m: debug mouse\n"
"v: version\n"
"s: status\n"
"c: console mode\n"
"0-4: layer0-4(F10-F4)\n"
"Paus: bootloader\n"
print( "\n\t- Magic -\n"
STR(MAGIC_KEY_DEBUG ) ": Debug Message Toggle\n"
STR(MAGIC_KEY_DEBUG_MATRIX) ": Matrix Debug Mode Toggle - Show keypresses in matrix grid\n"
STR(MAGIC_KEY_DEBUG_KBD ) ": Keyboard Debug Toggle - Show keypress report\n"
STR(MAGIC_KEY_DEBUG_MOUSE ) ": Debug Mouse Toggle\n"
STR(MAGIC_KEY_VERSION ) ": Version\n"
STR(MAGIC_KEY_STATUS ) ": Status\n"
STR(MAGIC_KEY_CONSOLE ) ": Activate Console Mode\n"
#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
STR(MAGIC_KEY_LAYER0 ) ": Switch to Layer 0\n"
STR(MAGIC_KEY_LAYER1 ) ": Switch to Layer 1\n"
STR(MAGIC_KEY_LAYER2 ) ": Switch to Layer 2\n"
STR(MAGIC_KEY_LAYER3 ) ": Switch to Layer 3\n"
STR(MAGIC_KEY_LAYER4 ) ": Switch to Layer 4\n"
STR(MAGIC_KEY_LAYER5 ) ": Switch to Layer 5\n"
STR(MAGIC_KEY_LAYER6 ) ": Switch to Layer 6\n"
STR(MAGIC_KEY_LAYER7 ) ": Switch to Layer 7\n"
STR(MAGIC_KEY_LAYER8 ) ": Switch to Layer 8\n"
STR(MAGIC_KEY_LAYER9 ) ": Switch to Layer 9\n"
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
"F1-F10: Switch to Layer 0-9 (F10 = L0)\n"
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
"0-9: Switch to Layer 0-9\n"
#endif
STR(MAGIC_KEY_LAYER0_ALT1 ) ": Switch to Layer 0 (alternate key 1)\n"
STR(MAGIC_KEY_LAYER0_ALT2 ) ": Switch to Layer 0 (alternate key 2)\n"
STR(MAGIC_KEY_BOOTLOADER ) ": Jump to Bootloader (Reset)\n"
#ifdef KEYBOARD_LOCK_ENABLE
"Caps: Lock\n"
STR(MAGIC_KEY_LOCK ) ": Lock\n"
#endif
#ifdef BOOTMAGIC_ENABLE
"e: eeprom\n"
STR(MAGIC_KEY_EEPROM ) ": Print EEPROM Settings\n"
#endif
#ifdef NKRO_ENABLE
"n: NKRO\n"
STR(MAGIC_KEY_NKRO ) ": NKRO Toggle\n"
#endif
#ifdef SLEEP_LED_ENABLE
"z: sleep LED test\n"
STR(MAGIC_KEY_SLEEP_LED ) ": Sleep LED Test\n"
#endif
);
}
static void print_version(void)
{
// print version & information
print("\n\t- Version -\n");
print("DESC: " STR(DESCRIPTION) "\n");
print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") "
"PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") "
"VER: " STR(DEVICE_VER) "\n");
print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n");
/* build options */
print("OPTIONS:"
#ifdef PROTOCOL_PJRC
" PJRC"
#endif
#ifdef PROTOCOL_LUFA
" LUFA"
#endif
#ifdef PROTOCOL_VUSB
" VUSB"
#endif
#ifdef BOOTMAGIC_ENABLE
" BOOTMAGIC"
#endif
#ifdef MOUSEKEY_ENABLE
" MOUSEKEY"
#endif
#ifdef EXTRAKEY_ENABLE
" EXTRAKEY"
#endif
#ifdef CONSOLE_ENABLE
" CONSOLE"
#endif
#ifdef COMMAND_ENABLE
" COMMAND"
#endif
#ifdef NKRO_ENABLE
" NKRO"
#endif
#ifdef KEYMAP_SECTION_ENABLE
" KEYMAP_SECTION"
#endif
" " STR(BOOTLOADER_SIZE) "\n");
print("GCC: " STR(__GNUC__) "." STR(__GNUC_MINOR__) "." STR(__GNUC_PATCHLEVEL__)
" AVR-LIBC: " __AVR_LIBC_VERSION_STRING__
" AVR_ARCH: avr" STR(__AVR_ARCH__) "\n");
return;
}
static void print_status(void)
{
print("\n\t- Status -\n");
print_val_hex8(host_keyboard_leds());
print_val_hex8(keyboard_protocol);
print_val_hex8(keyboard_idle);
#ifdef NKRO_ENABLE
print_val_hex8(keyboard_nkro);
#endif
print_val_hex32(timer_count);
#ifdef PROTOCOL_PJRC
print_val_hex8(UDCON);
print_val_hex8(UDIEN);
print_val_hex8(UDINT);
print_val_hex8(usb_keyboard_leds);
print_val_hex8(usb_keyboard_idle_count);
#endif
#ifdef PROTOCOL_PJRC
# if USB_COUNT_SOF
print_val_hex8(usbSofCount);
# endif
#endif
return;
}
#ifdef BOOTMAGIC_ENABLE
static void print_eeconfig(void)
{
@ -178,24 +285,36 @@ static void print_eeconfig(void)
static bool command_common(uint8_t code)
{
#ifdef KEYBOARD_LOCK_ENABLE
static host_driver_t *host_driver = 0;
#endif
switch (code) {
#ifdef SLEEP_LED_ENABLE
case KC_Z:
// test breathing sleep LED
print("Sleep LED test\n");
case MAGIC_KC(MAGIC_KEY_SLEEP_LED):
print("Sleep LED Test\n");
sleep_led_toggle();
led_set(host_keyboard_leds());
break;
#endif
#ifdef BOOTMAGIC_ENABLE
case KC_E:
// print stored eeprom config
case MAGIC_KC(MAGIC_KEY_EEPROM):
print("eeconfig:\n");
print_eeconfig();
break;
#endif
#ifdef KEYBOARD_LOCK_ENABLE
case KC_CAPSLOCK:
// lock/unlock keyboard
case MAGIC_KC(MAGIC_KEY_LOCK):
if (host_get_driver()) {
host_driver = host_get_driver();
clear_keyboard();
@ -207,11 +326,15 @@ static bool command_common(uint8_t code)
}
break;
#endif
case KC_H:
case KC_SLASH: /* ? */
// print help
case MAGIC_KC(MAGIC_KEY_HELP1):
case MAGIC_KC(MAGIC_KEY_HELP2):
command_common_help();
break;
case KC_C:
// activate console
case MAGIC_KC(MAGIC_KEY_CONSOLE):
debug_matrix = false;
debug_keyboard = false;
debug_mouse = false;
@ -220,25 +343,33 @@ static bool command_common(uint8_t code)
print("C> ");
command_state = CONSOLE;
break;
case KC_PAUSE:
clear_keyboard();
print("\n\nbootloader... ");
// jump to bootloader
case MAGIC_KC(MAGIC_KEY_BOOTLOADER):
clear_keyboard(); // clear to prevent stuck keys
print("\n\nJumping to bootloader... ");
_delay_ms(1000);
bootloader_jump(); // not return
break;
case KC_D:
// debug toggle
case MAGIC_KC(MAGIC_KEY_DEBUG):
debug_enable = !debug_enable;
if (debug_enable) {
print("\ndebug: on\n");
debug_matrix = true;
debug_keyboard = true;
debug_mouse = true;
} else {
print("\ndebug: off\n");
debug_matrix = false;
debug_keyboard = false;
debug_mouse = false;
debug_enable = false;
} else {
print("\ndebug: on\n");
debug_enable = true;
}
break;
case KC_X: // debug matrix toggle
// debug matrix toggle
case MAGIC_KC(MAGIC_KEY_DEBUG_MATRIX):
debug_matrix = !debug_matrix;
if (debug_matrix) {
print("\nmatrix: on\n");
@ -247,7 +378,9 @@ static bool command_common(uint8_t code)
print("\nmatrix: off\n");
}
break;
case KC_K: // debug keyboard toggle
// debug keyboard toggle
case MAGIC_KC(MAGIC_KEY_DEBUG_KBD):
debug_keyboard = !debug_keyboard;
if (debug_keyboard) {
print("\nkeyboard: on\n");
@ -256,7 +389,9 @@ static bool command_common(uint8_t code)
print("\nkeyboard: off\n");
}
break;
case KC_M: // debug mouse toggle
// debug mouse toggle
case MAGIC_KC(MAGIC_KEY_DEBUG_MOUSE):
debug_mouse = !debug_mouse;
if (debug_mouse) {
print("\nmouse: on\n");
@ -265,78 +400,22 @@ static bool command_common(uint8_t code)
print("\nmouse: off\n");
}
break;
case KC_V: // print version & information
print("\n\t- Version -\n");
print("DESC: " STR(DESCRIPTION) "\n");
print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") "
"PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") "
"VER: " STR(DEVICE_VER) "\n");
print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n");
/* build options */
print("OPTIONS:"
#ifdef PROTOCOL_PJRC
" PJRC"
#endif
#ifdef PROTOCOL_LUFA
" LUFA"
#endif
#ifdef PROTOCOL_VUSB
" VUSB"
#endif
#ifdef BOOTMAGIC_ENABLE
" BOOTMAGIC"
#endif
#ifdef MOUSEKEY_ENABLE
" MOUSEKEY"
#endif
#ifdef EXTRAKEY_ENABLE
" EXTRAKEY"
#endif
#ifdef CONSOLE_ENABLE
" CONSOLE"
#endif
#ifdef COMMAND_ENABLE
" COMMAND"
#endif
#ifdef NKRO_ENABLE
" NKRO"
#endif
#ifdef KEYMAP_SECTION_ENABLE
" KEYMAP_SECTION"
#endif
" " STR(BOOTLOADER_SIZE) "\n");
print("GCC: " STR(__GNUC__) "." STR(__GNUC_MINOR__) "." STR(__GNUC_PATCHLEVEL__)
" AVR-LIBC: " __AVR_LIBC_VERSION_STRING__
" AVR_ARCH: avr" STR(__AVR_ARCH__) "\n");
// print version
case MAGIC_KC(MAGIC_KEY_VERSION):
print_version();
break;
case KC_S:
print("\n\t- Status -\n");
print_val_hex8(host_keyboard_leds());
print_val_hex8(keyboard_protocol);
print_val_hex8(keyboard_idle);
#ifdef NKRO_ENABLE
print_val_hex8(keyboard_nkro);
#endif
print_val_hex32(timer_count);
#ifdef PROTOCOL_PJRC
print_val_hex8(UDCON);
print_val_hex8(UDIEN);
print_val_hex8(UDINT);
print_val_hex8(usb_keyboard_leds);
print_val_hex8(usb_keyboard_idle_count);
#endif
#ifdef PROTOCOL_PJRC
# if USB_COUNT_SOF
print_val_hex8(usbSofCount);
# endif
#endif
// print status
case MAGIC_KC(MAGIC_KEY_STATUS):
print_status();
break;
#ifdef NKRO_ENABLE
case KC_N:
clear_keyboard(); //Prevents stuck keys.
// NKRO toggle
case MAGIC_KC(MAGIC_KEY_NKRO):
clear_keyboard(); // clear to prevent stuck keys
keyboard_nkro = !keyboard_nkro;
if (keyboard_nkro)
print("NKRO: on\n");
@ -344,18 +423,78 @@ static bool command_common(uint8_t code)
print("NKRO: off\n");
break;
#endif
case KC_ESC:
case KC_GRV:
case KC_0:
// switch layers
case MAGIC_KC(MAGIC_KEY_LAYER0_ALT1):
case MAGIC_KC(MAGIC_KEY_LAYER0_ALT2):
switch_default_layer(0);
break;
#if MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
case MAGIC_KC(MAGIC_KEY_LAYER0):
switch_default_layer(0);
break;
case MAGIC_KC(MAGIC_KEY_LAYER1):
switch_default_layer(1);
break;
case MAGIC_KC(MAGIC_KEY_LAYER2):
switch_default_layer(2);
break;
case MAGIC_KC(MAGIC_KEY_LAYER3):
switch_default_layer(3);
break;
case MAGIC_KC(MAGIC_KEY_LAYER4):
switch_default_layer(4);
break;
case MAGIC_KC(MAGIC_KEY_LAYER5):
switch_default_layer(5);
break;
case MAGIC_KC(MAGIC_KEY_LAYER6):
switch_default_layer(6);
break;
case MAGIC_KC(MAGIC_KEY_LAYER7):
switch_default_layer(7);
break;
case MAGIC_KC(MAGIC_KEY_LAYER8):
switch_default_layer(8);
break;
case MAGIC_KC(MAGIC_KEY_LAYER9):
switch_default_layer(9);
break;
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
case KC_F1 ... KC_F9:
switch_default_layer((code - KC_F1) + 1);
break;
case KC_F10:
switch_default_layer(0);
break;
#endif
#if MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
case KC_1 ... KC_9:
switch_default_layer((code - KC_1) + 1);
break;
case KC_F1 ... KC_F9:
switch_default_layer((code - KC_F1) + 1);
case KC_0:
switch_default_layer(0);
break;
#endif
default:
print("?");
return false;

@ -32,4 +32,125 @@ bool command_proc(uint8_t code);
#define command_proc(code) false
#endif
#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
#endif
#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
#endif
#ifndef MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
#endif
#ifndef MAGIC_KEY_HELP1
#define MAGIC_KEY_HELP1 H
#endif
#ifndef MAGIC_KEY_HELP2
#define MAGIC_KEY_HELP2 SLASH
#endif
#ifndef MAGIC_KEY_DEBUG
#define MAGIC_KEY_DEBUG D
#endif
#ifndef MAGIC_KEY_DEBUG_MATRIX
#define MAGIC_KEY_DEBUG_MATRIX X
#endif
#ifndef MAGIC_KEY_DEBUG_KBD
#define MAGIC_KEY_DEBUG_KBD K
#endif
#ifndef MAGIC_KEY_DEBUG_MOUSE
#define MAGIC_KEY_DEBUG_MOUSE M
#endif
#ifndef MAGIC_KEY_VERSION
#define MAGIC_KEY_VERSION V
#endif
#ifndef MAGIC_KEY_STATUS
#define MAGIC_KEY_STATUS S
#endif
#ifndef MAGIC_KEY_CONSOLE
#define MAGIC_KEY_CONSOLE C
#endif
#ifndef MAGIC_KEY_LAYER0_ALT1
#define MAGIC_KEY_LAYER0_ALT1 ESC
#endif
#ifndef MAGIC_KEY_LAYER0_ALT2
#define MAGIC_KEY_LAYER0_ALT2 GRAVE
#endif
#ifndef MAGIC_KEY_LAYER0
#define MAGIC_KEY_LAYER0 0
#endif
#ifndef MAGIC_KEY_LAYER1
#define MAGIC_KEY_LAYER1 1
#endif
#ifndef MAGIC_KEY_LAYER2
#define MAGIC_KEY_LAYER2 2
#endif
#ifndef MAGIC_KEY_LAYER3
#define MAGIC_KEY_LAYER3 3
#endif
#ifndef MAGIC_KEY_LAYER4
#define MAGIC_KEY_LAYER4 4
#endif
#ifndef MAGIC_KEY_LAYER5
#define MAGIC_KEY_LAYER5 5
#endif
#ifndef MAGIC_KEY_LAYER6
#define MAGIC_KEY_LAYER6 6
#endif
#ifndef MAGIC_KEY_LAYER7
#define MAGIC_KEY_LAYER7 7
#endif
#ifndef MAGIC_KEY_LAYER8
#define MAGIC_KEY_LAYER8 8
#endif
#ifndef MAGIC_KEY_LAYER9
#define MAGIC_KEY_LAYER9 9
#endif
#ifndef MAGIC_KEY_BOOTLOADER
#define MAGIC_KEY_BOOTLOADER PAUSE
#endif
#ifndef MAGIC_KEY_LOCK
#define MAGIC_KEY_LOCK CAPS
#endif
#ifndef MAGIC_KEY_EEPROM
#define MAGIC_KEY_EEPROM E
#endif
#ifndef MAGIC_KEY_NKRO
#define MAGIC_KEY_NKRO N
#endif
#ifndef MAGIC_KEY_SLEEP_LED
#define MAGIC_KEY_SLEEP_LED Z
#endif
#define XMAGIC_KC(key) KC_##key
#define MAGIC_KC(key) XMAGIC_KC(key)
#endif

@ -70,6 +70,7 @@ void keyboard_setup(void)
void keyboard_init(void)
{
timer_init();
matrix_init();
#ifdef PS2_MOUSE_ENABLE
@ -90,6 +91,11 @@ void keyboard_init(void)
#ifdef BACKLIGHT_ENABLE
backlight_init();
#endif
#if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
keyboard_nkro = true;
#endif
}
/*

@ -34,6 +34,9 @@ extern "C" {
void led_set(uint8_t usb_led);
/* keyboard-specific LED functionality */
void led_set_kb(uint8_t usb_led);
#ifdef __cplusplus
}
#endif

@ -64,8 +64,8 @@ void matrix_power_up(void);
void matrix_power_down(void);
/* keyboard-specific setup/loop functionality */
void * matrix_init_kb(void);
void * matrix_scan_kb(void);
void matrix_init_kb(void);
void matrix_scan_kb(void);
#ifdef __cplusplus
}

Loading…
Cancel
Save