diff options
Diffstat (limited to 'keyboards/sixkeyboard')
-rw-r--r-- | keyboards/sixkeyboard/Makefile | 75 | ||||
-rw-r--r-- | keyboards/sixkeyboard/README.md | 18 | ||||
-rw-r--r-- | keyboards/sixkeyboard/config.h | 115 | ||||
-rw-r--r-- | keyboards/sixkeyboard/keymaps/default/compiled.hex | 760 | ||||
-rw-r--r-- | keyboards/sixkeyboard/keymaps/default/keymap.c | 39 | ||||
-rw-r--r-- | keyboards/sixkeyboard/matrix.c | 120 | ||||
-rw-r--r-- | keyboards/sixkeyboard/sixkeyboard.c | 52 | ||||
-rw-r--r-- | keyboards/sixkeyboard/sixkeyboard.h | 22 |
8 files changed, 1201 insertions, 0 deletions
diff --git a/keyboards/sixkeyboard/Makefile b/keyboards/sixkeyboard/Makefile new file mode 100644 index 0000000000..6f273064a7 --- /dev/null +++ b/keyboards/sixkeyboard/Makefile @@ -0,0 +1,75 @@ + + +SRC = matrix.c + +# MCU name +#MCU = at90usb1287 +MCU = atmega16u2 + +# 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 ?= no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE ?= no # Mouse keys(+4700) +EXTRAKEY_ENABLE ?= no # Audio control and System control(+450) +CONSOLE_ENABLE ?= no # Console for debug(+400) +COMMAND_ENABLE ?= no # Commands for debug and configuration +SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend +NKRO_ENABLE ?= no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality +MIDI_ENABLE ?= no # MIDI controls +AUDIO_ENABLE ?= no +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +CUSTOM_MATRIX = yes + +ifndef QUANTUM_DIR + include ../../Makefile +endif + diff --git a/keyboards/sixkeyboard/README.md b/keyboards/sixkeyboard/README.md new file mode 100644 index 0000000000..7d78a0cae5 --- /dev/null +++ b/keyboards/sixkeyboard/README.md @@ -0,0 +1,18 @@ +# Techkeys SixKeyBoard + +[Get one here!](http://techkeys.us/collections/accessories/products/sixkeyboard) + +The schematic is like this: + +``` + switches leds +,--+--+--. ,--+--+--. +|C7|B7|B5| |C6|B6|B4| ++--+--+--+ +--+--+--+ +|D6|D1|D4| |D5|D2|D3| +`--+--+--' `--+--+--' +``` + +The LED on the bottom is `C4`. All 7 of the leds are turned on when the keyboard boots-up in the `sixkeyboard.c` file - backlight_enable is not required. The MCU is an Atmega16u2, so the flash memory is limited to 0x3000 bytes - the current setup uses just about all of that! I'm sure things can be opitimised a bit. + +There is a jumper on the bottom of the board (next to the USB port) that serves as a reset button - I drilled a hole in my case to allow for quick access via a screwdriver/metal object.
\ No newline at end of file diff --git a/keyboards/sixkeyboard/config.h b/keyboards/sixkeyboard/config.h new file mode 100644 index 0000000000..bf58bb2b7c --- /dev/null +++ b/keyboards/sixkeyboard/config.h @@ -0,0 +1,115 @@ +/* +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 0x6062 +#define DEVICE_VER 0x0001 +#define MANUFACTURER techkeys.us +#define PRODUCT sixkeykeyboard +#define DESCRIPTION A little 6-key macro pad + +/* key matrix size */ +#define MATRIX_ROWS 2 +#define MATRIX_COLS 3 + +/* 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 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 + + +/* 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 diff --git a/keyboards/sixkeyboard/keymaps/default/compiled.hex b/keyboards/sixkeyboard/keymaps/default/compiled.hex new file mode 100644 index 0000000000..588aca1083 --- /dev/null +++ b/keyboards/sixkeyboard/keymaps/default/compiled.hex @@ -0,0 +1,760 @@ +:100000000C94C8000C940C010C940C010C940C0181
+:100010000C940C010C940C010C940C010C940C012C
+:100020000C940C010C940C010C940C010C943209EE
+:100030000C94E0090C945F160C940C010C940C01C8
+:100040000C940C010C940C010C940C010C94C7162C
+:100050000C940C010C940C010C940C010C940C01EC
+:100060000C940C010C940C010C940C010C940C01DC
+:100070000C940C014D0A6F0A5D0B6F0A5D0BB40AFC
+:10008000D70A5D0B2C0B3F0BEB0DEB0D1A0E1A0E66
+:100090007E0F7E0F7E0F7E0F590E7E0F090F090F08
+:1000A0006F0F7E0F7E0F780F160F160F160F160F9D
+:1000B000160F160F160F160F160F160F160F160F18
+:1000C000160F160F160F160F260F340F3B0F420F89
+:1000D0004C0F0400050006000700080009001E037D
+:1000E0007300690078006B00650079006B006500A3
+:1000F000790062006F006100720064000000180364
+:1001000074006500630068006B006500790073008F
+:100110002E00750073000000040309040902220088
+:10012000010100A0FA0904000001030101000921F6
+:10013000110100012240000705810308000A120195
+:10014000100100000008EDFE6260010001020001E4
+:1001500005010906A101050719E029E71500250198
+:10016000950875018102950175088101050819013D
+:100170002905950575019102950175039101050702
+:10018000190029FF150026FF00950675088100C09B
+:1001900011241FBECFEFD2E0DEBFCDBF04B603FEF9
+:1001A00024C08091900190919101A0919201B09111
+:1001B00093018730904BA740B04BB9F41092900157
+:1001C00010929101109292011092930114BE84B783
+:1001D000877F84BF88E10FB6F89480936000109207
+:1001E00060000FBEE0E0F8E1099511E0A0E0B1E0A9
+:1001F000E2E5FFE202C005900D92AE30B107D9F7FB
+:1002000011E0AEE0B1E001C01D92A039B107E1F705
+:100210000E94AA060C94A7170C9400003F98479AD6
+:1002200084B18F7584B985B1806A85B98AB18D7AB8
+:100230008AB98BB182658BB90C94660186B18095C1
+:10024000982F991F9927991F83B18095881F882718
+:10025000881F880F892B1D9902C094E001C090E08F
+:10026000892B80930E0189B186FB882780F991E064
+:100270008927499902C092E001C090E0892B4C99EE
+:1002800002C094E001C090E0892B80930F010E948E
+:10029000760181E00895E82FF0E0E25FFE4F808173
+:1002A000089508951F93CF93DF93CEE0D1E0888126
+:1002B00090E00E941A16182F898190E00E941A1669
+:1002C000810FDF91CF911F91089508953C9A449832
+:1002D0003E9A4698269A2E98249A2C98559A5D987C
+:1002E000529A5A98539A5B980C9465010C94880121
+:1002F00061110BC0FC018281882321F085EE0E94F0
+:100300009A0C03C085EE0E94570D80E090E008959E
+:1003100080E00E944B01873049F481E00E944B014C
+:10032000873021F40E94DD0F0C94EC16089581E0D3
+:10033000089581E008950C94990108950F931F93F7
+:10034000CF93DF938C01FC01C081D181CE010E944B
+:10035000E914BE010E944702EC01B8010E949B0112
+:10036000882309F48DC0F8018281882309F44AC0EA
+:1003700080911B0181111FC0C431F0E5DF0709F036
+:1003800051C00E949D0181E080931B010E94911643
+:1003900090931A0180931901109212011092140186
+:1003A000109213011092160110921501109218016B
+:1003B0001092170165C08091190190911A010E9455
+:1003C0009D16883C910570F480911201E82FF0E0B1
+:1003D000EE0FFF1FED5EFE4FD183C0838F5F8093D2
+:1003E00012014EC0C43880E5D80721F0C538D04589
+:1003F00001F13AC0F8018281882341F01092100186
+:1004000082E01EC0C438E0E5DE0759F58091100196
+:10041000811106C086E20E949A0C86E20E94570D66
+:1004200082E01CC0C438F0E5DF0741F3C538D04591
+:10043000D9F4F8018281882331F01092110180E211
+:100440000E94A60D1DC080911101811106C087E296
+:100450000E949A0C87E20E94570D80E20E94AD0D27
+:100460000FC0C538D04529F381E0809310018093F7
+:100470001101C801DF91CF911F910F910C94970149
+:1004800080E0DF91CF911F910F91089508959B0116
+:1004900090E066E070E00E945A17FC01832F90E024
+:1004A00063E070E00E945A178E0F9F1FFC01E20F5D
+:1004B000F11DEE0FFF1FEE52FF4F859194910895AD
+:1004C000880F991FFC01EE5AF04085919491089590
+:1004D000880F991FFC01EE52FF4F8591949108956A
+:1004E0000F931F93CF93DF93EC01811520E39207C5
+:1004F00050F5C11580E2D80708F0C3C0CB3BD10549
+:1005000090F4C83AD10508F06AC0C53AD10508F0A0
+:100510005BC0C430D10508F0D0C1219709F0CAC131
+:1005200001E010E00AC2CF3FD10511F008F0C5C1CB
+:10053000C03FD10508F0A2C0CE01805E91090897A6
+:1005400008F4BBC1B7C1C13090E5D90709F4A2C016
+:1005500020F5C0318FE4D80770F4C11590E4D907B5
+:1005600008F094C0C11521E3D20708F0A3C1DD272C
+:100570008E01106CE2C1C115D04509F09BC10E94EB
+:10058000DD0F8FEF94E32CE0815090402040E1F7A5
+:1005900000C000000E94EC16D0C1C11597E5D90734
+:1005A00058F4C03121E5D20708F01CC1C43180E500
+:1005B000D80708F475C07EC1CE01905781159041CF
+:1005C00008F078C1DF7073C1C53AD10509F477C16D
+:1005D000C63AD10509F076C102E810E4AEC1C83AC6
+:1005E000D10509F472C1C93AD10509F471C1CA3AF9
+:1005F000D10509F470C1CB3AD10509F46FC1CC3AE9
+:10060000D10509F46EC1CD3AD10509F46DC1C03BE5
+:10061000D10509F46CC1CE3AD10509F46BC1CF3ACA
+:10062000D10509F46AC1C13BD10509F469C1C23BD6
+:10063000D10509F468C1C33BD10509F467C1C43BC6
+:10064000D10509F466C1C53BD10509F465C1C63BB6
+:10065000D10509F464C1C73BD10509F463C1C83BA6
+:10066000D10509F462C1C93BD10509F461C1CA3B96
+:10067000D10509F460C100E014E45FC18E0110658A
+:100680005CC1CE019F700E94680258C1DF708E016C
+:10069000106A53C180917C01816080937C014DC1BF
+:1006A0000E943E17811102C00E9424170E94511718
+:1006B00090E09093900180938F01C23080E5D8073D
+:1006C00021F480918F01816086C0C43090E5D90704
+:1006D00021F480918F0182607EC0C63020E5D20770
+:1006E00021F480918F01846076C0C83080E5D807FE
+:1006F00019F480918F0127C0CA3090E5D90721F401
+:1007000080918F01806167C0CC3020E5D20721F451
+:1007100080918F0180625FC0CE3080E5D80721F4E0
+:1007200080918F01806457C0C03190E5D90721F4D2
+:1007300080918F0180684FC0C23120E5D20729F433
+:1007400080918F018460886046C0C33080E5D807FF
+:1007500021F480918F018E7F3EC0C53090E5D9078E
+:1007600021F480918F018D7F36C0C73020E5D207FC
+:1007700021F480918F018B7F2EC0C93080E5D8078E
+:1007800019F480918F0126C0CB3090E5D90721F470
+:1007900080918F018F7E1FC0CD3020E5D20721F4DC
+:1007A00080918F018F7D17C0CF3080E5D80721F46D
+:1007B00080918F018F7B0FC0C13190E5D90721F463
+:1007C00080918F018F7707C0C331D04531F480917C
+:1007D0008F018B7F877F80938F0180918F010E9493
+:1007E0005517ABC08D2F99278F70992781309105B0
+:1007F000D9F49E012370332702C0880F991F2A95D0
+:10080000E2F79C688E0144E0000F111F4A95E1F762
+:1008100000271370802B912B53E0CC0FDD1F5A95CE
+:10082000E1F7C076DD272FC08230910531F4DC2F4F
+:10083000CC278E01016F106A80C08330910569F466
+:10084000CE018370992701E010E002C0000F111F54
+:100850008A95E2F7C8019C680FC084309105B9F40D
+:10086000CE018370992701E010E002C0000F111F34
+:100870008A95E2F7C8019A6823E0CC0FDD1F2A951C
+:10088000E1F7C07ED7708C010C2B1D2B56C0853034
+:10089000910531F4DC2FCC278E01046F106A4DC016
+:1008A000069709F04AC0CF71DD27DC2FCC278E01D7
+:1008B000106243C000E010E040C08E013EC001E87D
+:1008C00010E43BC003E810E438C002EE14E435C085
+:1008D00009EE14E432C00AEE14E42FC005EB14E470
+:1008E0002CC006EB14E429C007EB14E426C00CEC82
+:1008F00014E423C00DEC14E420C003E815E41DC08B
+:100900000AE815E41AC002E915E417C004E915E481
+:1009100014C001E216E411C003E216E40EC004E2C2
+:1009200016E40BC005E216E408C006E216E405C0B2
+:1009300007E216E402C00AE216E4C801DF91CF9193
+:100940001F910F9108959B0190E066E070E00E9476
+:100950005A17FC01832F90E063E070E00E945A1761
+:100960008E0F9F1FFC01E20FF11DEE0FFF1FEE52D5
+:10097000FF4F85919491803E9105E0F4803C910574
+:1009800058F58133910509F46FC048F48932910517
+:1009900009F463C08A32910509F46DC072C08933CD
+:1009A0009105E9F082389105D1F08533910509F47C
+:1009B0004DC067C0833E910581F138F4803E9105BA
+:1009C000B9F0823E9105D9F05CC0863E910561F197
+:1009D000873E9105A1F155C00E94600208952091C3
+:1009E0008F0120FD02C021FF4CC080EE90E049C085
+:1009F00080918F0180FFF9CF89E390E042C0809120
+:100A00008F0182FF0EC080918F0184FF03C080E0C0
+:100A100090E037C083EE90E034C080918F0182FF78
+:100A2000F2CF82EE90E02DC080918F0183FF0BC04A
+:100A300080918F0184FDEBCF87EE90E022C0809102
+:100A40008F0183FFF5CF86EE90E01BC080918F0170
+:100A500085FF07C089E290E014C080918F0185FF77
+:100A6000F9CF85E390E00DC080918F0186FF07C02C
+:100A70008AE290E006C080918F0186FFF9CF81E382
+:100A800090E00E947002089508950C9444058091AE
+:100A9000240108950895CF93DF9300D01F92CDB71E
+:100AA000DEB720918601243021F523E029839B8342
+:100AB0008A8381E08093E9008FEF9091E800815074
+:100AC00095FD06C095ED9A95F1F700008111F5CFDF
+:100AD0008091E80085FF0DC040E050E063E070E0E9
+:100AE000CE0101960E9440078091E8008E778093A6
+:100AF000E8000F900F900F90DF91CF910895CF9362
+:100B0000DF9300D01F92CDB7DEB72091860124304D
+:100B100021F522E029839B838A8381E08093E90089
+:100B20008FEF9091E800815095FD06C095ED9A9564
+:100B3000F1F700008111F5CF8091E80085FF0DC02D
+:100B400040E050E063E070E0CE0101960E94400773
+:100B50008091E8008E778093E8000F900F900F90BF
+:100B6000DF91CF910895CF93DF93209186012430B8
+:100B700039F521E02093E9002FEF3091E800215072
+:100B800035FD06C035ED3A95F1F700002111F5CF9E
+:100B90002091E80025FF14C0EC0140E050E068E03F
+:100BA00070E00E9440078091E8008E778093E80013
+:100BB00088E0FE01ACE1B1E001900D928A95E1F789
+:100BC000DF91CF91089580918501811109C00E9424
+:100BD000CF080E9422098091E20084608093E200A5
+:100BE0000895109285010895089542E061EC81E036
+:100BF0000C94490880918801833009F453C030F483
+:100C0000813071F0823009F48CC008958A3009F483
+:100C100078C08B3009F45EC0893009F09AC020C0DA
+:100C200080918701813A09F094C08091E800877F24
+:100C30008093E80080918B0190918C01892B21F4A5
+:100C400068E08CE191E003C060E080E090E070E05B
+:100C50000E948B078091E8008B778093E8000895CD
+:100C600080918701813209F074C080918B0190914D
+:100C70008C01892B09F06DC08091E800877F8093FB
+:100C8000E8008091E80082FD05C080918601811115
+:100C9000F8CF5FC08091F100809324018091E8003B
+:100CA0008B7753C080918701813A09F052C08091BF
+:100CB0008B0190918C01892B09F04BC08091E80049
+:100CC000877F8093E8008091E80080FFFCCF8091CF
+:100CD0000A0136C0809187018132D9F580918B015C
+:100CE00090918C01892BA9F58091E800877F8093F2
+:100CF000E8000E947E088091890180930A010C948B
+:100D0000DD0F80918701813221F58091E800877F96
+:100D10008093E8000E947E0880918A0180932501DB
+:100D2000089580918701813AA1F48091E800877F3E
+:100D30008093E8008091E80080FFFCCF809125013E
+:100D40008093F1008091E8008E778093E8000C9406
+:100D50007E08089584B7877F84BF88E10FB6F89432
+:100D600080936000109260000FBE80E88093610065
+:100D7000109261000E94DA0B0E94CF080E942209A3
+:100D80008091E20084608093E20078940E94760B68
+:100D90000E94DC0B80E091E00E94910B8091860123
+:100DA000853069F40E942616809184018823B1F36E
+:100DB0000E945116882391F30E942A07EFCF0E94C8
+:100DC000E20BECCF292F332723303105C1F05CF43F
+:100DD0002130310579F022303105A1F582E290E031
+:100DE0002CE131E033C021323105F1F022323105FE
+:100DF00011F128C082E190E02EE331E027C099276D
+:100E00008130910541F08230910541F0892BD1F478
+:100E1000E8E1F1E005C0EEEFF0E002C0EEEDF0E059
+:100E2000849190E09F0112C061110CC089E090E0B4
+:100E30002EE231E00BC0611105C080E490E020E5B6
+:100E400031E004C080E090E020E030E0FA0131833E
+:100E50002083089584E089BD86E089BD09B400FE41
+:100E6000FDCF8091D8008F7D8093D8008091E000E5
+:100E700082608093E0008091E00081FDFCCF0895C6
+:100E8000CF92DF92EF92FF920F931F93CF93DF9356
+:100E9000EC018B016A010E949D08811133C0C114CD
+:100EA000D10439F0F60180819181081B190BC80F1C
+:100EB000D91FE12CF12C0115110519F18091E800E1
+:100EC00085FD16C08091E8008E778093E800C114FC
+:100ED000D10449F0F60180819181E80EF91EF1827A
+:100EE000E08285E00FC00E949D08882321F30AC09C
+:100EF00089918093F10001501109FFEFEF1AFF0A69
+:100F0000DACF80E0DF91CF911F910F91FF90EF90AA
+:100F1000DF90CF90089520918D0130918E0126179A
+:100F2000370748F06115710539F42091E8002E77F4
+:100F30002093E80001C0B90140E06115710591F10D
+:100F400020918601222309F440C0253009F43FC0D6
+:100F50002091E80023FD3DC02091E80022FD2FC034
+:100F60002091E80020FFE9CF2091F20030E0FC0161
+:100F7000CF016115710559F02830310540F4819198
+:100F80008093F100615071092F5F3F4FF1CF41E035
+:100F90002830310509F040E02091E8002E772093B9
+:100FA000E800CBCF4111CCCF0AC0809186018823C5
+:100FB00061F0853061F08091E80083FD0AC0809186
+:100FC000E80082FFF2CF80E0089582E0089583E098
+:100FD000089581E0089520918D0130918E012617AA
+:100FE000370748F06115710539F42091E8002E7734
+:100FF0002093E80001C0B901FC0120E061157105F2
+:1010000079F180918601882309F43DC0853009F487
+:101010003CC08091E80083FD3AC08091E80082FDE9
+:101020002CC08091E80080FFE9CF8091F20090E031
+:101030006115710559F08830910540F42491209391
+:10104000F1003196615071090196F2CF21E00897C5
+:1010500009F020E08091E8008E778093E800CECF01
+:101060002111CFCF0AC080918601882361F085309D
+:1010700061F08091E80083FD0AC08091E80082FF62
+:10108000F2CF80E0089582E0089583E0089581E042
+:101090000895982F953058F59093E900981739F0F6
+:1010A0007091EC002091ED005091F00003C0242FCE
+:1010B000762F50E021FF19C03091EB003E7F309336
+:1010C000EB003091ED003D7F3093ED003091EB006F
+:1010D00031603093EB007093EC002093ED0050935F
+:1010E000F0002091EE0027FF07C09F5FD3CF8F70E5
+:1010F0008093E90081E0089580E008958091870160
+:1011000087FF11C08091E80082FD05C080918601B3
+:101110008111F8CF11C08091E8008B770BC08091CE
+:101120008601882349F08091E80080FFF8CF809104
+:10113000E8008E778093E80008952091E4003091D4
+:10114000E50095E64091EC00842F817040FF22C0BD
+:101150008091E80080FD1CC080918601882391F079
+:10116000853091F08091EB0085FD10C04091E40046
+:101170005091E5004217530729F39A01915011F756
+:1011800084E0089582E0089583E0089581E0089561
+:1011900080E008954091E80042FFDECF08950E946C
+:1011A0002C090E942F09E0EEF0E0808181608083AD
+:1011B000E8EDF0E080818F77808319BCE3E6F0E012
+:1011C0008081816080831092850108950E942C099E
+:1011D0000E942F098091D8008F778093D80080914A
+:1011E000D80080688093D8008091D8008F7D80934C
+:1011F000D80084E089BD86E089BD09B400FEFDCF3A
+:101200001092860110928201109284011092830143
+:1012100042E060E080E00E9449088091E1008E7F1A
+:101220008093E1008091E20081608093E2008091F0
+:10123000E20088608093E2008091E0008E7F8093DE
+:10124000E0000895E3E6F0E080818E7F808381E016
+:10125000809385010C94E6081092E20008951092A4
+:10126000E10008951F920F920FB60F9211242F9351
+:101270003F934F935F936F937F938F939F93AF931E
+:10128000BF93EF93FF938091E10082FF0BC08091A9
+:10129000E20082FF07C08091E1008B7F8093E10034
+:1012A0000E94750B8091E10080FF18C08091E200E0
+:1012B00080FF14C08091E2008E7F8093E2008091D5
+:1012C000E20080618093E2008091D8008062809388
+:1012D000D80019BC109286010E94F1058091E100AE
+:1012E00084FF30C08091E20084FF2CC084E089BD7F
+:1012F00086E089BD09B400FEFDCF8091D8008F7DC6
+:101300008093D8008091E1008F7E8093E1008091EE
+:10131000E2008F7E8093E2008091E2008160809302
+:10132000E20080918201882311F084E007C080915F
+:10133000E30087FD02C081E001C083E08093860165
+:101340000E94E3058091E10083FF29C08091E200C3
+:1013500083FF25C08091E100877F8093E10082E0D8
+:1013600080938601109282018091E1008E7F8093AC
+:10137000E1008091E2008E7F8093E2008091E200A4
+:1013800080618093E20042E060E080E00E944908D2
+:101390008091F00088608093F0000E94F405FF9136
+:1013A000EF91BF91AF919F918F917F916F915F91DD
+:1013B0004F913F912F910F900FBE0F901F90189556
+:1013C0001F920F920FB60F9211242F933F934F93BA
+:1013D0005F936F937F938F939F93AF93BF93CF93BD
+:1013E000DF93EF93FF93C091E900CF708091EC0001
+:1013F000D82FD17080FDD0E81092E9008091F000E4
+:10140000877F8093F00078940E94240A1092E9006C
+:101410008091F00088608093F000CD2BCF70C09356
+:10142000E900FF91EF91DF91CF91BF91AF919F9133
+:101430008F917F916F915F914F913F912F910F907D
+:101440000FBE0F901F9018951F93CF93DF93CDB7CA
+:10145000DEB7AA970FB6F894DEBF0FBECDBFE7E8A0
+:10146000F1E088E08E0F9091F10091938E13FBCF05
+:101470000E94FA058091E80083FF1FC180918701D7
+:1014800090918801492F50E04A30510508F015C16C
+:10149000FA01E65CFF4F0C946B17803881F08238BC
+:1014A00009F00BC180918B018F708093E9008091CE
+:1014B000EB0085FB882780F91092E90006C0809137
+:1014C000830190918401911182609091E800977F4F
+:1014D0009093E8008093F1001092F100C8C0282F8B
+:1014E0002D7F09F0EAC0882319F0823061F0E5C051
+:1014F00080918901813009F0E0C0933009F080E0EB
+:10150000809384012BC080918901811127C0809133
+:101510008B018F7009F4D1C08093E9002091EB001A
+:1015200020FF1CC0933021F48091EB00806214C036
+:101530009091EB0090619093EB0021E030E0A901E5
+:1015400002C0440F551F8A95E2F74093EA001092BB
+:10155000EA008091EB0088608093EB001092E90034
+:101560008091E800877F86C08111A7C01091890112
+:101570001F778091E3008078812B8093E300809136
+:10158000E800877F8093E8000E947E088091E80051
+:1015900080FFFCCF8091E30080688093E30011110D
+:1015A00002C082E001C083E08093860186C080583B
+:1015B000823008F082C08091890190918A018C3D2F
+:1015C00053E0950779F583E08A838AE289834FB7F0
+:1015D000F894DE01139620E03EE051E2E32FF0E0C4
+:1015E00050935700E49120FF03C0E295EF703F5FF6
+:1015F000EF708E2F90E0EA3010F0C79601C0C096D1
+:101600008D939D932F5F243149F74FBF8091E80060
+:10161000877F8093E8006AE270E0CE0101960E9425
+:101620008B0714C0AE014F5F5F4F60918B010E942A
+:10163000E206BC01009709F440C09091E800977F52
+:101640009093E80089819A810E94EB078091E800DD
+:101650008B778093E80031C0803879F58091E8007D
+:10166000877F8093E800809182018093F1008091D0
+:10167000E8008E778093E8000E947E081EC08111EA
+:101680001CC0909189019230C0F48091E800877F5E
+:101690008093E800909382010E947E0880918201ED
+:1016A000811106C08091E30087FD02C081E001C086
+:1016B00084E0809386010E94F5058091E80083FF15
+:1016C0000AC08091E800877F8093E8008091EB005A
+:1016D00080628093EB00AA960FB6F894DEBF0FBE2F
+:1016E000CDBFDF91CF911F9108950895CF93809141
+:1016F00086018823A1F0C091E900CF709091EC00A1
+:10170000892F817090FD80E8C82B1092E9008091AC
+:10171000E80083FD0E94240ACF70C093E900CF91B6
+:10172000089590932B0180932A010895E0912A0156
+:10173000F0912B01309721F00190F081E02D099478
+:1017400080E00895E0912A01F0912B01309721F07B
+:101750000280F381E02D09940895209128013091B1
+:1017600029018217930771F0909329018093280132
+:10177000E0912A01F0912B01309721F00680F7814A
+:10178000E02D0994089520912601309127018217B8
+:10179000930771F09093270180932601E0912A012D
+:1017A000F0912B01309721F00084F185E02D099410
+:1017B000089508950C94D90B0E9488160E940E017A
+:1017C0000C940E17CF92DF92EF92FF920F931F931C
+:1017D000CF93DF9300D000D000D0CDB7DEB70E940A
+:1017E0001E01EE24E394F12C0E2D8E2D0E944B0150
+:1017F0009701235D3E4F6901F9011081182771F1AE
+:1018000090917C0191FF04C08E830E9451018E81D2
+:1018100012FD07C011FD08C010FF20C011E090E0CC
+:1018200005C014E092E002C012E091E099830A83BF
+:10183000812391E009F490E09B830E9491168160DE
+:10184000782F9D838C8349815A816B818D810E9481
+:101850006C0CF60180811827108315C0EF2819F051
+:10186000E12CF12CC1CF8FEF89838A831B820E94E8
+:1018700091168160782F9D838C8349815A816B8179
+:101880008D810E946C0C10912C010E94960B1817F0
+:10189000A1F00E94960B80932C0126960FB6F89427
+:1018A000DEBF0FBECDBFDF91CF911F910F91FF9093
+:1018B000EF90DF90CF900C94450526960FB6F894E4
+:1018C000DEBF0FBECDBFDF91CF911F910F91FF9073
+:1018D000EF90DF90CF900895CF93DF93CDB7DEB731
+:1018E0002B970FB6F894DEBF0FBECDBF4F8358873E
+:1018F00069877A878B87DE01119686E0FD01119258
+:101900008A95E9F785E0FE01379601900D928A9558
+:10191000E1F749815A816B817C818D819E810E9492
+:101920008A122B960FB6F894DEBF0FBECDBFDF91A3
+:10193000CF910895882309F4B9C0823859F40E94E0
+:10194000960B81FDB3C089E30E9468150E94EB15D8
+:1019500089E30CC0833871F40E94960B80FDA6C009
+:1019600083E50E9468150E94EB1583E50E948515AA
+:101970000C94EB15843859F40E94960B82FD96C0A6
+:1019800087E40E9468150E94EB1587E4EFCF9CEF77
+:10199000980F913A18F40E946815EACF90E2980FD8
+:1019A000983050F4877091E001C0990F8A95EAF75A
+:1019B000892F0E94A415DCCF9BE5980F933070F41B
+:1019C000853A29F0863A31F083E890E005C081E855
+:1019D00090E002C082E890E00C94AD0B98E5980F7F
+:1019E000933108F063C0883A39F1893A41F18A3A73
+:1019F00049F18B3A51F18C3A59F18D3A61F1803BC2
+:101A000069F18E3A71F18F3A79F1813B81F1823B34
+:101A100089F1833B91F1843B99F1853BA1F1863BB0
+:101A2000A9F1873BB1F1883BB9F1893BC1F18A3B10
+:101A3000C9F180E090E038C082EE90E035C089EED8
+:101A400090E032C08AEE90E02FC085EB90E02CC091
+:101A500086EB90E029C087EB90E026C08CEC90E00C
+:101A600023C08DEC90E020C083E891E01DC08AE89F
+:101A700091E01AC082E991E017C084E991E014C0B6
+:101A800081E292E011C083E292E00EC084E292E033
+:101A90000BC085E292E008C086E292E005C087E2D2
+:101AA00092E002C08AE292E00C94C30B089588236E
+:101AB00009F44BC0823859F40E94960B81FF45C04F
+:101AC00089E30E9468150E94EB1589E30CC08338F6
+:101AD00071F40E94960B80FF38C083E50E94681560
+:101AE0000E94EB1583E50E9485150C94EB15843854
+:101AF00059F40E94960B82FF28C087E40E94681563
+:101B00000E94EB1587E4EFCF9CEF980F913A58F3C2
+:101B100090E2980F983050F4877091E001C0990FCF
+:101B20008A95EAF7892F0E94AA15DFCF9BE5980FC7
+:101B3000933020F480E090E00C94AD0B885A833110
+:101B400020F480E090E00C94C30B0895882321F0EA
+:101B50000E94A4150C94EB150895882321F00E948F
+:101B6000AA150C94EB1508957F928F929F92AF92D5
+:101B7000BF92CF92DF92EF92FF920F931F93CF937A
+:101B8000DF931F92CDB7DEB77C01C62E772EFC0106
+:101B9000158112951F70028101110E94C1150E94CA
+:101BA0006115882379F0002369F080E28C0D88307C
+:101BB00048F082E00E944A150E94611591E0D82EFB
+:101BC000D92601C0D12CE72DE295EF70F0E0EC5B57
+:101BD000FF4F0C946B17872D807F172D1F70882364
+:101BE00011F01295107F002389F0112309F46DC1C3
+:101BF00080E28C0D883020F4812F0E94A41503C050
+:101C0000812F0E94B4150E94EB155FC18C2D0E949C
+:101C1000570D112309F472C180E28C0D883020F435
+:101C2000812F0E94AA1503C0812F0E94BA150E941D
+:101C3000EB1564C1872D807F972D9F70803211F442
+:101C4000892F03C0892F8295807FCC2021F0F1E07D
+:101C5000CF16A1F01DC0002339F0112319F1113066
+:101C600009F50E94D4154AC1112319F0113009F465
+:101C700045C189830E94D7158981E5C0002321F0E1
+:101C8000163008F03BC10EC0153008F037C1DBC07C
+:101C9000002359F0112331F0F701958190FF15C110
+:101CA0009F7095830E94A60D29C1112309F4CBC012
+:101CB00012C1872D837009F052C001111FC18C2DF4
+:101CC000829586958770880F880F9C2D9F70892E2E
+:101CD000912CA12CB12C082E04C0880C991CAA1C94
+:101CE000BB1C0A94D2F7C4FE14C00FE010E020E041
+:101CF00030E0B901A80104C0440F551F661F771FCB
+:101D00008A95D2F7CB01BA01609570958095909530
+:101D100003C060E070E0CB01272D26952695237047
+:101D200030E02230310569F02330310589F068292F
+:101D300079298A299B292130310571F00E94D61317
+:101D4000DDC0682979298A299B290E94F213D6C00F
+:101D50000E94D613C501B4010E94BA13CFC000235C
+:101D600019F0872D817001C08695882309F4C6C0BB
+:101D70008C2D829586958770880F880F9C2D9F707B
+:101D8000892E912CA12CB12C082E04C0880C991CF2
+:101D9000AA1CBB1C0A94D2F7C4FE14C00FE010E0CA
+:101DA00020E030E0B901A80104C0440F551F661FB0
+:101DB000771F8A95D2F7CB01BA016095709580950F
+:101DC000909503C060E070E0CB01272D2695269505
+:101DD0002370422F50E04230510569F043305105E5
+:101DE00089F0682979298A299B294130510571F0A8
+:101DF0000E94B01483C0682979298A299B290E94EE
+:101E0000CC147CC00E94B014C501B4010E9494148B
+:101E100075C08C2D90E0FC01E05EF109E531F10523
+:101E200008F04FC0EC5AFF4F0C946B171C2D1F701D
+:101E3000872D8F71002321F00E942D14812F32CF26
+:101E40000E944E14812F0E94AD0D58C0002341F016
+:101E5000153008F053C0872D8F710E9473144EC047
+:101E6000163008F04BC0F7CF002339F0872D8F7163
+:101E70000E942D1443C00023C9F3872D8F710E9447
+:101E80004E143CC0002329F0872D8F710E94181436
+:101E900035C00E940E1432C0002351F0172D1F715F
+:101EA000812F0E942D1463E0812F0E94411526C0CE
+:101EB00081E00E944A15123008F182E00E944A1522
+:101EC0001DC0002331F0112389F28C2D0E949A0C41
+:101ED00015C0112391F28C2D0E94570D0FC0472D74
+:101EE0004F706C2DC7010E9478010E94321306C00A
+:101EF000472D4F706C2DC7010E944602DD20F9F07E
+:101F00000E943D1580FD1BC0F70112820E9437150B
+:101F10000E942D14C7010E94AE0F0E9437150F902A
+:101F2000DF91CF911F910F91FF90EF90DF90CF90B5
+:101F3000BF90AF909F908F907F900C944E140F9015
+:101F4000DF91CF911F910F91FF90EF90DF90CF9095
+:101F5000BF90AF909F908F907F9008950F931F93A5
+:101F6000CF93DF93EC01888199812B813C81232BD6
+:101F7000B9F09F3F11F48F3F99F0CE010E949E016E
+:101F8000882371F0688179818A810E9433158C01E0
+:101F90000E94E8140E94AF13B801CE010E94B40D54
+:101FA000DF91CF911F910F9108950E94C1150E945A
+:101FB000D1150E9496150C94EB150E94B1150C9446
+:101FC000D50F0E942815292F22952F7030E02C3034
+:101FD00031054CF42A3031056CF42250310922309D
+:101FE0003105A8F407C02C30310569F02F303105D8
+:101FF00051F00DC0803F69F018F4803E40F409C0F4
+:10200000843F29F406C093FB882780F9089580E077
+:10201000089581E00895CF93DF9300D000D01F9200
+:10202000CDB7DEB70F900F900F900F900F90DF910C
+:10203000CF910895CF93DF9300D000D000D0CDB7DB
+:10204000DEB726960FB6F894DEBF0FBECDBFDF9188
+:10205000CF910895CF93DF93C0912F0180913001EC
+:10206000C817A1F0D0E0CE0166E070E00E945A17D8
+:10207000FC01EF5CFE4F408151816281738184815C
+:1020800095810E941A102196C770E8CFDF91CF91F9
+:1020900008954091610150916201609163017091D6
+:1020A000640180916501909166010C941A10CF93A0
+:1020B000DF938091660182958F7009F05CC08091FA
+:1020C0006301882309F457C020912F01D09130017A
+:1020D00040916101C0916201E0916401F09165015C
+:1020E0002D1709F448C030E0309709F440C0CF3FC5
+:1020F00011F44F3FE1F1C90166E070E00E945A1708
+:10210000DC01AF5CBE4F11968C911197C8132FC0A4
+:102110008C9148132CC012968C911297811127C074
+:1021200013968D919C9114978E179F0708F4019731
+:102130008E1B9F0B883C9105D0F4809166018F70B7
+:10214000806180936601C90166E070E00E945A17C1
+:10215000FC01EA5CFE4F90819F709061908381E664
+:1021600091E00E94AE0FDF91CF910C942A102F5F67
+:102170003F4F2770B5CFDF91CF910895BF92CF9297
+:10218000DF92EF92FF920F931F93CF93DF93CDB720
+:10219000DEB761970FB6F894DEBF0FBECDBF8C01DE
+:1021A00085E0F801DE011D9601900D928A95E1F718
+:1021B000D8014C9111962C9111971296EC90129790
+:1021C0001396CD90DC90149750916101609162015B
+:1021D0008091640190916501009709F46EC16F3F91
+:1021E00019F45F3F09F469C1B0906301BB2009F4A1
+:1021F000C3C030916601C816D90628F0F601E81B65
+:10220000F90BCF0104C0809590958C0D9D1DFF2486
+:10221000F394883C910588F0F12C307F09F0CBC015
+:102220007C2DD98AC88A522F6E2D89890E940B1065
+:1022300081E691E00E94AE0FB4C0832F807F09F049
+:1022400049C0621314C0541312C0E11010C03F7093
+:102250003061309366010E94491081E691E00E944E
+:10226000AE0F80916601D80115968C9331C0CD28B0
+:1022700031F12F3F11F44F3F11F1FE2CE1101FC03F
+:10228000E0912F0130913001E31709F45CC0F0E0D8
+:10229000CF0166E070E00E945A17DC01AF5CBE4FD0
+:1022A00011968C911197281307C08C91481304C084
+:1022B00012968C91811103C03196E770E5CFFE2C08
+:1022C000EE2009F416C18091660181608093660159
+:1022D000F12C0FC1621308C0541306C0E11004C0F2
+:1022E00080916601D801C1C04D872E878D859E855E
+:1022F0000E94E10F8823E1F1EE20D1F120916601E7
+:10230000822F82958F7090E0029774F08091610126
+:102310009091620198878F831986DB86CA862C8705
+:10232000CE0107960E94AE0F86E0F801A1E6B1E06B
+:1023300001900D928A95E1F70E9457100E94491072
+:10234000FF24F394D6C04D872E878D859E850E94ED
+:102350002815292F22952F7030E0223031050CF0FE
+:10236000BCC09F7009F0B6C0805E883008F4C1C060
+:10237000C8010E94AE0FE4CFC816D90608F453C0B6
+:10238000F601E81BF90BCF01883C910508F450C019
+:10239000F12C7C2DD98AC88A522F6E2D89890E94F2
+:1023A0000B10E1E6F1E086E0DF011D928A95E9F786
+:1023B0000E9449109EC0621314C0541312C0E11051
+:1023C00010C080916601F8018583C8010E94AE0F9C
+:1023D00086E0E1E6F1E0DF011D928A95E9F7FB2C4A
+:1023E00088C04D872E878D859E850E94E10F8823AA
+:1023F00009F4BECFEE2009F4BBCF20916601822FF5
+:1024000082958F7090E002970CF48ECF80916101DD
+:10241000909162019A8389831B82DD82CC822E8314
+:10242000CE0101967FCF809590958C0D9D1DACCFF0
+:10243000FE2CEE2009F49CCF62132EC054132CC046
+:102440002091660120FD1FC0822F82958F70D9F0E8
+:10245000D80115962C9315978F3049F08F5F982FE0
+:102460009295907F822F8F70892B15968C93C8013F
+:102470000E94AE0F86E0F801A1E6B1E001900D9256
+:102480008A95E1F795CF86E0F801A1E6B1E00190E9
+:102490000D928A95E1F72DC04D872E878D859E85FB
+:1024A0000E94E10F811140CF80916601816080938D
+:1024B0006601C8010E94AE0F1CC0EE2009F458CF7F
+:1024C0004D872E878D859E850E94E10F882309F414
+:1024D0004FCF2ACF811148CF0CC0243031050CF0EA
+:1024E00047CF9F7009F440CFF8019581907F09F0A4
+:1024F0003BCF8F2D61960FB6F894DEBF0FBECDBFD8
+:10250000DF91CF911F910F91FF90EF90DF90CF90CF
+:10251000BF900895CF93DF93CDB7DEB72C970FB65A
+:10252000F894DEBF0FBECDBF4F83588769877A8787
+:102530008B879C87CE0107960E94BE10882371F07E
+:102540008F8198852A853B85232B09F43FC09F3FC7
+:1025500009F068C08F3F09F065C038C086E0FE0111
+:102560003796DE01119601900D928A95E1F76F8101
+:102570007885EA85FB85309749F17F3F11F46F3FFD
+:1025800029F18091300190E09C012F5F3F4F27702F
+:10259000332740912F0150E02417350709F44BC031
+:1025A00069837A83FD83EC8366E070E00E945A17AA
+:1025B000DC01AF5CBE4F96E0FE01319601900D92BA
+:1025C0009A95E1F7209330010E942A1080912F0103
+:1025D000909130018917E9F190E066E070E00E9487
+:1025E0005A178F5C9E4F0E94BE10882391F18091F4
+:1025F0002F0190E066E070E00E945A17FC01EF5C4A
+:10260000FE4F4081518162817381848195810E9456
+:102610001A1080912F0190E001968770992780937E
+:102620002F01D4CF4F81588569857A858B859C850C
+:102630000E941A10CBCF0E94DD0F10923001109231
+:102640002F01E1E6F1E086E0DF011D928A95E9F7CE
+:10265000BDCF2C960FB6F894DEBF0FBECDBFDF9175
+:10266000CF910895EF92FF920F931F93CF93DF9333
+:102670008C01009709F46CC0F12CEE24E394E8017E
+:102680002196F8018491843740F4843008F051C0D9
+:10269000813081F0823019F15BC0853709F444C084
+:1026A000A8F19CE7980F903708F052C08F770E94EE
+:1026B000570D41C00E5F1F4FFE01C49180E28C0F89
+:1026C000883048F4C7708E2D01C0880FCA95EAF78C
+:1026D0000E94C41514C08C2F0E949A0C2DC00E5F4E
+:1026E0001F4FFE01C49180E28C0F883058F4C770F0
+:1026F0008E2D01C0880FCA95EAF70E94CA150E9464
+:10270000EB151AC08C2F0E94570D16C00E5F1F4F7D
+:10271000FE01C491CC2381F08FE99FE00197F1F78E
+:1027200000C00000C150F6CF0E5F1F4FFE01F490B5
+:1027300003C00E949A0C8E018F2D882309F49FCF2D
+:10274000EFE9FFE03197F1F700C000008150F5CFCD
+:10275000DF91CF911F910F91FF90EF900895089511
+:1027600060936B0170936C0180936D0190936E0187
+:102770000C94D50F0F931F9300916B0110916C0176
+:1027800020916D0130916E01DC01CB01802B912BEA
+:10279000A22BB32B80936B0190936C01A0936D01DE
+:1027A000B0936E011F910F910C94D50F0F931F934F
+:1027B00000916B0110916C0120916D0130916E01BF
+:1027C000DC01CB0180239123A223B32380936B01EF
+:1027D00090936C01A0936D01B0936E011F910F91C6
+:1027E0000C94D50F0F931F9300916B0110916C0106
+:1027F00020916D0130916E01DC01CB018027912782
+:10280000A227B32780936B0190936C01A0936D0175
+:10281000B0936E011F910F910C94D50F1092670128
+:10282000109268011092690110926A010C94D50F00
+:1028300041E050E060E070E004C0440F551F661FA7
+:10284000771F8A95D2F74093670150936801609390
+:10285000690170936A010C94D50F41E050E060E08B
+:1028600070E004C0440F551F661F771F8A95D2F78A
+:102870008091670190916801A0916901B0916A010E
+:10288000482B592B6A2B7B2B40936701509368018F
+:102890006093690170936A010C94D50F41E050E098
+:1028A00060E070E004C0440F551F661F771F8A95D3
+:1028B000D2F7409550956095709580916701909101
+:1028C0006801A0916901B0916A01482359236A23E4
+:1028D0007B23409367015093680160936901709373
+:1028E0006A010C94D50F41E050E060E070E004C054
+:1028F000440F551F661F771F8A95D2F78091670195
+:1029000090916801A0916901B0916A014827592707
+:102910006A277B27409367015093680160936901A0
+:1029200070936A010C94D50F0F931F930091670168
+:10293000109168012091690130916A01DC01CB019D
+:10294000802B912BA22BB32B80936701909368016E
+:10295000A0936901B0936A011F910F910C94D50F58
+:102960000F931F93009167011091680120916901F5
+:1029700030916A01DC01CB0180239123A223B32390
+:102980008093670190936801A0936901B0936A01F5
+:102990001F910F910C94D50F0F931F930091670116
+:1029A000109168012091690130916A01DC01CB012D
+:1029B00080279127A227B32780936701909368010E
+:1029C000A0936901B0936A011F910F910C94D50FE8
+:1029D0000895CF92DF92EF92FF920F931F93CF93C0
+:1029E000DF938C01C0906B01D0906C01E0906D0181
+:1029F000F0906E018091670190916801A09169014A
+:102A0000B0916A01C82AD92AEA2AFB2ACFE1D0E08C
+:102A1000D701C6010C2E04C0B695A795979587954A
+:102A20000A94D2F780FF06C0B8018C2F0E94A3043D
+:102A3000019721F4219760F780E001C08C2FDF918E
+:102A4000CF911F910F91FF90EF90DF90CF9008955D
+:102A5000CF93DF93EC010E94E914BE010E94A3040E
+:102A6000DF91CF910895CB010E94281508958091A0
+:102A70006F01859585958595089580916F01877083
+:102A80000895982F990F990F990F692B60936F01F3
+:102A90000C942D1420916F018095822380936F01F7
+:102AA000982F977069F430E0482F552747FD5095CF
+:102AB0002417350729F08595859585950C944E1436
+:102AC000089590916F01977081E009F480E0089576
+:102AD00020910B0130910C01F90132969FEF40E0FB
+:102AE0005191581789F09F3F19F4511101C0942F4B
+:102AF0004F5F4630A9F79F3F39F0F901E90FF11D0B
+:102B000097FDFA9582830895089520910B013091E5
+:102B10000C01F9013296285F3F4F9081981301C054
+:102B200010823196E217F307C1F7089581E090E033
+:102B3000E0910B01F0910C01E80FF91F1082019652
+:102B400088309105A9F7089590917B01892B809396
+:102B50007B010895809590917B01892380937B016F
+:102B6000089510927B01089590917A01892B8093AA
+:102B70007A010895809590917A01892380937A0152
+:102B8000089510927A01089590917901892B80938C
+:102B90007901089580959091790189238093790135
+:102BA000089510927901089580937001089510920C
+:102BB0007001089580910B0190910C01FC013196F8
+:102BC0009C01285F3F4F80E0919191118F5FE21748
+:102BD000F307D1F70895E0910B01F0910C0180917A
+:102BE0007B018083E0910B01F0910C019081809139
+:102BF0007A01892B8083E0910B01F0910C01908187
+:102C000080917901892B808380917001882361F004
+:102C1000E0910B01F0910C019081892B80830E943F
+:102C2000DA1581111092700180910B0190910C01C5
+:102C30000C94A20B20E0009739F0AC0141505109EF
+:102C4000842395232F5FF7CF822F089580918601EB
+:102C5000843021F110927D0120E488E190E00FB6EC
+:102C6000F894A895809360000FBE2093600080E0E8
+:102C70000E94450583B7817F846083BF83B78160ED
+:102C800083BF7894889583B78E7F83BF88E10FB622
+:102C9000F89480936000109260000FBE089508952C
+:102CA00008950E944F160E941E010E9450160E9415
+:102CB000520191E0811101C090E0892F08951F9287
+:102CC0000F920FB60F9211248F939F93AF93BF93E0
+:102CD00080917D01811113C080917E0190917F01CF
+:102CE000A0918001B09181014196A11DB11D8093F9
+:102CF0007E0190937F01A0938001B0938101BF91E9
+:102D0000AF919F918F910F900FBE0F901F901895CC
+:102D100082E084BD93E095BD9AEF97BD80936E00ED
+:102D200008952FB7F89480917E0190917F01A09132
+:102D30008001B09181012FBF0895CF92DF92EF9271
+:102D4000FF920F931F932FB7F89440917E015091FB
+:102D50007F0160918001709181012FBF6A017B0129
+:102D6000EE24FF248C0120E030E0C016D106E206FC
+:102D7000F30610F4415051099A01281B390BC9017F
+:102D80001F910F91FF90EF90DF90CF9008951F92C9
+:102D90000F920FB60F9211248F939F93AF93BF930F
+:102DA00080917E0190917F01A0918001B09181017D
+:102DB0000196A11DB11D80937E0190937F01A09388
+:102DC0008001B0938101BF91AF919F918F910F903E
+:102DD0000FBE0F901F9018950E94CF08F8942FEF08
+:102DE00087EA91E6215080409040E1F700C0000062
+:102DF00087E090EBDC018093900190939101A09388
+:102E00009201B09393019CE088E10FB6F894A895E5
+:102E1000809360000FBE90936000FFCF0E943E172A
+:102E2000811102C00E9424170E94491780937C01DF
+:102E30000E94511780938F010E944D17682F70E0F8
+:102E400080E090E00C94B0136DEE7EEF80E090E0B7
+:102E50000E94911760E082E090E00E947F1760E09E
+:102E600083E090E00E947F1760E084E090E00E94A1
+:102E70007F1760E085E090E00C947F1780E090E0A1
+:102E80000E94791721E08D3E9E4F09F020E0822FAD
+:102E9000089582E090E00C94711783E090E00C9428
+:102EA000711784E090E00C947117682F84E090E033
+:102EB0000C947F170024552704C0080E591F880F53
+:102EC000991F009729F076956795B8F37105B9F7C2
+:102ED000802D952F0895EE0FFF1F0590F491E02DA2
+:102EE0000994F999FECF92BD81BDF89A992780B5D2
+:102EF0000895A8E1B0E042E050E00C949917262F25
+:102F0000F999FECF92BD81BDF89A019700B40216DF
+:102F100039F01FBA20BD0FB6F894FA9AF99A0FBE8D
+:102F200008950196272F0E9480170C947F17DC01CB
+:102F3000CB01FC01F999FECF06C0F2BDE1BDF89AC4
+:102F4000319600B40D9241505040B8F70895F8946E
+:022F5000FFCFB1
+:0E2F52004705B3054A057F054B0501710100D7
+:00000001FF
diff --git a/keyboards/sixkeyboard/keymaps/default/keymap.c b/keyboards/sixkeyboard/keymaps/default/keymap.c new file mode 100644 index 0000000000..641ed790e8 --- /dev/null +++ b/keyboards/sixkeyboard/keymaps/default/keymap.c @@ -0,0 +1,39 @@ +// 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 "sixkeyboard.h" +#include "matrix.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { + {KC_A, KC_B, KC_C}, + {KC_D, KC_E, KC_F} + } +}; + +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; +}; + +void matrix_scan_user(void) { + // jump to bootloaer when all keys are pressed + if (matrix_get_row(0) == 0b111 && matrix_get_row(1) == 0b111) { + clear_keyboard(); + bootloader_jump(); + } +};
\ No newline at end of file diff --git a/keyboards/sixkeyboard/matrix.c b/keyboards/sixkeyboard/matrix.c new file mode 100644 index 0000000000..6dc93cda1b --- /dev/null +++ b/keyboards/sixkeyboard/matrix.c @@ -0,0 +1,120 @@ +/* + +Note for ErgoDox EZ customizers: Here be dragons! +This is not a file you want to be messing with. +All of the interesting stuff for you is under keymaps/ :) +Love, Erez + +Copyright 2013 Oleg Kostyuk <cub.uanic@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/>. +*/ + +/* + * scan matrix + */ +#include <stdint.h> +#include <stdbool.h> +#include <avr/io.h> +#include <util/delay.h> +#include "action_layer.h" +#include "print.h" +#include "debug.h" +#include "util.h" +#include "matrix.h" +#include "sixkeyboard.h" + +/* matrix state(1:on, 0:off) */ +static matrix_row_t matrix[MATRIX_ROWS]; + +__attribute__ ((weak)) +void matrix_init_kb(void) { +} + +__attribute__ ((weak)) +void matrix_scan_kb(void) { +} + +inline +uint8_t matrix_rows(void) +{ + return MATRIX_ROWS; +} + +inline +uint8_t matrix_cols(void) +{ + return MATRIX_COLS; +} + +void matrix_init(void) +{ + + DDRC &= ~(1<<7); + PORTC |= (1<<7); + DDRB &= ~(1<<7 | 1<<5); + PORTB |= (1<<7 | 1<<5); + DDRD &= ~(1<<6 | 1<<4 | 1<<1); + PORTD |= (1<<6 | 1<<4 | 1<<1); + + matrix_init_kb(); + +} + +uint8_t matrix_scan(void) +{ + matrix[0] = (PINC&(1<<7) ? 0 : (1<<0)) | (PINB&(1<<7) ? 0 : (1<<1)) | (PINB&(1<<5) ? 0 : (1<<2)); + matrix[1] = (PIND&(1<<6) ? 0 : (1<<0)) | (PIND&(1<<1) ? 0 : (1<<1)) | (PIND&(1<<4) ? 0 : (1<<2)); + + matrix_scan_kb(); + + return 1; +} + +bool matrix_is_modified(void) +{ + 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; +} + diff --git a/keyboards/sixkeyboard/sixkeyboard.c b/keyboards/sixkeyboard/sixkeyboard.c new file mode 100644 index 0000000000..7c15e64990 --- /dev/null +++ b/keyboards/sixkeyboard/sixkeyboard.c @@ -0,0 +1,52 @@ +#include "sixkeyboard.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 + + DDRC |= (1<<4); + PORTC &= ~(1<<4); + + + DDRC |= (1<<6); + PORTC &= ~(1<<6); + + DDRB |= (1<<6); + PORTB &= ~(1<<6); + + DDRB |= (1<<4); + PORTB &= ~(1<<4); + + DDRD |= (1<<5); + PORTD &= ~(1<<5); + + DDRD |= (1<<2); + PORTD &= ~(1<<2); + + DDRD |= (1<<3); + PORTD &= ~(1<<3); + + matrix_init_user(); +}; + +void matrix_scan_kb(void) { + // put your looping keyboard code here + // runs every cycle (a lot) + + matrix_scan_user(); +};
\ No newline at end of file diff --git a/keyboards/sixkeyboard/sixkeyboard.h b/keyboards/sixkeyboard/sixkeyboard.h new file mode 100644 index 0000000000..5c0820d7d6 --- /dev/null +++ b/keyboards/sixkeyboard/sixkeyboard.h @@ -0,0 +1,22 @@ +#ifndef SIXKEYBOARD_H +#define SIXKEYBOARD_H + +#include "quantum.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. + + +void matrix_init_user(void); +void matrix_scan_user(void); +void led_set_user(uint8_t usb_led); + +#endif
\ No newline at end of file |