summaryrefslogtreecommitdiffstats
path: root/keyboards/atreus
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/atreus')
-rw-r--r--keyboards/atreus/Makefile87
-rw-r--r--keyboards/atreus/README.md186
-rw-r--r--keyboards/atreus/atreus.c29
-rw-r--r--keyboards/atreus/atreus.h28
-rw-r--r--keyboards/atreus/config.h88
-rw-r--r--keyboards/atreus/keymaps/default/compiled.hex1328
-rw-r--r--keyboards/atreus/keymaps/default/keymap.c51
-rw-r--r--keyboards/atreus/keymaps/gerb/compiled.hex1339
-rw-r--r--keyboards/atreus/keymaps/gerb/keymap.c66
9 files changed, 3202 insertions, 0 deletions
diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile
new file mode 100644
index 0000000000..72b694faac
--- /dev/null
+++ b/keyboards/atreus/Makefile
@@ -0,0 +1,87 @@
+
+
+ifdef TEENSY2
+ OPT_DEFS += -DATREUS_TEENSY2
+ ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
+else
+ OPT_DEFS += -DATREUS_ASTAR
+ ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+endif
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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
+# 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
+
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif
+
+USB ?= /dev/cu.usbmodem1411
+
+upload: build
+ $(ATRUES_UPLOAD_COMMAND)
+ \ No newline at end of file
diff --git a/keyboards/atreus/README.md b/keyboards/atreus/README.md
new file mode 100644
index 0000000000..86e6e1f0c9
--- /dev/null
+++ b/keyboards/atreus/README.md
@@ -0,0 +1,186 @@
+atreus keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you.
+
+ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+ MIDI_ENABLE = yes # MIDI controls
+ # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not //
+ BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+## Atreus specific information
+
+These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in two variants: one powered by a Teensy 2, one powered by an A-Star. This repository currently assumes that you have an A-Star powered Atreus. If you are using a Teensy2, specify that by adding `TEENSY2=yes` to your `make` commands.
+
+If you are coming from the [atreus-firmware](https://github.com/technomancy/atreus-firmware), we've also brought forward the `make upload` command for you to use.
+
+## Quick aliases to common actions
+
+Your keymap can include shortcuts to common operations (called "function actions" in tmk).
+
+### Switching and toggling layers
+
+`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
+
+`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
+
+`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
+
+### Fun with modifier keys
+
+* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
+* `RSFT(kc)` - applies right Shift to *kc*
+* `LCTL(kc)` - applies left Control to *kc*
+* `RCTL(kc)` - applies right Control to *kc*
+* `LALT(kc)` - applies left Alt to *kc*
+* `RALT(kc)` - applies right Alt to *kc*
+* `LGUI(kc)` - applies left GUI (command/win) to *kc*
+* `RGUI(kc)` - applies right GUI (command/win) to *kc*
+
+You can also chain these, like this:
+
+ LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
+
+The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
+
+ KC_TILD ~
+ KC_EXLM !
+ KC_AT @
+ KC_HASH #
+ KC_DLR $
+ KC_PERC %
+ KC_CIRC ^
+ KC_AMPR &
+ KC_ASTR *
+ KC_LPRN (
+ KC_RPRN )
+ KC_UNDS _
+ KC_PLUS +
+ KC_LCBR {
+ KC_RCBR }
+ KC_PIPE |
+ KC_COLN :
+
+`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
+
+These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available):
+
+ * MOD_LCTL
+ * MOD_LSFT
+ * MOD_LALT
+ * MOD_LGUI
+
+These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
+
+We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
+
+ * `CTL_T(kc)` - is LCTL when held and *kc* when tapped
+ * `SFT_T(kc)` - is LSFT when held and *kc* when tapped
+ * `ALT_T(kc)` - is LALT when held and *kc* when tapped
+ * `GUI_T(kc)` - is LGUI when held and *kc* when tapped
+ * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
+
+### Temporarily setting the default layer
+
+`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
+
+### Remember: These are just aliases
+
+These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action).
+
+Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them.
+
+## Macro shortcuts: Send a whole string when pressing just one key
+
+Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
+{
+ switch(id) {
+ case 0: // this would trigger when you hit a key mapped as M(0)
+ if (record->event.pressed) {
+ return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+```
+A macro can include the following commands:
+
+* I() change interval of stroke in milliseconds.
+* D() press key.
+* U() release key.
+* T() type key(press and release).
+* W() wait (milliseconds).
+* END end mark.
+
+So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
+
+Note: Using macros to have your keyboard send passwords for you is a bad idea.
+
+### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
+
+Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
+
+ #include "keymap_<layout>.h"
+
+Where <layout> is "colemak" or "dvorak". After including this line, you will get access to:
+
+ * `CM_*` for all of the Colemak-equivalent characters
+ * `DV_*` for all of the Dvorak-equivalent characters
+
+These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
+
+To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
+
+## Additional language support
+
+In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `รน` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
+
+## Unicode support
+
+You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
+
+## Other firmware shortcut keycodes
+
+* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
+* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
+* `BL_ON` - turns the backlight on
+* `BL_OFF` - turns the backlight off
+* `BL_<n>` - sets the backlight to level *n*
+* `BL_INC` - increments the backlight level by one
+* `BL_DEC` - decrements the backlight level by one
+* `BL_TOGG` - toggles the backlight
+* `BL_STEP` - steps through the backlight levels
+
+Enable the backlight from the Makefile.
+
+## MIDI functionalty
+
+This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
+
+## Bluetooth functionality
+
+This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/planck 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 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.
diff --git a/keyboards/atreus/atreus.c b/keyboards/atreus/atreus.c
new file mode 100644
index 0000000000..9d1de631bb
--- /dev/null
+++ b/keyboards/atreus/atreus.c
@@ -0,0 +1,29 @@
+#include "atreus.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+ // leave these blank
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+ // leave these blank
+};
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ if (matrix_init_user) {
+ (*matrix_init_user)();
+ }
+};
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ if (matrix_scan_user) {
+ (*matrix_scan_user)();
+ }
+};
diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h
new file mode 100644
index 0000000000..10712d26d8
--- /dev/null
+++ b/keyboards/atreus/atreus.h
@@ -0,0 +1,28 @@
+#ifndef ATREUS_H
+#define ATREUS_H
+
+#include "matrix.h"
+#include "keymap.h"
+#include "backlight.h"
+#include <stddef.h>
+
+// This a shortcut to help you visually see your 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, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a \
+) \
+{ \
+ { k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \
+ { k20, k21, k22, k23, k24, k35, k25, k26, k27, k28, k29 }, \
+ { k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#endif
diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h
new file mode 100644
index 0000000000..624d90188c
--- /dev/null
+++ b/keyboards/atreus/config.h
@@ -0,0 +1,88 @@
+/*
+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 Technomancy
+#define PRODUCT Atreus
+#define DESCRIPTION q.m.k. keyboard firmware for Atreus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+// Change this to how you wired your keyboard
+// COLS: Left to right, ROWS: Top to bottom
+#if defined(ATREUS_ASTAR)
+# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+# define UNUSED_PINS
+#elif defined(ATREUS_TEENSY2)
+# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
+# define UNUSED_PINS
+#endif
+
+/* 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 DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus/keymaps/default/compiled.hex b/keyboards/atreus/keymaps/default/compiled.hex
new file mode 100644
index 0000000000..a455e04de9
--- /dev/null
+++ b/keyboards/atreus/keymaps/default/compiled.hex
@@ -0,0 +1,1328 @@
+:100000000C941A060C945E060C945E060C945E0624
+:100010000C945E060C945E060C945E060C945E06D0
+:100020000C945E060C945E060C945D110C942F12D9
+:100030000C9410200C945E060C945E060C945E06E4
+:100040000C945E060C945E060C945E060C945E06A0
+:100050000C945E060C9478200C945E060C945E065C
+:100060000C945E060C945E060C945E060C945E0680
+:100070000C945E060C945E060C945E060C945E0670
+:100080000C945E060C945E060C945E060C945E0660
+:100090000C945E060C945E060C945E060C945E0650
+:1000A0000C945E060C945E060C945E069C12BE12C6
+:1000B000AC13BE12AC1303132613AC137B138E13B5
+:1000C000D116D116001700173F175F178F188F181A
+:1000D0006A178F181A181A1880188F188F1889180D
+:1000E0002718271827182718271827182718271818
+:1000F0002718271827182718271827182718271808
+:10010000371845184C1853185D1814001A000800C9
+:100110001500170001001C0018000C00120013004D
+:1001200004001600070009000A0001000B000D0082
+:100130000E000F0033001D001B0006001900050013
+:10014000E2001100100036003700380029002B00B3
+:10015000E300E1002A00E0002C0001522D003400F1
+:1001600028001E021F022F023002310201004B0044
+:100170002400250026002502200221022602270253
+:10018000350001004E002100220023002E02220231
+:1001900023022F0030003502E20024021E001F005F
+:1001A0002000310002544900E300E1002A00E00091
+:1001B0002C000100370027002E0049004A005200A1
+:1001C0004D004B000100520040004100420043003E
+:1001D0004C00500051004F005100010051003D0003
+:1001E0003E003F0044000100010001000100010049
+:1001F000E20001003A003B003C0045000100010024
+:10020000E300E1002A00E0002C000053010001009F
+:1002100000500A44454255473A20656E61626C655C
+:10022000642E0A005374617465206F6620726F77C4
+:100230002025583A2025303136620A0048756D6114
+:100240006E2D7265616461626C65206D61747269A6
+:10025000782073746174653A0D0A004465626F75A5
+:100260006E63696E672064656C61792072656D618B
+:10027000696E696E673A2025580A005B735D004B12
+:100280006579626F6172642073746172742E0A0002
+:100290005B575D005B535D005B525D005B445D003E
+:1002A0005B435D000E034100740072006500750041
+:1002B00073000000180354006500630068006E00BE
+:1002C0006F006D0061006E006300790000000403A0
+:1002D000090409028D00050100A0FA0904000001CB
+:1002E00003010100092111010001223F00070581DE
+:1002F0000308000A09040100010301020009211199
+:10030000010001224D000705820308000A090402CA
+:10031000000103000000092111010001223600073D
+:1003200005830308000A0904030002030000000912
+:10033000211101000122200007058403200001078C
+:100340000504032000010904040001030000000962
+:100350002111010001223900070585031000011257
+:1003600001100100000008EDFE60600100010200C4
+:100370000105010906A101050719E029E715002576
+:100380000195087501810205081901290595057572
+:10039000019102950175039101050719002977154F
+:1003A000002501957875018102C00631FF0974A10D
+:1003B000010975150025FF9520750881020976153C
+:1003C0000025FF952075089102C005010980A10153
+:1003D000850216010026B7001A01002AB700751021
+:1003E00095018100C0050C0901A1018503160100DA
+:1003F000269C021A01002A9C02751095018100C0FA
+:1004000005010902A1010901A10005091901290538
+:10041000150025019505750181029501750381017E
+:100420000501093009311581257F9502750881067E
+:1004300009381581257F950175088106050C0A3854
+:10044000021581257F950175088106C0C005010947
+:1004500006A101050719E029E71500250195087592
+:100460000181029501750881010508190129059589
+:100470000575019102950175039101050719002980
+:10048000FF150025FF950675088100C00A0025307C
+:10049000325820006B6579626F6172645F726570BB
+:1004A0006F72743A20004B6579626F617264204C00
+:1004B0004544732073746174653A2025780A00649A
+:1004C000656C5F6B65795F6269743A2063616E2762
+:1004D000742064656C3A20253032580A00616464E7
+:1004E0005F6B65795F6269743A2063616E2774207F
+:1004F0006164643A20253032580A00290A002575C3
+:10050000002F002575005D2800256400200025646B
+:1005100000200025640020002564007C0025303286
+:1005200058006D6F7573656B6579205B62746E7CC6
+:10053000782079207620685D287265702F61636C61
+:10054000293A205B006D6B5F776865656C5F746945
+:100550006D655F746F5F6D6178203D2025640A00D2
+:100560006D6B5F776865656C5F6D61785F737065F3
+:100570006564203D2025640A006D6B5F74696D65BC
+:100580005F746F5F6D6178203D2025640A006D6B9C
+:100590005F6D61785F7370656564203D2025640A36
+:1005A000006D6B5F696E74657276616C203D20250D
+:1005B000640A006D6B5F64656C6179203D20256481
+:1005C0000A006D6B5F776865656C5F74696D655F68
+:1005D000746F5F6D6178203D2025640A006D6B5F4C
+:1005E000776865656C5F6D61785F737065656420C1
+:1005F0003D2025640A006D6B5F74696D655F746FE3
+:100600005F6D6178203D2025640A006D6B5F6D6130
+:10061000785F7370656564203D2025640A006D6B0A
+:100620005F696E74657276616C203D2025640A00F6
+:100630006D6B5F64656C6179203D2025640A000A5A
+:1006400000257500363A20776865656C5F74696DC2
+:10065000655F746F5F6D61783A20000A0025750050
+:10066000353A20776865656C5F6D61785F7370659A
+:1006700065643A20000A00257500343A2074696DDB
+:10068000655F746F5F6D61783A20000A0025750020
+:10069000333A206D61785F73706565643A20000AB3
+:1006A00000257500323A20696E74657276616C2897
+:1006B0006D73293A20000A00257500313A206465DF
+:1006C0006C6179282A31306D73293A20000A092D8E
+:1006D0002056616C756573202D0A004D3E004D2536
+:1006E000643E20003F007365742064656661756C2C
+:1006F000740A00433E200077686572652064656C6B
+:1007000074613A20637572736F723D25642C207793
+:100710006865656C3D25640A53656520687474706E
+:100720003A2F2F656E2E77696B6970656469612E4B
+:100730006F72672F77696B692F4D6F7573655F6B8C
+:100740006579730A000A092D204D6F7573656B6515
+:1007500079202D0A4553432F713A09717569740A3E
+:10076000313A0964656C6179282A31306D73290A40
+:10077000323A09696E74657276616C286D73290A64
+:10078000333A096D61785F73706565640A343A09BC
+:1007900074696D655F746F5F6D61780A353A0977CA
+:1007A0006865656C5F6D61785F73706565640A3656
+:1007B0003A09776865656C5F74696D655F746F5F32
+:1007C0006D61780A0A703A097072696E74207661F8
+:1007D0006C7565730A643A097365742064656661B3
+:1007E000756C74730A75703A092B310A646F776EF1
+:1007F0003A092D310A706775703A092B31300A7049
+:1008000067646F776E3A092D31300A0A7370656537
+:1008100064203D2064656C7461202A206D61785FDE
+:100820007370656564202A20287265706561742084
+:100830002F2074696D655F746F5F6D6178290A00A0
+:100840003F004D3E2000433E20004C25640A0074CA
+:10085000696D65725F636F756E743A202530346C14
+:10086000580A006B6579626F6172645F6E6B726FBC
+:100870003A2025580A006B6579626F6172645F697E
+:10088000646C653A2025580A006B6579626F617265
+:10089000645F70726F746F636F6C3A2025580A0042
+:1008A000686F73745F6B6579626F6172645F6C65AA
+:1008B000647328293A2025580A000A092D20537408
+:1008C00061747573202D0A004743433A20342E3952
+:1008D0002E32204156522D4C4942433A20312E3877
+:1008E0002E31204156525F415243483A2061767280
+:1008F000350A004F5054494F4E533A204C5546410B
+:10090000204D4F5553454B45592045585452414B66
+:10091000455920434F4E534F4C4520434F4D4D4179
+:100920004E44204E4B524F20343039360A00425547
+:10093000494C443A20313637313865662D64697246
+:100940007479202832333A30383A3534204A756E7B
+:100950002020392032303136290A005649443A20C5
+:1009600030784645454428546563686E6F6D616E06
+:10097000637929205049443A20307836303630287F
+:1009800041747265757329205645523A203078308B
+:100990003030310A00444553433A20712E6D2E6B9E
+:1009A0002E206B6579626F617264206669726D7763
+:1009B00061726520666F72204174726575730A00FA
+:1009C0000A092D2056657273696F6E202D0A000A80
+:1009D000092D20436F6E736F6C65202D0A455343BC
+:1009E0002F713A09717569740A6D3A096D6F7573E3
+:1009F000656B65790A000A092D204D6167696320DE
+:100A00002D0A443A094465627567204D6573736128
+:100A1000676520546F67676C650A583A094D6174C1
+:100A2000726978204465627567204D6F6465205453
+:100A30006F67676C65202D2053686F77206B657931
+:100A40007072657373657320696E206D617472696D
+:100A50007820677269640A4B3A094B6579626F6165
+:100A6000726420446562756720546F67676C652007
+:100A70002D2053686F77206B6579707265737320D2
+:100A80007265706F72740A4D3A0944656275672029
+:100A90004D6F75736520546F67676C650A563A0928
+:100AA00056657273696F6E0A533A095374617475AF
+:100AB000730A433A09416374697661746520436F30
+:100AC0006E736F6C65204D6F64650A46312D46313B
+:100AD000303A0953776974636820746F204C6179E8
+:100AE000657220302D392028463130203D204C3091
+:100AF000290A302D393A0953776974636820746F75
+:100B0000204C6179657220302D390A4553433A09EA
+:100B100053776974636820746F204C617965722023
+:100B2000302028616C7465726E617465206B657924
+:100B30002031290A47524156453A0953776974636F
+:100B40006820746F204C6179657220302028616CB8
+:100B50007465726E617465206B65792032290A5064
+:100B6000415553453A094A756D7020746F20426FA4
+:100B70006F746C6F616465722028526573657429A7
+:100B80000A4E3A094E4B524F20546F67676C650A04
+:100B9000003F004E4B524F3A206F66660A004E4BA4
+:100BA000524F3A206F6E0A000A6D6F7573653A20D6
+:100BB0006F66660A000A6D6F7573653A206F6E0A7C
+:100BC000000A6B6579626F6172643A206F66660A2B
+:100BD000000A6B6579626F6172643A206F6E0A0079
+:100BE0000A6D61747269783A206F66660A000A6D50
+:100BF00061747269783A206F6E0A000A64656275E2
+:100C0000673A206F66660A000A64656275673A2073
+:100C10006F6E0A000A0A4A756D70696E6720746FFC
+:100C200020626F6F746C6F616465722E2E2E2000CF
+:100C3000433E200011241FBECFEFDAE0DEBFCDBF60
+:100C400004B603FE24C08091FE019091FF01A091A3
+:100C50000002B09101028730904BA740B04BB9F42D
+:100C60001092FE011092FF011092000210920102F8
+:100C700014BE84B7877F84BF88E10FB6F894809351
+:100C80006000109260000FBEE0E0F8E3099511E00B
+:100C9000A0E0B1E0E8E9F2E502C005900D92A834C9
+:100CA000B107D9F711E0A8E4B1E001C01D92AE3F51
+:100CB000B107E1F70E94970E0C944A290C940000AA
+:100CC000FF93EF93E0914801F0914901309709F0CB
+:100CD0000995EF91FF910895FC018591803011F005
+:100CE000EFDFFBCF0895FF27E0E230E247FF0CC0C3
+:100CF000419597FF09C0EDE26095709580959095BC
+:100D0000611D711D811D911D27FF02C0219530E3DA
+:100D100050E2AA27660F771F881F991FAA1FA417E2
+:100D200010F0A41B63955A95A9F7AA3008F0A95FA3
+:100D3000A05DAF93F395611571058105910541F7AC
+:100D4000ED3211F4EF93F395F21718F43F93F39506
+:100D5000FBCF8F91B5DFFA95E1F70895E991F9910D
+:100D60008591803021F0853219F0AADFF9CF0895FE
+:100D700020E0E89455915532C1F3503311F4689452
+:100D800055915A3348F4505390F3220F022E220FFC
+:100D9000220F200D250FF4CF0EF421958991999102
+:100DA000533619F3533729F1533559F1BC018827CC
+:100DB0009927E8945C3621F489919991689455912A
+:100DC000543639F446EF7EF077FF0DC08FEF9FEF7A
+:100DD0000AC055374AE039F0583540E121F0523623
+:100DE00042E009F00895FF93EF937DDFEF91FF91CB
+:100DF000B7CFFF93EF93FC0181918030B9F360DFAF
+:100E0000FBCFFF93EF9368DFF1CFDF93CF93CDB7A5
+:100E1000DEB72596A3DFCF91DF9108950895089559
+:100E20008EE097E0892B11F00C940E0708958FE067
+:100E300097E0892B11F00C940F07089561110BC0F6
+:100E4000FC018281882321F085EE0E94751503C084
+:100E500085EE0E943D1680E090E0089581E00895BF
+:100E600081E008950C94300708950F931F93CF935A
+:100E7000DF938C01FC01C081D181CE010E94F31D62
+:100E8000BE010E94E207EC01B8010E9432078823EC
+:100E900009F48DC0F8018281882309F44AC0809149
+:100EA000550181111FC0C431F0E5DF0709F051C0C1
+:100EB0000E94340781E0809355010E944220909364
+:100EC00054018093530110924C0110924E011092E4
+:100ED0004D011092500110924F0110925201109248
+:100EE000510165C080915301909154010E944E20A0
+:100EF000883C910570F480914C01E82FF0E0EE0FF2
+:100F0000FF1FE35BFE4FD183C0838F5F80934C0153
+:100F10004EC0C43880E5D80721F0C538D04501F16E
+:100F20003AC0F8018281882341F010924A0182E0A0
+:100F30001EC0C438E0E5DE0759F580914A018111F1
+:100F400006C086E20E94751586E20E943D1682E088
+:100F50001CC0C438F0E5DF0741F3C538D045D9F4EB
+:100F6000F8018281882331F010924B0180E20E94C7
+:100F70008C161DC080914B01811106C087E20E9432
+:100F8000751587E20E943D1680E20E9493160FC0FD
+:100F9000C538D04529F381E080934A0180934B0105
+:100FA000C801DF91CF911F910F910C942E0780E023
+:100FB000DF91CF911F910F9108950C9410070C941D
+:100FC000170708959BE0799FF00111249CE2899F07
+:100FD000E00DF11D1124E60FF11DEE0FFF1FE65F7E
+:100FE000FE4F859194910895880F991FFC01E65753
+:100FF000F040859194910895880F991FFC01E65F58
+:10100000FE4F8591949108950F931F93CF93DF9393
+:10101000EC01811520E3920750F5C11580E2D80755
+:1010200008F0C9C0CB3BD10590F4C83AD10508F00F
+:1010300070C0C53AD10508F061C0C430D10508F0D0
+:10104000DAC1219709F0D4C101E010E014C2CF3F0A
+:10105000D10511F008F0CFC1C03FD10508F0A8C0FC
+:10106000CE01805E9109089708F4C5C1C1C1C130A5
+:1010700090E5D90709F4A8C050F5C0318FE4D8072E
+:1010800070F4C11590E4D90708F09AC0C11521E3A6
+:10109000D20708F0ADC1DD278E01106CECC1C1157F
+:1010A000D04509F0A5C10E94FA188FEF94E32CE017
+:1010B000815090402040E1F700C0000087E797E7AB
+:1010C00090930108809300080E949D20D4C1C1150F
+:1010D00097E5D90758F4C03121E5D20708F020C1BF
+:1010E000C43180E5D80708F479C082C1CE01905799
+:1010F0008115904108F07CC1DF7077C1C53AD105F8
+:1011000009F47BC1C63AD10509F07AC102E810E4BE
+:10111000B2C1C83AD10509F476C1C93AD10509F47A
+:1011200075C1CA3AD10509F474C1CB3AD10509F4A5
+:1011300073C1CC3AD10509F472C1CD3AD10509F495
+:1011400071C1C03BD10509F470C1CE3AD10509F493
+:101150006FC1CF3AD10509F46EC1C13BD10509F485
+:101160006DC1C23BD10509F46CC1C33BD10509F483
+:101170006BC1C43BD10509F46AC1C53BD10509F473
+:1011800069C1C63BD10509F468C1C73BD10509F463
+:1011900067C1C83BD10509F466C1C93BD10509F453
+:1011A00065C1CA3BD10509F464C100E014E463C120
+:1011B0008E01106560C1CE019F700E94FC075CC16A
+:1011C000DF708E01106A57C182E192E00E946C06C6
+:1011D0008091DF0181608093DF014DC10E94F42086
+:1011E000811102C00E94DA200E94072190E09093B2
+:1011F000FE018093FD01C23080E5D80721F4809183
+:10120000FD01816086C0C43090E5D90721F480914A
+:10121000FD0182607EC0C63020E5D20721F48091B6
+:10122000FD01846076C0C83080E5D80719F480914C
+:10123000FD0127C0CA3090E5D90721F48091FD0156
+:10124000806167C0CC3020E5D20721F48091FD0198
+:1012500080625FC0CE3080E5D80721F48091FD0127
+:10126000806457C0C03190E5D90721F48091FD0119
+:1012700080684FC0C23120E5D20729F48091FD017A
+:101280008460886046C0C33080E5D80721F480912F
+:10129000FD018E7F3EC0C53090E5D90721F48091D5
+:1012A000FD018D7F36C0C73020E5D20721F4809143
+:1012B000FD018B7F2EC0C93080E5D80719F48091DD
+:1012C000FD0126C0CB3090E5D90721F48091FD01C6
+:1012D0008F7E1FC0CD3020E5D20721F48091FD0123
+:1012E0008F7D17C0CF3080E5D80721F48091FD01B4
+:1012F0008F7B0FC0C13190E5D90721F48091FD01AA
+:101300008F7707C0C331D04531F48091FD018B7FC9
+:10131000877F8093FD018091FD010E940B21ABC06E
+:101320008D2F99278F70992781309105D9F49E01CF
+:101330002370332702C0880F991F2A95E2F79C6813
+:101340008E0144E0000F111F4A95E1F7002713704A
+:10135000802B912B53E0CC0FDD1F5A95E1F7C0761F
+:10136000DD272FC08230910531F4DC2FCC278E0190
+:10137000016F106A80C08330910569F4CE018370DB
+:10138000992701E010E002C0000F111F8A95E2F7D3
+:10139000C8019C680FC084309105B9F4CE018370F8
+:1013A000992701E010E002C0000F111F8A95E2F7B3
+:1013B000C8019A6823E0CC0FDD1F2A95E1F7C07EB3
+:1013C000D7708C010C2B1D2B56C08530910531F444
+:1013D000DC2FCC278E01046F106A4DC0069709F0F0
+:1013E0004AC0CF71DD27DC2FCC278E01106243C0AD
+:1013F00000E010E040C08E013EC001E810E43BC0B8
+:1014000003E810E438C002EE14E435C009EE14E439
+:1014100032C00AEE14E42FC005EB14E42CC006EB36
+:1014200014E429C007EB14E426C00CEC14E423C038
+:101430000DEC14E420C003E815E41DC00AE815E42F
+:101440001AC002E915E417C004E915E414C001E26A
+:1014500016E411C003E216E40EC004E216E40BC069
+:1014600005E216E408C006E216E405C007E216E449
+:1014700002C00AE216E4C801DF91CF911F910F91DB
+:1014800008959BE0799FF00111249CE2899FE00D73
+:10149000F11D1124E60FF11DEE0FFF1FE65FFE4F59
+:1014A00085919491803E9105E0F4803C910558F53A
+:1014B0008133910509F46FC048F48932910509F42C
+:1014C00063C08A32910509F46DC072C089339105F9
+:1014D000E9F082389105D1F08533910509F44DC0CA
+:1014E00067C0833E910581F138F4803E9105B9F0E3
+:1014F000823E9105D9F05CC0863E910561F1873E40
+:101500009105A1F155C00E94F40708952091FD01B5
+:1015100020FD02C021FF4CC080EE90E049C08091C8
+:10152000FD0180FFF9CF89E390E042C08091FD0189
+:1015300082FF0EC08091FD0184FF03C080E090E037
+:1015400037C083EE90E034C08091FD0182FFF2CF7E
+:1015500082EE90E02DC08091FD0183FF0BC0809151
+:10156000FD0184FDEBCF87EE90E022C08091FD016C
+:1015700083FFF5CF86EE90E01BC08091FD0185FFD3
+:1015800007C089E290E014C08091FD0185FFF9CF8A
+:1015900085E390E00DC08091FD0186FF07C08AE2DF
+:1015A00090E006C08091FD0186FFF9CF81E390E0D5
+:1015B0000E940408089508950C94DB0AE82FF0E0D7
+:1015C000E05EFE4F8081E82FEF70F0E082958F7033
+:1015D00021E030E0A90102C0440F551F8A95E2F7CF
+:1015E00040A308950F931F93CF93DF9385B780682F
+:1015F00085BF85B7806885BFC3E0D0E001E010E01B
+:10160000FE01E05EFE4F8081E82FEF70F0E021A147
+:1016100082958F70A80102C0440F551F8A95E2F78A
+:10162000CA01822B81A38C2F0E94DE0A219740F7EA
+:101630008AE090E061E070E0FC01EB5EFE4F20810B
+:10164000E22FEF70F0E042A122952F70DB0102C083
+:10165000AA0FBB1F2A95E2F79D01242B22A3019715
+:1016600058F7DF91CF911F910F910C94DD07EF9206
+:10167000FF920F931F93CF93DF930EE511E0C3E02A
+:10168000EE24E394F12CD5E08C2F0E94DE0A8AE050
+:1016900090E040E050E0FC01EB5EFE4F6081E62F01
+:1016A000EF70F0E020A130E062956F7002C03595D8
+:1016B00027956A95E2F720FD09C09701082E02C020
+:1016C000220F331F0A94E2F7422B532B019718F78E
+:1016D000F801929182918F018417950721F051832F
+:1016E0004083D09300018C2F0E94DE0AC15060F627
+:1016F0008091000187FD42C09091DF0190FF10C0F2
+:10170000282F332727FD30953F938F938BE592E069
+:101710009F938F930E9405070F900F900F900F904B
+:101720008091000181508093000187FD07C08FE9FF
+:101730009FE00197F1F700C0000020C080915C019C
+:1017400090915D01909365018093640180915A01AD
+:1017500090915B01909363018093620180915801A5
+:10176000909159019093610180936001809156019D
+:101770009091570190935F0180935E010E94DF0773
+:1017800081E0DF91CF911F910F91FF90EF9008952D
+:10179000E82FF0E0EE0FFF1FE25AFE4F80819181AB
+:1017A0000895EF92FF920F931F93CF93DF93809151
+:1017B000DF0180FF04C08CE392E00E946C060EE51E
+:1017C00011E0C0E0D0E084E2E82E82E0F82E8091C3
+:1017D000DF0180FF13C0F801808191810E94B71F53
+:1017E0009F938F93DF93CF93FF92EF920E94050711
+:1017F0000F900F900F900F900F900F9021960E5F0B
+:101800001F4FC430D10519F7DF91CF911F910F9170
+:10181000FF90EF9008950F931F93CF9306E611E08A
+:10182000C0E0F801929182918F010E94951FC80F2C
+:10183000F1E00E351F07A9F78C2FCF911F910F9163
+:1018400008958091790108959FB7F89410926801E6
+:101850009FBF9091F401943009F057C09091E90036
+:101860009F703091EC00232F217030FD20E8922BE7
+:1018700024E02093E9002091EB0020FF43C0209159
+:10188000EE0027FF3FC020916601222321F0209126
+:10189000E80025FF37C01092660126E03091E8008D
+:1018A00035FD15C03091F401343061F53091EB0015
+:1018B00035FD28C0215021F481E08093660122C0CB
+:1018C000EFE9FFE03197F1F700C00000E7CF809328
+:1018D000F1008091E80085FD0AC08091E80080FF5A
+:1018E000FCCF8091E8008E778093E80006C08FB728
+:1018F000F89421E0209368018FBF9F709093E900D6
+:1019000080E008959F709093E9008FEF0895CF9342
+:10191000DF9300D01F92CDB7DEB79C018091F40118
+:10192000843019F593E099833B832A839093E900EF
+:101930008FEF9091E800815095FD06C095ED9A9546
+:10194000F1F700008111F5CF8091E80085FF0DC00F
+:1019500040E050E063E070E0CE0101960E944D0F40
+:101960008091E8008E778093E8000F900F900F90A1
+:10197000DF91CF910895CF93DF9300D01F92CDB721
+:10198000DEB72091F401243021F522E029839B83E6
+:101990008A8383E08093E9008FEF9091E800815083
+:1019A00095FD06C095ED9A95F1F700008111F5CFF0
+:1019B0008091E80085FF0DC040