From 4befc879f68bf09421071f81138cd3665e625f28 Mon Sep 17 00:00:00 2001 From: tmk Date: Tue, 4 Apr 2017 09:58:56 +0900 Subject: [PATCH] fc660c: Add unimap --- keyboard/fc660c/Makefile | 7 +- keyboard/fc660c/README.md | 10 +- keyboard/fc660c/actionmap.c | 86 -- keyboard/fc660c/binary/fc660c_unimap.hex | 1272 ++++++++++++++++++++++ keyboard/fc660c/fc660c.c | 28 +- keyboard/fc660c/fc660c.h | 59 +- keyboard/fc660c/unimap.c | 66 ++ 7 files changed, 1422 insertions(+), 106 deletions(-) delete mode 100644 keyboard/fc660c/actionmap.c create mode 100644 keyboard/fc660c/binary/fc660c_unimap.hex create mode 100644 keyboard/fc660c/unimap.c diff --git a/keyboard/fc660c/Makefile b/keyboard/fc660c/Makefile index 7476d0f7..567a5df9 100644 --- a/keyboard/fc660c/Makefile +++ b/keyboard/fc660c/Makefile @@ -73,9 +73,9 @@ EXTRAKEY_ENABLE ?= yes # Audio control and System control CONSOLE_ENABLE ?= yes # Console for debug COMMAND_ENABLE ?= yes # Commands for debug and configuration NKRO_ENABLE ?= yes # USB Nkey Rollover -#UNIMAP_ENABLE ?= yes # Universal keymap -ACTIONMAP_ENABLE ?= yes # Use 16bit actionmap instead of 8bit keymap -#KEYMAP_SECTION_ENABLE ?= yes # fixed address keymap for keymap editor +#ACTIONMAP_ENABLE ?= yes # Use 16bit actionmap instead of 8bit keymap +UNIMAP_ENABLE ?= yes # Universal keymap +KEYMAP_SECTION_ENABLE ?= yes # fixed address keymap for keymap editor #OPT_DEFS += -DNO_ACTION_TAPPING #OPT_DEFS += -DNO_ACTION_LAYER @@ -87,6 +87,7 @@ ACTIONMAP_ENABLE ?= yes # Use 16bit actionmap instead of 8bit keymap # ifeq (yes,$(strip $(UNIMAP_ENABLE))) KEYMAP_FILE = unimap + TARGET := $(TARGET)_unimap else ifeq (yes,$(strip $(ACTIONMAP_ENABLE))) KEYMAP_FILE = actionmap diff --git a/keyboard/fc660c/README.md b/keyboard/fc660c/README.md index ac46e64a..3ceafee5 100644 --- a/keyboard/fc660c/README.md +++ b/keyboard/fc660c/README.md @@ -65,7 +65,7 @@ Row5-7 have no key, you can omit scaning on those lines. Topre original controll | 7| | | | | | | | | | | | | | | | | Logic analyzer pics: -- https://i.imgur.com/9SZUzYo.jpg +- http://i.imgur.com/9XoNTev.png - https://i.imgur.com/5FCP1Ay.png This code emuluates what original cotnroller does for matrix scan. @@ -129,11 +129,15 @@ Datasheets 3.3V power supply ----------------- -LV07A and LVC138A are 5V-tolerant and can be powered with 5V, the keyboard will work only with 5V power supply. -It may not be completely safe to operate LV138A with 5V Vcc, its datasheet says: +LV07A and LVC138A are 5V-tolerant and can be powered with 5V, the keyboard will work only with 5V power supply. It may not be completely safe to operate LV138A with 5V Vcc, its datasheet says: > Exposure to absolute-maximum-rated conditions for extended periods may affect device reliability. +Digipot AD5258 +-------------- +Controller can operate AD5258 via I2C to change actuation point of keys. This may make keyboard unusable accidentally and it will be difficult to recovery in some situation. For safety firmware doesn't support it at this point, though. + +Lower value of RDAC register causes shallower actuation point. Resources --------- diff --git a/keyboard/fc660c/actionmap.c b/keyboard/fc660c/actionmap.c deleted file mode 100644 index a8320aa8..00000000 --- a/keyboard/fc660c/actionmap.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "action.h" -#include "actionmap.h" -#include "hook.h" - - -#define AMAP( \ - K13, K10, K11, K12, K14, K16, K17, K15, K1B, K18, K19, K1A, K1C, K1E, K1F, \ - K03, K00, K01, K02, K04, K06, K07, K05, K0B, K08, K09, K0A, K0C, K0E, K0F, \ - K43, K40, K41, K42, K44, K46, K47, K45, K4B, K48, K49, K4A, K4E, \ - K33, K31, K32, K34, K36, K37, K35, K3B, K38, K39, K3A, K3C, K3D, \ - K23, K21, K22, K27, K28, K2A, K2C, K2E, K2D, K2F \ -) { \ - { AC_##K00, AC_##K01, AC_##K02, AC_##K03, AC_##K04, AC_##K05, AC_##K06, AC_##K07, \ - AC_##K08, AC_##K09, AC_##K0A, AC_##K0B, AC_##K0C, AC_NO, AC_##K0E, AC_##K0F }, \ - { AC_##K10, AC_##K11, AC_##K12, AC_##K13, AC_##K14, AC_##K15, AC_##K16, AC_##K17, \ - AC_##K18, AC_##K19, AC_##K1A, AC_##K1B, AC_##K1C, AC_NO, AC_##K1E, AC_##K1F }, \ - { AC_NO, AC_##K21, AC_##K22, AC_##K23, AC_NO, AC_NO, AC_NO, AC_##K27, \ - AC_##K28, AC_NO, AC_##K2A, AC_NO, AC_##K2C, AC_##K2D, AC_##K2E, AC_##K2F }, \ - { AC_NO, AC_##K31, AC_##K32, AC_##K33, AC_##K34, AC_##K35, AC_##K36, AC_##K37, \ - AC_##K38, AC_##K39, AC_##K3A, AC_##K3B, AC_##K3C, AC_##K3D, AC_NO, AC_NO }, \ - { AC_##K40, AC_##K41, AC_##K42, AC_##K43, AC_##K44, AC_##K45, AC_##K46, AC_##K47, \ - AC_##K48, AC_##K49, AC_##K4A, AC_##K4B, AC_NO, AC_NO, AC_##K4E, AC_NO }, \ - { AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \ - AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \ - { AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \ - AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \ - { AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \ - AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO } \ -} - - -#define AC_L3 ACTION_LAYER_MOMENTARY(3) -#define AC_L4 ACTION_LAYER_MOMENTARY(4) -#define AC_LS_2 ACTION_LAYER_MODS(2, MOD_LSFT) -#define AC_RS_2 ACTION_LAYER_MODS(2, MOD_RSFT) -#define AC_TGL1 ACTION_LAYER_TOGGLE(1) - -// emulates FC660C default keymap -const action_t actionmaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = { - [0] = AMAP( \ - ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \ - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \ - LS_2,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RS_2,UP, \ - LCTL,LGUI,LALT, SPC, RALT,RCTL,L3, LEFT,DOWN,RGHT \ - ), - [1] = AMAP( \ - GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \ - TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \ - LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \ - LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,UP, \ - LCTL,LGUI,LALT, SPC, RALT,RCTL,L4, LEFT,DOWN,RGHT \ - ), - [2] = AMAP( \ - GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, \ - TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS \ - ), - [3] = AMAP( \ - GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ - CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \ - TRNS,TRNS,TRNS, TRNS, TRNS,APP, L3, HOME,PGDN,END \ - ), - [4] = AMAP( \ - ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ - CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \ - TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \ - TRNS,TRNS,TRNS, TRNS, TRNS,APP, L4, HOME,PGDN,END \ - ), -}; - - -void hook_layer_change(uint32_t layer_state) -{ - // lights LED on Insert when layer 1 is enabled - if (layer_state & (1L<<1)) { - PORTB &= ~(1<<5); - } else { - PORTB |= (1<<5); - } -} diff --git a/keyboard/fc660c/binary/fc660c_unimap.hex b/keyboard/fc660c/binary/fc660c_unimap.hex new file mode 100644 index 00000000..969f6f0a --- /dev/null +++ b/keyboard/fc660c/binary/fc660c_unimap.hex @@ -0,0 +1,1272 @@ +:100000000C9443050C948A050C948A050C948A057B +:100010000C948A050C948A050C948A050C948A0524 +:100020000C948A050C948A050C94A90C0C947B0DF5 +:100030000C94161C0C948A050C948A050C948A0561 +:100040000C948A050C948A050C948A050C948A05F4 +:100050000C948A050C948A1C0C948A050C948A05CD +:100060000C948A050C948A050C948A050C948A05D4 +:100070000C948A050C948A050C948A050C948A05C4 +:100080000C948A050C948A050C948A050C948A05B4 +:100090000C948A050C948A050C948A050C948A05A4 +:1000A0000C948A050C948A050C948A05E80D0A0EB6 +:1000B000F80E0A0EF80E4F0E720EF80EC70EDA0E7C +:1000C00005120512331233129012CE12E714E71400 +:1000D000E712E714E813E813BB14E714E714D2148B +:1000E000141A082B1518171C12132F0C3080314CC2 +:1000F0001E1F20352124222326272D252E802A4924 +:10010000807B7A788080802C7E807C807F51504FED +:10011000801D1B7906111905363738107D528080F5 +:1001200004160739090D0A0B0F33340E808028801E +:1001300080808080808080808080808080808080BF +:1001400080808080808080808080808080808080AF +:10015000808080808080808080808080808080809F +:100160004B6579626F6172642073746172742E0AD8 +:100170000055534220636F6E666967757265642E21 +:100180000A000D0A696E69740A005B445D005B43F6 +:100190005D002C034600430036003600300043006B +:1001A000200041006C007400200043006F006E00CE +:1001B000740072006F006C006C006500720000003B +:1001C0000A0354004D004B002E00000004030904F4 +:1001D00009028D00050100A032090400000103019D +:1001E00001000921110100012240000705810308D7 +:1001F000000A0904010001030102000921110100A4 +:1002000001224D000705820308000A0904020001CB +:1002100003000000092111010001223600070583B7 +:100220000308000A09040300020300000009211169 +:1002300001000122220007058403200001070504B4 +:10024000032000010904040001030000000921113A +:100250000100012239000705850320000112011069 +:100260000100000008EDFE0C66000101020001051E +:10027000010906A101050719E029E71500250195E7 +:100280000875018102050819012905950575019177 +:10029000029501750391010507190029F71500253D +:1002A0000195F875018102C00631FF0974A10109A9 +:1002B00075150026FF009520750881020976150046 +:1002C00026FF00952075089102C005010980A10153 +:1002D000850216810026B7001A81002AB700751022 +:1002E00095018100C0050C0901A1018503160100DB +:1002F000269C021A01002A9C02751095018100C0FB +:1003000005010902A1010901A10005091901290539 +:10031000150025019505750181029501750381017F +:100320000501093009311581257F9502750881067F +:1003300009381581257F950175088106050C0A3855 +:10034000021581257F950175088106C0C005010948 +:1003500006A101050719E029E71500250195087593 +:10036000018102950175088101050819012905958A +:100370000575019102950175039101050719002981 +:10038000FF150026FF00950675088100C0636F6E9B +:1003900073756D65723A20253034580A007379738D +:1003A00074656D3A20253034580A000A0025303231 +:1003B0005820006B6579626F6172643A20004C4589 +:1003C000443A20253032580A00253032583A202548 +:1003D0003031366225730A00722F63203031323398 +:1003E0003435363738394142434445460A0064655E +:1003F0006C5F6B65795F6269743A2063616E277424 +:100400002064656C3A20253032580A006164645FCC +:100410006B65795F6269743A2063616E277420614D +:1004200064643A20253032580A004F6E6573686F55 +:10043000743A2074696D656F75740A00290A002585 +:1004400075002F002575005D28002564002000251B +:100450006400200025640020002564007C00253015 +:100460003258006D6F7573656B6579205B62746ED1 +:100470007C782079207620685D287265702F616312 +:100480006C293A205B006D6B5F776865656C5F7403 +:10049000696D655F746F5F6D6178203D2025640A2A +:1004A000006D6B5F776865656C5F6D61785F737019 +:1004B000656564203D2025640A006D6B5F74696D7D +:1004C000655F746F5F6D6178203D2025640A006D63 +:1004D0006B5F6D61785F7370656564203D20256496 +:1004E0000A006D6B5F696E74657276616C203D20E9 +:1004F00025640A006D6B5F64656C6179203D202581 +:10050000640A006D6B5F776865656C5F74696D6523 +:100510005F746F5F6D6178203D2025640A006D6B0C +:100520005F776865656C5F6D61785F737065656442 +:10053000203D2025640A006D6B5F74696D655F74F2 +:100540006F5F6D6178203D2025640A006D6B5F6DE3 +:1005500061785F7370656564203D2025640A006DD5 +:100560006B5F696E74657276616C203D2025640A4C +:10057000006D6B5F64656C6179203D2025640A0025 +:100580000A00257500363A20776865656C5F7469E6 +:100590006D655F746F5F6D61783A20000A002575A4 +:1005A00000353A20776865656C5F6D61785F7370C0 +:1005B0006565643A20000A00257500343A207469A4 +:1005C0006D655F746F5F6D61783A20000A00257574 +:1005D00000333A206D61785F73706565643A20007E +:1005E0000A00257500323A20696E74657276616C76 +:1005F000286D73293A20000A00257500313A2064DD +:10060000656C6179282A31306D73293A20000A0916 +:100610002D2056616C756573202D0A004D3E004DEE +:1006200025643E20003F0073657420646566617533 +:100630006C740A00433E200077686572652064652B +:100640006C74613A20637572736F723D25642C205F +:10065000776865656C3D25640A5365652068747428 +:10066000703A2F2F656E2E77696B697065646961CA +:100670002E6F72672F77696B692F4D6F7573655F8A +:100680006B6579730A000A092D204D6F7573656BD0 +:100690006579202D0A4553432F713A0971756974A4 +:1006A0000A313A0964656C6179282A31306D732901 +:1006B0000A323A09696E74657276616C286D732925 +:1006C0000A333A096D61785F73706565640A343A7C +:1006D0000974696D655F746F5F6D61780A353A09F9 +:1006E000776865656C5F6D61785F73706565640AD6 +:1006F000363A09776865656C5F74696D655F746F1C +:100700005F6D61780A0A703A097072696E742076BA +:10071000616C7565730A643A097365742064656673 +:1007200061756C74730A75703A092B310A646F77BE +:100730006E3A092D310A706775703A092B31300A0B +:100740007067646F776E3A092D31300A0A737065ED +:100750006564203D2064656C7461202A206D617899 +:100760005F7370656564202A202872657065617406 +:10077000202F2074696D655F746F5F6D6178290A41 +:10078000003F004D3E2000433E20004C25640A00FF +:100790000A092D20436F6E736F6C65202D0A455337 +:1007A000432F713A09717569740A6D3A096D6F7555 +:1007B00073656B65790A000A092D204D61676963CD +:1007C000202D0A643A0964656275670A783A0964FB +:1007D00065627567206D61747269780A6B3A0964A5 +:1007E00065627567206B6579626F6172640A6D3A44 +:1007F000096465627567206D6F7573650A763A09DD +:1008000076657273696F6E0A733A097374617475F1 +:10081000730A633A09636F6E736F6C65206D6F6462 +:10082000650A302D343A096C61796572302D3428AF +:100830004631302D4634290A506175733A09626F8A +:100840006F746C6F616465720A6E3A094E4B524F59 +:100850000A003F004E4B524F3A206F66660A004E28 +:100860004B524F3A206F6E0A0074696D65725F7269 +:10087000656164333228293A202530346C580A00E7 +:100880006B6579626F6172645F6E6B726F3A20257F +:10089000580A006B6579626F6172645F69646C65A8 +:1008A0003A2025580A006B6579626F6172645F7047 +:1008B000726F746F636F6C3A2025580A00686F730B +:1008C000745F6B6579626F6172645F6C65647328D5 +:1008D000293A2025580A000A092D2053746174759D +:1008E00073202D0A004743433A20342E392E3220FC +:1008F0004156522D4C4942433A20312E382E307306 +:10090000766E204156525F415243483A20617672DA +:10091000350A004F5054494F4E533A204C554641EA +:10092000204D4F5553454B45592045585452414B46 +:10093000455920434F4E534F4C4520434F4D4D4159 +:100940004E44204E4B524F204B45594D41505F5322 +:10095000454354494F4E20343039360A00425549F8 +:100960004C443A20383962663362622D646972748D +:1009700079202831383A35363A33312041707220A7 +:1009800020342032303137290A005649443A203089 +:10099000784645454428544D4B2E29205049443A29 +:1009A00020307836363043284643363630432041AF +:1009B0006C7420436F6E74726F6C6C657229205674 +:1009C00045523A203078303130300A0044455343A4 +:1009D0003A20544D4B2E206B6579626F6172642012 +:1009E0006669726D7761726520666F722046433664 +:1009F0003630430A000A092D2056657273696F6EFE +:100A0000202D0A000A6D6F7573653A206F66660ABD +:100A1000000A6D6F7573653A206F6E0A000A6B6588 +:100A200079626F6172643A206F66660A000A6B65CC +:100A300079626F6172643A206F6E0A000A6D6174A8 +:100A40007269783A206F66660A000A6D617472698D +:100A5000783A206F6E0A000A64656275673A206F03 +:100A60006E0A000A64656275673A206F66660A005E +:100A70000A0A626F6F746C6F616465722E2E2E208D +:100A800000433E20000011241FBECFEFDAE0DEBF9E +:100A9000CDBF04B603FE27C08091220290912302AD +:100AA000A0912402B09125028730904BA740B04B13 +:100AB000D1F410922202109223021092240210927A +:100AC000250214BE84B7877F84BF0FB6F894A8951B +:100AD00080916000886180936000109260000FBE7A +:100AE000E0E0F8E3099511E0A0E0B1E0EAE2FAE421 +:100AF00002C005900D92A833B107D9F722E0A8E310 +:100B0000B1E001C01D92A232B207E1F70E94D709FD +:100B10000C9413250C940000FF93EF93E09138019F +:100B2000F0913901309709F00995EF91FF910895FF +:100B3000FC018591803011F0EFDFFBCF0895FF2796 +:100B4000E0E230E247FF0CC0419597FF09C0EDE2BB +:100B50006095709580959095611D711D811D911D09 +:100B600027FF02C0219530E350E2AA27660F771FC6 +:100B7000881F991FAA1FA41710F0A41B63955A95EC +:100B8000A9F7AA3008F0A95FA05DAF93F3956115AE +:100B900071058105910541F7ED3211F4EF93F3955D +:100BA000F21718F43F93F395FBCF8F91B5DFFA95C9 +:100BB000E1F70895E991F9918591803021F085322E +:100BC00019F0AADFF9CF089520E0E8945591553245 +:100BD000C1F3503311F4689455915A3348F450538B +:100BE00090F3220F022E220F220F200D250FF4CF9B +:100BF0000EF4219589919991533619F3533729F1C0 +:100C0000533559F1BC0188279927E8945C3621F4C3 +:100C10008991999168945591543639F446EF7EF054 +:100C200077FF0DC08FEF9FEF0AC055374AE039F0CC +:100C3000583540E121F0523642E009F00895FF9323 +:100C4000EF937DDFEF91FF91B7CFFF93EF93FC011F +:100C500081918030B9F360DFFBCFFF93EF9368DFC2 +:100C6000F1CFDF93CF93CDB7DEB72596A3DFCF913A +:100C7000DF91089561FF02C02D9808952D9A08957F +:100C800084B18F6184B93E98469A3F9A8AB1806F49 +:100C90008AB95F9A479884B1806684B985B18066C5 +:100CA00085B9EAE4F1E01192119281E0EA35F807A2 +:100CB000D1F7EAE3F1E01192119281E0EA34F8070A +:100CC000D1F78AE491E090935D0180935C018AE31F +:100CD00091E090935B0180935A010895AF92BF9287 +:100CE000DF92EF92FF920F931F93CF93DF93809148 +:100CF0005A0190915B0120915C0130915D0130932C +:100D00005B0120935A0190935D0180935C0100E0A8 +:100D100010E0C1E0D0E085B1982F907E03FF02C0C3 +:100D200020E101C028E0802F8770892B822B85B9B4 +:100D3000BE01002E02C0660F771F0A94E2F75B0126 +:100D4000A094B09440E050E08BB18F7080689A011D +:100D500094E0220F331F9A95E1F7822B8BB92AE09A +:100D60002A95F1F700C0CA01880F991FA0915A0176 +:100D7000B0915B01A80FB91F2D913C912623372319 +:100D8000232B09F0479AE5E3EA95F1F70000D6B482 +:100D90005F98FAE0FA95F1F700C0A0915C01B0917C +:100DA0005D017D01E80EF91EF701369B05C020812B +:100DB00031812A213B2104C020813181262B372B10 +:100DC0003183208326B5ED2CF12C2D1518F026B596 +:100DD00030E004C026B530E021503F4F2E193F09C6 +:100DE0002630310568F020915A0130915B01280FBF +:100DF000391FF90120813181A80FB91F2D933C9330 +:100E0000FAE1FA95F1F700C047985F9A8BE291E01A +:100E10000197F1F700C000004F5F5F4F4830510568 +:100E200009F092CFA0915C01B0915D01E0915A016F +:100E3000F0915B0150962D913C9151978089918959 +:100E40002817390751F00E94541C60935E0170937B +:100E50005F0180936001909361010F5F1F4F00312C +:100E6000110509F058CF81E0DF91CF911F910F91CB +:100E7000FF90EF90DF90BF90AF90089520915C01BC +:100E800090915D01E22FF92FE80FF11DE80FF11DA0 +:100E900080819181089581FF02C02E9808952E9A35 +:100EA00008958091860108959FB7F8941092650186 +:100EB0009FBF90911902943009F057C09091E900BA +:100EC0009F703091EC00232F217030FD20E8922B91 +:100ED00024E02093E9002091EB0020FF43C0209103 +:100EE000EE0027FF3FC020916201222321F02091D4 +:100EF000E80025FF37C01092620126E03091E8003B +:100F000035FD15C030911902343061F53091EB0098 +:100F100035FD28C0215021F481E08093620122C078 +:100F2000EFE9FFE03197F1F700C00000E7CF8093D1 +:100F3000F1008091E80085FD0AC08091E80080FF03 +:100F4000FCCF8091E8008E778093E80006C08FB7D1 +:100F5000F89421E0209365018FBF9F709093E90082 +:100F600080E008959F709093E9008FEF0895CF93EC +:100F7000DF9300D01F92CDB7DEB79C01809119029C +:100F8000843019F593E099833B832A839093E90099 +:100F90008FEF9091E800815095FD06C095ED9A95F0 +:100FA000F1F700008111F5CF8091E80085FF0DC0B9 +:100FB00040E050E063E070E0CE0101960E94990AA3 +:100FC0008091E8008E778093E8000F900F900F904B +:100FD000DF91CF910895CF93DF9300D01F92CDB7CB +:100FE000DEB720911902243021F522E029839B836A +:100FF0008A8383E08093E9008FEF9091E80081502D +:1010000095FD06C095ED9A95F1F700008111F5CF99 +:101010008091E80085FF0DC040E050E063E070E0A3 +:10102000CE0101960E94990A8091E8008E77809304 +:10103000E8000F900F900F90DF91CF9108952091CD +:1010400019022430F1F422E02093E9002FEF3091CF +:10105000E800215035FD06C035ED3A95F1F7000066 +:101060002111F5CF2091E80025FF0BC040E050E0B2 +:1010700065E070E00E94990A8091E8008E77809385 +:10108000E8000895CF93DF9320911902243009F0EE +:1010900048C0EC0180910A018823E1F080910B01A6 +:1010A0008823C1F085E08093E9008FEF9091E800FC +:1010B000815095FD06C095E19A95F1F700008111E8 +:1010C000F5CF8091E80085FF2CC040E050E060E261 +:1010D00070E017C081E08093E9008FEF9091E80005 +:1010E000815095FD06C095ED9A95F1F700008111AC +:1010F000F5CF8091E80085FF14C040E050E068E043 +:1011000070E0CE010E94990A8091E8008E7780936A +:10111000E80080E2FE01A6E6B1E001900D928A951A +:10112000E1F7DF91CF9108958EE891E00E94980554 +:1011300080911802811109C00E942E0C0E948B0C14 +:101140008091E20084608093E20008958AE891E053 +:101150000E94980510921802089508952091630145 +:101160002F5F822F62E30E94D924992319F02093E4 +:10117000630108951092630180916501882371F1E4 +:1011800080911902843041F58091E9008F7020919F +:10119000EC00922F917020FD90E8892B94E09093C1 +:1011A000E9009091EB0090FF14C09091EE0097FF42 +:1011B00010C09091E80095FF03C01092F100F9CFA4 +:1011C0009091E80090FF05C09091E8009E77909381 +:1011D000E8008F708093E90010926501089542E065 +:1011E00061EC81E00E94A80B42E061EC82E00E9489 +:1011F000A80B42E061EC83E00E94A80B42E261ECA4 +:1012000084E00E94A80B42E261EC85E00C94A80BFC +:1012100080911B02833009F455C030F4813071F0A5 +:10122000823009F48EC008958A3009F47AC08B3078 +:1012300009F460C0893009F09CC020C080911A0276 +:10124000813A09F096C08091E800877F8093E8009A +:1012500080911E0290911F02892B21F460E286E6A4 +:1012600091E003C060E080E090E070E00E94E40A5A +:101270008091E8008B778093E800089580911A02AE +:10128000813209F076C080911E0290911F02009772 +:1012900019F0049709F06DC08091E800877F809372 +:1012A000E8008091E80082FD05C08091190281115B +:1012B000F8CF5FC08091F100809386018091E800B3 +:1012C0008B7753C080911A02813A09F052C0809105 +:1012D0001E0290911F02892B09F04BC08091E800FB +:1012E000877F8093E8008091E80080FFFCCF8091A9 +:1012F0000A0136C080911A028132D9F580911E020E +:1013000090911F02892BA9F58091E800877F809337 +:10131000E8000E94DD0B80911C0280930A010C946E +:10132000091580911A02813221F58091E800877FAA +:101330008093E8000E94DD0B80911D02809387015D +:10134000089580911A02813AA1F48091E800877F84 +:101350008093E8008091E80080FFFCCF80918701B6 +:101360008093F1008091E8008E778093E8000C94E0 +:10137000DD0B08950895089580918601809364019E +:101380001092860180E00E944B070E94AA100C94E4 +:1013900009150C94BC090E94D41B80911702882364 +:1013A00029F00E94FD1B81110C94830A089584B7D3 +:1013B000877F84BF0FB6F894A895809160008861FC +:1013C00080936000109260000FBE90E080E80FB63E +:1013D000F89480936100909361000FBE84E597E0DC +:1013E0000E948C1B82E891E00E9498050E94BA0935 +:1013F0000E94D10F0E942E0C0E948B0C8091E20063 +:1014000084608093E2007894809119028430E1F73F +:1014100081E791E00E9498050E94D30F80E091E05F +:101420000E94100F80E691E00E9498050E94BB097F +:1014300080911902853019F40E94CB09F9CF0E94DE +:10144000D70FF6CF0E94121C809164018093860111 +:1014500008950C94220A292F332723303105C9F02F +:1014600064F42130310581F02230310509F043C0A8 +:101470008DE890E020ED31E042C021323105F1F0FD +:101480002232310541F137C082E190E02DE532E0B2 +:1014900036C099278130910541F08230910541F0A5 +:1014A000892B49F5ECECF1E005C0E0ECF1E002C07D +:1014B000E2E9F1E0849190E09F0121C06530D8F429 +:1014C000E62FF0E0EE0FFF1FED5DFE4F2081318132 +:1014D00089E090E014C0653070F470E0FB01EE0F1D +:1014E000FF1FE75EFE4F20813181FB01EC5EFE4F66 +:1014F000808190E004C080E090E020E030E0FA01DC +:1015000031832083089580E189BD82E189BD09B4DA +:1015100000FEFDCF8091D8008F7D8093D800809110 +:10152000E00082608093E0008091E00081FDFCCFCC +:101530000895CF92DF92EF92FF920F931F93CF9374 +:10154000DF93EC018B016A010E94FC0B811133C017 +:10155000C114D10439F0F60180819181081B190B67 +:10156000C80FD91FE12CF12C0115110519F180913B +:10157000E80085FD16C08091E8008E778093E80032 +:10158000C114D10449F0F60180819181E80EF91E61 +:10159000F182E08285E00FC00E94FC0B882321F3DA +:1015A0000AC089918093F10001501109FFEFEF1AF1 +:1015B000FF0ADACF80E0DF91CF911F910F91FF906A +:1015C000EF90DF90CF90089520912002309121027A +:1015D0002617370748F06115710539F42091E800A6 +:1015E0002E772093E80001C0B90140E06115710534 +:1015F000A9F120911902222309F443C0253009F4EE +:1016000042C02091E80023FD40C02091E80022FD67 +:1016100032C02091E80020FFE9CF4091F3002091F3 +:10162000F20030E0342BFC01CF016115710559F057 +:101630002830310540F481918093F10061507109A7 +:101640002F5F3F4FF1CF41E02830310509F040E0F6 +:101650002091E8002E772093E800C8CF4111C9CF30 +:101660000AC080911902882361F0853061F0809171 +:10167000E80083FD0AC08091E80082FFF2CF80E09D +:10168000089582E0089583E0089581E0089520910F +:101690002002309121022617370748F061157105A5 +:1016A00039F42091E8002E772093E80001C0B901B9 +:1016B000FC0120E06115710591F1809119028823E8 +:1016C00009F440C0853009F43FC08091E80083FDF3 +:1016D0003DC08091E80082FD2FC08091E80080FF2E +:1016E000E9CF2091F3008091F20090E0922B6115F8 +:1016F000710559F08830910540F424912093F10050 +:101700003196615071090196F2CF21E0089709F0F6 +:1017100020E08091E8008E778093E800CBCF211104 +:10172000CCCF0AC080911902882361F0853061F026 +:101730008091E80083FD0AC08091E80082FFF2CF2B +:1017400080E0089582E0089583E0089581E008959F +:10175000982F973058F59093E900981739F07091C9 +:10176000EC002091ED005091F00003C0242F762F63 +:1017700050E021FF19C03091EB003E7F3093EB0029 +:101780003091ED003D7F3093ED003091EB00316002 +:101790003093EB007093EC002093ED005093F00039 +:1017A0002091EE0027FF07C09F5FD3CF8F708093FB +:1017B000E90081E0089580E0089580911A0287FF92 +:1017C00011C08091E80082FD05C08091190281114D +:1017D000F8CF11C08091E8008B770BC0809119027F +:1017E000882349F08091E80080FFF8CF8091E800DD +:1017F0008E778093E80008952091E4003091E50011 +:1018000095E64091EC00842F817040FF22C08091CA +:10181000E80080FD1CC080911902882391F085307A +:1018200091F08091EB0085FD10C04091E400509153 +:10183000E5004217530729F39A01915011F784E00C +:10184000089582E0089583E0089581E0089580E09E +:1018500008954091E80042FFDECF08950E949C0C5D +:101860000E94A40CE0EEF0E0808181608083E8EDCE +:10187000F0E080818F77808319BCA7EDB0E08C9178 +:101880008E7F8C9380818F7E8083109218020895C2 +:101890000F931F93CF93DF930E949C0C0E94A40C84 +:1018A000C8EDD0E088818F778883888180688883BD +:1018B00088818F7D888319BC1092190210921502BD +:1018C000109217021092160200EE10E0F8018081CB +:1018D0008B7F808388818160888342E060E080E044 +:1018E0000E94A80BE1EEF0E080818E7F8083E2EE23 +:1018F000F0E0808181608083808188608083F8014E +:1019000080818E7F8083888180618883DF91CF9101 +:101910001F910F910895E8EDF0E080818F7E808324 +:10192000E7EDF0E080818160808384E082BF81E028 +:10193000809318020C94480CE8EDF0E080818E7FD3 +:1019400080831092E20008951092DA001092E10074 +:1019500008951F920F920FB60F9211242F933F9369 +:101960004F935F936F937F938F939F93AF93BF93A7 +:10197000EF93FF938091E10082FF0BC08091E20022 +:1019800082FF07C08091E1008B7F8093E1000E947D +:10199000AE088091DA0080FF1FC08091D80080FFE0 +:1019A0001BC08091DA008E7F8093DA008091D9008D +:1019B00080FF0DC080E189BD82E189BD09B400FED0 +:1019C000FDCF81E0809319020E94940805C019BCE4 +:1019D000109219020E94A6088091E10080FF19C0B0 +:1019E0008091E20080FF15C08091E2008E7F80939D +:1019F000E2008091E20080618093E2008091D80053 +:101A000080628093D80019BC85E0809319020E94FF +:101A1000C9098091E10084FF30C08091E20084FF19 +:101A20002CC080E189BD82E189BD09B400FEFDCFF3 +:101A30008091D8008F7D8093D8008091E1008F7EC7 +:101A40008093E1008091E2008F7E8093E20080919C +:101A5000E20081608093E20080911502882311F0FA +:101A600084E007C08091E30087FD02C081E001C0EF +:101A700083E0809319020E94290A8091E10083FF8C +:101A800029C08091E20083FF25C08091E100877F1B +:101A90008093E10082E080931902109215028091F8 +:101AA000E1008E7F8093E1008091E2008E7F809341 +:101AB000E2008091E20080618093E20042E060E019 +:101AC00080E00E94A80B8091F00088608093F00075 +:101AD0000E94AD08FF91EF91BF91AF919F918F91BF +:101AE0007F916F915F914F913F912F910F900FBE1A +:101AF0000F901F9018951F920F920FB60F921124FE +:101B00002F933F934F935F936F937F938F939F9305 +:101B1000AF93BF93CF93DF93EF93FF93C091E9000F +:101B2000CF708091EC00D82FD17080FDD0E810925A +:101B3000E9008091F000877F8093F00078940E9404 +:101B4000BF0D1092E9008091F00088608093F00052 +:101B5000CD2BCF70C093E900FF91EF91DF91CF9132 +:101B6000BF91AF919F918F917F916F915F914F91B5 +:101B70003F912F910F900FBE0F901F9018951F93BC +:101B8000CF93DF93CDB7DEB7AA970FB6F894DEBF39 +:101B90000FBECDBFEAE1F2E088E08E0F9091F10038 +:101BA00091938E13FBCF0E9408098091E80083FF78 +:101BB0001FC180911A0290911B02492F50E04A30B8 +:101BC000510508F015C1FA01EA5AFF4F0C94F924A7 +:101BD000803881F0823809F00BC180911E028F702D +:101BE0008093E9008091EB0085FB882780F91092B3 +:101BF000E90006C08091160290911702911182604F +:101C00009091E800977F9093E8008093F100109204 +:101C1000F100C8C0282F2D7F09F0EAC0882319F0F1 +:101C2000823061F0E5C080911C02813009F0E0C093 +:101C3000933009F080E0809317022BC080911C0242 +:101C4000811127C080911E028F7009F4D1C080934A +:101C5000E9002091EB0020FF1CC0933021F480911B +:101C6000EB00806214C09091EB0090619093EB00C8 +:101C700021E030E0A90102C0440F551F8A95E2F728 +:101C80004093EA001092EA008091EB008860809314 +:101C9000EB001092E9008091E800877F86C08111F7 +:101CA000A7C010911C021F778091E3008078812BE0 +:101CB0008093E3008091E800877F8093E8000E9492 +:101CC000DD0B8091E80080FFFCCF8091E30080680D +:101CD0008093E300111102C082E001C083E0809391 +:101CE000190286C08058823008F082C080911C02A0 +:101CF00090911D028C3D53E0950779F583E08A832E +:101D00008AE289834FB7F894DE01139620E03EE023 +:101D100051E2E32FF0E050935700E49120FF03C01D +:101D2000E295EF703F5FEF708E2F90E0EA3010F099 +:101D3000C79601C0C0968D939D932F5F243149F7BC +:101D40004FBF8091E800877F8093E8006AE270E0EF +:101D5000CE0101960E94E40A14C0AE014F5F5F4FAE +:101D600060911E020E942B0ABC01892B09F440C01D +:101D70009091E800977F9093E80089819A810E9472 +:101D8000470B8091E8008B778093E80031C0803862 +:101D900079F58091E800877F8093E80080911502B3 +:101DA0008093F1008091E8008E778093E8000E9494 +:101DB000DD0B1EC081111CC090911C029230C0F43A +:101DC0008091E800877F8093E800909315020E943D +:101DD000DD0B80911502811106C08091E30087FD23 +:101DE00002C081E001C084E0809319020E94EF08E4 +:101DF0008091E80083FF0AC08091E800877F80938C +:101E0000E8008091EB0080628093EB00AA960FB609 +:101E1000F894DEBF0FBECDBFDF91CF911F91089523 +:101E200090938D0180938C010895E0918C01F09145 +:101E30008D01309721F00190F081E02D099480E030 +:101E40000895EF92FF920F931F93CF93DF93E0914A +:101E50008C01F0918D013097B1F18C010280F381FA +:101E6000E02D09958091040282FF2DC080FF04C0FF +:101E700083EB93E00E949805E80110E28DEAE82EDA +:101E800083E0F82E8091040280FF0BC088811F92AE +:101E90008F93FF92EF920E9431060F900F900F9058 +:101EA0000F90115021961111EDCF8091040280FF07 +:101EB0000AC08BEA93E0DF91CF911F910F91FF90C1 +:101EC000EF900C949805DF91CF911F910F91FF90A7 +:101ED000EF900895E0918C01F0918D01309721F001 +:101EE0000480F581E02D09940895CF93DF93EC01F0 +:101EF00080918A0190918B01C817D90709F1D0937D +:101F00008B01C0938A01E0918C01F0918D01309793 +:101F1000B9F00680F781E02DCE0109958091040289 +:101F200082FF0EC080FF0CC0DF93CF938DE993E05A +:101F30009F938F930E9431060F900F900F900F90F8 +:101F4000DF91CF910895CF93DF93EC0180918801C9 +:101F500090918901C817D90709F1D0938901C093DD +:101F60008801E0918C01F0918D013097B9F00084E7 +:101F7000F185E02DCE0109958091040282FF0EC00B +:101F800080FF0CC0DF93CF938DE893E09F938F93F6 +:101F90000E9431060F900F900F900F90DF91CF911C +:101FA00008950C94AB100E943F1C0C9440064F9275 +:101FB0005F927F928F929F92AF92BF92CF92DF9269 +:101FC000EF92FF920F931F93CF93DF9300D000D037 +:101FD0001F92CDB7DEB70E946E069FE8C92E91E032 +:101FE000D92E00E010E0AA24A394B12C702E802FEB +:101FF0000E943E074C01F601419051906F01482626 +:10200000592641145104B1F40F5F1F4F08301105D8 +:1020100069F78FEF89838A831B820E94481C816045 +:10202000782F9D838C8349815A816B818D810E9499 +:10203000E21041C08091040281FD0E94AC1020E0BA +:1020400030E07501022E02C0EE0CFF1C0A94E2F78C +:10205000C70184219521892B41F129837A828E2021 +:102060009F2091E0892809F490E09B830E94481CFE +:102070008160782F9D838C8349815A816B818D810A +:102080000E94E21049815A816B817C818D810E947E +:10209000C21B000F111FF801E157FE4F8081918193 +:1020A000E826F926F182E08206C02F5F3F4F2031FB +:1020B000310539F6A9CF0E94C11B0E94091F10915A +:1020C0008E010E94150F181771F10E94150F809351 +:1020D0008E019091040292FF0EC090FF0CC01F92DF +:1020E0008F938EEB93E09F938F930E9431060F9016 +:1020F0000F900F900F9080918E010F900F900F9086 +:102100000F900F90DF91CF911F910F91FF90EF9063 +:10211000DF90CF90BF90AF909F908F907F905F9017 +:102120004F900C94D21B0F900F900F900F900F9028 +:10213000DF91CF911F910F91FF90EF90DF90CF90A3 +:10214000BF90AF909F908F907F905F904F90089539 +:102150000C944B0708950895EF92FF920F931F93ED +:10216000CF93DF9388ED93E00E949805C0E0D0E024 +:102170008DE2E82E81E0F82E09EC13E08C2F0E940E +:102180003E070E94A71BFF92EF929F938F93DF93CE +:10219000CF931F930F930E94310621968DB79EB760 +:1021A00008960FB6F8949EBF0FBE8DBFC830D105FC +:1021B00029F7DF91CF911F910F91FF90EF90089534 +:1021C00008950895CF93DF93CDB7DEB72B970FB661 +:1021D000F894DEBF0FBECDBF942F4F83252F5887B5 +:1021E00069877A878B874A855B85452B21F02F3F4E +:1021F00009F59F3FF9F4DE01119686E0FD01119289 +:102200008A95E9F785E0FE01379601900D928A954F +:10221000E1F749815A816B817C818D819E810E9489 +:10222000BD172B960FB6F894DEBF0FBECDBFDF9162 +:10223000CF9108954F81588569857A858B850E9455 +:10224000C21BD9CFCF93882309F465C0C82F8CEF68 +:102250008C0F813A20F080E58C0F8E3248F48C2F61 +:102260000E945322811157C08C2F0E94481A0CC023 +:1022700080E28C0F883058F4C77081E001C0880F6D +:10228000CA95EAF70E94F31ACF910C94371B8BE59D +:102290008C0F833078F4C53A29F0C63A31F083E8E0 +:1022A00090E005C081E890E002C082E890E0CF9124 +:1022B0000C94750F88E58C0F853168F5C83A89F064 +:1022C000C93A91F0CA3A99F0CB3AA1F0CC3AA9F0C8 +:1022D000CD3AB1F0CE3AB9F0CF3AC1F080E090E01B +:1022E00017C082EE90E014C089EE90E011C08AEE33 +:1022F00090E00EC085EB90E00BC086EB90E008C04C +:1023000083EB90E005C084EB90E002C087EB90E0A7 +:10231000CF910C94A30FCF910895882349F19CEF9E +:10232000980F913A20F090E5980F9E3218F40E9491 +:102330009B1A0DC090E2980F983058F4877091E086 +:1023400001C0990F8A95EAF7892F0E94F91A0C9417 +:10235000371B9BE5980F933020F480E090E00C94BD +:10236000750F885A853120F480E090E00C94A30F1B +:102370000895882321F00E94F31A0C94371B0895C6 +:10238000882321F00E94F91A0C94371B0895BF92FC +:10239000CF92DF92EF92FF920F931F93CF93DF9331 +:1023A00000D000D000D0CDB7DEB725E0FC01DE01C3 +:1023B000119601900D922A95E1F7FC01408131813F +:1023C000F280258122952F7063817481672B09F437 +:1023D000FEC23F3F19F44F3F09F4F9C26C01498333 +:1023E0003A8389819A812E830E94071A182FB92E69 +:1023F0000E94061A0E941619EB2DE295EF70F0E08C +:10240000E05AFF4F2E810C94F9248B2D807F9B2D59 +:102410009F70092F882311F00295007FFF2049F05B +:10242000002309F481C2802F0E94061B0E94371BE3 +:102430007BC2812F0E948D11002309F4C8C2802F16 +:102440000E940C1B26960FB6F894DEBF0FBECDBFC0 +:10245000DF91CF911F910F91FF90EF90DF90CF9080 +:10246000BF900C94371B8B2D807F9B2D9F70092F65 +:10247000803211F00295007F112319F0113009F11B +:102480002AC0FF20B1F0802F222351F1213041F5E5 +:1024900026960FB6F894DEBF0FBECDBFDF91CF9169 +:1024A0001F910F91FF90EF90DF90CF90BF900C9411 +:1024B000161B222319F0213009F489C20E941F1B28 +:1024C0002DC0FF20F1F0263008F081C20E94F01AE2 +:1024D000802329F023C0FF20F9F0211116C0802F9E +:1024E00026960FB6F894DEBF0FBECDBFDF91CF9119 +:1024F0001F910F91FF90EF90DF90CF90BF900C94C1 +:10250000B911253008F063C209C0F601858180FF4A +:102510000BC28F708583E3CF21111BC2802F82C134 +:102520002B2D26952695237030E02115310521F0BD +:1025300021303105D1F04BC2FF2021F0812F9B2D9E +:10254000937002C080E090E026960FB6F894DEBF4C +:102550000FBECDBFDF91CF911F910F91FF90EF90F4 +:10256000DF90CF90BF900C94750FFF2021F0812F4A +:102570009B2D937002C080E090E026960FB6F894F1 +:10258000DEBF0FBECDBFDF91CF911F910F91FF90A6 +:10259000EF90DF90CF90BF900C94A30F812FFF207E +:1025A00019F00E948F1D02C00E94F71D26960FB6DB +:1025B000F894DEBF0FBECDBFDF91CF911F910F9179 +:1025C000FF90EF90DF90CF90BF900C947C1E8B2DEE +:1025D000837009F07BC0F110FAC1812F8295869536 +:1025E0008770880F880F912F9F70C92ED12CE12CF6 +:1025F000F12C082E04C0CC0CDD1CEE1CFF1C0A9430 +:10260000D2F714FF12C04FE050E060E070E004C069 +:10261000440F551F661F771F8A95D2F7CB01BA0169 +:10262000609570958095909503C060E070E0CB0157 +:102630002B2D269526952370422F50E042305105D0 +:10264000D9F04330510569F16C297D298E299F29E4 +:102650004130510551F126960FB6F894DEBF0FBEFA +:10266000CDBFDF91CF911F910F91FF90EF90DF9041 +:10267000CF90BF900C942B196C297D298E299F290E +:1026800026960FB6F894DEBF0FBECDBFDF91CF9177 +:102690001F910F91FF90EF90DF90CF90BF900C941F +:1026A0003D190E942B19C701B60126960FB6F89462 +:1026B000DEBF0FBECDBFDF91CF911F910F91FF9075 +:1026C000EF90DF90CF90BF900C941919FF2019F074 +:1026D0008B2D817001C08695882309F478C1812FE4 +:1026E000829586958770880F880F912F9F70C92ECD +:1026F000D12CE12CF12C082E04C0CC0CDD1CEE1CDE +:10270000FF1C0A94D2F714FF12C04FE050E060E0C3 +:1027100070E004C0440F551F661F771F8A95D2F7DB +:10272000CB01BA01609570958095909503C060E0EB +:1027300070E0CB012B2D269526952370422F50E07B +:1027400042305105D9F04330510569F16C297D299A +:102750008E299F294130510551F126960FB6F894E4 +:10276000DEBF0FBECDBFDF91CF911F910F91FF90C4 +:10277000EF90DF90CF90BF900C94E2196C297D29E7 +:102780008E299F2926960FB6F894DEBF0FBECDBFC7 +:10279000DF91CF911F910F91FF90EF90DF90CF903D +:1027A000BF900C94F4190E94E219C701B601269655 +:1027B0000FB6F894DEBF0FBECDBFDF91CF911F9152 +:1027C0000F91FF90EF90DF90CF90BF900C94D019B5 +:1027D000103FC9F128F480E4810F803250F09FC08F +:1027E000123F09F461C008F44AC0133F09F471C0F4 +:1027F00096C0012F00718B2D8F71FF2051F00E9428 +:102800006919812F002319F08295807F69CE8F701E +:1028100067CE0E948A19812F002319F08295807F4C +:1028200001C08F7026960FB6F894DEBF0FBECDBFE5 +:10283000DF91CF911F910F91FF90EF90DF90CF909C +:10284000BF900C94C011FF20B1F0253008F0BFC03C +:102850008B2D8F7126960FB6F894DEBF0FBECDBFBD +:10286000DF91CF911F910F91FF90EF90DF90CF906C +:10287000BF900C94AF19263008F0A9C0E9CFFF2013 +:10288000A9F08B2D8F7126960FB6F894DEBF0FBE80 +:10289000CDBFDF91CF911F910F91FF90EF90DF900F +:1028A000CF90BF900C946919FF2059F38B2D8F7135 +:1028B00026960FB6F894DEBF0FBECDBFDF91CF9145 +:1028C0001F910F91FF90EF90DF90CF90BF900C94ED +:1028D0008A19FF2099F08B2D8F7126960FB6F894E8 +:1028E000DEBF0FBECDBFDF91CF911F910F91FF9043 +:1028F000EF90DF90CF90BF900C94541926960FB6AE +:10290000F894DEBF0FBECDBFDF91CF911F910F9125 +:10291000FF90EF90DF90CF90BF900C944F19FF2065 +:10292000A9F0222309F4ADCF812F26960FB6F89493 +:10293000DEBF0FBECDBFDF91CF911F910F91FF90F2 +:10294000EF90DF90CF90BF900C942211222309F4D6 +:10295000ADCF812F26960FB6F894DEBF0FBECDBF48 +:10296000DF91CF911F910F91FF90EF90DF90CF906B +:10297000BF900C948D114B2D4F70612FC6010E949A +:10298000091D26960FB6F894DEBF0FBECDBFDF91AE +:10299000CF911F910F91FF90EF90DF90CF90BF905C +:1029A0000C9461184B2D4F70612FC60126960FB6FF +:1029B000F894DEBF0FBECDBFDF91CF911F910F9175 +:1029C000FF90EF90DF90CF90BF900C940C1D269657 +:1029D0000FB6F894DEBF0FBECDBFDF91CF911F9130 +:1029E0000F91FF90EF90DF90CF90BF9008950E94DD +:1029F000131B0E94E21A0E94371B0E94AE1F0E9406 +:102A00007C1E80E090E00E94750F80E090E00C94C6 +:102A1000A30F0E94031B0C94F7140E94071A292F7E +:102A200022952F7030E02C3031054CF42A303105DE +:102A3000C4F4225031092230310540F023C02C303B +:102A40003105D1F02F303105B9F01CC0853A28F49A +:102A50008430B0F4823028F413C090E2980F98309C +:102A600078F0883E30F4803E58F48450813A50F437 +:102A700007C0803F39F404C093FB882780F908958C +:102A800081E0089580E00895CF93DF9300D000D0D7 +:102A90001F92CDB7DEB70F900F900F900F900F9051 +:102AA000DF91CF910895CF93DF9300D000D000D075 +:102AB000CDB7DEB726960FB6F894DEBF0FBECDBFFA +:102AC000DF91CF9108951F93CF93DF93C0919F0122 +:102AD00016E08091A001C81799F0D0E01C9FF0018A +:102AE0001D9FF00D1124EF55FE4F408151816281F1 +:102AF0007381848195810E9453152196C770E9CF17 +:102B0000DF91CF911F9108954091D1015091D20151 +:102B10006091D3017091D4018091D5019091D6013B +:102B20000C9453158091D60182958F7009F054C092 +:102B30008091D301882309F44FC080919F01A09117 +:102B4000A0016091D1017091D2014091D4015091C6 +:102B5000D501B6E08A1709F43FC090E04115510550 +:102B6000C1F17F3F11F46F3FA1F1B89FF001B99F10 +:102B7000F00D1124EF55FE4F218172132AC02081E0 +:102B8000621327C02281211124C02381348124179C +:102B9000350710F421503109241B350B2C323140FC +:102BA000C0F42091D6012F7020612093D60126E039 +:102BB000289FF001299FF00D1124EA55FE4F8081D6 +:102BC0008F708061808381ED91E00E94C7110C9429 +:102BD000631501968770BECF0895CF92DF92EF9272 +:102BE000FF920F931F93CF93DF93CDB7DEB762971A +:102BF0000FB6F894DEBF0FBECDBF8C0185E0F801A3 +:102C0000DE011D9601900D928A95E1F7D8014C9155 +:102C100011965C91119712966C9112971396CD9024 +:102C2000DC9014973091D1017091D2018091D40140 +:102C30009091D501009709F473C17F3F19F43F3F8C +:102C400009F46EC1E090D301EE2009F4C5C02091D3 +:102C5000D601C816D90650F0F601E81BF90BCF01D2 +:102C6000FF24F3948C329140C8F009C08095909570 +:102C70008C0D9D1DFF24F3948C32914078F0F12C43 +:102C8000207F09F0C6C07C2DD98AC88A89890E9414 +:102C9000441581ED91E00E94C711B1C0822F807F61 +:102CA00009F045C0751313C0341311C061110FC072 +:102CB0002F7020612093D6010E94841581ED91E050 +:102CC0000E94C7118091D601F80185832EC0CD28BE +:102CD00019F15F3F11F44F3FF9F0F62E61111CC05E +:102CE00080919F012091A00136E0821709F45BC01A +:102CF00090E0389FF001399FF00D1124EF55FE4F01 +:102D00007181571306C07081471303C0728171111E +:102D100003C001968770E9CFF62E662309F41DC122 +:102D20008091D60181608093D601F12C16C1751374 +:102D300009C0341307C0611105C08091D601F801A4 +:102D40008583C8C04D875E878D859E856A8B0E946E +:102D50000D156A898823E1F16623D1F12091D6010E +:102D6000822F82958F7090E0029774F08091D1014C +:102D70009091D20198878F831986DB86CA862C872B +:102D8000CE0107960E94C71186E0F801A1EDB1E0DF +:102D900001900D928A95E1F70E9492150E94841588 +:102DA000FF24F394DAC04D875E878D859E850E944F +:102DB000071A292F22952F7030E0223031050CF0B0 +:102DC000BFC09F7009F0B9C0805E883008F4C5C0EC +:102DD000C8010E94C711E4CFC816D90608F453C031 +:102DE000F601E81BF90BCF018C32914008F453C077 +:102DF000F12C7C2DD98AC88A89890E944415E1ED7D +:102E0000F1E086E0DF011D928A95E9F70E948415C2 +:102E1000A4C0751314C0341312C0611110C0809186 +:102E2000D601F8018583C8010E94C71186E0E1ED53 +:102E3000F1E0DF011D928A95E9F7FE2C8EC04D87E7 +:102E40005E878D859E856A8B0E940D156A89882311 +:102E500009F4BECF662309F4BBCF2091D601822F9F +:102E600082958F7090E002970CF48ECF8091D10103 +:102E70009091D2019A8389831B82DD82CC822E833A +:102E8000CE0101967FCF809590958C0D9D1D8C3243 +:102E9000914008F0ADCFF62E662309F499CF751353 +:102EA0002EC034132CC02091D60120FD1FC0822FCC +:102EB00082958F70D9F0D80115962C9315978F3085 +:102EC00049F08F5F982F9295907F822F8F70892B7A +:102ED00015968C93C8010E94C71186E0F801A1EDF8 +:102EE000B1E001900D928A95E1F790CF86E0F8016C +:102EF000A1EDB1E001900D928A95E1F72EC04D87CA +:102F00005E878D859E850E940D1581113DCF809134 +:102F1000D60181608093D601C8010E94C7111DC0EF +:102F2000662309F455CF4D875E878D859E850E9467 +:102F30000D15882309F44CCF27CF811145CF0DC043 +:102F4000243031050CF044CF9F7009F43DCFD801F7 +:102F500015969C91907F09F037CF8F2D62960FB612 +:102F6000F894DEBF0FBECDBFDF91CF911F910F91BF +:102F7000FF90EF90DF90CF9008951F93CF93DF9352 +:102F8000CDB7DEB72C970FB6F894DEBF0FBECDBF1E +:102F90004F83588769877A878B879C87CE010796EE +:102FA0000E94ED15882369F08F8198852A853B85DD +:102FB000232BF1F19F3F09F063C08F3F09F060C000 +:102FC00037C086E0FE013796DE01119601900D9222 +:102FD0008A95E1F76F817885EA85FB85309741F125 +:102FE0007F3F11F46F3F21F12091A00130E0C90132 +:102FF00001968770992740919F0150E084179507AB +:1030000009F447C069837A83FD83EC8396E0929F3D +:10301000D001939FB00D1124AF55BE4FFE013196E4 +:1030200001900D929A95E1F78093A0010E9463159B +:1030300016E080919F019091A0018917C1F1189F1E +:10304000C00111248F559E4F0E94ED15882379F100 +:10305000E0919F011E9FF0011124EF55FE4F40812A +:10306000518162817381848195810E945315809181 +:103070009F0190E001968770992780939F01D9CF97 +:103080004F81588569857A858B859C850E9453156B +:10309000CFCF0E9409151092A00110929F01E1ED7F +:1030A000F1E086E0DF011D928A95E9F7C1CF2C9609 +:1030B0000FB6F894DEBF0FBECDBFDF91CF911F9149 +:1030C0000895DF92EF92FF920F931F93CF93DF93B8 +:1030D000FC01892B09F48AC0E12CF12CDD24D39466 +:1030E000EF0121968491853709F461C058F4843743 +:1030F00008F04EC0843008F06AC08130D1F08230D0 +:1031000071F174C0883709F45DC050F4863709F452 +:1031100055C0873709F06AC08E2D0E94001B54C02D +:103120009CE7980F903708F061C08F770E948D114F +:1031300050C08F010E5F1F4FFE01849190E2980FE7 +:10314000983050F48770FD2D01C0FF0F8A95EAF783 +:103150008F2F0E94061B14C00E94221113C08F01E2 +:103160000E5F1F4FFE01C49180E28C0F883060F427 +:10317000C7708D2D01C0880FCA95EAF70E940C1BFD +:103180000E94371BE80125C08C2F0E948D11FACFB9 +:103190009F012E5F3F4FFE01C491CC2369F08FE960 +:1031A0009FE00197F1F700C00000C150F6CF9F01EA +:1031B0002E5F3F4FFE01F490E9010BC00E94F01A10 +:1031C000E82E07C00E94031B0E94371B02C00E940A +:1031D00022118F2D882341F0EFE9FFE03197F1F7BD +:1031E00000C000008150F6CFFE017ACFDF91CF9171 +:1031F0001F910F91FF90EF90DF9008956093DB0196 +:103200007093DC018093DD019093DE010E94D11B5D +:103210000C94F7146093D7017093D8018093D9016F +:103220009093DA010E943A060C94F71408950C94D6 +:10323000FE180F931F930091DB011091DC01209188 +:10324000DD013091DE01602B712B822B932B1F91BE +:103250000F910C94FE180F931F930091DB011091B6 +:10326000DC012091DD013091DE0160237123822396 +:1032700093231F910F910C94FE180F931F930091AD +:10328000DB011091DC012091DD013091DE0160272E +:103290007127822793271F910F910C94FE1860E0ED +:1032A00070E0CB010C940A190F931F9341E050E09A +:1032B00060E070E08A019B0104C0000F111F221F13 +:1032C000331F8A95D2F7C901B8011F910F910C9451 +:1032D0000A190F931F9341E050E060E070E004C0D2 +:1032E000440F551F661F771F8A95D2F78091D7012B +:1032F0009091D801A091D901B091DA018A019B0186 +:10330000082B192B2A2B3B2BC901B8011F910F91B8 +:103310000C940A190F931F9341E050E060E070E0B5 +:1033200004C0440F551F661F771F8A95D2F740953A +:103330005095609570958091D7019091D801A0919A +:10334000D901B091DA018A019B01082319232A23AC +:103350003B23C901B8011F910F910C940A190F93D7 +:103360001F9341E050E060E070E004C0440F551F3F +:10337000661F771F8A95D2F78091D7019091D80167 +:10338000A091D901B091DA018A019B010827192780 +:103390002A273B27C901B8011F910F910C940A19E4 +:1033A0000F931F930091D7011091D8012091D9015B +:1033B0003091DA01602B712B822B932B1F910F918F +:1033C0000C940A190F931F930091D7011091D80103 +:1033D0002091D9013091DA01602371238223932354 +:1033E0001F910F910C940A190F931F930091D7010D +:1033F0001091D8012091D9013091DA01602771270D +:10340000822793271F910F910C940A190895CF9248 +:10341000DF92EF92FF920F931F93CF93DF938C0174 +:10342000C090DB01D090DC01E090DD01F090DE0186 +:103430004091D7015091D8016091D9017091DA0182 +:10344000C42AD52AE62AF72ACFE1D0E0D701C6015F +:103450000C2E04C0B695A795979587950A94D2F738 +:1034600080FF07C0B8018C2F0E94DF1C81309105BE +:1034700031F4219758F7B80180E00E94DF1CDF91FA +:10348000CF911F910F91FF90EF90DF90CF90089513 +:1034900090910A01992321F090910B01911109C09B +:1034A00020910C0130910D01F90132969FEF40E01F +:1034B00030C0982F9695969596959F31A0F4E091FF +:1034C0000C01F0910D01E90FF11D877021E030E052 +:1034D000A90102C0440F551F8A95E2F7CA019181E4 +:1034E000892B818308959091040290FF23C01F923D +:1034F0008F938CE094E09F938F930E9431060F90FE +:103500000F900F900F9008959F3F39F04F5F4E310D +:1035100041F051915813F8CF0DC05111F7CF942FAE +:10352000F5CF9F3F39F0F901E90FF11D97FDFA95AD +:1035300082830895089590910A01992321F0909132 +:103540000B01911109C020910C0130910D01F9017D +:103550003296205E3F4F30C0982F9695969596955F +:103560009F31A8F4E0910C01F0910D01E90FF11DDC +:10357000877021E030E0A90102C0440F551F8A95F1 +:10358000E2F7CA0180959181892381830895909102 +:10359000040290FF16C01F928F938EEE93E09F93CC +:1035A0008F930E9431060F900F900F900F90089507 +:1035B0003196E217F30729F090819813F9CF108222 +:1035C000F7CF089581E090E0E0910C01F0910D01BA +:1035D000E80FF91F1082019680329105A9F708952E +:1035E00080910302089590910302892B8093030236 +:1035F0000895809590910302892380930302089592 +:10360000809303020895109203020895909102029C +:10361000892B80930202089580959091020289235C +:103620008093020208951092020208958093E101AE +:103630000E94481C9093E0018093DF01089510924E +:10364000E1011092E0011092DF01089580910C01D8 +:1036500090910D01FC0131969C01205E3F4F80E06E +:10366000919191118F5FE217F307D1F70895E091DF +:103670000C01F0910D01809103028083E0910C0117 +:10368000F0910D01908180910202892B80838091BD +:10369000E1018823D9F10E94481C2091DF0130917B +:1036A000E0018217930748F00E94481C2091DF0137 +:1036B0003091E001821B930B0AC00E94481C2091AC +:1036C000DF013091E00120953095820F931F8C32FD +:1036D000914070F08091040280FF08C08AE294E07B +:1036E0009F938F930E9431060F900F900E941F1B93 +:1036F000E0910C01F0910D0190818091E101892B05 +:1037000080830E94261B81110E941F1B80910C0147 +:1037100090910D010C94210F909339018093380101 +:1037200008958295982F9C7C392F36953695282FB1 +:10373000237344E0249FC0011124932F982B292F39 +:103740002A7A2695892F8575880F822B08951F93D5 +:10375000CF93DF931F92CDB7DEB799830E94911B61 +:10376000182F9981892F0E94911B212F30E0322F31 +:103770002227A901482BCA010F90DF91CF911F91F9 +:1037800008950895CF93DF9300D000D01F92CDB756 +:10379000DEB70F900F900F900F900F90DF91CF91A9 +:1037A000089508950C94A81080911902843021F195 +:1037B0001092050220E488E190E00FB6F894A895F5 +:1037C000809360000FBE2093600083B7817F846088 +:1037D00083BF83B7816083BF7894889583B78E7FDA +:1037E00083BF0FB6F894A89580916000886180939C +:1037F0006000109260000FBE0895CF930E94E01009 +:103800000E946E060E94E110C0E08C2F0E943E07CD +:10381000892B29F4CF5FC830C1F780E001C081E077 +:10382000CF9108950E94AA100C9409151F920F922F +:103830000FB60F9211248F939F93AF93BF938091F4 +:103840000502811113C08091060290910702A09198 +:103850000802B09109024196A11DB11D8093060294 +:1038600090930702A0930802B0930902BF91AF9111 +:103870009F918F910F900FBE0F901F90189582E02F +:1038800084BD93E095BD9AEF97BD80936E00089537 +:103890002FB7F8948091060290910702A091080238 +:1038A000B09109022FBF08952FB7F89460910602D6 +:1038B0007091070280910802909109022FBF08952C +:1038C000CF92DF92EF92FF920F931F932FB7F8944E +:1038D000409106025091070260910802709109021E +:1038E0002FBF6A017B01EE24FF248C0120E030E031 +:1038F000C016D106E206F30610F4415051099A01B0 +:10390000281B390BC9011F910F91FF90EF90DF9099 +:10391000CF9008951F920F920FB60F9211248F939C +:103920009F93AF93BF938091060290910702A0915D +:103930000802B09109020196A11DB11D80930602F3 +:1039400090930702A0930802B0930902BF91AF9130 +:103950009F918F910F900FBE0F901F9018950E940E +:103960002E0CF8942FEF87EA91E62150804090408A +:10397000E1F700C0000087E090EBDC0180932202B9 +:1039800090932302A0932402B09325029CE088E147 +:103990000FB6F894A895809360000FBE90936000D6 +:1039A000FFCF20E1929FF0011124E80FF11DE052BA +:1039B000FF4F9491892F8F7092959F700895CF93A8 +:1039C000C82FCB010E94D11C282F30E080E1989FA6 +:1039D000A0011124422B532B4038510519F480E0EB +:1039E00090E015C09770E92FF0E088E0C89FE00DE7 +:1039F000F11D112484E0EE0FFF1F8A95E1F7E20F1D +:103A0000F31FEE0FFF1FE050F84985919491CF917D +:103A1000089580E090E00895089580910C0280FF61 +:103A20000BC06091110185E0689FB001112475956C +:103A30006795759567952BC081FF09C0609111014D +:103A400085E0689FB00111247595679520C082FFBD +:103A500007C06091110185E0689FB001112417C073 +:103A600090910D029923D1F060911001961788F77B +:103A70002091110185E0289F90011124929FA001BF +:103A8000939F500D112470E0CA010E94E524603814 +:103A9000710540F46115710539F002C065E070E010 +:103AA000862F08958FE7089581E0089580910C0294 +:103AB00080FF08C060910F0170E07595679575955E +:103AC000679521C081FF06C060910F0170E0759578 +:103AD000679519C082FF04C060910F0170E010C0AB +:103AE00090910D029923C1F060910E019617A0F7F5 +:103AF00080910F01899FC001112470E00E94E5248C +:103B00006038710528F46115710521F0862F08953C +:103B10008FE7089581E0089561E070E0F4CF803F81 +:103B200021F40E940D1D819504C0813F29F40E945B +:103B30000D1D809310020895823F21F40E940D1DF7 +:103B4000819504C0833F29F40E940D1D80930F02CC +:103B50000895893F19F40E94561D05C08A3F31F42B +:103B60000E94561D81958093110208958B3F21F488 +:103B70000E94561D819504C08C3F29F40E94561D59 +:103B8000809312020895843F21F480910E02816097 +:103B900017C0853F21F480910E02826011C0863FDC +:103BA00021F480910E0284600BC0873F21F4809144 +:103BB0000E02886005C0883F31F480910E0280615A +:103BC00080930E0208958D3F21F480910C02816054 +:103BD0000BC08E3F21F480910C02826005C08F3FA4 +:103BE00029F480910C02846080930C020895803F38 +:103BF00039F48091100287FF6CC01092100269C0E6 +:103C0000813F29F4809110021816BCF362C0909194 +:103C10000F02823F29F497FF5CC010920F0259C037 +:103C2000833F19F41916CCF354C0893F41F48091B5 +:103C3000110218160CF04DC0109211024AC08A3FB2 +:103C400029F48091110287FF44C0F6CF8B3F39F4ED +:103C50008091120287FF3DC0109212023AC08C3F41 +:103C600029F4809112021816BCF333C0843F21F46A +:103C700080910E028E7F17C0853F21F480910E0245 +:103C80008D7F11C0863F21F480910E028B7F0BC087 +:103C9000873F21F480910E02877F05C0883F31F471 +:103CA00080910E028F7E80930E0213C08D3F21F40F +:103CB00080910C028E7F0BC08E3F21F480910C020C +:103CC0008D7F05C08F3F29F480910C028B7F8093FC +:103CD0000C0280910F0281110EC08091100281119F +:103CE0000AC080911102811106C0809112028111D7 +:103CF00002C010920D0208958091040283FF7EC0DD +:103D000083E694E00E94980580910E021F928F93A3 +:103D10008EE594E09F938F930E9431068CE594E0AA +:103D20000E94980580910F02282F082E000C330B5B +:103D30003F938F9389E594E09F938F930E94310680 +:103D400087E594E00E94980580911002282F082EA4 +:103D5000000C330B3F938F9384E594E09F938F93F4 +:103D60000E94310682E594E00E949805809111023C +:103D7000282F082E000C330B3F938F938FE494E091 +:103D80009F938F930E9431068DE494E00E949805E2 +:103D900080911202282F082E000C330B3F938F9333 +:103DA0008AE494E09F938F930E94310687E494E025 +:103DB0000E94980580910D021F928F9384E494E0F5 +:103DC0009F938F930E94310682E494E00E949805AD +:103DD00080910C021F928F938FE394E09F938F93B7 +:103DE0000E9431068CE394E00E9498058DB79EB73F +:103DF0004C960FB6F8949EBF0FBE8DBF8EE092E03A +:103E00000E946A0F0E94481C90930B0280930A0242 +:103E100008951F93CF93DF9380910A0290910B0234 +:103E20000E94601CAC0190910D02992321F0209119 +:103E3000120130E006C0209113018AE0289F900112 +:103E400011244217530708F485C080910F02C091D6 +:103E50001002D091110210911202811107C0C111FC +:103E600075C0D11173C0111171C074C09F3F19F09A +:103E70009F5F90930D02181624F40E940D1D8093ED +:103E80000F0280910F0287FF05C00E940D1D8195D2 +:103E900080930F021C1624F40E940D1D80931002C3 +:103EA0008091100287FF05C00E940D1D81958093AF +:103EB000100260910F02662331F1C0911002CC23F1 +:103EC00011F1062E000C770B880B990B0E94E02352 +:103ED00023E333E343E35FE30E9444240E94A823E7 +:103EE00060930F026C2FCC0F770B880B990B0E94FD +:103EF000E02323E333E343E35FE30E9444240E948F +:103F0000A823609310021D1624F40E94561D80936E +:103F100011028091110287FF05C00E94561D8195F4 +:103F200080931102111624F40E94561D80931202F0 +:103F30008091120287FF05C00E94561D81958093D3 +:103F40001202DF91CF911F910C947C1E9F3F09F0CC +:103F50008FCF97CFDF91CF911F910895EEE0F2E0E0 +:103F600085E0DF011D928A95E9F710920D0210920B +:103F70000C02089586E896E00E9498051F9281E061 +:103F80008F931F9285E08F9388E396E09F938F93A2 +:103F90000E9431060F900F900F900F900F900F908E +:103FA00008958330E9F128F4813061F0823009F11D +:103FB0000895853009F462C008F449C0863009F4D8 +:103FC00074C0089580911301262F30E0280F311D11 +:103FD0002F3F310524F4680F6093130103C08FEF66 +:103FE00080931301809113011F928F9381E795E0D5 +:103FF00072C080911201262F30E0280F311D2F3F13 +:10400000310524F4680F6093120103C08FEF809391 +:104010001201809112011F928F938FE595E05BC092 +:1040200080911101262F30E0280F311D2F3F3105DF +:1040300024F4680F6093110103C08FEF8093110186 +:10404000809111011F928F938CE495E044C0809180 +:104050001001262F30E0280F311D2F3F310524F4A9 +:10406000680F6093100103C08FEF8093100180915F +:1040700010011F928F9387E395E02DC080910F016F +:10408000262F30E0280F311D2F3F310524F4680F13 +:1040900060930F0103C08FEF80930F0180910F0198 +:1040A0001F928F938EE195E016C080910E01262F0E +:1040B00030E0280F311D2F3F310524F4680F609345 +:1040C0000E0103C08FEF80930E0180910E011F92AD +:1040D0008F9383E095E09F938F930E9431060F901A +:1040E0000F900F900F900895833081F128F4813064 +:1040F00059F08230D1F00895853009F449C0B8F103 +:10410000863009F456C0089580911301681720F491 +:10411000861B8093130102C010921301809113013A +:104120001F928F9384EF94E054C08091120168171E +:1041300020F4861B8093120102C01092120180911C +:1041400012011F928F9382EE94E043C0809111017F +:10415000681720F4861B8093110102C01092110190 +:10416000809111011F928F938FEC94E032C0809167 +:104170001001681720F4861B8093100102C0109272 +:104180001001809110011F928F938AEB94E021C05F +:1041900080910F01681720F4861B80930F0102C0E5 +:1041A00010920F0180910F011F928F9381EA94E08A +:1041B00010C080910E01681720F4861B80930E01B9 +:1041C00002C010920E0180910E011F928F9386E81B +:1041D00094E09F938F930E9431060F900F900F9061 +:1041E0000F900895CF93C82F1F928F938BE897E07D +:1041F0009F938F930E94310681E090E0A0E0B0E0B1 +:10420000BC01CD0104C0660F771F881F991FCA9596 +:10421000D2F70E9417190F900F900F900F90CF9127 +:104220000C940915CF938732A8F58E3108F02BC175 +:10423000803109F49FC0F8F4873009F464C0A8F411 +:10424000863009F024C180910402817F8E7F8093A3 +:10425000040280E997E00E94980581E89AE00E94B4 +:10426000980581E0809314024CC08B30F1F18E30C0 +:1042700009F46CC00CC1863109F4B0C020F481315E +:1042800009F4EDC004C1893109F491C08B3109F4FE +:1042900049C0FDC0883349F150F4893209F4F1C0B6 +:1042A000853309F4EEC0873209F0F1C0EAC08334E7 +:1042B00009F4E7C028F48A3308F4E9C08953E4C05C +:1042C000883409F0E4C00E94091580E79AE00E9452 +:1042D00098052FEF83ED90E3215080409040E1F767 +:1042E00000C000000E94AF1C0CC087EB97E05CC0D0 +:1042F00087E59AE00E94980580910402816080938E +:104300000402C1E0C9C080910402C82FC17080FFBF +:10431000EFCF83E69AE00E94980580910402817FA6 +:104320008E7F3DC09091040291FBCC27C0F981E0C3 +:10433000C827892FC0FB81F980930402CC2319F090 +:104340008AE49AE027C08CE39AE02EC090910402A0 +:1043500092FBCC27C0F981E0C827892FC0FB82F9E6 +:1043600080930402CC2319F08DE29AE013C08DE112 +:104370009AE01AC09091040293FBCC27C0F981E027 +:10438000C827892FC0FB83F980930402CC2351F006 +:1043900081E19AE00E9498058091040281608093F7 +:1043A00004027AC084E09AE00E949805AACF85EFC3 +:1043B00099E00E9498058CEC99E00E9498058AE8A3 +:1043C00099E00E9498058DE599E00E94980583E1A7 +:1043D00099E00E94980585EE98E0E6CF87ED98E099 +:1043E0000E9498050E94150F1F928F938DEB98E005 +:1043F0009F938F930E94310680910A011F928F93A1 +:1044000086EA98E09F938F930E94310680918701FE +:104410001F928F9383E998E09F938F930E943106B8 +:1044200080910B011F928F9380E898E09F938F9368 +:104430000E9431060E94541C9F938F937F936F9329 +:1044400089E698E09F938F930E9431068DB79EB7BF +:1044500046960FB6F8949EBF0FBE8DBF52CF0E94F6 +:104460000915C0910B0181E0C827C0930B01CC2333 +:1044700029F08FE598E00E9498050EC084E598E049 +:1044800093CF80E001C08D510E94F2203ACF82E5A7 +:1044900098E00E949805C0E08C2FCF91089580E0AD +:1044A000089580E00895CF93C82F80911402813041 +:1044B00071F020F0823009F44BC042C1E0910C0150 +:1044C000F0910D018081823209F03CC107C0E0917A +:1044D0000C01F0910D018081823261F48C2F0E94D9 +:1044E0004F22811104C08C2F0E9412212FC081E025 +:1044F00090E02CC08C2F0E945122811126C0C43123 +:10450000E1F070F4CB3081F0C031D1F40E94BA1FD9 +:1045100083E897E00E94980582E08093140215C01A +:10452000C93259F0C83361F480E997E00E949805D8 +:1045300087E897E00E94980508C01092140204C111 +:1045400081E897E00E949805FFC081E08170FEC07D +:10455000C43228F5CE3108F0C1C0CB30A1F1D0F47F +:10456000C73009F0D3C08EE18093130182E38093BA +:1045700012018AE08093110184E18093100188E0A8 +:1045800080930F0188E280930E0187E296E00E94FB +:104590009805BFC0C33149F1C431C1F0B7C0CB34B5 +:1045A00009F4A9C028F4C93289F0C83361F0AEC05B +:1045B000C13509F49EC0C23509F499C0CE3409F062 +:1045C000A5C06AE09EC00E94BA1FA3C080911302DA +:1045D000882319F0109213029CC084E396E00E9495 +:1045E000980581E080931402B1C08EE096E00E94AD +:1045F00098058CEF95E00E949805809113011F9219 +:104600008F9389EF95E09F938F930E94310687EFF8 +:1046100095E00E94980585EE95E00E9498058091AE +:1046200012011F928F9382EE95E09F938F930E94C9 +:10463000310680EE95E00E94980581ED95E00E949C +:104640009805809111011F928F938EEC95E09F93B6 +:104650008F930E9431068CEC95E00E9498058BEBBD +:1046600095E00E949805809110011F928F9388EB2E +:1046700095E09F938F930E94310686EB95E00E9410 +:10468000980581EA95E00E94980580910F011F929C +:104690008F938EE995E09F938F930E9431068CE96A +:1046A00095E00E94980585E895E00E949805809124 +:1046B0000E011F928F9382E895E09F938F930E9443 +:1046C000310680E895E00E9498058DB79EB7489620 +:1046D0000FB6F8949EBF0FBE8DBF1BC0CE51EC2FFE +:1046E000F0E0E25DFE4F80818093130212C061E032 +:1046F00003C061E006C06AE0809113020E94D11FEE +:1047000008C0809113020E94742003C085E296E0E5 +:1047100013C080911302882369F01F928F938FE159 +:1047200096E09F938F930E9431060F900F900F9009 +:104730000F9004C08CE196E00E94980581E006C0CD +:104740001092140280E002C080E000CFCF91089563 +:104750000E94AF236894B1110C943E2408950E94E6 +:10476000232488F09F5798F0B92F9927B751B0F0BC +:10477000E1F0660F771F881F991F1AF0BA95C9F7E5 +:1047800014C0B13091F00E943D24B1E008950C9422 +:104790003D24672F782F8827B85F39F0B93FCCF3D5 +:1047A000869577956795B395D9F73EF49095809562 +:1047B000709561957F4F8F4F9F4F0895E89409C082 +:1047C00097FB3EF490958095709561957F4F8F4F44 +:1047D0009F4F9923A9F0F92F96E9BB279395F6955A +:1047E000879577956795B795F111F8CFFAF4BB0FD8 +:1047F00011F460FF1BC06F5F7F4F8F4F9F4F16C03C +:10480000882311F096E911C0772321F09EE8872FC5 +:10481000762F05C0662371F096E8862F70E060E081 +:104820002AF09A95660F771F881FDAF7880F9695FA +:10483000879597F9089557FD9058440F551F59F0E3 +:104840005F3F71F04795880F97FB991F61F09F3F7D +:1048500079F087950895121613061406551FF2CFA6 +:104860004695F1DF08C0161617061806991FF1CFF6 +:1048700086957105610508940895E894BB2766271D +:104880007727CB0197F908950E9457240C94C824E8 +:104890000E94BA2438F00E94C12420F0952311F020 +:1048A0000C94B1240C94B72411240C943E240E943F +:1048B0001B2470F3959FC1F3950F50E0551F629F25 +:1048C000F001729FBB27F00DB11D639FAA27F00D69 +:1048D000B11DAA1F649F6627B00DA11D661F829F90 +:1048E0002227B00DA11D621F739FB00DA11D621F75 +:1048F000839FA00D611D221F749F3327A00D611D92 +:10490000231F849F600D211D822F762F6A2F112473 +:104910009F5750409AF0F1F088234AF0EE0FFF1FA6 +:10492000BB1F661F771F881F91505040A9F79E3FFD +:10493000510580F00C94B1240C943E245F3FE4F3C5 +:10494000983ED4F3869577956795B795F795E79553 +:104950009F5FC1F7FE2B880F911D9695879597F95C +:10496000089597F99F6780E870E060E008959FEFF1 +:1049700080EC089500240A941616170618060906F6 +:10498000089500240A9412161306140605060895C5 +:10499000092E0394000C11F4882352F0BB0F40F44D +:1049A000BF2B11F460FF04C06F5F7F4F8F4F9F4F8D +:1049B0000895991B79E004C0991F961708F0961B7B +:1049C000881F7A95C9F78095089597FB072E16F4EE +:1049D000009407D077FD09D00E94FF2407FC05D082 +:1049E0003EF4909581959F4F0895709561957F4F06 +:1049F0000895EE0FFF1F0590F491E02D0994AA1B76 +:104A0000BB1B51E107C0AA1FBB1FA617B70710F0B9 +:104A1000A61BB70B881F991F5A95A9F780959095EB +:0A4A2000BC01CD010895F894FFCF0A +:104A2A00510742081F08EB07B7070101E2012808EE +:104A3A00140A321E404D3622394D030003CA02A819 +:104A4A00026F02E201FB0114022D024D0200010273 +:084A5A0003040506070809002A +:106800000000000000000000040005000600070072 +:10681000080009000A000B000C000D000E000F001C +:1068200010001100120013001400150016001700CC +:10683000180019001A001B001C001D001E001F007C +:10684000200021002200230024002500260027002C +:10685000280000002A002B002C002D002E002F0005 +:1068600030003100000033003400290036003700CA +:106870003800E00000000000000000000000000000 +:106880000000000000000000000000000000000008 +:1068900000004900000000004C00000000004F0014 +:1068A00050005100520000000000000000000000F5 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F000E000C2A2E200E300E400D2A2E600F1A3BD +:106900000000000000000000040005000600070071 +:10691000080009000A000B000C000D000E000F001B +:1069200010001100120013001400150016001700CB +:10693000180019001A001B001C001D001E001F007B +:10694000200021002200230024002500260027002B +:10695000280000002A002B002C002D002E002F0004 +:1069600030003100000033003400350036003700BD +:106970003800E000000000000000000000000000FF +:106980000000000000000000000000000000000007 +:1069900000004900000000004C00000000004F0013 +:1069A00050005100520000000000000000000000F4 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F000E000E100E200E300E400E500E600F1A4CD +:106A00000000000000000000010001000100010082 +:106A1000010001000100010001000100010001006E +:106A2000010001000100010001000100010001005E +:106A3000010001000100010001000100010001004E +:106A4000010001000100010001000100010001003E +:106A5000010000000100010001000100010001002F +:106A600001000100000001000100350001000100EB +:106A70000100010000000000000000000000000014 +:106A80000000000000000000000000000000000006 +:106A900000000100000000000100000000000100F3 +:106AA00001000100010000000000000000000000E3 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF000010001000100010001000100010001008E +:106B00000000000000000000EA4401000100E2442F +:106B10000100010001000100460001004A004B0095 +:106B20000100010047004800028A0100E944010019 +:106B30000100010001000100010001003A003B00DA +:106B40003C003D003E003F00400041004200430049 +:106B5000010000000100390001004400450001006F +:106B60000100010000000100010035004D004E0051 +:106B70000100010000000000000000000000000013 +:106B80000000000000000000000000000000000005 +:106B900000000100000000000100000000004D00A6 +:106BA0004A004E004B000000000000000000000002 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000100010001000100650001000100F1A396 +:106C00000000000000000000EA4401000100E2442E +:106C10000100010001000100460001004A004B0094 +:106C20000100010047004800028A0100E944010018 +:106C30000100010001000100010001003A003B00D9 +:106C40003C003D003E003F00400041004200430048 +:106C5000010000000100390001004400450001006E +:106C60000100010000000100010029004D004E005C +:106C70000100010000000000000000000000000012 +:106C80000000000000000000000000000000000004 +:106C900000000100000000000100000000004D00A5 +:106CA0004A004E004B000000000000000000000001 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000100010001000100650001000100F1A494 +:00000001FF diff --git a/keyboard/fc660c/fc660c.c b/keyboard/fc660c/fc660c.c index 22649444..35dc6abe 100644 --- a/keyboard/fc660c/fc660c.c +++ b/keyboard/fc660c/fc660c.c @@ -26,9 +26,6 @@ along with this program. If not, see . #include "util.h" #include "timer.h" #include "matrix.h" -#include -#include "suspend.h" -#include "lufa.h" #include "led.h" #include "fc660c.h" @@ -137,3 +134,28 @@ void led_set(uint8_t usb_led) PORTB |= (1<<6); } } + + +#ifdef UNIMAP_ENABLE +#include +#include "unimap.h" + +const uint8_t PROGMEM unimap_trans[MATRIX_ROWS][MATRIX_COLS] = { + { UNIMAP_Q, UNIMAP_W, UNIMAP_E, UNIMAP_TAB, UNIMAP_R, UNIMAP_U, UNIMAP_T, UNIMAP_Y, + UNIMAP_O, UNIMAP_P, UNIMAP_LBRC, UNIMAP_I, UNIMAP_RBRC, UNIMAP_NO, UNIMAP_BSLS, UNIMAP_DEL }, + { UNIMAP_1, UNIMAP_2, UNIMAP_3, UNIMAP_GRV, UNIMAP_4, UNIMAP_7, UNIMAP_5, UNIMAP_6, + UNIMAP_9, UNIMAP_0, UNIMAP_MINS, UNIMAP_8, UNIMAP_EQL, UNIMAP_NO, UNIMAP_BSPC, UNIMAP_INS }, + { UNIMAP_NO, UNIMAP_LGUI, UNIMAP_LALT, UNIMAP_LCTL, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_SPC, + UNIMAP_RALT, UNIMAP_NO, UNIMAP_RCTL, UNIMAP_NO, UNIMAP_RGUI, UNIMAP_DOWN, UNIMAP_LEFT, UNIMAP_RGHT }, + { UNIMAP_NO, UNIMAP_Z, UNIMAP_X, UNIMAP_LSFT, UNIMAP_C, UNIMAP_N, UNIMAP_V, UNIMAP_B, + UNIMAP_COMM, UNIMAP_DOT, UNIMAP_SLSH, UNIMAP_M, UNIMAP_RSFT, UNIMAP_UP, UNIMAP_NO, UNIMAP_NO }, + { UNIMAP_A, UNIMAP_S, UNIMAP_D, UNIMAP_CAPS, UNIMAP_F, UNIMAP_J, UNIMAP_G, UNIMAP_H, + UNIMAP_L, UNIMAP_SCLN, UNIMAP_QUOT, UNIMAP_K, UNIMAP_NO, UNIMAP_NO, UNIMAP_ENT, UNIMAP_NO }, + { UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, + UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO }, + { UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, + UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO }, + { UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, + UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO, UNIMAP_NO } +}; +#endif diff --git a/keyboard/fc660c/fc660c.h b/keyboard/fc660c/fc660c.h index fca0fded..08d57ab9 100644 --- a/keyboard/fc660c/fc660c.h +++ b/keyboard/fc660c/fc660c.h @@ -6,6 +6,8 @@ #include #include #include +#include "timer.h" +#include "unimap.h" // Timer resolution check @@ -14,17 +16,6 @@ #endif -/* - * HHKB Matrix I/O - * - * row: HC4051[A,B,C] selects scan row0-7 - * row-ext: [En0,En1] row extention for JP - * col: LS145[A,B,C,D] selects scan col0-7 and enable(D) - * key: on: 0/off: 1 - * prev: hysteresis control: assert(1) when previous key state is on - */ - - /* * Pin configuration for ATMega32U4 * @@ -67,4 +58,50 @@ static inline void SET_COL(uint8_t COL) PORTB = (PORTB & 0xE0) | ((COL & 0x08) ? 1<<4 : 1<<3) | (COL & 0x07); } + +#ifdef UNIMAP_ENABLE +/* unimap */ +#define KMAP( \ + K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49, \ + K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K31, K4C, \ + K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K28, \ + K79,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K7D,K52, \ + K78,K7B,K7A, K2C, K7E,K7C,K7F,K50,K51,K4F \ +) UNIMAP( \ + NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, \ + NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, \ + K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,NO, K2A, K49,NO, NO, NO, NO, NO, NO, \ + K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K31, K4C,NO, NO, NO, NO, NO, NO, \ + K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, NO, K28, NO, NO, NO, NO, \ + K79,NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, NO, K7D, K52, NO, NO, NO, NO, \ + K78,K7B,K7A,NO, K2C, NO, NO, K7E,K7F,NO, K7C, K50,K51,K4F, NO, NO, NO \ +) +#else +/* actionmap */ +#define KMAP( \ + K13, K10, K11, K12, K14, K16, K17, K15, K1B, K18, K19, K1A, K1C, K1E, K1F, \ + K03, K00, K01, K02, K04, K06, K07, K05, K0B, K08, K09, K0A, K0C, K0E, K0F, \ + K43, K40, K41, K42, K44, K46, K47, K45, K4B, K48, K49, K4A, K4E, \ + K33, K31, K32, K34, K36, K37, K35, K3B, K38, K39, K3A, K3C, K3D, \ + K23, K21, K22, K27, K28, K2A, K2C, K2E, K2D, K2F \ +) { \ + { AC_##K00, AC_##K01, AC_##K02, AC_##K03, AC_##K04, AC_##K05, AC_##K06, AC_##K07, \ + AC_##K08, AC_##K09, AC_##K0A, AC_##K0B, AC_##K0C, AC_NO, AC_##K0E, AC_##K0F }, \ + { AC_##K10, AC_##K11, AC_##K12, AC_##K13, AC_##K14, AC_##K15, AC_##K16, AC_##K17, \ + AC_##K18, AC_##K19, AC_##K1A, AC_##K1B, AC_##K1C, AC_NO, AC_##K1E, AC_##K1F }, \ + { AC_NO, AC_##K21, AC_##K22, AC_##K23, AC_NO, AC_NO, AC_NO, AC_##K27, \ + AC_##K28, AC_NO, AC_##K2A, AC_NO, AC_##K2C, AC_##K2D, AC_##K2E, AC_##K2F }, \ + { AC_NO, AC_##K31, AC_##K32, AC_##K33, AC_##K34, AC_##K35, AC_##K36, AC_##K37, \ + AC_##K38, AC_##K39, AC_##K3A, AC_##K3B, AC_##K3C, AC_##K3D, AC_NO, AC_NO }, \ + { AC_##K40, AC_##K41, AC_##K42, AC_##K43, AC_##K44, AC_##K45, AC_##K46, AC_##K47, \ + AC_##K48, AC_##K49, AC_##K4A, AC_##K4B, AC_NO, AC_NO, AC_##K4E, AC_NO }, \ + { AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \ + AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \ + { AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \ + AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO }, \ + { AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, \ + AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO, AC_NO } \ +} +#endif + #endif diff --git a/keyboard/fc660c/unimap.c b/keyboard/fc660c/unimap.c new file mode 100644 index 00000000..4917b0ee --- /dev/null +++ b/keyboard/fc660c/unimap.c @@ -0,0 +1,66 @@ +#include "action.h" +#include "actionmap.h" +#include "hook.h" +#include "fc660c.h" + + +#define AC_L3 ACTION_LAYER_MOMENTARY(3) +#define AC_L4 ACTION_LAYER_MOMENTARY(4) +#define AC_LS_2 ACTION_LAYER_MODS(2, MOD_LSFT) +#define AC_RS_2 ACTION_LAYER_MODS(2, MOD_RSFT) +#define AC_TGL1 ACTION_LAYER_TOGGLE(1) + +// emulates FC660C default keymap +#ifdef KEYMAP_SECTION_ENABLE +const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] __attribute__ ((section (".keymap.keymaps"))) = { +#else +const action_t actionmaps[][UNIMAP_ROWS][UNIMAP_COLS] PROGMEM = { +#endif + [0] = KMAP( \ + ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \ + LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \ + LS_2,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RS_2,UP, \ + LCTL,LGUI,LALT, SPC, RALT,RCTL,L3, LEFT,DOWN,RGHT \ + ), + [1] = KMAP( \ + GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, \ + TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, \ + LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, \ + LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,UP, \ + LCTL,LGUI,LALT, SPC, RALT,RCTL,L4, LEFT,DOWN,RGHT \ + ), + [2] = KMAP( \ + GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, \ + TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS \ + ), + [3] = KMAP( \ + GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \ + TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \ + TRNS,TRNS,TRNS, TRNS, TRNS,APP, L3, HOME,PGDN,END \ + ), + [4] = KMAP( \ + ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \ + CAPS,TGL1,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS,TRNS,TRNS,TRNS, TRNS, \ + TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,TRNS,TRNS,HOME,PGUP,TRNS,TRNS, TRNS, \ + TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,END, PGDN,TRNS, TRNS,PGUP, \ + TRNS,TRNS,TRNS, TRNS, TRNS,APP, L4, HOME,PGDN,END \ + ), +}; + + +void hook_layer_change(uint32_t layer_state) +{ + // lights LED on Insert when layer 1 is enabled + if (layer_state & (1L<<1)) { + PORTB &= ~(1<<5); + } else { + PORTB |= (1<<5); + } +} + -- 2.46.2