From 20a3229faf12d964403becf210bf7ba280ca2e49 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Sun, 27 Mar 2016 02:22:41 +0000 Subject: [PATCH 1/5] Add manuneo layout --- .../keymaps/german-manuneo/compile_keymap.py | 418 ++++++ .../keymaps/german-manuneo/keymap.c | 1278 +++++++++++++++++ .../keymaps/german-manuneo/keymap.md | 222 +++ 3 files changed, 1918 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py create mode 100644 keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py new file mode 100644 index 0000000000..3bbb9340b2 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py @@ -0,0 +1,418 @@ +# encoding: utf-8 +from __future__ import division +from __future__ import print_function +from __future__ import absolute_import +from __future__ import unicode_literals + +import os +import io +import re +import sys +import json +import unicodedata +import collections + +PY2 = sys.version_info.major == 2 + +if PY2: + chr = unichr + + +ONELINE_COMMENT_RE = re.compile(r"^\s*//.*$", re.MULTILINE) +INLINE_COMMENT_RE = re.compile( + r"([\,\"\[\]\{\}\d])\s+//\s[^\"\]\}\{\[]*$", re.MULTILINE +) +TRAILING_COMMA_RE = re.compile( + r",$\s*([\]\}])", re.MULTILINE +) + +def loads(raw_data): + if isinstance(raw_data, bytes): + raw_data = raw_data.decode('utf-8') + raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data) + raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data) + raw_data = TRAILING_COMMA_RE.sub(r"\1", raw_data) + return json.loads(raw_data) + +with io.open("keymap.md", encoding="utf-8") as fh: + lines = fh.readlines() + +SECTIONS = [ + 'layout_config', + 'layers', +] + +config = { + "includes_basedir": "quantum/", + "keymaps_includes": [ + "keymap_common.h", + ], + 'filler': "-+.':x", + 'separator': "|", + 'default_key_prefix': ["KC_"], + 'unicode_macros': [], + 'macro_ids': ['UMS'], + 'layers': collections.OrderedDict(), + 'layer_lines': collections.OrderedDict(), +} + +section_start_index = -1 +current_section = None +current_layer_name = None +current_layer_lines = [] +config_data = [] + +def end_section(): + global section_start_index + global current_layer_lines + section_start_index = -1 + if current_section == 'layout_config': + config.update(loads("".join( + config_data + ))) + elif current_section == 'layers': + config['layer_lines'][current_layer_name] = current_layer_lines + current_layer_lines = [] + + +for i, line in enumerate(lines): + if line.startswith("# "): + section = line[2:].strip().replace(" ", "_").lower() + if section in SECTIONS: + current_section = section + elif line.startswith("## "): + sub_section = line[3:] + if current_section == 'layers': + current_layer_name = sub_section.strip() + # TODO: parse descriptio + config['layers'][current_layer_name] = "" + elif line.startswith(" "): + if section_start_index < 0: + section_start_index = i + if current_section == 'layout_config': + config_data.append(line) + elif current_section == 'layers': + if not line.strip(): + continue + current_layer_lines.append(line) + elif section_start_index > 0: + end_section() + +end_section() + +KEYDEF_RE = re.compile(r"#define ((?:{})(?:\w+))".format( + "|".join(config['key_prefixes']) +)) +IF0_RE = re.compile(r"^#if 0$.*?#endif", re.MULTILINE | re.DOTALL) +COMMENT_RE = re.compile(r"/\*.*?\*/", re.MULTILINE | re.DOTALL) +ENUM_RE = re.compile(r"(enum\s\w+\s\{.*?\};)", re.MULTILINE | re.DOTALL) +ENUM_KEY_RE = re.compile(r"({}\w+)".format( + "|".join(config['key_prefixes']) +)) + +def parse_keydefs(path): + with io.open(path, encoding="utf-8") as fh: + data = fh.read() + data, _ = COMMENT_RE.subn("", data) + data, _ = IF0_RE.subn("", data) + + for match in KEYDEF_RE.finditer(data): + yield match.groups()[0] + + for enum_match in ENUM_RE.finditer(data): + enum = enum_match.groups()[0] + for key_match in ENUM_KEY_RE.finditer(enum): + yield key_match.groups()[0] + +valid_keycodes = set() +basepath = os.path.abspath(os.path.join( + os.path.dirname(__file__), "..", "..", "..", ".." +)) + +valid_keycodes.update(parse_keydefs(os.path.join( + basepath, "tmk_core", "common", "keycode.h" +))) + +for include_path in config['keymaps_includes']: + path = os.path.join(basepath, config['includes_dir'], include_path) + path = path.replace("/", os.sep) + if os.path.exists(path): + valid_keycodes.update(parse_keydefs(path)) + +LAYER_CHANGE_RE = re.compile(r"(DF|TG|MO)\(\d+\)") +MACRO_RE = re.compile(r"M\(\w+\)") +UNICODE_RE = re.compile(r"U[0-9A-F]{4}") +NON_CODE = re.compile(r"^[^A-Z0-9_]$") + + +def UNICODE_MACRO(config, c): + # TODO: don't use macro for codepoints below 0x2000 + macro_id = "UC_" + ( + unicodedata.name(c) + .replace(" ", "_") + .replace("-", "_") + .replace("SUPERSCRIPT_", "SUP_") + .replace("SUBSCRIPT_", "SUB_") + .replace("GREEK_SMALL_LETTER", "GR_LC") + .replace("GREEK_CAPITAL_LETTER", "GR_UC") + .replace("VULGAR_FRACTION_", "FR_") + ) + if macro_id not in config['macro_ids']: + config['macro_ids'].append(macro_id) + code = "{:04X}".format(ord(c)) + if (macro_id, code) not in config['unicode_macros']: + config['unicode_macros'].append((macro_id, code)) + return "M({})".format(macro_id) + + +def MACRO(config, code): + macro_id = code[2:-1] + if macro_id not in config['macro_ids']: + config['macro_ids'].append(macro_id) + return code + +# TODO: presumably we can have a macro or function which takes +# the hex code and produces much smaller code. + +WIN_UNICODE_MACRO_TEMPLATE = """ +case {0}: + return MACRODOWN( + D(LALT), T(KP_PLUS), {1}, U(LALT), END + ); +""" + +LINUX_UNICODE_MACRO_TEMPLATE = """ +case {0}: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), {1}, T(KP_ENTER), END + ); +""" + +def macro_cases(config, mode): + if mode == 'win': + template = WIN_UNICODE_MACRO_TEMPLATE + elif mode == 'linux': + template = LINUX_UNICODE_MACRO_TEMPLATE + else: + raise ValueError("Invalid mode: ", mode) + template = template.strip() + + for macro_id, unimacro_chars in config['unicode_macros']: + unimacro_keys = ", ".join( + "T({})".format( + "KP_" + char if char.isdigit() else char + ) for char in unimacro_chars + ) + yield template.format(macro_id, unimacro_keys) + + +MACROCODE = """ +#define UC_MODE_WIN 0 +#define UC_MODE_LINUX 1 + +static uint16_t unicode_mode = UC_MODE_WIN; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ + if (!record->event.pressed) {{ + return MACRO_NONE; + }} + // MACRODOWN only works in this function + switch(id) {{ + case UMS: + unicode_mode = (unicode_mode + 1) % 2; + break; + {macro_cases} + default: + break; + }} + if (unicode_mode == UC_MODE_WIN) {{ + switch(id) {{ + {win_macro_cases} + default: + break; + }} + }} else if (unicode_mode == UC_MODE_LINUX) {{ + switch(id) {{ + {linux_macro_cases} + default: + break; + }} + }} + return MACRO_NONE; +}}; +""" + + +def iter_keycodes(layer_lines, config): + filler_re = re.compile("[" + + config['filler'] + " " + + "]") + + all_codes = [] + for line in layer_lines: + line, _ = filler_re.subn("", line.strip()) + if not line: + continue + codes = line.split(config['separator']) + all_codes.extend(codes[1:-1]) + + key_groups = {} + for group_index, key_indexes in enumerate(config['keymap_indexes']): + for key_index in key_indexes: + key_groups[key_index] = group_index + + keymap_indexes = sum(config['keymap_indexes'], []) + assert len(all_codes) == len(keymap_indexes) + code_index_pairs = zip(all_codes, keymap_indexes) + prev_index = None + for i, (code, key_index) in enumerate(code_index_pairs): + code = code.strip() + layer_match = LAYER_CHANGE_RE.match(code) + unicode_match = UNICODE_RE.match(code) + noncode_match = NON_CODE.match(code) + macro_match = MACRO_RE.match(code) + + ws = "\n" if key_groups[key_index] != prev_index else "" + prev_index = key_groups[key_index] + + try: + if not code: + code = 'KC_TRNS' + elif layer_match: + pass + elif macro_match: + code = MACRO(config, code) + elif unicode_match: + hex_code = code[1:] + code = UNICODE_MACRO(config, chr(int(hex_code, 16))) + elif noncode_match: + code = UNICODE_MACRO(config, code) + elif "_" in code: + assert code in valid_keycodes, "unknown code '{}'".format(code) + else: + for prefix in config['key_prefixes']: + if prefix + code in valid_keycodes: + code = prefix + code + break + assert code in valid_keycodes, "unknown code '{}'".format(code) + yield code, key_index, ws + except AssertionError: + print("Error processing code", repr(code).encode("utf-8")) + raise + +USERCODE = """ +// Runs just one time when the keyboard initializes. +void * matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void * matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + case L1: + ergodox_right_led_1_on(); + break; + case L2: + ergodox_right_led_2_on(); + break; + case L3: + ergodox_right_led_3_on(); + break; + case L4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + case L5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + // case L6: + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + // case L7: + // ergodox_right_led_1_on(); + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + default: + ergodox_board_led_off(); + break; + } +}; +""" + +def parse_keymaps(config): + keymaps = {} + layer_line_items = config['layer_lines'].items() + for i, (layer_name, layer_lines) in enumerate(layer_line_items): + print("parseing layer", layer_name) + keymap = {} + for code, key_index, ws in iter_keycodes(layer_lines, config): + keymap[key_index] = (code, ws) + keymaps[layer_name] = [v for k, v in sorted(keymap.items())] + return keymaps + + +def iter_keymap_lines(config, keymaps): + for include_path in config['keymaps_includes']: + yield '#include "{}"\n'.format(include_path) + + yield "\n" + + layer_items = config['layers'].items() + for i, (layer_name, description) in enumerate(layer_items): + yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) + + for i, macro_id in enumerate(config['macro_ids']): + yield "#define {} {}\n".format(macro_id, i) + + yield "\n" + + yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" + + layer_line_items = config['layer_lines'].items() + last_index = config['keymap_indexes'][-1] + for i, (layer_name, layer_lines) in enumerate(layer_line_items): + keymap = keymaps[layer_name] + yield "/*\n" + for line in layer_lines: + yield " *{}".format(line) + yield "*/\n" + + yield "[L{0}] = KEYMAP(\n".format(i) + + for key_index, (code, ws) in enumerate(keymap): + yield "\t{}".format(code) + if key_index < len(keymap) - 1: + yield "," + yield ws + yield "),\n" + + yield "};\n\n" + + yield "const uint16_t PROGMEM fn_actions[] = {\n" + yield "};\n" + + yield MACROCODE.format( + macro_cases="", + win_macro_cases="\n".join(macro_cases(config, mode='win')), + linux_macro_cases="\n".join(macro_cases(config, mode='linux')), + ) + + yield USERCODE + + +with io.open("keymap.c", mode="w", encoding="utf-8") as fh: + for data in iter_keymap_lines(config, parse_keymaps(config)): + fh.write(data) + + +# print("\n".join(sorted(valid_keycodes))) +# print(json.dumps(config, indent=4)) diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c new file mode 100644 index 0000000000..400ad6fcf8 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c @@ -0,0 +1,1278 @@ +#include "ergodox_ez.h" +#include "action_layer.h" +#include "keymap_common.h" +#include "keymap_extras/keymap_german.h" + +#define L0 0 // Layer 0 +#define L1 1 // Layer 1 +#define L2 2 // Layer 2 +#define L3 3 // Layer 3 +#define L4 4 // Layer 4 +#define L5 5 // Layer 5 +#define L6 6 // Layer 6 +#define L7 7 // Layer 7 +#define L8 8 // Layer 8 +#define UMS 0 +#define UC_UPWARDS_ARROW 1 +#define UC_LEFTWARDS_ARROW 2 +#define UC_DOWNWARDS_ARROW 3 +#define UC_RIGHTWARDS_ARROW 4 +#define UC_SUP_ONE 5 +#define UC_SUP_TWO 6 +#define UC_SUP_THREE 7 +#define UC_SUP_FOUR 8 +#define UC_SUP_FIVE 9 +#define UC_FOR_ALL 10 +#define UC_SUP_SIX 11 +#define UC_SUP_SEVEN 12 +#define UC_SUP_EIGHT 13 +#define UC_SUP_NINE 14 +#define UC_SUP_ZERO 15 +#define UC_MULTIPLICATION_SIGN 16 +#define UC_FR_ONE_HALF 17 +#define UC_DIVISION_SIGN 18 +#define UC_FR_ONE_QUARTER 19 +#define UC_FR_ONE_FIFTH 20 +#define UC_FR_ONE_SIXTH 21 +#define UC_FR_ONE_EIGHTH 22 +#define UC_PLUS_MINUS_SIGN 23 +#define UC_EMPTY_SET 24 +#define UC_INFINITY 25 +#define UC_SUP_LATIN_SMALL_LETTER_N 26 +#define UC_THERE_EXISTS 27 +#define UC_ELEMENT_OF 28 +#define UC_FR_ONE_THIRD 29 +#define UC_NOT_EQUAL_TO 30 +#define UC_FR_TWO_THIRDS 31 +#define UC_FR_THREE_QUARTERS 32 +#define UC_ASYMPTOTICALLY_EQUAL_TO 33 +#define UC_THERE_DOES_NOT_EXIST 34 +#define UC_NOT_AN_ELEMENT_OF 35 +#define UC_SUB_ONE 36 +#define UC_SUB_TWO 37 +#define UC_SUB_THREE 38 +#define UC_SUB_FOUR 39 +#define UC_SUB_FIVE 40 +#define UC_SUB_SIX 41 +#define UC_SUB_SEVEN 42 +#define UC_SUB_EIGHT 43 +#define UC_SUB_NINE 44 +#define UC_SUB_ZERO 45 +#define UC_GR_LC_CHI 46 +#define UC_GR_LC_PI 47 +#define UC_GR_LC_PHI 48 +#define UC_GR_LC_OMEGA 49 +#define UC_GR_LC_GAMMA 50 +#define UC_GR_LC_ETA 51 +#define UC_GR_LC_XI 52 +#define UC_GR_LC_KAPPA 53 +#define UC_GR_LC_LAMDA 54 +#define UC_GR_LC_ZETA 55 +#define UC_GR_LC_UPSILON 56 +#define UC_GR_LC_IOTA 57 +#define UC_GR_LC_ALPHA 58 +#define UC_GR_LC_EPSILON 59 +#define UC_GR_LC_OMICRON 60 +#define UC_GR_LC_SIGMA 61 +#define UC_GR_LC_NU 62 +#define UC_GR_LC_RHO 63 +#define UC_GR_LC_TAU 64 +#define UC_GR_LC_DELTA 65 +#define UC_GR_LC_FINAL_SIGMA 66 +#define UC_GR_LC_THETA 67 +#define UC_GR_LC_BETA 68 +#define UC_GR_LC_MU 69 +#define UC_GR_LC_PSI 70 +#define UC_GR_UC_CHI 71 +#define UC_GR_UC_PI 72 +#define UC_GR_UC_PHI 73 +#define UC_GR_UC_OMEGA 74 +#define UC_GR_UC_GAMMA 75 +#define UC_GR_UC_ETA 76 +#define UC_GR_UC_XI 77 +#define UC_GR_UC_KAPPA 78 +#define UC_GR_UC_LAMDA 79 +#define UC_GR_UC_ZETA 80 +#define UC_GR_UC_UPSILON 81 +#define UC_GR_UC_IOTA 82 +#define UC_GR_UC_ALPHA 83 +#define UC_GR_UC_EPSILON 84 +#define UC_GR_UC_OMICRON 85 +#define UC_GR_UC_SIGMA 86 +#define UC_GR_UC_NU 87 +#define UC_GR_UC_RHO 88 +#define UC_GR_UC_TAU 89 +#define UC_GR_UC_DELTA 90 +#define UC_GR_UC_THETA 91 +#define UC_GR_UC_BETA 92 +#define UC_GR_UC_MU 93 +#define UC_GR_UC_PSI 94 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * .-------------------------------------. .-------------------------------------. + * |MO(5)| 1 | 2 | 3 | 4 | 5 | ACUT | ! GRV | 6 | 7 | 8 | 9 | 0 |CIRC | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * |MO(4)| X | P | F | W | G | HOME | !TG(2) | H | J | K | L | Q | Z | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * |MO(1)| U | I | A | E | O |------! !------! S | N | R | T | D | SS | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * |MO(3)| UE | OE | AE | C | V | END | ! TAB | B | M |COMM| DOT| UP | Y | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| + * '------------------------'.-------------. .-------------.'------------------------' + * | INS |TG(2) | !M(UMS)| DELT | + * .------+------+------! !------+------+------. + * ! ! | APP | ! PGUP | ! ! + * ! ! !------! !------! ! ! + * | BSPC | LSFT | ESC | ! PGDN |ENTER |SPACE | + * '--------------------' '--------------------' +*/ +[L0] = KEYMAP( + MO(5), + DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT, MO(4), + DE_X, DE_P, DE_F, DE_W, DE_G, KC_HOME, MO(1), + DE_U, DE_I, DE_A, DE_E, DE_O, MO(3), + DE_UE, DE_OE, DE_AE, DE_C, DE_V, KC_END, KC_TRNS, + KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL, KC_INS, + TG(2), KC_APP, + KC_BSPC, + KC_LSFT, KC_ESC, DE_GRV, + DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC, TG(2), + DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z, DE_S, + DE_N, DE_R, DE_T, DE_D, DE_SS, KC_TAB, + DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y, KC_LALT, + KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, M(UMS), + KC_DELT, KC_PGUP, + KC_PGDN, + KC_ENTER, KC_SPACE), +/* + * .-------------------------------------. .-------------------------------------. + * | |EXLM|DQOT|PARA| | | | ! | | | | |RING| | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | |ASTR|PIPE|SLSH|LCBR|RCBR| | ! |HASH|LESS|MORE| |DQOT| | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | |UNDS|MINS|AMPR|LBRC|RBRC|------! !------!DLR |LPRN|RPRN|TILD|QUOT|QST | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | |PLUS| EQL| | | | ! |BSLS|PERC|SCLN|COLN| ↑ | | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! | | ← | ↓ | → | + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L1] = KEYMAP( + KC_TRNS, + DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR, DE_RCBR, KC_TRNS, KC_TRNS, + DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC, DE_RBRC, KC_TRNS, + KC_TRNS, DE_PLUS, DE_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_RING, KC_TRNS, KC_TRNS, + DE_HASH, DE_LESS, DE_MORE, KC_TRNS, DE_DQOT, KC_TRNS, DE_DLR, + DE_LPRN, DE_RPRN, DE_TILD, DE_QUOT, DE_QST, KC_TRNS, + DE_BSLS, DE_PERC, DE_SCLN, DE_COLN, M(UC_UPWARDS_ARROW), KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW), KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +/* + * .-------------------------------------. .-------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F11 | ! F12 | F6 | F7 | F8 | F9 |F10 |PEQL | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | | | | | | | | ! | | P7 | P8 | P9 |PAST|PSLS | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | |------! !------! | P4 | P5 | P6 |PMNS|PMNS | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | | | ! NLCK | | P1 | P2 | P3 |PPLS|PPLS | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L2] = KEYMAP( + KC_TRNS, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_F12, + KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PEQL, KC_TRNS, + KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, KC_TRNS, + KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PMNS, KC_NLCK, + KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PPLS, KC_P0, + KC_PCMM, KC_PDOT, KC_PENT, KC_PENT, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +/* + * .-------------------------------------. .-------------------------------------. + * | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | ! | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | | × | ½ | ÷ | ¼ | ⅕ | | ! | ⅙ | | ⅛ | | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | ± | AT |EURO| ∅ |------! !------! ∞ | ⁿ | ∃ | ∈ | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | ! |EXLM| | ∄ | ∉ | | | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L3] = KEYMAP( + KC_TRNS, + M(UC_SUP_ONE), M(UC_SUP_TWO), M(UC_SUP_THREE), M(UC_SUP_FOUR), M(UC_SUP_FIVE), M(UC_FOR_ALL), KC_TRNS, + M(UC_MULTIPLICATION_SIGN), M(UC_FR_ONE_HALF), M(UC_DIVISION_SIGN), M(UC_FR_ONE_QUARTER), M(UC_FR_ONE_FIFTH), KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_PLUS_MINUS_SIGN), DE_AT, DE_EURO, M(UC_EMPTY_SET), KC_TRNS, + M(UC_FR_ONE_THIRD), M(UC_NOT_EQUAL_TO), M(UC_FR_TWO_THIRDS), M(UC_FR_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO), KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + M(UC_SUP_SIX), M(UC_SUP_SEVEN), M(UC_SUP_EIGHT), M(UC_SUP_NINE), M(UC_SUP_ZERO), KC_TRNS, KC_TRNS, + M(UC_FR_ONE_SIXTH), KC_TRNS, M(UC_FR_ONE_EIGHTH), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_INFINITY), + M(UC_SUP_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS), M(UC_ELEMENT_OF), KC_TRNS, KC_TRNS, KC_TRNS, + DE_EXLM, KC_TRNS, M(UC_THERE_DOES_NOT_EXIST), M(UC_NOT_AN_ELEMENT_OF), KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +/* + * .-------------------------------------. .-------------------------------------. + * | | ₁ | ₂ | ₃ | ₄ | ₅ | | ! | ₆ | ₇ | ₈ | ₉ | ₀ | | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | | χ | π | φ | ω | γ | | ! | η | ξ | κ | λ | | ζ | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | υ | ι | α | ε | ο |------! !------! σ | ν | ρ | τ | δ | ς | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | θ | | | | | ! | β | μ | | | | ψ | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L4] = KEYMAP( + KC_TRNS, + M(UC_SUB_ONE), M(UC_SUB_TWO), M(UC_SUB_THREE), M(UC_SUB_FOUR), M(UC_SUB_FIVE), KC_TRNS, KC_TRNS, + M(UC_GR_LC_CHI), M(UC_GR_LC_PI), M(UC_GR_LC_PHI), M(UC_GR_LC_OMEGA), M(UC_GR_LC_GAMMA), KC_TRNS, KC_TRNS, + M(UC_GR_LC_UPSILON), M(UC_GR_LC_IOTA), M(UC_GR_LC_ALPHA), M(UC_GR_LC_EPSILON), M(UC_GR_LC_OMICRON), KC_TRNS, + KC_TRNS, M(UC_GR_LC_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + M(UC_SUB_SIX), M(UC_SUB_SEVEN), M(UC_SUB_EIGHT), M(UC_SUB_NINE), M(UC_SUB_ZERO), KC_TRNS, KC_TRNS, + M(UC_GR_LC_ETA), M(UC_GR_LC_XI), M(UC_GR_LC_KAPPA), M(UC_GR_LC_LAMDA), KC_TRNS, M(UC_GR_LC_ZETA), M(UC_GR_LC_SIGMA), + M(UC_GR_LC_NU), M(UC_GR_LC_RHO), M(UC_GR_LC_TAU), M(UC_GR_LC_DELTA), M(UC_GR_LC_FINAL_SIGMA), KC_TRNS, + M(UC_GR_LC_BETA), M(UC_GR_LC_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GR_LC_PSI), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +/* + * .-------------------------------------. .-------------------------------------. + * | | | | | | | | ! | | | | | | | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | | Χ | Π | Φ | Ω | Γ | | ! | Η | Ξ | Κ | Λ | | Ζ | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | Υ | Ι | Α | Ε | Ο |------! !------! Σ | Ν | Ρ | Τ | Δ | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | Θ | | | | | ! | Β | Μ | | | | Ψ | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L5] = KEYMAP( + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + M(UC_GR_UC_CHI), M(UC_GR_UC_PI), M(UC_GR_UC_PHI), M(UC_GR_UC_OMEGA), M(UC_GR_UC_GAMMA), KC_TRNS, KC_TRNS, + M(UC_GR_UC_UPSILON), M(UC_GR_UC_IOTA), M(UC_GR_UC_ALPHA), M(UC_GR_UC_EPSILON), M(UC_GR_UC_OMICRON), KC_TRNS, + KC_TRNS, M(UC_GR_UC_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + M(UC_GR_UC_ETA), M(UC_GR_UC_XI), M(UC_GR_UC_KAPPA), M(UC_GR_UC_LAMDA), KC_TRNS, M(UC_GR_UC_ZETA), M(UC_GR_UC_SIGMA), + M(UC_GR_UC_NU), M(UC_GR_UC_RHO), M(UC_GR_UC_TAU), M(UC_GR_UC_DELTA), KC_TRNS, KC_TRNS, + M(UC_GR_UC_BETA), M(UC_GR_UC_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GR_UC_PSI), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +/* + * .-------------------------------------. .-------------------------------------. + * | | | | | | | | ! | | | | | | | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | | | | | | | | ! | | | | | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | |------! !------! | | | | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | | | ! | | | | | | | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L6] = KEYMAP( + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +/* + * .-------------------------------------. .-------------------------------------. + * | | | | | | | | ! | | | | | | | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | | | | | | | | ! | | | | | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | |------! !------! | | | | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | | | ! | | | | | | | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L7] = KEYMAP( + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +/* + * .-------------------------------------. .-------------------------------------. + * | | | | | | | | ! | | | | | | | + * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + * | | | | | | | | ! | | | | | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | |------! !------! | | | | | | + * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + * | | | | | | | | ! | | | | | | | + * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------'.-------------. .-------------.'------------------------' + * | | | ! | | + * .------+------+------! !------+------+------. + * ! ! | | ! | ! ! + * ! ! !------! !------! ! ! + * | | | | ! | | | + * '--------------------' '--------------------' +*/ +[L8] = KEYMAP( + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS), +}; + +const uint16_t PROGMEM fn_actions[] = { +}; + +#define UC_MODE_WIN 0 +#define UC_MODE_LINUX 1 + +static uint16_t unicode_mode = UC_MODE_WIN; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + if (!record->event.pressed) { + return MACRO_NONE; + } + // MACRODOWN only works in this function + switch(id) { + case UMS: + unicode_mode = (unicode_mode + 1) % 2; + break; + + default: + break; + } + if (unicode_mode == UC_MODE_WIN) { + switch(id) { + case UC_UPWARDS_ARROW: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_1), U(LALT), END + ); +case UC_LEFTWARDS_ARROW: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_0), U(LALT), END + ); +case UC_DOWNWARDS_ARROW: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_3), U(LALT), END + ); +case UC_RIGHTWARDS_ARROW: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_2), U(LALT), END + ); +case UC_SUP_ONE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_9), U(LALT), END + ); +case UC_SUP_TWO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_2), U(LALT), END + ); +case UC_SUP_THREE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_3), U(LALT), END + ); +case UC_SUP_FOUR: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_4), U(LALT), END + ); +case UC_SUP_FIVE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_5), U(LALT), END + ); +case UC_FOR_ALL: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_0), U(LALT), END + ); +case UC_SUP_SIX: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_6), U(LALT), END + ); +case UC_SUP_SEVEN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_7), U(LALT), END + ); +case UC_SUP_EIGHT: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_8), U(LALT), END + ); +case UC_SUP_NINE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_9), U(LALT), END + ); +case UC_SUP_ZERO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_0), U(LALT), END + ); +case UC_MULTIPLICATION_SIGN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(D), T(KP_7), U(LALT), END + ); +case UC_FR_ONE_HALF: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(D), U(LALT), END + ); +case UC_DIVISION_SIGN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(F), T(KP_7), U(LALT), END + ); +case UC_FR_ONE_QUARTER: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(C), U(LALT), END + ); +case UC_FR_ONE_FIFTH: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_5), U(LALT), END + ); +case UC_FR_ONE_SIXTH: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_9), U(LALT), END + ); +case UC_FR_ONE_EIGHTH: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(B), U(LALT), END + ); +case UC_PLUS_MINUS_SIGN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_1), U(LALT), END + ); +case UC_EMPTY_SET: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_5), U(LALT), END + ); +case UC_INFINITY: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_1), T(E), U(LALT), END + ); +case UC_SUP_LATIN_SMALL_LETTER_N: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(F), U(LALT), END + ); +case UC_THERE_EXISTS: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_3), U(LALT), END + ); +case UC_ELEMENT_OF: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_8), U(LALT), END + ); +case UC_FR_ONE_THIRD: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_3), U(LALT), END + ); +case UC_NOT_EQUAL_TO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_6), T(KP_0), U(LALT), END + ); +case UC_FR_TWO_THIRDS: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_4), U(LALT), END + ); +case UC_FR_THREE_QUARTERS: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(E), U(LALT), END + ); +case UC_ASYMPTOTICALLY_EQUAL_TO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_4), T(KP_3), U(LALT), END + ); +case UC_THERE_DOES_NOT_EXIST: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_4), U(LALT), END + ); +case UC_NOT_AN_ELEMENT_OF: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_9), U(LALT), END + ); +case UC_SUB_ONE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_1), U(LALT), END + ); +case UC_SUB_TWO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_2), U(LALT), END + ); +case UC_SUB_THREE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_3), U(LALT), END + ); +case UC_SUB_FOUR: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_4), U(LALT), END + ); +case UC_SUB_FIVE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_5), U(LALT), END + ); +case UC_SUB_SIX: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_6), U(LALT), END + ); +case UC_SUB_SEVEN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_7), U(LALT), END + ); +case UC_SUB_EIGHT: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_8), U(LALT), END + ); +case UC_SUB_NINE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_9), U(LALT), END + ); +case UC_SUB_ZERO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_0), U(LALT), END + ); +case UC_GR_LC_CHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_7), U(LALT), END + ); +case UC_GR_LC_PI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_0), U(LALT), END + ); +case UC_GR_LC_PHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_6), U(LALT), END + ); +case UC_GR_LC_OMEGA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_9), U(LALT), END + ); +case UC_GR_LC_GAMMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_3), U(LALT), END + ); +case UC_GR_LC_ETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_7), U(LALT), END + ); +case UC_GR_LC_XI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(E), U(LALT), END + ); +case UC_GR_LC_KAPPA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(A), U(LALT), END + ); +case UC_GR_LC_LAMDA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(B), U(LALT), END + ); +case UC_GR_LC_ZETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_6), U(LALT), END + ); +case UC_GR_LC_UPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_5), U(LALT), END + ); +case UC_GR_LC_IOTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_9), U(LALT), END + ); +case UC_GR_LC_ALPHA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_1), U(LALT), END + ); +case UC_GR_LC_EPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_5), U(LALT), END + ); +case UC_GR_LC_OMICRON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(F), U(LALT), END + ); +case UC_GR_LC_SIGMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_3), U(LALT), END + ); +case UC_GR_LC_NU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(D), U(LALT), END + ); +case UC_GR_LC_RHO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_1), U(LALT), END + ); +case UC_GR_LC_TAU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_4), U(LALT), END + ); +case UC_GR_LC_DELTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_4), U(LALT), END + ); +case UC_GR_LC_FINAL_SIGMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_2), U(LALT), END + ); +case UC_GR_LC_THETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_8), U(LALT), END + ); +case UC_GR_LC_BETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_2), U(LALT), END + ); +case UC_GR_LC_MU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(C), U(LALT), END + ); +case UC_GR_LC_PSI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_8), U(LALT), END + ); +case UC_GR_UC_CHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_7), U(LALT), END + ); +case UC_GR_UC_PI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_0), U(LALT), END + ); +case UC_GR_UC_PHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_6), U(LALT), END + ); +case UC_GR_UC_OMEGA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_9), U(LALT), END + ); +case UC_GR_UC_GAMMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_3), U(LALT), END + ); +case UC_GR_UC_ETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_7), U(LALT), END + ); +case UC_GR_UC_XI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(E), U(LALT), END + ); +case UC_GR_UC_KAPPA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(A), U(LALT), END + ); +case UC_GR_UC_LAMDA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(B), U(LALT), END + ); +case UC_GR_UC_ZETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_6), U(LALT), END + ); +case UC_GR_UC_UPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_5), U(LALT), END + ); +case UC_GR_UC_IOTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_9), U(LALT), END + ); +case UC_GR_UC_ALPHA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_1), U(LALT), END + ); +case UC_GR_UC_EPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_5), U(LALT), END + ); +case UC_GR_UC_OMICRON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(F), U(LALT), END + ); +case UC_GR_UC_SIGMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_3), U(LALT), END + ); +case UC_GR_UC_NU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(D), U(LALT), END + ); +case UC_GR_UC_RHO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_1), U(LALT), END + ); +case UC_GR_UC_TAU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_4), U(LALT), END + ); +case UC_GR_UC_DELTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_4), U(LALT), END + ); +case UC_GR_UC_THETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_8), U(LALT), END + ); +case UC_GR_UC_BETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_2), U(LALT), END + ); +case UC_GR_UC_MU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(C), U(LALT), END + ); +case UC_GR_UC_PSI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_8), U(LALT), END + ); + default: + break; + } + } else if (unicode_mode == UC_MODE_LINUX) { + switch(id) { + case UC_UPWARDS_ARROW: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_1), T(KP_ENTER), END + ); +case UC_LEFTWARDS_ARROW: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_0), T(KP_ENTER), END + ); +case UC_DOWNWARDS_ARROW: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_3), T(KP_ENTER), END + ); +case UC_RIGHTWARDS_ARROW: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_2), T(KP_ENTER), END + ); +case UC_SUP_ONE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_9), T(KP_ENTER), END + ); +case UC_SUP_TWO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_2), T(KP_ENTER), END + ); +case UC_SUP_THREE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_3), T(KP_ENTER), END + ); +case UC_SUP_FOUR: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_4), T(KP_ENTER), END + ); +case UC_SUP_FIVE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_5), T(KP_ENTER), END + ); +case UC_FOR_ALL: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_0), T(KP_ENTER), END + ); +case UC_SUP_SIX: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_6), T(KP_ENTER), END + ); +case UC_SUP_SEVEN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_7), T(KP_ENTER), END + ); +case UC_SUP_EIGHT: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_8), T(KP_ENTER), END + ); +case UC_SUP_NINE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_9), T(KP_ENTER), END + ); +case UC_SUP_ZERO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_0), T(KP_ENTER), END + ); +case UC_MULTIPLICATION_SIGN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(D), T(KP_7), T(KP_ENTER), END + ); +case UC_FR_ONE_HALF: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(D), T(KP_ENTER), END + ); +case UC_DIVISION_SIGN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(F), T(KP_7), T(KP_ENTER), END + ); +case UC_FR_ONE_QUARTER: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(C), T(KP_ENTER), END + ); +case UC_FR_ONE_FIFTH: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_5), T(KP_ENTER), END + ); +case UC_FR_ONE_SIXTH: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_9), T(KP_ENTER), END + ); +case UC_FR_ONE_EIGHTH: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(B), T(KP_ENTER), END + ); +case UC_PLUS_MINUS_SIGN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_1), T(KP_ENTER), END + ); +case UC_EMPTY_SET: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_5), T(KP_ENTER), END + ); +case UC_INFINITY: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_1), T(E), T(KP_ENTER), END + ); +case UC_SUP_LATIN_SMALL_LETTER_N: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(F), T(KP_ENTER), END + ); +case UC_THERE_EXISTS: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_3), T(KP_ENTER), END + ); +case UC_ELEMENT_OF: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_8), T(KP_ENTER), END + ); +case UC_FR_ONE_THIRD: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_3), T(KP_ENTER), END + ); +case UC_NOT_EQUAL_TO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_6), T(KP_0), T(KP_ENTER), END + ); +case UC_FR_TWO_THIRDS: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_4), T(KP_ENTER), END + ); +case UC_FR_THREE_QUARTERS: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(E), T(KP_ENTER), END + ); +case UC_ASYMPTOTICALLY_EQUAL_TO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_4), T(KP_3), T(KP_ENTER), END + ); +case UC_THERE_DOES_NOT_EXIST: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_4), T(KP_ENTER), END + ); +case UC_NOT_AN_ELEMENT_OF: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_9), T(KP_ENTER), END + ); +case UC_SUB_ONE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_1), T(KP_ENTER), END + ); +case UC_SUB_TWO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_2), T(KP_ENTER), END + ); +case UC_SUB_THREE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_3), T(KP_ENTER), END + ); +case UC_SUB_FOUR: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_4), T(KP_ENTER), END + ); +case UC_SUB_FIVE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_5), T(KP_ENTER), END + ); +case UC_SUB_SIX: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_6), T(KP_ENTER), END + ); +case UC_SUB_SEVEN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_7), T(KP_ENTER), END + ); +case UC_SUB_EIGHT: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_8), T(KP_ENTER), END + ); +case UC_SUB_NINE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_9), T(KP_ENTER), END + ); +case UC_SUB_ZERO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_0), T(KP_ENTER), END + ); +case UC_GR_LC_CHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_7), T(KP_ENTER), END + ); +case UC_GR_LC_PI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_0), T(KP_ENTER), END + ); +case UC_GR_LC_PHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_6), T(KP_ENTER), END + ); +case UC_GR_LC_OMEGA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_9), T(KP_ENTER), END + ); +case UC_GR_LC_GAMMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_3), T(KP_ENTER), END + ); +case UC_GR_LC_ETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_7), T(KP_ENTER), END + ); +case UC_GR_LC_XI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(E), T(KP_ENTER), END + ); +case UC_GR_LC_KAPPA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(A), T(KP_ENTER), END + ); +case UC_GR_LC_LAMDA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(B), T(KP_ENTER), END + ); +case UC_GR_LC_ZETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_6), T(KP_ENTER), END + ); +case UC_GR_LC_UPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_5), T(KP_ENTER), END + ); +case UC_GR_LC_IOTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_9), T(KP_ENTER), END + ); +case UC_GR_LC_ALPHA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_1), T(KP_ENTER), END + ); +case UC_GR_LC_EPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_5), T(KP_ENTER), END + ); +case UC_GR_LC_OMICRON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(F), T(KP_ENTER), END + ); +case UC_GR_LC_SIGMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_3), T(KP_ENTER), END + ); +case UC_GR_LC_NU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(D), T(KP_ENTER), END + ); +case UC_GR_LC_RHO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_1), T(KP_ENTER), END + ); +case UC_GR_LC_TAU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_4), T(KP_ENTER), END + ); +case UC_GR_LC_DELTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_4), T(KP_ENTER), END + ); +case UC_GR_LC_FINAL_SIGMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_2), T(KP_ENTER), END + ); +case UC_GR_LC_THETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_8), T(KP_ENTER), END + ); +case UC_GR_LC_BETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_2), T(KP_ENTER), END + ); +case UC_GR_LC_MU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(C), T(KP_ENTER), END + ); +case UC_GR_LC_PSI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_8), T(KP_ENTER), END + ); +case UC_GR_UC_CHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_7), T(KP_ENTER), END + ); +case UC_GR_UC_PI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_0), T(KP_ENTER), END + ); +case UC_GR_UC_PHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_6), T(KP_ENTER), END + ); +case UC_GR_UC_OMEGA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_9), T(KP_ENTER), END + ); +case UC_GR_UC_GAMMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_3), T(KP_ENTER), END + ); +case UC_GR_UC_ETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_7), T(KP_ENTER), END + ); +case UC_GR_UC_XI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(E), T(KP_ENTER), END + ); +case UC_GR_UC_KAPPA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(A), T(KP_ENTER), END + ); +case UC_GR_UC_LAMDA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(B), T(KP_ENTER), END + ); +case UC_GR_UC_ZETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_6), T(KP_ENTER), END + ); +case UC_GR_UC_UPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_5), T(KP_ENTER), END + ); +case UC_GR_UC_IOTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_9), T(KP_ENTER), END + ); +case UC_GR_UC_ALPHA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_1), T(KP_ENTER), END + ); +case UC_GR_UC_EPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_5), T(KP_ENTER), END + ); +case UC_GR_UC_OMICRON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(F), T(KP_ENTER), END + ); +case UC_GR_UC_SIGMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_3), T(KP_ENTER), END + ); +case UC_GR_UC_NU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(D), T(KP_ENTER), END + ); +case UC_GR_UC_RHO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_1), T(KP_ENTER), END + ); +case UC_GR_UC_TAU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_4), T(KP_ENTER), END + ); +case UC_GR_UC_DELTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_4), T(KP_ENTER), END + ); +case UC_GR_UC_THETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_8), T(KP_ENTER), END + ); +case UC_GR_UC_BETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_2), T(KP_ENTER), END + ); +case UC_GR_UC_MU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(C), T(KP_ENTER), END + ); +case UC_GR_UC_PSI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_8), T(KP_ENTER), END + ); + default: + break; + } + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void * matrix_init_user(void) { + +}; + +// Runs constantly in the background, in a loop. +void * matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + ergodox_board_led_off(); + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + ergodox_right_led_3_off(); + switch (layer) { + case L1: + ergodox_right_led_1_on(); + break; + case L2: + ergodox_right_led_2_on(); + break; + case L3: + ergodox_right_led_3_on(); + break; + case L4: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + break; + case L5: + ergodox_right_led_1_on(); + ergodox_right_led_3_on(); + break; + // case L6: + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + // case L7: + // ergodox_right_led_1_on(); + // ergodox_right_led_2_on(); + // ergodox_right_led_3_on(); + // break; + default: + ergodox_board_led_off(); + break; + } +}; diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md new file mode 100644 index 0000000000..9c0c12528b --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md @@ -0,0 +1,222 @@ +# ManuNeo Ergodox Keyboard Layout + +# Layout Config + + { + "includes_dir": "quantum/", + "keymaps_includes": [ + "ergodox_ez.h", + "action_layer.h", + "keymap_common.h", + "keymap_extras/keymap_german.h", + ], + "keymap_indexes": [ + [ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44], + [ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51], + [14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57], + [20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64], + [27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69], + [ 32, 33], [70, 71 ], + [ 34], [72 ], + [ 35, 36, 37], [73, 74, 75 ], + ], + "key_prefixes": ["DE_", "KC_"], + "filler": "-+.'!x", + "separator": "|", + "macros": { + "MUC": "", + }, + } + + +# Layers + + +## Layer 0 + + .-------------------------------------. .-------------------------------------. + |MO(5)| 1 | 2 | 3 | 4 | 5 | ACUT | ! GRV | 6 | 7 | 8 | 9 | 0 |CIRC | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + |MO(4)| X | P | F | W | G | HOME | !TG(2) | H | J | K | L | Q | Z | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + |MO(1)| U | I | A | E | O |------! !------! S | N | R | T | D | SS | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + |MO(3)| UE | OE | AE | C | V | END | ! TAB | B | M |COMM| DOT| UP | Y | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| + '------------------------'.-------------. .-------------.'------------------------' + | INS |TG(2) | !M(UMS)| DELT | + .------+------+------! !------+------+------. + ! ! | APP | ! PGUP | ! ! + ! ! !------! !------! ! ! + | BSPC | LSFT | ESC | ! PGDN |ENTER |SPACE | + '--------------------' '--------------------' + + +## Layer 1 + + .-------------------------------------. .-------------------------------------. + | |EXLM|DQOT|PARA| | | | ! | | | | |RING| | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | |ASTR|PIPE|SLSH|LCBR|RCBR| | ! |HASH|LESS|MORE| |DQOT| | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | |UNDS|MINS|AMPR|LBRC|RBRC|------! !------!DLR |LPRN|RPRN|TILD|QUOT|QST | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | |PLUS| EQL| | | | ! |BSLS|PERC|SCLN|COLN| ↑ | | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! | | ← | ↓ | → | + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' + + +## Layer 2 + + .-------------------------------------. .-------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | F11 | ! F12 | F6 | F7 | F8 | F9 |F10 |PEQL | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | | | | | | | | ! | | P7 | P8 | P9 |PAST|PSLS | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | |------! !------! | P4 | P5 | P6 |PMNS|PMNS | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | | | ! NLCK | | P1 | P2 | P3 |PPLS|PPLS | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' + + +## Layer 3 + +http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html + + .-------------------------------------. .-------------------------------------. + | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | ! | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | | × | ½ | ÷ | ¼ | ⅕ | | ! | ⅙ | | ⅛ | | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | ± | AT |EURO| ∅ |------! !------! ∞ | ⁿ | ∃ | ∈ | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | ! |EXLM| | ∄ | ∉ | | | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' + + +## Layer 4 + + .-------------------------------------. .-------------------------------------. + | | ₁ | ₂ | ₃ | ₄ | ₅ | | ! | ₆ | ₇ | ₈ | ₉ | ₀ | | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | | χ | π | φ | ω | γ | | ! | η | ξ | κ | λ | | ζ | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | υ | ι | α | ε | ο |------! !------! σ | ν | ρ | τ | δ | ς | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | θ | | | | | ! | β | μ | | | | ψ | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' + + +## Layer 5 + + .-------------------------------------. .-------------------------------------. + | | | | | | | | ! | | | | | | | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | | Χ | Π | Φ | Ω | Γ | | ! | Η | Ξ | Κ | Λ | | Ζ | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | Υ | Ι | Α | Ε | Ο |------! !------! Σ | Ν | Ρ | Τ | Δ | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | Θ | | | | | ! | Β | Μ | | | | Ψ | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' + + +## Layer 6 + + .-------------------------------------. .-------------------------------------. + | | | | | | | | ! | | | | | | | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | | | | | | | | ! | | | | | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | |------! !------! | | | | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | | | ! | | | | | | | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' + +## Layer 7 + + .-------------------------------------. .-------------------------------------. + | | | | | | | | ! | | | | | | | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | | | | | | | | ! | | | | | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | |------! !------! | | | | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | | | ! | | | | | | | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' + + +## Layer 8 + + .-------------------------------------. .-------------------------------------. + | | | | | | | | ! | | | | | | | + !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! + | | | | | | | | ! | | | | | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | |------! !------! | | | | | | + !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! + | | | | | | | | ! | | | | | | | + '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------'.-------------. .-------------.'------------------------' + | | | ! | | + .------+------+------! !------+------+------. + ! ! | | ! | ! ! + ! ! !------! !------! ! ! + | | | | ! | | | + '--------------------' '--------------------' From 32c7832609414d02c19b6ec312daabc8c741b266 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Mon, 28 Mar 2016 21:32:16 +0000 Subject: [PATCH 2/5] Refactor compiler code --- .../keymaps/german-manuneo/compile_keymap.py | 864 +++--- .../keymaps/german-manuneo/keymap.c | 2359 +++++++++-------- .../keymaps/german-manuneo/keymap.md | 338 +-- 3 files changed, 1900 insertions(+), 1661 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py index 3bbb9340b2..9767b1e074 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py @@ -1,4 +1,13 @@ -# encoding: utf-8 +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""Compiler for keymap.c files + +This scrip will generate a keymap.c file from a simple +markdown file with a specific layout. + +Usage: + python compile_keymap.py INPUT_PATH [OUTPUT_PATH] +""" from __future__ import division from __future__ import print_function from __future__ import absolute_import @@ -15,299 +24,423 @@ import collections PY2 = sys.version_info.major == 2 if PY2: - chr = unichr + chr = unichr -ONELINE_COMMENT_RE = re.compile(r"^\s*//.*$", re.MULTILINE) -INLINE_COMMENT_RE = re.compile( - r"([\,\"\[\]\{\}\d])\s+//\s[^\"\]\}\{\[]*$", re.MULTILINE -) -TRAILING_COMMA_RE = re.compile( - r",$\s*([\]\}])", re.MULTILINE -) +BASEPATH = os.path.abspath(os.path.join( + os.path.dirname(__file__), "..", ".." +)) -def loads(raw_data): - if isinstance(raw_data, bytes): - raw_data = raw_data.decode('utf-8') - raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data) - raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data) - raw_data = TRAILING_COMMA_RE.sub(r"\1", raw_data) - return json.loads(raw_data) -with io.open("keymap.md", encoding="utf-8") as fh: - lines = fh.readlines() +KEYBOARD_LAYOUTS = { + # These map positions in the parsed layout to + # positions in the KEYMAP MATRIX + 'ergodox_ez': [ + [ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44], + [ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51], + [14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57], + [20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64], + [27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69], + [ 32, 33], [70, 71 ], + [ 34], [72 ], + [ 35, 36, 37], [73, 74, 75 ], + ] +} -SECTIONS = [ - 'layout_config', - 'layers', + +BLANK_LAYOUTS = [ +# Compact Layout +""" +.------------------------------------.------------------------------------. +| | | | | | | | | | | | | | | +!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! +| | | | | | | | | | | | | | | +!-----+----+----+----x----x----! ! !----x----x----+----+----+-----! +| | | | | | |-----!-----! | | | | | | +!-----+----+----+----x----x----! ! !----x----x----+----+----+-----! +| | | | | | | | | | | | | | | +'-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' +""", + +# Wide Layout +""" +.--------------------------------------------. .--------------------------------------------. +| | | | | | | | ! | | | | | | | +!------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+------! +| | | | | | | | ! | | | | | | | +!------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+------! +| | | | | | |-------! !-------! | | | | | | +!------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+------! +| | | | | | | | ! | | | | | | | +'------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+------' + | | | | | | ! | | | | | + '-----------------------------' '-----------------------------' + .---------------. .---------------. + | | | ! | | + .-------+-------+-------! !-------+-------+-------. + ! ! | | ! | ! ! + ! ! !-------! !-------! ! ! + | | | | ! | | | + '-----------------------' '-----------------------' +""", ] -config = { - "includes_basedir": "quantum/", + +DEFAULT_CONFIG = { + "includes_basedir": "quantum/", "keymaps_includes": [ "keymap_common.h", ], - 'filler': "-+.':x", - 'separator': "|", + 'filler': "-+.':x", + 'separator': "|", 'default_key_prefix': ["KC_"], - 'unicode_macros': [], - 'macro_ids': ['UMS'], - 'layers': collections.OrderedDict(), - 'layer_lines': collections.OrderedDict(), } -section_start_index = -1 -current_section = None -current_layer_name = None -current_layer_lines = [] -config_data = [] - -def end_section(): - global section_start_index - global current_layer_lines - section_start_index = -1 - if current_section == 'layout_config': - config.update(loads("".join( - config_data - ))) - elif current_section == 'layers': - config['layer_lines'][current_layer_name] = current_layer_lines - current_layer_lines = [] - - -for i, line in enumerate(lines): - if line.startswith("# "): - section = line[2:].strip().replace(" ", "_").lower() - if section in SECTIONS: - current_section = section - elif line.startswith("## "): - sub_section = line[3:] - if current_section == 'layers': - current_layer_name = sub_section.strip() - # TODO: parse descriptio - config['layers'][current_layer_name] = "" - elif line.startswith(" "): - if section_start_index < 0: - section_start_index = i - if current_section == 'layout_config': - config_data.append(line) - elif current_section == 'layers': - if not line.strip(): - continue - current_layer_lines.append(line) - elif section_start_index > 0: - end_section() - -end_section() - -KEYDEF_RE = re.compile(r"#define ((?:{})(?:\w+))".format( - "|".join(config['key_prefixes']) -)) -IF0_RE = re.compile(r"^#if 0$.*?#endif", re.MULTILINE | re.DOTALL) -COMMENT_RE = re.compile(r"/\*.*?\*/", re.MULTILINE | re.DOTALL) -ENUM_RE = re.compile(r"(enum\s\w+\s\{.*?\};)", re.MULTILINE | re.DOTALL) -ENUM_KEY_RE = re.compile(r"({}\w+)".format( - "|".join(config['key_prefixes']) -)) -def parse_keydefs(path): - with io.open(path, encoding="utf-8") as fh: - data = fh.read() - data, _ = COMMENT_RE.subn("", data) - data, _ = IF0_RE.subn("", data) +SECTIONS = [ + 'layout_config', + 'layers', +] - for match in KEYDEF_RE.finditer(data): - yield match.groups()[0] - for enum_match in ENUM_RE.finditer(data): - enum = enum_match.groups()[0] - for key_match in ENUM_KEY_RE.finditer(enum): - yield key_match.groups()[0] +# Markdown Parsing -valid_keycodes = set() -basepath = os.path.abspath(os.path.join( - os.path.dirname(__file__), "..", "..", "..", ".." -)) +def loads(raw_data): + ONELINE_COMMENT_RE = re.compile(r""" + ^ # comment must be at the start of the line + \s* # arbitrary whitespace + // # start of the comment + (.*) # the comment + $ # until the end of line + """, re.MULTILINE | re.VERBOSE + ) + + INLINE_COMMENT_RE = re.compile(r""" + (?:[\,\"\[\]\{\}\d]) # anythig that might end a expression + \s+ # comment must be preceded by whitespace + // # start of the comment + \s # and succeded by whitespace + ([^\"\]\}\{\[]*) # the comment (except things which might be json) + $ # until the end of line + """, re.MULTILINE | re.VERBOSE + ) + + TRAILING_COMMA_RE = re.compile(r""" + , # the comma + \s* # arbitrary whitespace (including newlines) + ([\]\}]) # end of an array or object + """, re.MULTILINE | re.VERBOSE + ) -valid_keycodes.update(parse_keydefs(os.path.join( - basepath, "tmk_core", "common", "keycode.h" -))) - -for include_path in config['keymaps_includes']: - path = os.path.join(basepath, config['includes_dir'], include_path) - path = path.replace("/", os.sep) - if os.path.exists(path): - valid_keycodes.update(parse_keydefs(path)) - -LAYER_CHANGE_RE = re.compile(r"(DF|TG|MO)\(\d+\)") -MACRO_RE = re.compile(r"M\(\w+\)") -UNICODE_RE = re.compile(r"U[0-9A-F]{4}") -NON_CODE = re.compile(r"^[^A-Z0-9_]$") - - -def UNICODE_MACRO(config, c): - # TODO: don't use macro for codepoints below 0x2000 - macro_id = "UC_" + ( - unicodedata.name(c) - .replace(" ", "_") - .replace("-", "_") - .replace("SUPERSCRIPT_", "SUP_") - .replace("SUBSCRIPT_", "SUB_") - .replace("GREEK_SMALL_LETTER", "GR_LC") - .replace("GREEK_CAPITAL_LETTER", "GR_UC") - .replace("VULGAR_FRACTION_", "FR_") - ) - if macro_id not in config['macro_ids']: - config['macro_ids'].append(macro_id) - code = "{:04X}".format(ord(c)) - if (macro_id, code) not in config['unicode_macros']: - config['unicode_macros'].append((macro_id, code)) - return "M({})".format(macro_id) - - -def MACRO(config, code): - macro_id = code[2:-1] - if macro_id not in config['macro_ids']: - config['macro_ids'].append(macro_id) - return code - -# TODO: presumably we can have a macro or function which takes -# the hex code and produces much smaller code. + if isinstance(raw_data, bytes): + raw_data = raw_data.decode('utf-8') -WIN_UNICODE_MACRO_TEMPLATE = """ -case {0}: - return MACRODOWN( - D(LALT), T(KP_PLUS), {1}, U(LALT), END - ); -""" + raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data) + raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data) + raw_data = TRAILING_COMMA_RE.sub(r"\1", raw_data) + return json.loads(raw_data) -LINUX_UNICODE_MACRO_TEMPLATE = """ -case {0}: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), {1}, T(KP_ENTER), END - ); -""" -def macro_cases(config, mode): - if mode == 'win': - template = WIN_UNICODE_MACRO_TEMPLATE - elif mode == 'linux': - template = LINUX_UNICODE_MACRO_TEMPLATE - else: - raise ValueError("Invalid mode: ", mode) - template = template.strip() - - for macro_id, unimacro_chars in config['unicode_macros']: - unimacro_keys = ", ".join( - "T({})".format( - "KP_" + char if char.isdigit() else char - ) for char in unimacro_chars - ) - yield template.format(macro_id, unimacro_keys) +def parse_config(path): + def reset_section(): + section.update({ + 'name': section.get('name', ""), + 'sub_name': "", + 'start_line': -1, + 'end_line': -1, + 'code_lines': [], + }) + + def start_section(line_index, line): + end_section() + if line.startswith("# "): + name = line[2:] + elif line.startswith("## "): + name = line[3:] + + name = name.strip().replace(" ", "_").lower() + if name in SECTIONS: + section['name'] = name + else: + section['sub_name'] = name + section['start_line'] = line_index + + def end_section(): + if section['start_line'] >= 0: + if section['name'] == 'layout_config': + config.update(loads("\n".join( + section['code_lines'] + ))) + elif section['sub_name'].startswith('layer'): + layer_name = section['sub_name'] + config['layer_lines'][layer_name] = section['code_lines'] + + reset_section() + + def amend_section(line_index, line): + section['end_line'] = line_index + section['code_lines'].append(line) + + config = DEFAULT_CONFIG.copy() + config.update({ + 'layer_lines': collections.OrderedDict(), + 'macro_ids': {'UM'}, + 'unicode_macros': {}, + }) + + section = {} + reset_section() + + with io.open(path, encoding="utf-8") as fh: + for i, line in enumerate(fh): + if line.startswith("#"): + start_section(i, line) + elif line.startswith(" "): + amend_section(i, line[4:]) + else: + # TODO: maybe parse description + pass + + end_section() + return config + +# header file parsing + +IF0_RE = re.compile(r""" + ^ + #if 0 + $.*? + #endif + """, re.MULTILINE | re.DOTALL | re.VERBOSE +) -MACROCODE = """ -#define UC_MODE_WIN 0 -#define UC_MODE_LINUX 1 +COMMENT_RE = re.compile(r""" + /\* + .*? + \*/" + """, re.MULTILINE | re.DOTALL | re.VERBOSE +) -static uint16_t unicode_mode = UC_MODE_WIN; +def read_header_file(path): + with io.open(path, encoding="utf-8") as fh: + data = fh.read() + data, _ = COMMENT_RE.subn("", data) + data, _ = IF0_RE.subn("", data) + return data + + +def regex_partial(re_str_fmt, flags=re.MULTILINE | re.DOTALL | re.VERBOSE): + def partial(*args, **kwargs): + re_str = re_str_fmt.format(*args, **kwargs) + return re.compile(re_str, flags) + return partial + + +KEYDEF_REP = regex_partial(r""" + #define + \s + ( + (?:{}) # the prefixes + (?:\w+) # the key name + ) # capture group end + """ +) + + +ENUM_RE = re.compile(r""" + ( + enum + \s\w+\s + \{ + .*? # the enum content + \} + ; + ) # capture group end + """, re.MULTILINE | re.DOTALL | re.VERBOSE +) + + +ENUM_KEY_REP = regex_partial(r""" + ( + {} # the prefixes + \w+ # the key name + ) # capture group end + """ +) + +def parse_keydefs(config, data): + prefix_options = "|".join(config['key_prefixes']) + keydef_re = KEYDEF_REP(prefix_options) + enum_key_re = ENUM_KEY_REP(prefix_options) + for match in keydef_re.finditer(data): + yield match.groups()[0] + + for enum_match in ENUM_RE.finditer(data): + enum = enum_match.groups()[0] + for key_match in enum_key_re.finditer(enum): + yield key_match.groups()[0] + + +def parse_valid_keys(config): + valid_keycodes = set() + paths = [ + os.path.join(BASEPATH, "tmk_core", "common", "keycode.h") + ] + [ + os.path.join( + BASEPATH, config['includes_dir'], include_path + ) for include_path in config['keymaps_includes'] + ] + + for path in paths: + path = path.replace("/", os.sep) + # the config always uses forward slashe + if os.path.exists(path): + header_data = read_header_file(path) + valid_keycodes.update( + parse_keydefs(config, header_data) + ) + return valid_keycodes + +# Keymap Parsing + +def iter_raw_codes(layer_lines, filler, separator): + filler_re = re.compile("[" + filler + " ]") + for line in layer_lines: + line, _ = filler_re.subn("", line.strip()) + if not line: + continue + codes = line.split(separator) + for code in codes[1:-1]: + yield code + + +def iter_indexed_codes(raw_codes, key_indexes): + key_rows = {} + key_indexes_flat = [] + for row_index, key_indexes in enumerate(key_indexes): + for key_index in key_indexes: + key_rows[key_index] = row_index + key_indexes_flat.extend(key_indexes) + assert len(raw_codes) == len(key_indexes_flat) + for raw_code, key_index in zip(raw_codes, key_indexes_flat): + # we keep track of the row mostly for layout purposes + yield raw_code, key_index, key_rows[key_index] + + +LAYER_CHANGE_RE = re.compile(r""" + (DF|TG|MO)\(\d+\) +""", re.VERBOSE) + + +MACRO_RE = re.compile(r""" + M\(\w+\) +""", re.VERBOSE) + + +UNICODE_RE = re.compile(r""" + U[0-9A-F]{4} +""", re.VERBOSE) + + +NON_CODE = re.compile(r""" + ^[^A-Z0-9_]$ +""", re.VERBOSE) + + +def parse_uni_code(raw_code): + macro_id = "UC_" + ( + unicodedata.name(raw_code) + .replace(" ", "_") + .replace("-", "_") + ) + code = "M({})".format(macro_id) + uc_hex = "{:04X}".format(ord(raw_code)) + return code, macro_id, uc_hex + + +def parse_key_code(raw_code, key_prefixes, valid_keycodes): + if raw_code in valid_keycodes: + return raw_code + + for prefix in key_prefixes: + code = prefix + raw_code + if code in valid_keycodes: + return code + + +def parse_code(raw_code, key_prefixes, valid_keycodes): + if not raw_code: + return 'KC_TRNS', None, None + + if LAYER_CHANGE_RE.match(raw_code): + return raw_code, None, None + + if MACRO_RE.match(raw_code): + code = macro_id = raw_code[2:-1] + return code, macro_id, None + + if UNICODE_RE.match(raw_code): + hex_code = raw_code[1:] + return parse_uni_code(chr(int(hex_code, 16))) + + if NON_CODE.match(raw_code): + return parse_uni_code(raw_code) + + code = parse_key_code(raw_code, key_prefixes, valid_keycodes) + return code, None, None + + +def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): + keymap = {} + raw_codes = list(iter_raw_codes( + layer_lines, config['filler'], config['separator'] + )) + indexed_codes = iter_indexed_codes(raw_codes, key_indexes) + for raw_code, key_index, row_index in indexed_codes: + code, macro_id, uc_hex = parse_code( + raw_code, config['key_prefixes'], valid_keycodes + ) + if macro_id: + config['macro_ids'].add(macro_id) + if uc_hex: + config['unicode_macros'][macro_id] = uc_hex + keymap[key_index] = (code, row_index) + return keymap -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ - if (!record->event.pressed) {{ - return MACRO_NONE; - }} - // MACRODOWN only works in this function - switch(id) {{ - case UMS: - unicode_mode = (unicode_mode + 1) % 2; - break; - {macro_cases} - default: - break; - }} - if (unicode_mode == UC_MODE_WIN) {{ - switch(id) {{ - {win_macro_cases} - default: - break; - }} - }} else if (unicode_mode == UC_MODE_LINUX) {{ - switch(id) {{ - {linux_macro_cases} - default: - break; - }} - }} - return MACRO_NONE; -}}; -""" +def parse_keymaps(config, valid_keycodes): + keymaps = collections.OrderedDict() + key_indexes = config.get( + 'key_indexes', KEYBOARD_LAYOUTS[config['layout']] + ) + # TODO: maybe validate key_indexes -def iter_keycodes(layer_lines, config): - filler_re = re.compile("[" + - config['filler'] + " " + - "]") - - all_codes = [] - for line in layer_lines: - line, _ = filler_re.subn("", line.strip()) - if not line: - continue - codes = line.split(config['separator']) - all_codes.extend(codes[1:-1]) - - key_groups = {} - for group_index, key_indexes in enumerate(config['keymap_indexes']): - for key_index in key_indexes: - key_groups[key_index] = group_index - - keymap_indexes = sum(config['keymap_indexes'], []) - assert len(all_codes) == len(keymap_indexes) - code_index_pairs = zip(all_codes, keymap_indexes) - prev_index = None - for i, (code, key_index) in enumerate(code_index_pairs): - code = code.strip() - layer_match = LAYER_CHANGE_RE.match(code) - unicode_match = UNICODE_RE.match(code) - noncode_match = NON_CODE.match(code) - macro_match = MACRO_RE.match(code) - - ws = "\n" if key_groups[key_index] != prev_index else "" - prev_index = key_groups[key_index] - - try: - if not code: - code = 'KC_TRNS' - elif layer_match: - pass - elif macro_match: - code = MACRO(config, code) - elif unicode_match: - hex_code = code[1:] - code = UNICODE_MACRO(config, chr(int(hex_code, 16))) - elif noncode_match: - code = UNICODE_MACRO(config, code) - elif "_" in code: - assert code in valid_keycodes, "unknown code '{}'".format(code) - else: - for prefix in config['key_prefixes']: - if prefix + code in valid_keycodes: - code = prefix + code - break - assert code in valid_keycodes, "unknown code '{}'".format(code) - yield code, key_index, ws - except AssertionError: - print("Error processing code", repr(code).encode("utf-8")) - raise + for layer_name, layer_lines, in config['layer_lines'].items(): + keymaps[layer_name] = parse_keymap( + config, key_indexes, layer_lines, valid_keycodes + ) + return keymaps + +# keymap.c output USERCODE = """ // Runs just one time when the keyboard initializes. -void * matrix_init_user(void) { +void matrix_init_user(void) { }; // Runs constantly in the background, in a loop. -void * matrix_scan_user(void) { +void matrix_scan_user(void) { uint8_t layer = biton32(layer_state); ergodox_board_led_off(); @@ -348,71 +481,158 @@ void * matrix_scan_user(void) { }; """ -def parse_keymaps(config): - keymaps = {} - layer_line_items = config['layer_lines'].items() - for i, (layer_name, layer_lines) in enumerate(layer_line_items): - print("parseing layer", layer_name) - keymap = {} - for code, key_index, ws in iter_keycodes(layer_lines, config): - keymap[key_index] = (code, ws) - keymaps[layer_name] = [v for k, v in sorted(keymap.items())] - return keymaps - - -def iter_keymap_lines(config, keymaps): - for include_path in config['keymaps_includes']: - yield '#include "{}"\n'.format(include_path) - - yield "\n" - - layer_items = config['layers'].items() - for i, (layer_name, description) in enumerate(layer_items): - yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) - - for i, macro_id in enumerate(config['macro_ids']): - yield "#define {} {}\n".format(macro_id, i) - - yield "\n" - - yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" - - layer_line_items = config['layer_lines'].items() - last_index = config['keymap_indexes'][-1] - for i, (layer_name, layer_lines) in enumerate(layer_line_items): - keymap = keymaps[layer_name] - yield "/*\n" - for line in layer_lines: - yield " *{}".format(line) - yield "*/\n" - - yield "[L{0}] = KEYMAP(\n".format(i) - - for key_index, (code, ws) in enumerate(keymap): - yield "\t{}".format(code) - if key_index < len(keymap) - 1: - yield "," - yield ws - yield "),\n" - - yield "};\n\n" - - yield "const uint16_t PROGMEM fn_actions[] = {\n" - yield "};\n" +MACROCODE = """ +#define UC_MODE_WIN 0 +#define UC_MODE_LINUX 1 - yield MACROCODE.format( - macro_cases="", - win_macro_cases="\n".join(macro_cases(config, mode='win')), - linux_macro_cases="\n".join(macro_cases(config, mode='linux')), - ) +static uint16_t unicode_mode = UC_MODE_WIN; - yield USERCODE +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ + if (!record->event.pressed) {{ + return MACRO_NONE; + }} + // MACRODOWN only works in this function + switch(id) {{ + case UM: + unicode_mode = (unicode_mode + 1) % 2; + break; + {macro_cases} + default: + break; + }} + if (unicode_mode == UC_MODE_WIN) {{ + switch(id) {{ + {win_macro_cases} + default: + break; + }} + }} else if (unicode_mode == UC_MODE_LINUX) {{ + switch(id) {{ + {linux_macro_cases} + default: + break; + }} + }} + return MACRO_NONE; +}}; +""" +WIN_UNICODE_MACRO_TEMPLATE = """ +case {0}: + return MACRODOWN( + D(LALT), T(KP_PLUS), {1}, U(LALT), END + ); +""" -with io.open("keymap.c", mode="w", encoding="utf-8") as fh: - for data in iter_keymap_lines(config, parse_keymaps(config)): - fh.write(data) +LINUX_UNICODE_MACRO_TEMPLATE = """ +case {0}: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), {1}, T(KP_ENTER), END + ); +""" + +def macro_cases(config, mode): + if mode == 'win': + template = WIN_UNICODE_MACRO_TEMPLATE + elif mode == 'linux': + template = LINUX_UNICODE_MACRO_TEMPLATE + else: + raise ValueError("Invalid mode: ", mode) + template = template.strip() + + for macro_id, uc_hex in config['unicode_macros'].items(): + unimacro_keys = ", ".join( + "T({})".format( + "KP_" + digit if digit.isdigit() else digit + ) for digit in uc_hex + ) + yield template.format(macro_id, unimacro_keys) + + +def iter_keymap_lines(keymap): + prev_row_index = None + for key_index in sorted(keymap): + code, row_index = keymap[key_index] + if row_index != prev_row_index: + yield "\n" + yield " {}".format(code) + if key_index < len(keymap) - 1: + yield "," + prev_row_index = row_index + + +def iter_keymap_parts(config, keymaps): + # includes + for include_path in config['keymaps_includes']: + yield '#include "{}"\n'.format(include_path) + + yield "\n" + + # definitions + for i, macro_id in enumerate(sorted(config['macro_ids'])): + yield "#define {} {}\n".format(macro_id, i) + + yield "\n" + + for i, layer_name in enumerate(config['layer_lines']): + yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name) + + yield "\n" + + # keymaps + yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n" + + for i, layer_name in enumerate(config['layer_lines']): + # comment + layer_lines = config['layer_lines'][layer_name] + prefixed_lines = " * " + " * ".join(layer_lines) + yield "/*\n{}*/\n".format(prefixed_lines) + + # keymap codes + keymap = keymaps[layer_name] + keymap_lines = "".join(iter_keymap_lines(keymap)) + yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines) + + yield "};\n\n" + + # no idea what this is for + yield "const uint16_t PROGMEM fn_actions[] = {};\n" + + # macros + yield MACROCODE.format( + macro_cases="", + win_macro_cases="\n".join(macro_cases(config, mode='win')), + linux_macro_cases="\n".join(macro_cases(config, mode='linux')), + ) + + # TODO: dynamically create blinking lights + yield USERCODE + + +def main(argv=sys.argv[1:]): + if not argv or '-h' in argv or '--help' in argv: + print(__doc__) + return 0 + + in_path = os.path.abspath(argv[0]) + if not os.path.exists(in_path): + print("No such file '{}'".format(in_path)) + return 1 + + if len(argv) > 1: + out_path = os.path.abspath(argv[1]) + else: + dirname = os.path.dirname(in_path) + out_path = os.path.join(dirname, "keymap.c") + + config = parse_config(in_path) + valid_keys = parse_valid_keys(config) + keymaps = parse_keymaps(config, valid_keys) + + with io.open(out_path, mode="w", encoding="utf-8") as fh: + for part in iter_keymap_parts(config, keymaps): + fh.write(part) -# print("\n".join(sorted(valid_keycodes))) -# print(json.dumps(config, indent=4)) +if __name__ == '__main__': + sys.exit(main()) diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c index 400ad6fcf8..23611ddd89 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c @@ -3,449 +3,458 @@ #include "keymap_common.h" #include "keymap_extras/keymap_german.h" -#define L0 0 // Layer 0 -#define L1 1 // Layer 1 -#define L2 2 // Layer 2 -#define L3 3 // Layer 3 -#define L4 4 // Layer 4 -#define L5 5 // Layer 5 -#define L6 6 // Layer 6 -#define L7 7 // Layer 7 -#define L8 8 // Layer 8 -#define UMS 0 -#define UC_UPWARDS_ARROW 1 -#define UC_LEFTWARDS_ARROW 2 -#define UC_DOWNWARDS_ARROW 3 -#define UC_RIGHTWARDS_ARROW 4 -#define UC_SUP_ONE 5 -#define UC_SUP_TWO 6 -#define UC_SUP_THREE 7 -#define UC_SUP_FOUR 8 -#define UC_SUP_FIVE 9 -#define UC_FOR_ALL 10 -#define UC_SUP_SIX 11 -#define UC_SUP_SEVEN 12 -#define UC_SUP_EIGHT 13 -#define UC_SUP_NINE 14 -#define UC_SUP_ZERO 15 -#define UC_MULTIPLICATION_SIGN 16 -#define UC_FR_ONE_HALF 17 -#define UC_DIVISION_SIGN 18 -#define UC_FR_ONE_QUARTER 19 -#define UC_FR_ONE_FIFTH 20 -#define UC_FR_ONE_SIXTH 21 -#define UC_FR_ONE_EIGHTH 22 -#define UC_PLUS_MINUS_SIGN 23 -#define UC_EMPTY_SET 24 -#define UC_INFINITY 25 -#define UC_SUP_LATIN_SMALL_LETTER_N 26 -#define UC_THERE_EXISTS 27 -#define UC_ELEMENT_OF 28 -#define UC_FR_ONE_THIRD 29 -#define UC_NOT_EQUAL_TO 30 -#define UC_FR_TWO_THIRDS 31 -#define UC_FR_THREE_QUARTERS 32 -#define UC_ASYMPTOTICALLY_EQUAL_TO 33 -#define UC_THERE_DOES_NOT_EXIST 34 -#define UC_NOT_AN_ELEMENT_OF 35 -#define UC_SUB_ONE 36 -#define UC_SUB_TWO 37 -#define UC_SUB_THREE 38 -#define UC_SUB_FOUR 39 -#define UC_SUB_FIVE 40 -#define UC_SUB_SIX 41 -#define UC_SUB_SEVEN 42 -#define UC_SUB_EIGHT 43 -#define UC_SUB_NINE 44 -#define UC_SUB_ZERO 45 -#define UC_GR_LC_CHI 46 -#define UC_GR_LC_PI 47 -#define UC_GR_LC_PHI 48 -#define UC_GR_LC_OMEGA 49 -#define UC_GR_LC_GAMMA 50 -#define UC_GR_LC_ETA 51 -#define UC_GR_LC_XI 52 -#define UC_GR_LC_KAPPA 53 -#define UC_GR_LC_LAMDA 54 -#define UC_GR_LC_ZETA 55 -#define UC_GR_LC_UPSILON 56 -#define UC_GR_LC_IOTA 57 -#define UC_GR_LC_ALPHA 58 -#define UC_GR_LC_EPSILON 59 -#define UC_GR_LC_OMICRON 60 -#define UC_GR_LC_SIGMA 61 -#define UC_GR_LC_NU 62 -#define UC_GR_LC_RHO 63 -#define UC_GR_LC_TAU 64 -#define UC_GR_LC_DELTA 65 -#define UC_GR_LC_FINAL_SIGMA 66 -#define UC_GR_LC_THETA 67 -#define UC_GR_LC_BETA 68 -#define UC_GR_LC_MU 69 -#define UC_GR_LC_PSI 70 -#define UC_GR_UC_CHI 71 -#define UC_GR_UC_PI 72 -#define UC_GR_UC_PHI 73 -#define UC_GR_UC_OMEGA 74 -#define UC_GR_UC_GAMMA 75 -#define UC_GR_UC_ETA 76 -#define UC_GR_UC_XI 77 -#define UC_GR_UC_KAPPA 78 -#define UC_GR_UC_LAMDA 79 -#define UC_GR_UC_ZETA 80 -#define UC_GR_UC_UPSILON 81 -#define UC_GR_UC_IOTA 82 -#define UC_GR_UC_ALPHA 83 -#define UC_GR_UC_EPSILON 84 -#define UC_GR_UC_OMICRON 85 -#define UC_GR_UC_SIGMA 86 -#define UC_GR_UC_NU 87 -#define UC_GR_UC_RHO 88 -#define UC_GR_UC_TAU 89 -#define UC_GR_UC_DELTA 90 -#define UC_GR_UC_THETA 91 -#define UC_GR_UC_BETA 92 -#define UC_GR_UC_MU 93 -#define UC_GR_UC_PSI 94 +#define UC_ASYMPTOTICALLY_EQUAL_TO 0 +#define UC_DIVISION_SIGN 1 +#define UC_DOWNWARDS_ARROW 2 +#define UC_ELEMENT_OF 3 +#define UC_EMPTY_SET 4 +#define UC_FOR_ALL 5 +#define UC_GREEK_CAPITAL_LETTER_ALPHA 6 +#define UC_GREEK_CAPITAL_LETTER_BETA 7 +#define UC_GREEK_CAPITAL_LETTER_CHI 8 +#define UC_GREEK_CAPITAL_LETTER_DELTA 9 +#define UC_GREEK_CAPITAL_LETTER_EPSILON 10 +#define UC_GREEK_CAPITAL_LETTER_ETA 11 +#define UC_GREEK_CAPITAL_LETTER_GAMMA 12 +#define UC_GREEK_CAPITAL_LETTER_IOTA 13 +#define UC_GREEK_CAPITAL_LETTER_KAPPA 14 +#define UC_GREEK_CAPITAL_LETTER_LAMDA 15 +#define UC_GREEK_CAPITAL_LETTER_MU 16 +#define UC_GREEK_CAPITAL_LETTER_NU 17 +#define UC_GREEK_CAPITAL_LETTER_OMEGA 18 +#define UC_GREEK_CAPITAL_LETTER_OMICRON 19 +#define UC_GREEK_CAPITAL_LETTER_PHI 20 +#define UC_GREEK_CAPITAL_LETTER_PI 21 +#define UC_GREEK_CAPITAL_LETTER_PSI 22 +#define UC_GREEK_CAPITAL_LETTER_RHO 23 +#define UC_GREEK_CAPITAL_LETTER_SIGMA 24 +#define UC_GREEK_CAPITAL_LETTER_TAU 25 +#define UC_GREEK_CAPITAL_LETTER_THETA 26 +#define UC_GREEK_CAPITAL_LETTER_UPSILON 27 +#define UC_GREEK_CAPITAL_LETTER_XI 28 +#define UC_GREEK_CAPITAL_LETTER_ZETA 29 +#define UC_GREEK_SMALL_LETTER_ALPHA 30 +#define UC_GREEK_SMALL_LETTER_BETA 31 +#define UC_GREEK_SMALL_LETTER_CHI 32 +#define UC_GREEK_SMALL_LETTER_DELTA 33 +#define UC_GREEK_SMALL_LETTER_EPSILON 34 +#define UC_GREEK_SMALL_LETTER_ETA 35 +#define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36 +#define UC_GREEK_SMALL_LETTER_GAMMA 37 +#define UC_GREEK_SMALL_LETTER_IOTA 38 +#define UC_GREEK_SMALL_LETTER_KAPPA 39 +#define UC_GREEK_SMALL_LETTER_LAMDA 40 +#define UC_GREEK_SMALL_LETTER_MU 41 +#define UC_GREEK_SMALL_LETTER_NU 42 +#define UC_GREEK_SMALL_LETTER_OMEGA 43 +#define UC_GREEK_SMALL_LETTER_OMICRON 44 +#define UC_GREEK_SMALL_LETTER_PHI 45 +#define UC_GREEK_SMALL_LETTER_PI 46 +#define UC_GREEK_SMALL_LETTER_PSI 47 +#define UC_GREEK_SMALL_LETTER_RHO 48 +#define UC_GREEK_SMALL_LETTER_SIGMA 49 +#define UC_GREEK_SMALL_LETTER_TAU 50 +#define UC_GREEK_SMALL_LETTER_THETA 51 +#define UC_GREEK_SMALL_LETTER_UPSILON 52 +#define UC_GREEK_SMALL_LETTER_XI 53 +#define UC_GREEK_SMALL_LETTER_ZETA 54 +#define UC_INFINITY 55 +#define UC_LEFTWARDS_ARROW 56 +#define UC_MULTIPLICATION_SIGN 57 +#define UC_NOT_AN_ELEMENT_OF 58 +#define UC_NOT_EQUAL_TO 59 +#define UC_PLUS_MINUS_SIGN 60 +#define UC_RIGHTWARDS_ARROW 61 +#define UC_SUBSCRIPT_EIGHT 62 +#define UC_SUBSCRIPT_FIVE 63 +#define UC_SUBSCRIPT_FOUR 64 +#define UC_SUBSCRIPT_NINE 65 +#define UC_SUBSCRIPT_ONE 66 +#define UC_SUBSCRIPT_SEVEN 67 +#define UC_SUBSCRIPT_SIX 68 +#define UC_SUBSCRIPT_THREE 69 +#define UC_SUBSCRIPT_TWO 70 +#define UC_SUBSCRIPT_ZERO 71 +#define UC_SUPERSCRIPT_EIGHT 72 +#define UC_SUPERSCRIPT_FIVE 73 +#define UC_SUPERSCRIPT_FOUR 74 +#define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75 +#define UC_SUPERSCRIPT_NINE 76 +#define UC_SUPERSCRIPT_ONE 77 +#define UC_SUPERSCRIPT_SEVEN 78 +#define UC_SUPERSCRIPT_SIX 79 +#define UC_SUPERSCRIPT_THREE 80 +#define UC_SUPERSCRIPT_TWO 81 +#define UC_SUPERSCRIPT_ZERO 82 +#define UC_THERE_DOES_NOT_EXIST 83 +#define UC_THERE_EXISTS 84 +#define UC_UPWARDS_ARROW 85 +#define UC_VULGAR_FRACTION_ONE_EIGHTH 86 +#define UC_VULGAR_FRACTION_ONE_FIFTH 87 +#define UC_VULGAR_FRACTION_ONE_HALF 88 +#define UC_VULGAR_FRACTION_ONE_QUARTER 89 +#define UC_VULGAR_FRACTION_ONE_SIXTH 90 +#define UC_VULGAR_FRACTION_ONE_THIRD 91 +#define UC_VULGAR_FRACTION_THREE_QUARTERS 92 +#define UC_VULGAR_FRACTION_TWO_THIRDS 93 +#define UM 94 + +#define L0 0 // layer_0 +#define L1 1 // layer_1 +#define L2 2 // layer_2 +#define L3 3 // layer_3 +#define L4 4 // layer_4 +#define L5 5 // layer_5 +#define L6 6 // layer_6 +#define L7 7 // layer_7 +#define L8 8 // layer_8 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* - * .-------------------------------------. .-------------------------------------. - * |MO(5)| 1 | 2 | 3 | 4 | 5 | ACUT | ! GRV | 6 | 7 | 8 | 9 | 0 |CIRC | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * |MO(4)| X | P | F | W | G | HOME | !TG(2) | H | J | K | L | Q | Z | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * |MO(1)| U | I | A | E | O |------! !------! S | N | R | T | D | SS | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * |MO(3)| UE | OE | AE | C | V | END | ! TAB | B | M |COMM| DOT| UP | Y | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| - * '------------------------'.-------------. .-------------.'------------------------' - * | INS |TG(2) | !M(UMS)| DELT | - * .------+------+------! !------+------+------. - * ! ! | APP | ! PGUP | ! ! - * ! ! !------! !------! ! ! - * | BSPC | LSFT | ESC | ! PGDN |ENTER |SPACE | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| + * '------------------------' '------------------------' + * .-----------. .-----------. + * |INS |TG(2)| !M(UM)|DELT | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | APP | ! PGUP| ! ! + * ! ! !-----! !-----! ! ! + * |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| + * '-----------------' '-----------------' */ [L0] = KEYMAP( - MO(5), - DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT, MO(4), - DE_X, DE_P, DE_F, DE_W, DE_G, KC_HOME, MO(1), - DE_U, DE_I, DE_A, DE_E, DE_O, MO(3), - DE_UE, DE_OE, DE_AE, DE_C, DE_V, KC_END, KC_TRNS, - KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL, KC_INS, - TG(2), KC_APP, - KC_BSPC, - KC_LSFT, KC_ESC, DE_GRV, - DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC, TG(2), - DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z, DE_S, - DE_N, DE_R, DE_T, DE_D, DE_SS, KC_TAB, - DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y, KC_LALT, - KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, M(UMS), - KC_DELT, KC_PGUP, - KC_PGDN, - KC_ENTER, KC_SPACE), + MO(5), DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT, + MO(4), DE_X, DE_P, DE_F, DE_W, DE_G, KC_HOME, + MO(1), DE_U, DE_I, DE_A, DE_E, DE_O, + MO(3), DE_UE, DE_OE, DE_AE, DE_C, DE_V, KC_END, + KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL, + KC_INS, TG(2), + KC_APP, + KC_BSPC, KC_LSFT, KC_ESC, + DE_GRV, DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC, + TG(2), DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z, + DE_S, DE_N, DE_R, DE_T, DE_D, DE_SS, + KC_TAB, DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y, + KC_LALT, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, + UM, KC_DELT, + KC_PGUP, + KC_PGDN, KC_ENTER, KC_SPACE +), /* - * .-------------------------------------. .-------------------------------------. - * | |EXLM|DQOT|PARA| | | | ! | | | | |RING| | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | |ASTR|PIPE|SLSH|LCBR|RCBR| | ! |HASH|LESS|MORE| |DQOT| | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | |UNDS|MINS|AMPR|LBRC|RBRC|------! !------!DLR |LPRN|RPRN|TILD|QUOT|QST | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | |PLUS| EQL| | | | ! |BSLS|PERC|SCLN|COLN| ↑ | | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! | | ← | ↓ | → | - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | |EXLM|DQOT|PARA| | | | | | | | |RING| | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | ← | ↓ | → | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L1] = KEYMAP( - KC_TRNS, - DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR, DE_RCBR, KC_TRNS, KC_TRNS, - DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC, DE_RBRC, KC_TRNS, - KC_TRNS, DE_PLUS, DE_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_RING, KC_TRNS, KC_TRNS, - DE_HASH, DE_LESS, DE_MORE, KC_TRNS, DE_DQOT, KC_TRNS, DE_DLR, - DE_LPRN, DE_RPRN, DE_TILD, DE_QUOT, DE_QST, KC_TRNS, - DE_BSLS, DE_PERC, DE_SCLN, DE_COLN, M(UC_UPWARDS_ARROW), KC_TRNS, KC_TRNS, - KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW), KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR, DE_RCBR, KC_TRNS, + KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC, DE_RBRC, + KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_RING, KC_TRNS, + KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS, DE_DQOT, KC_TRNS, + DE_DLR, DE_LPRN, DE_RPRN, DE_TILD, DE_QUOT, DE_QST, + KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN, M(UC_UPWARDS_ARROW), KC_TRNS, + KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW), + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), /* - * .-------------------------------------. .-------------------------------------. - * | | F1 | F2 | F3 | F4 | F5 | F11 | ! F12 | F6 | F7 | F8 | F9 |F10 |PEQL | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | | | | | | | | ! | | P7 | P8 | P9 |PAST|PSLS | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | |------! !------! | P4 | P5 | P6 |PMNS|PMNS | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | | | ! NLCK | | P1 | P2 | P3 |PPLS|PPLS | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L2] = KEYMAP( - KC_TRNS, - KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_F12, - KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PEQL, KC_TRNS, - KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, KC_TRNS, - KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PMNS, KC_NLCK, - KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PPLS, KC_P0, - KC_PCMM, KC_PDOT, KC_PENT, KC_PENT, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PEQL, + KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, + KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PMNS, + KC_NLCK, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PPLS, + KC_P0, KC_PCMM, KC_PDOT, KC_PENT, KC_PENT, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), /* - * .-------------------------------------. .-------------------------------------. - * | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | ! | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | | × | ½ | ÷ | ¼ | ⅕ | | ! | ⅙ | | ⅛ | | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | ± | AT |EURO| ∅ |------! !------! ∞ | ⁿ | ∃ | ∈ | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | ! |EXLM| | ∄ | ∉ | | | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L3] = KEYMAP( - KC_TRNS, - M(UC_SUP_ONE), M(UC_SUP_TWO), M(UC_SUP_THREE), M(UC_SUP_FOUR), M(UC_SUP_FIVE), M(UC_FOR_ALL), KC_TRNS, - M(UC_MULTIPLICATION_SIGN), M(UC_FR_ONE_HALF), M(UC_DIVISION_SIGN), M(UC_FR_ONE_QUARTER), M(UC_FR_ONE_FIFTH), KC_TRNS, KC_TRNS, - KC_TRNS, M(UC_PLUS_MINUS_SIGN), DE_AT, DE_EURO, M(UC_EMPTY_SET), KC_TRNS, - M(UC_FR_ONE_THIRD), M(UC_NOT_EQUAL_TO), M(UC_FR_TWO_THIRDS), M(UC_FR_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO), KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - M(UC_SUP_SIX), M(UC_SUP_SEVEN), M(UC_SUP_EIGHT), M(UC_SUP_NINE), M(UC_SUP_ZERO), KC_TRNS, KC_TRNS, - M(UC_FR_ONE_SIXTH), KC_TRNS, M(UC_FR_ONE_EIGHTH), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_INFINITY), - M(UC_SUP_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS), M(UC_ELEMENT_OF), KC_TRNS, KC_TRNS, KC_TRNS, - DE_EXLM, KC_TRNS, M(UC_THERE_DOES_NOT_EXIST), M(UC_NOT_AN_ELEMENT_OF), KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, M(UC_SUPERSCRIPT_ONE), M(UC_SUPERSCRIPT_TWO), M(UC_SUPERSCRIPT_THREE), M(UC_SUPERSCRIPT_FOUR), M(UC_SUPERSCRIPT_FIVE), M(UC_FOR_ALL), + KC_TRNS, M(UC_MULTIPLICATION_SIGN), M(UC_VULGAR_FRACTION_ONE_HALF), M(UC_DIVISION_SIGN), M(UC_VULGAR_FRACTION_ONE_QUARTER), M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS, + KC_TRNS, KC_TRNS, M(UC_PLUS_MINUS_SIGN), DE_AT, DE_EURO, M(UC_EMPTY_SET), + KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO), M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO), KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_SUPERSCRIPT_SIX), M(UC_SUPERSCRIPT_SEVEN), M(UC_SUPERSCRIPT_EIGHT), M(UC_SUPERSCRIPT_NINE), M(UC_SUPERSCRIPT_ZERO), KC_TRNS, + KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS, M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS, KC_TRNS, KC_TRNS, + M(UC_INFINITY), M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS), M(UC_ELEMENT_OF), KC_TRNS, KC_TRNS, + KC_TRNS, DE_EXLM, KC_TRNS, M(UC_THERE_DOES_NOT_EXIST), M(UC_NOT_AN_ELEMENT_OF), KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), /* - * .-------------------------------------. .-------------------------------------. - * | | ₁ | ₂ | ₃ | ₄ | ₅ | | ! | ₆ | ₇ | ₈ | ₉ | ₀ | | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | | χ | π | φ | ω | γ | | ! | η | ξ | κ | λ | | ζ | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | υ | ι | α | ε | ο |------! !------! σ | ν | ρ | τ | δ | ς | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | θ | | | | | ! | β | μ | | | | ψ | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | θ | | | | | | β | μ | | | | ψ | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L4] = KEYMAP( - KC_TRNS, - M(UC_SUB_ONE), M(UC_SUB_TWO), M(UC_SUB_THREE), M(UC_SUB_FOUR), M(UC_SUB_FIVE), KC_TRNS, KC_TRNS, - M(UC_GR_LC_CHI), M(UC_GR_LC_PI), M(UC_GR_LC_PHI), M(UC_GR_LC_OMEGA), M(UC_GR_LC_GAMMA), KC_TRNS, KC_TRNS, - M(UC_GR_LC_UPSILON), M(UC_GR_LC_IOTA), M(UC_GR_LC_ALPHA), M(UC_GR_LC_EPSILON), M(UC_GR_LC_OMICRON), KC_TRNS, - KC_TRNS, M(UC_GR_LC_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - M(UC_SUB_SIX), M(UC_SUB_SEVEN), M(UC_SUB_EIGHT), M(UC_SUB_NINE), M(UC_SUB_ZERO), KC_TRNS, KC_TRNS, - M(UC_GR_LC_ETA), M(UC_GR_LC_XI), M(UC_GR_LC_KAPPA), M(UC_GR_LC_LAMDA), KC_TRNS, M(UC_GR_LC_ZETA), M(UC_GR_LC_SIGMA), - M(UC_GR_LC_NU), M(UC_GR_LC_RHO), M(UC_GR_LC_TAU), M(UC_GR_LC_DELTA), M(UC_GR_LC_FINAL_SIGMA), KC_TRNS, - M(UC_GR_LC_BETA), M(UC_GR_LC_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GR_LC_PSI), KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, M(UC_SUBSCRIPT_ONE), M(UC_SUBSCRIPT_TWO), M(UC_SUBSCRIPT_THREE), M(UC_SUBSCRIPT_FOUR), M(UC_SUBSCRIPT_FIVE), KC_TRNS, + KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI), M(UC_GREEK_SMALL_LETTER_PI), M(UC_GREEK_SMALL_LETTER_PHI), M(UC_GREEK_SMALL_LETTER_OMEGA), M(UC_GREEK_SMALL_LETTER_GAMMA), KC_TRNS, + KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA), M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON), + KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_SUBSCRIPT_SIX), M(UC_SUBSCRIPT_SEVEN), M(UC_SUBSCRIPT_EIGHT), M(UC_SUBSCRIPT_NINE), M(UC_SUBSCRIPT_ZERO), KC_TRNS, + KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA), M(UC_GREEK_SMALL_LETTER_XI), M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_SMALL_LETTER_ZETA), + M(UC_GREEK_SMALL_LETTER_SIGMA), M(UC_GREEK_SMALL_LETTER_NU), M(UC_GREEK_SMALL_LETTER_RHO), M(UC_GREEK_SMALL_LETTER_TAU), M(UC_GREEK_SMALL_LETTER_DELTA), M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA), + KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA), M(UC_GREEK_SMALL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_PSI), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), /* - * .-------------------------------------. .-------------------------------------. - * | | | | | | | | ! | | | | | | | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | | Χ | Π | Φ | Ω | Γ | | ! | Η | Ξ | Κ | Λ | | Ζ | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | Υ | Ι | Α | Ε | Ο |------! !------! Σ | Ν | Ρ | Τ | Δ | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | Θ | | | | | ! | Β | Μ | | | | Ψ | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | | | | | | | | | | | | | | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | Θ | | | | | | Β | Μ | | | | Ψ | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L5] = KEYMAP( - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - M(UC_GR_UC_CHI), M(UC_GR_UC_PI), M(UC_GR_UC_PHI), M(UC_GR_UC_OMEGA), M(UC_GR_UC_GAMMA), KC_TRNS, KC_TRNS, - M(UC_GR_UC_UPSILON), M(UC_GR_UC_IOTA), M(UC_GR_UC_ALPHA), M(UC_GR_UC_EPSILON), M(UC_GR_UC_OMICRON), KC_TRNS, - KC_TRNS, M(UC_GR_UC_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - M(UC_GR_UC_ETA), M(UC_GR_UC_XI), M(UC_GR_UC_KAPPA), M(UC_GR_UC_LAMDA), KC_TRNS, M(UC_GR_UC_ZETA), M(UC_GR_UC_SIGMA), - M(UC_GR_UC_NU), M(UC_GR_UC_RHO), M(UC_GR_UC_TAU), M(UC_GR_UC_DELTA), KC_TRNS, KC_TRNS, - M(UC_GR_UC_BETA), M(UC_GR_UC_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GR_UC_PSI), KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI), M(UC_GREEK_CAPITAL_LETTER_PI), M(UC_GREEK_CAPITAL_LETTER_PHI), M(UC_GREEK_CAPITAL_LETTER_OMEGA), M(UC_GREEK_CAPITAL_LETTER_GAMMA), KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA), M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON), + KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA), M(UC_GREEK_CAPITAL_LETTER_XI), M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ZETA), + M(UC_GREEK_CAPITAL_LETTER_SIGMA), M(UC_GREEK_CAPITAL_LETTER_NU), M(UC_GREEK_CAPITAL_LETTER_RHO), M(UC_GREEK_CAPITAL_LETTER_TAU), M(UC_GREEK_CAPITAL_LETTER_DELTA), KC_TRNS, + KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA), M(UC_GREEK_CAPITAL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_PSI), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), /* - * .-------------------------------------. .-------------------------------------. - * | | | | | | | | ! | | | | | | | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | | | | | | | | ! | | | | | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | |------! !------! | | | | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | | | ! | | | | | | | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | | | | | | | | | | | | | | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | | | | | | | | | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | |-----!-----! | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | | | | | | | | | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L6] = KEYMAP( - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), /* - * .-------------------------------------. .-------------------------------------. - * | | | | | | | | ! | | | | | | | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | | | | | | | | ! | | | | | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | |------! !------! | | | | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | | | ! | | | | | | | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | | | | | | | | | | | | | | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | | | | | | | | | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | |-----!-----! | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | | | | | | | | | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L7] = KEYMAP( - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), /* - * .-------------------------------------. .-------------------------------------. - * | | | | | | | | ! | | | | | | | - * !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - * | | | | | | | | ! | | | | | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | |------! !------! | | | | | | - * !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - * | | | | | | | | ! | | | | | | | - * '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------'.-------------. .-------------.'------------------------' - * | | | ! | | - * .------+------+------! !------+------+------. - * ! ! | | ! | ! ! - * ! ! !------! !------! ! ! - * | | | | ! | | | - * '--------------------' '--------------------' + * .------------------------------------.------------------------------------. + * | | | | | | | | | | | | | | | + * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + * | | | | | | | | | | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | |-----!-----! | | | | | | + * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + * | | | | | | | | | | | | | | | + * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + * | | | | | | ! | | | | | + * '------------------------' '------------------------' + * .-----------. .-----------. + * | | | ! | | + * .-----+-----+-----! !-----+-----+-----. + * ! ! | | ! | ! ! + * ! ! !-----! !-----! ! ! + * | | | | ! | | | + * '-----------------' '-----------------' */ [L8] = KEYMAP( - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS), + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), }; -const uint16_t PROGMEM fn_actions[] = { -}; +const uint16_t PROGMEM fn_actions[] = {}; #define UC_MODE_WIN 0 #define UC_MODE_LINUX 1 @@ -453,791 +462,791 @@ const uint16_t PROGMEM fn_actions[] = { static uint16_t unicode_mode = UC_MODE_WIN; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { - if (!record->event.pressed) { - return MACRO_NONE; - } - // MACRODOWN only works in this function + if (!record->event.pressed) { + return MACRO_NONE; + } + // MACRODOWN only works in this function switch(id) { - case UMS: - unicode_mode = (unicode_mode + 1) % 2; - break; - - default: - break; + case UM: + unicode_mode = (unicode_mode + 1) % 2; + break; + + default: + break; } - if (unicode_mode == UC_MODE_WIN) { - switch(id) { - case UC_UPWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_1), U(LALT), END - ); + if (unicode_mode == UC_MODE_WIN) { + switch(id) { + case UC_GREEK_SMALL_LETTER_OMICRON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(F), U(LALT), END + ); case UC_LEFTWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_0), U(LALT), END - ); -case UC_DOWNWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_3), U(LALT), END - ); + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_0), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_RHO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_1), U(LALT), END + ); +case UC_SUBSCRIPT_THREE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_3), U(LALT), END + ); +case UC_VULGAR_FRACTION_ONE_EIGHTH: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(B), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_LAMDA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(B), U(LALT), END + ); +case UC_VULGAR_FRACTION_ONE_THIRD: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_3), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_XI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(E), U(LALT), END + ); +case UC_THERE_DOES_NOT_EXIST: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_4), U(LALT), END + ); +case UC_SUPERSCRIPT_ONE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_9), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_BETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_2), U(LALT), END + ); +case UC_SUBSCRIPT_FIVE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_5), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_IOTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_9), U(LALT), END + ); +case UC_VULGAR_FRACTION_ONE_FIFTH: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_5), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_PSI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_8), U(LALT), END + ); +case UC_SUBSCRIPT_NINE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_9), U(LALT), END + ); +case UC_SUPERSCRIPT_FOUR: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_4), U(LALT), END + ); case UC_RIGHTWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_2), U(LALT), END - ); -case UC_SUP_ONE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_9), U(LALT), END - ); -case UC_SUP_TWO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_2), U(LALT), END - ); -case UC_SUP_THREE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_3), U(LALT), END - ); -case UC_SUP_FOUR: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_4), U(LALT), END - ); -case UC_SUP_FIVE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_5), U(LALT), END - ); -case UC_FOR_ALL: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_0), U(LALT), END - ); -case UC_SUP_SIX: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_6), U(LALT), END - ); -case UC_SUP_SEVEN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_7), U(LALT), END - ); -case UC_SUP_EIGHT: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_8), U(LALT), END - ); -case UC_SUP_NINE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_9), U(LALT), END - ); -case UC_SUP_ZERO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_0), U(LALT), END - ); -case UC_MULTIPLICATION_SIGN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(D), T(KP_7), U(LALT), END - ); -case UC_FR_ONE_HALF: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(D), U(LALT), END - ); + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_2), U(LALT), END + ); +case UC_SUPERSCRIPT_SIX: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_6), U(LALT), END + ); +case UC_DOWNWARDS_ARROW: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_3), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_PI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_0), U(LALT), END + ); +case UC_SUPERSCRIPT_TWO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_2), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_OMEGA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_9), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_PSI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_8), U(LALT), END + ); +case UC_SUBSCRIPT_FOUR: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_4), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_NU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(D), U(LALT), END + ); case UC_DIVISION_SIGN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(F), T(KP_7), U(LALT), END - ); -case UC_FR_ONE_QUARTER: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(C), U(LALT), END - ); -case UC_FR_ONE_FIFTH: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_5), U(LALT), END - ); -case UC_FR_ONE_SIXTH: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_9), U(LALT), END - ); -case UC_FR_ONE_EIGHTH: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(B), U(LALT), END - ); -case UC_PLUS_MINUS_SIGN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_1), U(LALT), END - ); -case UC_EMPTY_SET: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_5), U(LALT), END - ); + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(F), T(KP_7), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_SIGMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_3), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_RHO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_1), U(LALT), END + ); +case UC_VULGAR_FRACTION_ONE_SIXTH: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_9), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_GAMMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_3), U(LALT), END + ); +case UC_VULGAR_FRACTION_TWO_THIRDS: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_4), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_NU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(D), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_ZETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_6), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_EPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_5), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_KAPPA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(A), U(LALT), END + ); +case UC_SUPERSCRIPT_SEVEN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_7), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_PI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_0), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_FINAL_SIGMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_2), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_XI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(E), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_THETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_8), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_ETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_7), U(LALT), END + ); +case UC_SUBSCRIPT_TWO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_2), U(LALT), END + ); +case UC_ASYMPTOTICALLY_EQUAL_TO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_4), T(KP_3), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_ALPHA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_1), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_PHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_6), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_PHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_6), U(LALT), END + ); case UC_INFINITY: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_1), T(E), U(LALT), END - ); -case UC_SUP_LATIN_SMALL_LETTER_N: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(F), U(LALT), END - ); -case UC_THERE_EXISTS: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_3), U(LALT), END - ); + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_1), T(E), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_OMICRON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(F), U(LALT), END + ); case UC_ELEMENT_OF: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_8), U(LALT), END - ); -case UC_FR_ONE_THIRD: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_3), U(LALT), END - ); -case UC_NOT_EQUAL_TO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_6), T(KP_0), U(LALT), END - ); -case UC_FR_TWO_THIRDS: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_4), U(LALT), END - ); -case UC_FR_THREE_QUARTERS: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(E), U(LALT), END - ); -case UC_ASYMPTOTICALLY_EQUAL_TO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_4), T(KP_3), U(LALT), END - ); -case UC_THERE_DOES_NOT_EXIST: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_4), U(LALT), END - ); + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_8), U(LALT), END + ); +case UC_MULTIPLICATION_SIGN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(D), T(KP_7), U(LALT), END + ); +case UC_SUBSCRIPT_ZERO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_0), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_SIGMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_3), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_OMEGA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_9), U(LALT), END + ); +case UC_SUBSCRIPT_ONE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_1), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_ZETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_6), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_TAU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_4), U(LALT), END + ); +case UC_SUPERSCRIPT_FIVE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_5), U(LALT), END + ); +case UC_THERE_EXISTS: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_3), U(LALT), END + ); +case UC_PLUS_MINUS_SIGN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_1), U(LALT), END + ); +case UC_VULGAR_FRACTION_THREE_QUARTERS: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(E), U(LALT), END + ); +case UC_SUPERSCRIPT_THREE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_3), U(LALT), END + ); +case UC_EMPTY_SET: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_5), U(LALT), END + ); +case UC_UPWARDS_ARROW: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_1), U(LALT), END + ); +case UC_SUPERSCRIPT_NINE: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_9), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_DELTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_4), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_MU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(C), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_KAPPA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(A), U(LALT), END + ); +case UC_SUBSCRIPT_EIGHT: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_8), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_ALPHA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_1), U(LALT), END + ); +case UC_SUBSCRIPT_SEVEN: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_7), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_BETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_2), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_ETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_7), U(LALT), END + ); +case UC_SUPERSCRIPT_EIGHT: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_8), U(LALT), END + ); +case UC_SUPERSCRIPT_ZERO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_0), U(LALT), END + ); case UC_NOT_AN_ELEMENT_OF: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_9), U(LALT), END - ); -case UC_SUB_ONE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_1), U(LALT), END - ); -case UC_SUB_TWO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_2), U(LALT), END - ); -case UC_SUB_THREE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_3), U(LALT), END - ); -case UC_SUB_FOUR: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_4), U(LALT), END - ); -case UC_SUB_FIVE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_5), U(LALT), END - ); -case UC_SUB_SIX: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_6), U(LALT), END - ); -case UC_SUB_SEVEN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_7), U(LALT), END - ); -case UC_SUB_EIGHT: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_8), U(LALT), END - ); -case UC_SUB_NINE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_9), U(LALT), END - ); -case UC_SUB_ZERO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_0), U(LALT), END - ); -case UC_GR_LC_CHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_7), U(LALT), END - ); -case UC_GR_LC_PI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_0), U(LALT), END - ); -case UC_GR_LC_PHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_6), U(LALT), END - ); -case UC_GR_LC_OMEGA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_9), U(LALT), END - ); -case UC_GR_LC_GAMMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_3), U(LALT), END - ); -case UC_GR_LC_ETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_7), U(LALT), END - ); -case UC_GR_LC_XI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(E), U(LALT), END - ); -case UC_GR_LC_KAPPA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(A), U(LALT), END - ); -case UC_GR_LC_LAMDA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(B), U(LALT), END - ); -case UC_GR_LC_ZETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_6), U(LALT), END - ); -case UC_GR_LC_UPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_5), U(LALT), END - ); -case UC_GR_LC_IOTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_9), U(LALT), END - ); -case UC_GR_LC_ALPHA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_1), U(LALT), END - ); -case UC_GR_LC_EPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_5), U(LALT), END - ); -case UC_GR_LC_OMICRON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(F), U(LALT), END - ); -case UC_GR_LC_SIGMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_3), U(LALT), END - ); -case UC_GR_LC_NU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(D), U(LALT), END - ); -case UC_GR_LC_RHO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_1), U(LALT), END - ); -case UC_GR_LC_TAU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_4), U(LALT), END - ); -case UC_GR_LC_DELTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_4), U(LALT), END - ); -case UC_GR_LC_FINAL_SIGMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_2), U(LALT), END - ); -case UC_GR_LC_THETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_8), U(LALT), END - ); -case UC_GR_LC_BETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_2), U(LALT), END - ); -case UC_GR_LC_MU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(C), U(LALT), END - ); -case UC_GR_LC_PSI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_8), U(LALT), END - ); -case UC_GR_UC_CHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_7), U(LALT), END - ); -case UC_GR_UC_PI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_0), U(LALT), END - ); -case UC_GR_UC_PHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_6), U(LALT), END - ); -case UC_GR_UC_OMEGA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_9), U(LALT), END - ); -case UC_GR_UC_GAMMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_3), U(LALT), END - ); -case UC_GR_UC_ETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_7), U(LALT), END - ); -case UC_GR_UC_XI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(E), U(LALT), END - ); -case UC_GR_UC_KAPPA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(A), U(LALT), END - ); -case UC_GR_UC_LAMDA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(B), U(LALT), END - ); -case UC_GR_UC_ZETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_6), U(LALT), END - ); -case UC_GR_UC_UPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_5), U(LALT), END - ); -case UC_GR_UC_IOTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_9), U(LALT), END - ); -case UC_GR_UC_ALPHA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_1), U(LALT), END - ); -case UC_GR_UC_EPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_5), U(LALT), END - ); -case UC_GR_UC_OMICRON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(F), U(LALT), END - ); -case UC_GR_UC_SIGMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_3), U(LALT), END - ); -case UC_GR_UC_NU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(D), U(LALT), END - ); -case UC_GR_UC_RHO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_1), U(LALT), END - ); -case UC_GR_UC_TAU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_4), U(LALT), END - ); -case UC_GR_UC_DELTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_4), U(LALT), END - ); -case UC_GR_UC_THETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_8), U(LALT), END - ); -case UC_GR_UC_BETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_2), U(LALT), END - ); -case UC_GR_UC_MU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(C), U(LALT), END - ); -case UC_GR_UC_PSI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_8), U(LALT), END - ); - default: - break; - } - } else if (unicode_mode == UC_MODE_LINUX) { - switch(id) { - case UC_UPWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_1), T(KP_ENTER), END - ); + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_9), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_UPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_5), U(LALT), END + ); +case UC_NOT_EQUAL_TO: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_6), T(KP_0), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_CHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_7), U(LALT), END + ); +case UC_FOR_ALL: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_0), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_TAU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_4), U(LALT), END + ); +case UC_VULGAR_FRACTION_ONE_QUARTER: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(C), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_CHI: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_7), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_THETA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_8), U(LALT), END + ); +case UC_GREEK_SMALL_LETTER_IOTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_9), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_LAMDA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(B), U(LALT), END + ); +case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(F), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_UPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_5), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_MU: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(C), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_EPSILON: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_5), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_GAMMA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_3), U(LALT), END + ); +case UC_SUBSCRIPT_SIX: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_6), U(LALT), END + ); +case UC_GREEK_CAPITAL_LETTER_DELTA: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_4), U(LALT), END + ); +case UC_VULGAR_FRACTION_ONE_HALF: + return MACRODOWN( + D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(D), U(LALT), END + ); + default: + break; + } + } else if (unicode_mode == UC_MODE_LINUX) { + switch(id) { + case UC_GREEK_SMALL_LETTER_OMICRON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(F), T(KP_ENTER), END + ); case UC_LEFTWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_0), T(KP_ENTER), END - ); -case UC_DOWNWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_3), T(KP_ENTER), END - ); + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_0), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_RHO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_1), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_THREE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_3), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_ONE_EIGHTH: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(B), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_LAMDA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(B), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_ONE_THIRD: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_3), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_XI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(E), T(KP_ENTER), END + ); +case UC_THERE_DOES_NOT_EXIST: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_4), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_ONE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_9), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_BETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_2), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_FIVE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_5), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_IOTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_9), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_ONE_FIFTH: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_5), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_PSI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_8), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_NINE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_9), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_FOUR: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_4), T(KP_ENTER), END + ); case UC_RIGHTWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_2), T(KP_ENTER), END - ); -case UC_SUP_ONE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_9), T(KP_ENTER), END - ); -case UC_SUP_TWO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_2), T(KP_ENTER), END - ); -case UC_SUP_THREE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_3), T(KP_ENTER), END - ); -case UC_SUP_FOUR: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_4), T(KP_ENTER), END - ); -case UC_SUP_FIVE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_5), T(KP_ENTER), END - ); -case UC_FOR_ALL: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_0), T(KP_ENTER), END - ); -case UC_SUP_SIX: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_6), T(KP_ENTER), END - ); -case UC_SUP_SEVEN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_7), T(KP_ENTER), END - ); -case UC_SUP_EIGHT: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_8), T(KP_ENTER), END - ); -case UC_SUP_NINE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_9), T(KP_ENTER), END - ); -case UC_SUP_ZERO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_0), T(KP_ENTER), END - ); -case UC_MULTIPLICATION_SIGN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(D), T(KP_7), T(KP_ENTER), END - ); -case UC_FR_ONE_HALF: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(D), T(KP_ENTER), END - ); + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_2), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_SIX: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_6), T(KP_ENTER), END + ); +case UC_DOWNWARDS_ARROW: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_3), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_PI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_0), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_TWO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_2), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_OMEGA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_9), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_PSI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_8), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_FOUR: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_4), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_NU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(D), T(KP_ENTER), END + ); case UC_DIVISION_SIGN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(F), T(KP_7), T(KP_ENTER), END - ); -case UC_FR_ONE_QUARTER: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(C), T(KP_ENTER), END - ); -case UC_FR_ONE_FIFTH: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_5), T(KP_ENTER), END - ); -case UC_FR_ONE_SIXTH: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_9), T(KP_ENTER), END - ); -case UC_FR_ONE_EIGHTH: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(B), T(KP_ENTER), END - ); -case UC_PLUS_MINUS_SIGN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_1), T(KP_ENTER), END - ); -case UC_EMPTY_SET: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_5), T(KP_ENTER), END - ); + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(F), T(KP_7), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_SIGMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_3), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_RHO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_1), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_ONE_SIXTH: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_9), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_GAMMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_3), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_TWO_THIRDS: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_4), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_NU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(D), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_ZETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_6), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_EPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_5), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_KAPPA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(A), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_SEVEN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_7), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_PI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_0), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_FINAL_SIGMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_2), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_XI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(E), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_THETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_8), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_ETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_7), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_TWO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_2), T(KP_ENTER), END + ); +case UC_ASYMPTOTICALLY_EQUAL_TO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_4), T(KP_3), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_ALPHA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_1), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_PHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_6), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_PHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_6), T(KP_ENTER), END + ); case UC_INFINITY: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_1), T(E), T(KP_ENTER), END - ); -case UC_SUP_LATIN_SMALL_LETTER_N: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(F), T(KP_ENTER), END - ); -case UC_THERE_EXISTS: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_3), T(KP_ENTER), END - ); + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_1), T(E), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_OMICRON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(F), T(KP_ENTER), END + ); case UC_ELEMENT_OF: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_8), T(KP_ENTER), END - ); -case UC_FR_ONE_THIRD: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_3), T(KP_ENTER), END - ); -case UC_NOT_EQUAL_TO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_6), T(KP_0), T(KP_ENTER), END - ); -case UC_FR_TWO_THIRDS: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_4), T(KP_ENTER), END - ); -case UC_FR_THREE_QUARTERS: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(E), T(KP_ENTER), END - ); -case UC_ASYMPTOTICALLY_EQUAL_TO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_4), T(KP_3), T(KP_ENTER), END - ); -case UC_THERE_DOES_NOT_EXIST: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_4), T(KP_ENTER), END - ); + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_8), T(KP_ENTER), END + ); +case UC_MULTIPLICATION_SIGN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(D), T(KP_7), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_ZERO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_0), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_SIGMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_3), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_OMEGA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_9), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_ONE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_1), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_ZETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_6), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_TAU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_4), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_FIVE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_5), T(KP_ENTER), END + ); +case UC_THERE_EXISTS: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_3), T(KP_ENTER), END + ); +case UC_PLUS_MINUS_SIGN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_1), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_THREE_QUARTERS: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(E), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_THREE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_3), T(KP_ENTER), END + ); +case UC_EMPTY_SET: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_5), T(KP_ENTER), END + ); +case UC_UPWARDS_ARROW: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_1), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_NINE: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_9), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_DELTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_4), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_MU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(C), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_KAPPA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(A), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_EIGHT: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_8), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_ALPHA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_1), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_SEVEN: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_7), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_BETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_2), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_ETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_7), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_EIGHT: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_8), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_ZERO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_0), T(KP_ENTER), END + ); case UC_NOT_AN_ELEMENT_OF: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_9), T(KP_ENTER), END - ); -case UC_SUB_ONE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_1), T(KP_ENTER), END - ); -case UC_SUB_TWO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_2), T(KP_ENTER), END - ); -case UC_SUB_THREE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_3), T(KP_ENTER), END - ); -case UC_SUB_FOUR: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_4), T(KP_ENTER), END - ); -case UC_SUB_FIVE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_5), T(KP_ENTER), END - ); -case UC_SUB_SIX: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_6), T(KP_ENTER), END - ); -case UC_SUB_SEVEN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_7), T(KP_ENTER), END - ); -case UC_SUB_EIGHT: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_8), T(KP_ENTER), END - ); -case UC_SUB_NINE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_9), T(KP_ENTER), END - ); -case UC_SUB_ZERO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_0), T(KP_ENTER), END - ); -case UC_GR_LC_CHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_7), T(KP_ENTER), END - ); -case UC_GR_LC_PI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_0), T(KP_ENTER), END - ); -case UC_GR_LC_PHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_6), T(KP_ENTER), END - ); -case UC_GR_LC_OMEGA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_9), T(KP_ENTER), END - ); -case UC_GR_LC_GAMMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_3), T(KP_ENTER), END - ); -case UC_GR_LC_ETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_7), T(KP_ENTER), END - ); -case UC_GR_LC_XI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(E), T(KP_ENTER), END - ); -case UC_GR_LC_KAPPA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(A), T(KP_ENTER), END - ); -case UC_GR_LC_LAMDA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(B), T(KP_ENTER), END - ); -case UC_GR_LC_ZETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_6), T(KP_ENTER), END - ); -case UC_GR_LC_UPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_5), T(KP_ENTER), END - ); -case UC_GR_LC_IOTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_9), T(KP_ENTER), END - ); -case UC_GR_LC_ALPHA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_1), T(KP_ENTER), END - ); -case UC_GR_LC_EPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_5), T(KP_ENTER), END - ); -case UC_GR_LC_OMICRON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(F), T(KP_ENTER), END - ); -case UC_GR_LC_SIGMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_3), T(KP_ENTER), END - ); -case UC_GR_LC_NU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(D), T(KP_ENTER), END - ); -case UC_GR_LC_RHO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_1), T(KP_ENTER), END - ); -case UC_GR_LC_TAU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_4), T(KP_ENTER), END - ); -case UC_GR_LC_DELTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_4), T(KP_ENTER), END - ); -case UC_GR_LC_FINAL_SIGMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_2), T(KP_ENTER), END - ); -case UC_GR_LC_THETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_8), T(KP_ENTER), END - ); -case UC_GR_LC_BETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_2), T(KP_ENTER), END - ); -case UC_GR_LC_MU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(C), T(KP_ENTER), END - ); -case UC_GR_LC_PSI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_8), T(KP_ENTER), END - ); -case UC_GR_UC_CHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_7), T(KP_ENTER), END - ); -case UC_GR_UC_PI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_0), T(KP_ENTER), END - ); -case UC_GR_UC_PHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_6), T(KP_ENTER), END - ); -case UC_GR_UC_OMEGA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_9), T(KP_ENTER), END - ); -case UC_GR_UC_GAMMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_3), T(KP_ENTER), END - ); -case UC_GR_UC_ETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_7), T(KP_ENTER), END - ); -case UC_GR_UC_XI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(E), T(KP_ENTER), END - ); -case UC_GR_UC_KAPPA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(A), T(KP_ENTER), END - ); -case UC_GR_UC_LAMDA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(B), T(KP_ENTER), END - ); -case UC_GR_UC_ZETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_6), T(KP_ENTER), END - ); -case UC_GR_UC_UPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_5), T(KP_ENTER), END - ); -case UC_GR_UC_IOTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_9), T(KP_ENTER), END - ); -case UC_GR_UC_ALPHA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_1), T(KP_ENTER), END - ); -case UC_GR_UC_EPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_5), T(KP_ENTER), END - ); -case UC_GR_UC_OMICRON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(F), T(KP_ENTER), END - ); -case UC_GR_UC_SIGMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_3), T(KP_ENTER), END - ); -case UC_GR_UC_NU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(D), T(KP_ENTER), END - ); -case UC_GR_UC_RHO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_1), T(KP_ENTER), END - ); -case UC_GR_UC_TAU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_4), T(KP_ENTER), END - ); -case UC_GR_UC_DELTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_4), T(KP_ENTER), END - ); -case UC_GR_UC_THETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_8), T(KP_ENTER), END - ); -case UC_GR_UC_BETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_2), T(KP_ENTER), END - ); -case UC_GR_UC_MU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(C), T(KP_ENTER), END - ); -case UC_GR_UC_PSI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_8), T(KP_ENTER), END - ); - default: - break; - } - } + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_9), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_UPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_5), T(KP_ENTER), END + ); +case UC_NOT_EQUAL_TO: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_6), T(KP_0), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_CHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_7), T(KP_ENTER), END + ); +case UC_FOR_ALL: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_0), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_TAU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_4), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_ONE_QUARTER: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(C), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_CHI: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_7), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_THETA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_8), T(KP_ENTER), END + ); +case UC_GREEK_SMALL_LETTER_IOTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_9), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_LAMDA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(B), T(KP_ENTER), END + ); +case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(F), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_UPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_5), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_MU: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(C), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_EPSILON: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_5), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_GAMMA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_3), T(KP_ENTER), END + ); +case UC_SUBSCRIPT_SIX: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_6), T(KP_ENTER), END + ); +case UC_GREEK_CAPITAL_LETTER_DELTA: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_4), T(KP_ENTER), END + ); +case UC_VULGAR_FRACTION_ONE_HALF: + return MACRODOWN( + D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(D), T(KP_ENTER), END + ); + default: + break; + } + } return MACRO_NONE; }; // Runs just one time when the keyboard initializes. -void * matrix_init_user(void) { +void matrix_init_user(void) { }; // Runs constantly in the background, in a loop. -void * matrix_scan_user(void) { +void matrix_scan_user(void) { uint8_t layer = biton32(layer_state); ergodox_board_led_off(); diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md index 9c0c12528b..1dc019ab05 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md @@ -1,8 +1,14 @@ # ManuNeo Ergodox Keyboard Layout +Compile this file to a `keymap.c` file using `compile_keymap.py` + + compile_keymap.py keymaps/german-manuneo/keymap.md + + # Layout Config { + "layout": "ergodox_ez", "includes_dir": "quantum/", "keymaps_includes": [ "ergodox_ez.h", @@ -10,22 +16,14 @@ "keymap_common.h", "keymap_extras/keymap_german.h", ], - "keymap_indexes": [ - [ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44], - [ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51], - [14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57], - [20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64], - [27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69], - [ 32, 33], [70, 71 ], - [ 34], [72 ], - [ 35, 36, 37], [73, 74, 75 ], - ], "key_prefixes": ["DE_", "KC_"], "filler": "-+.'!x", "separator": "|", "macros": { - "MUC": "", + // TODO: implement macros + // "MUC": "", }, + // TODO: implement default unicode mode } @@ -34,189 +32,201 @@ ## Layer 0 - .-------------------------------------. .-------------------------------------. - |MO(5)| 1 | 2 | 3 | 4 | 5 | ACUT | ! GRV | 6 | 7 | 8 | 9 | 0 |CIRC | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - |MO(4)| X | P | F | W | G | HOME | !TG(2) | H | J | K | L | Q | Z | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - |MO(1)| U | I | A | E | O |------! !------! S | N | R | T | D | SS | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - |MO(3)| UE | OE | AE | C | V | END | ! TAB | B | M |COMM| DOT| UP | Y | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| - '------------------------'.-------------. .-------------.'------------------------' - | INS |TG(2) | !M(UMS)| DELT | - .------+------+------! !------+------+------. - ! ! | APP | ! PGUP | ! ! - ! ! !------! !------! ! ! - | BSPC | LSFT | ESC | ! PGDN |ENTER |SPACE | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| + '------------------------' '------------------------' + .-----------. .-----------. + |INS |TG(2)| !M(UM)|DELT | + .-----+-----+-----! !-----+-----+-----. + ! ! | APP | ! PGUP| ! ! + ! ! !-----! !-----! ! ! + |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE| + '-----------------' '-----------------' ## Layer 1 - .-------------------------------------. .-------------------------------------. - | |EXLM|DQOT|PARA| | | | ! | | | | |RING| | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | |ASTR|PIPE|SLSH|LCBR|RCBR| | ! |HASH|LESS|MORE| |DQOT| | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | |UNDS|MINS|AMPR|LBRC|RBRC|------! !------!DLR |LPRN|RPRN|TILD|QUOT|QST | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | |PLUS| EQL| | | | ! |BSLS|PERC|SCLN|COLN| ↑ | | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! | | ← | ↓ | → | - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + | |EXLM|DQOT|PARA| | | | | | | | |RING| | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | ← | ↓ | → | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' ## Layer 2 - .-------------------------------------. .-------------------------------------. - | | F1 | F2 | F3 | F4 | F5 | F11 | ! F12 | F6 | F7 | F8 | F9 |F10 |PEQL | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | | | | | | | | ! | | P7 | P8 | P9 |PAST|PSLS | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | |------! !------! | P4 | P5 | P6 |PMNS|PMNS | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | | | ! NLCK | | P1 | P2 | P3 |PPLS|PPLS | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! P0 |PCMM|PDOT|PENT|PENT| + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + ## Layer 3 http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html - .-------------------------------------. .-------------------------------------. - | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | ! | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | | × | ½ | ÷ | ¼ | ⅕ | | ! | ⅙ | | ⅛ | | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | ± | AT |EURO| ∅ |------! !------! ∞ | ⁿ | ∃ | ∈ | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | ! |EXLM| | ∄ | ∉ | | | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + | | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' ## Layer 4 - .-------------------------------------. .-------------------------------------. - | | ₁ | ₂ | ₃ | ₄ | ₅ | | ! | ₆ | ₇ | ₈ | ₉ | ₀ | | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | | χ | π | φ | ω | γ | | ! | η | ξ | κ | λ | | ζ | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | υ | ι | α | ε | ο |------! !------! σ | ν | ρ | τ | δ | ς | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | θ | | | | | ! | β | μ | | | | ψ | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + + .------------------------------------.------------------------------------. + | | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | θ | | | | | | β | μ | | | | ψ | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' ## Layer 5 - .-------------------------------------. .-------------------------------------. - | | | | | | | | ! | | | | | | | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | | Χ | Π | Φ | Ω | Γ | | ! | Η | Ξ | Κ | Λ | | Ζ | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | Υ | Ι | Α | Ε | Ο |------! !------! Σ | Ν | Ρ | Τ | Δ | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | Θ | | | | | ! | Β | Μ | | | | Ψ | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + | | | | | | | | | | | | | | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | Θ | | | | | | Β | Μ | | | | Ψ | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' ## Layer 6 - .-------------------------------------. .-------------------------------------. - | | | | | | | | ! | | | | | | | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | | | | | | | | ! | | | | | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | |------! !------! | | | | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | | | ! | | | | | | | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + | | | | | | | | | | | | | | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | | | | | | | | | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | |-----!-----! | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | | | | | | | | | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' + ## Layer 7 - .-------------------------------------. .-------------------------------------. - | | | | | | | | ! | | | | | | | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | | | | | | | | ! | | | | | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | |------! !------! | | | | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | | | ! | | | | | | | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + | | | | | | | | | | | | | | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | | | | | | | | | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | |-----!-----! | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | | | | | | | | | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' ## Layer 8 - .-------------------------------------. .-------------------------------------. - | | | | | | | | ! | | | | | | | - !-----+----+----+----+----+-----------! !------+----+----+----+----+----+-----! - | | | | | | | | ! | | | | | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | |------! !------! | | | | | | - !-----+----+----+----x----x----! ! ! !----x----x----+----+----+-----! - | | | | | | | | ! | | | | | | | - '-----+----+----+----+----+-----------' '-----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------'.-------------. .-------------.'------------------------' - | | | ! | | - .------+------+------! !------+------+------. - ! ! | | ! | ! ! - ! ! !------! !------! ! ! - | | | | ! | | | - '--------------------' '--------------------' + .------------------------------------.------------------------------------. + | | | | | | | | | | | | | | | + !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! + | | | | | | | | | | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | |-----!-----! | | | | | | + !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! + | | | | | | | | | | | | | | | + '-----+----+----+----+----+----------'----------+----+----+----+----+-----' + | | | | | | ! | | | | | + '------------------------' '------------------------' + .-----------. .-----------. + | | | ! | | + .-----+-----+-----! !-----+-----+-----. + ! ! | | ! | ! ! + ! ! !-----! !-----! ! ! + | | | | ! | | | + '-----------------' '-----------------' From a2d3c0bd93bf97264bb94510c126d4fd21b7b135 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Mon, 28 Mar 2016 23:42:55 +0200 Subject: [PATCH 3/5] add hex file --- .../keymaps/german-manuneo/german-manuneo.hex | 1624 +++++++++++++++++ 1 file changed, 1624 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex b/keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex new file mode 100644 index 0000000000..cb8b7fa8d4 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex @@ -0,0 +1,1624 @@ +:100000000C94BD0F0C9401100C9401100C94011071 +:100010000C9401100C9401100C9401100C9401101C +:100020000C9401100C9401100C94791B0C944B1C33 +:100030000C9401100C9401100C9401100C940110FC +:100040000C9401100C94D6300C9401100C940110F7 +:100050000C9401100C94782A0C9401100C9401104B +:100060000C9401100C9401100C9401100C940110CC +:100070000C9401100C9401100C9401100C940110BC +:100080000C9401100C9401100C9401100C940110AC +:100090000C9401100C9401100C9401100C9401109C +:1000A0000C9401100C9401100C940110AB107810FA +:1000B0006310BD10E4101711F910FF1014113E1158 +:1000C0003511021138114E10F3102911321175102B +:1000D0006C10BA10B11099106F103010C6101A11B0 +:1000E00023112F119F10CF10AE1048102011ED10CA +:1000F0009010A5109C108410261193103910F01048 +:100100008A10C9106C12B410661054107E107B1047 +:10011000D210A2100E113F108D10B7102D10C0106C +:100120000B111111DB105D10F6104B1072105710EF +:10013000CC10FC103B113310A810C3100511D510C2 +:100140005A102C11EA10451096106010E110691039 +:1001500008114210D810E7103610511041111D112E +:1001600081103C10DE108710D311A0118B11E51106 +:100170000C123F12211227123C1266125D122A1233 +:10018000601276111B1251125A129D119411E21134 +:10019000D911C11197115811EE1142124B12571279 +:1001A000C711F711D611701148121512B811CD11DF +:1001B000C411AC114E12BB1161111812B211F11120 +:1001C0006F12DC118E117C11A611A311FA11CA1144 +:1001D00036126711B511DF115511E81133123912BA +:1001E000031285111E1273119A117F11F41124123A +:1001F00063125B11D011EB112D12FD1182115412FB +:1002000012126D11BE1188110912911130126A116A +:1002100000120F125E11791169124512A9116411B1 +:100220000612AF11B01CD21CBD1DD21CBD1D141D69 +:10023000371DBD1D8C1D9F1D8C208C20BA20BA201F +:10024000FC203821382338235021382347224722E5 +:10025000122338233823262301E001E10118021874 +:1002600002E002E10162026201620262010502052E +:1002700001070207015802580001E001E1011802DC +:100280001802E002E101620262015B025B016102AD +:1002900061015C025C015802580001E001E10118B3 +:1002A000021802E002E1015A025A01620262016090 +:1002B0000260015E025E015802580001E001E101A6 +:1002C00018021802E002E101620262015B025B01B6 +:1002D000610261015B025B015802580001E001E12B +:1002E0000118021802E002E101620262015B025B96 +:1002F00001610261015D025D015802580001E001E7 +:10030000E10118021802E002E101620262015B02EF +:100310005B0161026101060206015802580001E01A +:1003200001E10118021802E002E101620262015BD0 +:10033000025B01040204015D025D015802580001E4 +:10034000E001E10118021802E002E1015A025A013B +:10035000620262015F025F0109020901580258004E +:1003600001E001E10118021802E002E1016202620B +:10037000015B025B0161026101050205015802583F +:100380000001E001E10118021802E002E10162024D +:1003900062015B025B010502050161026101580215 +:1003A000580001E001E10118021802E002E10162D7 +:1003B0000262015B025B016102610160026001583F +:1003C00002580001E001E10118021802E002E10117 +:1003D000620262015B025B01060206015F025F01CD +:1003E0005802580001E001E10118021802E002E1A0 +:1003F0000162026201620262010502050106020653 +:10040000015802580001E001E10118021802E0025F +:10041000E101620262015B025B01040204015C0211 +:100420005C015802580001E001E10118021802E0E5 +:1004300002E1015A025A015A025A01620262016241 +:100440000262015802580001E001E101180218029D +:10045000E002E101620262015B025B01040204014D +:100460005F025F015802580001E001E10118021823 +:1004700002E002E1015A025A015A025A015E025E8A +:1004800001620262015802580001E001E101180214 +:100490001802E002E101620262015B025B010602F6 +:1004A00006015D025D015802580001E001E10118FA +:1004B000021802E002E1015A025A015A025A01628C +:1004C000026201610261015802580001E001E1018C +:1004D00018021802E002E1015A025A0162026201A6 +:1004E0005F025F01620262015802580001E001E10F +:1004F0000118021802E002E1015A025A0162026286 +:10050000015F025F01600260015802580001E001D2 +:10051000E10118021802E002E101620262015B02DD +:100520005B01610261015F025F015802580001E056 +:1005300001E10118021802E002E101620262015BBE +:10054000025B01610261015A025A0158025800011E +:10055000E001E10118021802E002E1015A025A0129 +:1005600062026201600260015F025F01580258008E +:1005700001E001E10118021802E002E101620262F9 +:10058000015B025B01610261015902590158025885 +:100590000001E001E10118021802E002E1015A0243 +:1005A0005A01620262016002600160026001580249 +:1005B000580001E001E10118021802E002E10162C5 +:1005C0000262015B025B01610261010402040158E5 +:1005D00002580001E001E10118021802E002E10105 +:1005E000620262015B025B0105020501060206016F +:1005F0005802580001E001E10118021802E002E18E +:1006000001620262015B025B01050205015C025CA2 +:10061000015802580001E001E10118021802E0024D +:10062000E1015A025A01620262015F025F01610246 +:1006300061015802580001E001E10118021802E0CE +:1006400002E1015A025A015902590161026101593C +:100650000259015802580001E001E1011802180294 +:10066000E002E1015A025A015A025A016202620191 +:100670005D025D015802580001E001E10118021815 +:1006800002E002E10162026201620262010502050A +:10069000015B025B015802580001E001E101180210 +:1006A0001802E002E10162026201620262010502D7 +:1006B0000501080208015802580001E001E1011893 +:1006C000021802E002E101620262016202620105B7 +:1006D000020501590259015802580001E001E101E7 +:1006E00018021802E002E1015A025A015A025A01A4 +:1006F000620262015B025B015802580001E001E105 +:100700000118021802E002E1015A025A0162026273 +:10071000015F025F015D025D015802580001E001C6 +:10072000E10118021802E002E101620262015B02CB +:100730005B01060206015C025C015802580001E000 +:1007400001E10118021802E002E101620262015BAC +:10075000025B01610261015E025E01580258000104 +:10076000E001E10118021802E002E1015A025A0117 +:100770006202620160026001590259015802580088 +:1007800001E001E10118021802E002E101620262E7 +:10079000015B025B01060206016102610158025819 +:1007A0000001E001E10118021802E002E101620229 +:1007B00062015B025B01040204015B025B015802FF +:1007C000580001E001E10118021802E002E1015ABB +:1007D000025A016202620160026001620262015813 +:1007E00002580001E001E10118021802E002E101F3 +:1007F0006202620162026201070207015F025F0199 +:100800005802580001E001E10118021802E002E17B +:10081000015A025A015A025A0162026201600260E0 +:10082000015802580001E001E10118021802E0023B +:10083000E101620262015B025B0161026101090286 +:1008400009015802580001E001E10118021802E014 +:1008500002E1015A025A015A025A01590259010889 +:100860000208015802580001E001E10118021802D3 +:10087000E002E101620262015B025B010602060125 +:100880005E025E015802580001E001E10118021801 +:1008900002E002E101620262015B025B0104020408 +:1008A000015E025E015802580001E001E1011802F8 +:1008B0001802E002E101620262015B025B010502D3 +:1008C0000501590259015802580001E001E10118DF +:1008D000021802E002E1015A025A015A025A015C6E +:1008E000025C015B025B015802580001E001E1017A +:1008F00018021802E002E1015A025A016202620182 +:10090000600260015A025A015802580001E001E1F8 +:100910000118021802E002E101620262015B025B5F +:1009200001050205015F025F015802580001E00164 +:10093000E10118021802E002E101620262015B02B9 +:100940005B0105020501600260015802580001E0E8 +:1009500001E10118021802E002E101620262015B9A +:10096000025B01610261010802080158025800019E +:10097000E001E10118021802E002E10162026201F5 +:100980005B025B01060206015A025A015802580036 +:1009900001E001E10118021802E002E101620262D5 +:1009A000015B025B01040204016202620158025809 +:1009B0000001E001E10118021802E002E1015A021F +:1009C0005A01620262015F025F015F025F01580229 +:1009D000580001E001E10118021802E002E10162A1 +:1009E0000262015B025B0105020501040204015879 +:1009F00002580001E001E10118021802E002E101E1 +:100A0000620262015B025B01050205015D025D019C +:100A10005802580001E001E10118021802E002E169 +:100A200001620262015B025B01050205015E025E7A +:100A3000015802580001E001E10118021802E00229 +:100A4000E101620262015B025B010502050107022E +:100A500007015802580001E001E10118021802E004 +:100A600002E1015A025A01590259015D025D015C1D +:100A7000025C015802580001E001E101180218026D +:100A8000E002E101620262015B025B010502050115 +:100A90005B025B015802580001E001E101180218F5 +:100AA00002E002E1015A025A01590259015D025D58 +:100AB00001610261015802580001E001E1011802E0 +:100AC0001802E002E101620262015B025B010602C0 +:100AD0000601590259015802580001E001E10118CC +:100AE000021802E002E101620262015B025B0106A0 +:100AF0000206015B025B015802580001E001E101BE +:100B000018021802E002E10162026201620262015F +:100B1000090209015F025F015802580001E001E18A +:100B20000118021802E002E101620262015B025B4D +:100B30000161026101070207015802580001E0014A +:100B4000E10118021802E002E1015A025A016202B0 +:100B50006201600260015C025C015802580001E021 +:100B600001E10118021802E002E101620262015B88 +:100B7000025B010402040160026001580258000196 +:100B8000E001E10118021802E002E10162026201E3 +:100B90005B025B010402040161026101580258001A +:100BA00001E001E10118021802E002E101620262C3 +:100BB0000162026201050205015A025A01580258F7 +:100BC0000001E001E10118021802E002E101620205 +:100BD00062015B025B0106020601620262015802C9 +:100BE000580001E001E10118021802E002E1015A97 +:100BF000025A0159025901610261015B025B01580D +:100C000002580001E001E10118021802E002E101CE +:100C10005A025A01620262015F025F015E025E01D6 +:100C20005802580001E001E10118021802E002E157 +:100C3000015A025A0159025901610261015A025ACC +:100C4000015802580001E001E10118021802E00217 +:100C5000E1015A025A01620262015F025F015C0215 +:100C60005C015802580001E001E10118021802E09D +:100C700002E1015A025A01620262016002600161EE +:100C80000261015802580001E001E1011802180256 +:100C9000E002E101620262015B025B010602060101 +:100CA000600260015802580001E001E101180218D9 +:100CB00002E002E1015A025A01590259015D025D46 +:100CC000015D025D015802580001E001E1011802D6 +:100CD0001802E002E101620262015B025B01610253 +:100CE0006101610261015802580001E001E101184F +:100CF000021802E002E1015A025A01620262016036 +:100D00000260015D025D015802580001E001E1014D +:100D100018021802E002E101620262015B025B015B +:100D2000050205015A025A015802580001E001E18A +:100D30000118021802E002E101620262016202622D +:100D40000105020501610261015802580001E0013C +:100D5000E10118021802E002E1015A025A015A02A6 +:100D60005A01620262015C025C015802580001E013 +:100D700001E10118021802E002E101620262015B76 +:100D8000025B010502050108020801580258000132 +:100D9000E001E10118021802E002E1015A025A01E1 +:100DA000590259015D025D015B025B015802580066 +:100DB00001E001E10118021802E002E101620262B1 +:100DC000015B025B0105020501050205015802589D +:100DD0000001E001E10118021802E002E1015A02FB +:100DE0005A01590259015D025D01050205015802CF +:100DF000580001E001E10118021802E002E1015A85 +:100E0000025A0162026201600260015B025B0158EA +:100E100002580001E001E10118021802E002E101BC +:100E2000620262015B025B01040204015902590182 +:100E30005802580001E001E10118021802E002E145 +:100E4000015A025A015902590161026101620262AA +:100E5000015802580001E001E10118021802E00205 +:100E6000E101620262015B025B0105020501090208 +:100E700009015802580001E201570257016202625B +:100E800001620262010502050107020702E2000198 +:100E9000E20157025701620262015B025B016102DB +:100EA00061015C025C02E20001E201570257015A53 +:100EB000025A0162026201600260015E025E02E2A9 +:100EC0000001E20157025701620262015B025B010D +:100ED000610261015B025B02E20001E2015702571D +:100EE00001620262015B025B01610261015D025D00 +:100EF00002E20001E20157025701620262015B0255 +:100F00005B016102610106020602E20001E2015793 +:100F1000025701620262015B025B01040204015D8F +:100F2000025D02E20001E201570257015A025A0132 +:100F3000620262015F025F0109020902E20001E24E +:100F40000157025701620262015B025B01610261AB +:100F50000105020502E20001E201570257016202A7 +:100F600062015B025B010502050161026102E200B0 +:100F700001E20157025701620262015B025B0161FB +:100F800002610160026002E20001E20157025701C2 +:100F9000620262015B025B01060206015F025F0200 +:100FA000E20001E20157025701620262016202623D +:100FB000010502050106020602E20001E2015702F4 +:100FC0005701620262015B025B01040204015C02E0 +:100FD0005C02E20001E201570257015A025A015A2B +:100FE000025A016202620162026202E20001E2014F +:100FF00057025701620262015B025B0104020401B5 +:101000005F025F02E20001E201570257015A025AF1 +:10101000015A025A015E025E0162026202E20001AE +:10102000E20157025701620262015B025B010602A4 +:1010300006015D025D02E20001E201570257015A1A +:10104000025A015A025A016202620161026102E21D +:101050000001E201570257015A025A01620262017D +:101060005F025F0162026202E20001E20157025781 +:10107000015A025A01620262015F025F016002606E +:1010800002E20001E20157025701620262015B02C3 +:101090005B01610261015F025F02E20001E2015750 +:1010A000025701620262015B025B01610261015A47 +:1010B000025A02E20001E201570257015A025A01A4 +:1010C00062026201600260015F025F02E20001E20F +:1010D0000157025701620262015B025B016102611A +:1010E0000159025902E20001E201570257015A0276 +:1010F0005A01620262016002600160026002E20065 +:1011000001E20157025701620262015B025B016169 +:1011100002610104020402E20001E20157025701E8 +:10112000620262015B025B01050205010602060222 +:10113000E20001E20157025701620262015B025BB9 +:1011400001050205015C025C02E20001E2015702B6 +:1011500057015A025A01620262015F025F01610295 +:101160006102E20001E201570257015A025A015995 +:101170000259016102610159025902E20001E201D2 +:10118000570257015A025A015A025A016202620179 +:101190005D025D02E20001E2015702570162026254 +:1011A0000162026201050205015B025B02E20001CD +:1011B000E201570257016202620162026201050206 +:1011C000050108020802E20001E20157025701622C +:1011D000026201620262010502050159025902E23E +:1011E0000001E201570257015A025A015A025A01FC +:1011F000620262015B025B02E20001E201570257F8 +:10120000015A025A01620262015F025F015D025DE2 +:1012100002E20001E20157025701620262015B0231 +:101220005B01060206015C025C02E20001E201577A +:10123000025701620262015B025B01610261015EB1 +:10124000025E02E20001E201570257015A025A010E +:10125000620262016002600159025902E20001E289 +:101260000157025701620262015B025B010602063E +:101270000161026102E20001E201570257016202CC +:1012800062015B025B01040204015B025B02E2009B +:1012900001E201570257015A025A016202620160DB +:1012A00002600162026202E20001E201570257019C +:1012B0006202620162026201070207015F025F02CD +:1012C000E20001E201570257015A025A015A025A3A +:1012D000016202620160026002E20001E201570263 +:1012E0005701620262015B025B0161026101090256 +:1012F0000902E20001E201570257015A025A015A5B +:10130000025A015902590108020802E20001E201F1 +:1013100057025701620262015B025B01060206018D +:101320005E025E02E20001E20157025701620262C0 +:10133000015B025B01040204015E025E02E2000145 +:10134000E20157025701620262015B025B01050282 +:10135000050159025902E20001E201570257015A00 +:10136000025A015A025A015C025C015B025B02E212 +:101370000001E201570257015A025A01620262015A +:10138000600260015A025A02E20001E2015702576C +:1013900001620262015B025B01050205015F025FFF +:1013A00002E20001E20157025701620262015B02A0 +:1013B0005B010502050160026002E20001E20157E3 +:1013C000025701620262015B025B01610261010876 +:1013D000020802E20001E2015702570162026201C3 +:1013E0005B025B01060206015A025A02E20001E2B8 +:1013F0000157025701620262015B025B01040204B1 +:101400000162026202E20001E201570257015A0240 +:101410005A01620262015F025F015F025F02E20045 +:1014200001E20157025701620262015B025B0105A2 +:1014300002050104020402E20001E2015702570121 +:10144000620262015B025B01050205015D025D0251 +:10145000E20001E20157025701620262015B025B96 +:1014600001050205015E025E02E20001E20157028F +:101470005701620262015B025B010502050107027E +:101480000702E20001E201570257015A025A0159CC +:101490000259015D025D015C025C02E20001E201B1 +:1014A00057025701620262015B025B0105020501FE +:1014B0005B025B02E20001E201570257015A025A45 +:1014C00001590259015D025D0161026102E2000100 +:1014D000E20157025701620262015B025B010602F0 +:1014E000060159025902E20001E201570257016266 +:1014F0000262015B025B01060206015B025B02E223 +:101500000001E201570257016202620162026201B8 +:10151000090209015F025F02E20001E2015702577E +:1015200001620262015B025B016102610107020765 +:1015300002E20001E201570257015A025A01620217 +:101540006201600260015C025C02E20001E201579C +:10155000025701620262015B025B01040204016046 +:10156000026002E20001E2015702570162026201D9 +:101570005B025B010402040161026102E20001E21C +:10158000015702570162026201620262010502050F +:10159000015A025A02E20001E201570257016202B7 +:1015A00062015B025B010602060162026202E20066 +:1015B00001E201570257015A025A015902590161C9 +:1015C0000261015B025B02E20001E2015702570186 +:1015D0005A025A01620262015F025F015E025E020C +:1015E000E20001E201570257015A025A0159025919 +:1015F00001610261015A025A02E20001E20157024E +:1016000057015A025A01620262015F025F015C02E5 +:101610005C02E20001E201570257015A025A0162DC +:101620000262016002600161026102E20001E20106 +:1016300057025701620262015B025B01060206016A +:1016400060026002E20001E201570257015A025AA9 +:1016500001590259015D025D015D025D02E2000176 +:10166000E20157025701620262015B025B01610203 +:10167000610161026102E20001E201570257015A71 +:10168000025A0162026201600260015D025D02E2D3 +:101690000001E20157025701620262015B025B0135 +:1016A000050205015A025A02E20001E201570257FF +:1016B00001620262016202620105020501610261CA +:1016C00002E20001E201570257015A025A015A028E +:1016D0005A01620262015C025C02E20001E201570F +:1016E000025701620262015B025B0105020501080B +:1016F000020802E20001E201570257015A025A01B0 +:10170000590259015D025D015B025B02E20001E2E8 +:101710000157025701620262015B025B010502058B +:101720000105020502E20001E201570257015A02D7 +:101730005A01590259015D025D0105020502E200EC +:1017400001E201570257015A025A01620262016026 +:101750000260015B025B02E20001E20157025701F5 +:10176000620262015B025B01040204015902590238 +:10177000E20001E201570257015A025A0159025987 +:10178000016102610162026202E20001E2015702AC +:101790005701620262015B025B0105020501090259 +:1017A0000902E200055204520152035201000000F6 +:1017B0001E001B0018002F00010029001F0013004D +:1017C0000C003300E300E1002000090004003400B5 +:1017D000E2002A0021001A0008000600E00065006F +:1017E00022000A0012001900000049002E004A00E1 +:1017F00000004D00000002542E02025400002B0095 +:1018000000005E0023000B001600050000004C00E5 +:1018100024000D0011001000E2004B0025000E0016 +:101820001500360001002C0026000F0017003700BD +:1018300050002800270014000700520051004E00FD +:1018400035001C002D001D004F00000001000100AC +:1018500001000100010000001E02300238020100F8 +:10186000010001001F026414380030000100010073 +:101870002002240223022702010001000100241497 +:1018800025140100010001000100271426140100A5 +:101890000000010001000100000001000000010043 +:1018A0000100010000000100000001000100310002 +:1018B00021022D1400000100010064002502220213 +:1018C000010001000100640226023602010001004D +:1018D00001000100301437023830010035021F02C8 +:1018E0003102553002300100010001002D020100DB +:1018F0003D30000001000100010001000100000076 +:101900003A00010001000100010001003B0001005C +:1019100001000100010001003C0001000100010084 +:10192000010001003D000100010001000100010073 +:101930003E00010001000100000001004400010020 +:1019400000000100000001004500010000005300FC +:10195000000001003F000100010001000000010043 +:1019600040005F005C00590062000100410060001F +:101970005D005A0085000100420061005E005B00CE +:101980006300010043005500560057005800010055 +:101990006700540056005700580000000100010085 +:1019A00001000100010000004D30393001005B30C2 +:1019B00001000100513058303C303B300100010043 +:1019C0005030013014145D30010001004A305930AC +:1019D00008145C30010001004930573004300030F9 +:1019E00000000100053001000000010000000100BE +:1019F0000100010000000100000001004F305A30DA +:101A000037301E02000001004E3001004B30010053 +:101A100001000100483056305430533001000100BD +:101A20004C30010003303A30010001005230010017 +:101A3000010001000100010001000100010001009E +:101A40000100000001000100010001000100000090 +:101A500042302030343001000100010046302E3089 +:101A6000263033300100010045302D301E3001009A +:101A70000100010040302B30223001000100010044 +:101A80003F3025302C300100000001000100010032 +:101A90000000010000000100010001000000010041 +:101AA000000001004430233031301F3000000100BD +:101AB000433035302A302930010001003E302730D4 +:101AC0003030010001000100413028303230010087 +:101AD0000100010047300100213001000100010038 +:101AE0000100363024302F300100000001000100D9 +:101AF0000100010001000000010008301B3001005E +:101B000001000100010015300D301A300100010004 +:101B10000100143006300100010001000100123004 +:101B20000A3001000100010001000C3013300100F7 +:101B300000000100010001000000010000000100A0 +:101B400001000100000001000000010001000B3055 +:101B5000183007300000010001001C301130103037 +:101B60000100010001000E301730010001000100EA +:101B700001000F30193001000100010001000100D7 +:101B8000093001000100010001001D300100163084 +:101B9000010000000100010001000100010000003F +:101BA000010001000100010001000100010001002D +:101BB000010001000100010001000100010001001D +:101BC000010001000100010001000100010001000D +:101BD00001000100010001000000010001000100FE +:101BE00000000100000001000100010000000100F0 +:101BF00000000100010001000100010000000100DF +:101C000001000100010001000100010001000100CC +:101C100001000100010001000100010001000100BC +:101C200001000100010001000100010001000100AC +:101C3000010001000100010001000000010001009D +:101C4000010001000100000001000100010001008D +:101C5000010001000100010001000100010001007C +:101C6000010001000100010001000100010001006C +:101C7000010001000100010001000100010001005C +:101C8000000001000100010000000100000001004F +:101C9000010001000000010000000100010001003E +:101CA000010001000000010001000100010001002D +:101CB000010001000100010001000100010001001C +:101CC000010001000100010001000100010001000C +:101CD00001000100010001000100010001000100FC +:101CE00001000000010001000100010001000000EE +:101CF00001000100010001000100010001000100DC +:101D000001000100010001000100010001000100CB +:101D100001000100010001000100010001000100BB +:101D200001000100010001000000010001000100AC +:101D3000000001000000010001000100000001009E +:101D4000000001000100010001000100000001008D +:101D5000010001000100010001000100010001007B +:101D6000010001000100010001000100010001006B +:101D7000010001000100010001000100010001005B +:101D800001000100010001000100000016034500F0 +:101D9000720067006F0044006F007800200045006B +:101DA0005A00000016034500720067006F004400EF +:101DB0006F007800200045005A0000000403090469 +:101DC00009026D00040100A0FA09040000010301EA +:101DD0000100092111010001223F000705810308CC +:101DE000000A090401000103010200092111010098 +:101DF00001224D000705820308000A0904020001C0 +:101E000003000000092111010001223600070583AB +:101E10000308000A0904030001030000000921115E +:101E2000010001223900070584031000011201108E +:101E30000100000008EDFE0713010001020001058A +:101E4000010906A101050719E029E71500250195FB +:101E5000087501810205081901290595057501918B +:101E600002950175039101050719002977150025D1 +:101E700001957875018102C005010980A1018502E3 +:101E800016010026B7001A01002AB7007510950147 +:101E90008100C0050C0901A1018503160100269CE3 +:101EA000021A01002A9C02751095018100C00501EB +:101EB0000902A1010901A10005091901290515005F +:101EC00025019505750181029501750381010501C3 +:101ED000093009311581257F950275088106093879 +:101EE0001581257F950175088106050C0A380215B4 +:101EF00081257F950175088106C0C005010906A1ED +:101F000001050719E029E7150025019508750181EC +:101F100002950175088101050819012905950575C6 +:101F20000191029501750391010507190029FF151B +:101F30000025FF950675088100C000000000000024 +:101F40000000000000010204060A0F17202C3A4A84 +:101F50005D71879DB3C7DAE9F5FCFFFCF5E9DAC7E7 +:101F6000B39D87715D4A3A2C20170F0A06040201BF +:101F70000000000000000000000011241FBECFEF91 +:101F8000DAE0DEBFCDBF04B603FE24C08091F001CD +:101F90009091F101A091F201B091F3018730904B43 +:101FA000A740B04BB9F41092F0011092F1011092D9 +:101FB000F2011092F30114BE84B7877F84BF88E1D9 +:101FC0000FB6F89480936000109260000FBEE0E0BE +:101FD000FFE3099511E0A0E0B1E0E0E3F5E602C01F +:101FE00005900D92A433B107D9F711E0A4E3B1E055 +:101FF00001C01D92A03FB107E1F70E94BF180C94E9 +:1020000096320C940000FC018281811103C080E0B3 +:1020100090E008956E3561F42091340130913501DE +:102020002F5F3F4F217033273093350120933401C8 +:1020300020913401309135012115310509F024C179 +:10204000862F90E08E35910528F4FC01EA5AFF4F67 +:102050000C944B3280E090E0089582E797E1089578 +:1020600089E597E1089580E497E1089587E297E193 +:1020700008958EE097E1089585EF96E108958CED3F +:1020800096E1089583EC96E108958AEA96E1089531 +:1020900081E996E1089588E796E108958FE596E154 +:1020A000089586E496E108958DE296E1089584E12D +:1020B00096E108958BEF95E1089582EE95E10895FC +:1020C00089EC95E1089580EB95E1089587E995E124 +:1020D00008958EE795E1089585E695E108958CE4ED +:1020E00095E1089583E395E108958AE195E10895E6 +:1020F00081E095E1089588EE94E108958FEC94E1F4 +:10210000089586EB94E108958DE994E1089584E8BB +:1021100094E108958BE694E1089582E594E10895B1 +:1021200089E394E1089580E294E1089587E094E1E1 +:1021300008958EEE93E1089585ED93E108958CEB7B +:1021400093E1089583EA93E108958AE893E108957D +:1021500081E793E1089588E593E108958FE393E1A2 +:10216000089586E293E108958DE093E1089584EF68 +:1021700092E108958BED92E1089582EC92E1089549 +:1021800089EA92E1089580E992E1089587E792E172 +:1021900008958EE592E1089585E492E108958CE238 +:1021A00092E1089583E192E108958AEF91E1089523 +:1021B00081EE91E1089588EC91E108958FEA91E133 +:1021C000089586E991E108958DE791E1089584E607 +:1021D00091E108958BE491E1089582E391E10895FE +:1021E00089E191E1089580E091E1089587EE90E121 +:1021F00008958EEC90E1089585EB90E108958CE9C7 +:1022000090E1089583E890E108958AE690E10895C9 +:1022100081E590E1089588E390E108958FE190E1F0 +:10222000089586E090E108958DEE9FE0089584ED95 +:102230009FE008958BEB9FE0089582EA9FE0089568 +:1022400089E89FE0089580E79FE0089587E59FE093 +:1022500008958EE39FE0089585E29FE008958CE065 +:102260009FE0089583EF9EE008958AED9EE0089533 +:1022700081EC9EE0089588EA9EE008958FE89EE054 +:10228000089586E79EE008952130310509F0BFCE1C +:10229000862F90E08E35910528F4FC01EC54FF4F19 +:1022A0000C944B3280E090E0089584E39EE0089522 +:1022B00083E19EE0089582EF9DE0089581ED9DE029 +:1022C000089580EB9DE008958FE89DE008958EE6E7 +:1022D0009DE008958DE49DE008958CE29DE00895D1 +:1022E0008BE09DE008958AEE9CE0089589EC9CE0E7 +:1022F000089588EA9CE0089587E89CE0089586E6C2 +:102300009CE0089585E49CE0089584E29CE00895B3 +:1023100083E09CE0089582EE9BE0089581EC9BE0D1 +:10232000089580EA9BE008958FE79BE008958EE58D +:102330009BE008958DE39BE008958CE19BE0089578 +:102340008BEF9AE008958AED9AE0089589EB9AE080 +:10235000089588E99AE0089587E79AE0089586E568 +:102360009AE0089585E39AE0089584E19AE008955B +:1023700083EF99E0089582ED99E0089581EB99E06B +:10238000089580E999E008958FE699E008958EE434 +:1023900099E008958DE299E008958CE099E0089520 +:1023A0008BEE98E008958AEC98E0089589EA98E029 +:1023B000089588E898E0089587E698E0089586E40F +:1023C00098E0089585E298E0089584E098E0089503 +:1023D00083EE97E0089582EC97E0089581EA97E014 +:1023E000089580E897E008958FE597E008958EE3DB +:1023F00097E008958DE197E008958CEF96E00895B9 +:102400008BED96E008958AEB96E0089589E996E0D1 +:10241000089588E796E0089587E596E0089586E3B5 +:1024200096E0089585E196E0089584EF95E008959B +:1024300083ED95E0089582EB95E0089581E995E0BC +:10244000089580E795E008958FE495E008958EE281 +:1024500095E008958DE095E008958CEE94E0089560 +:102460008BEC94E008958AEA94E0089589E894E07A +:10247000089588E694E0089587E494E0089586E25C +:1024800094E0089585E094E0089584EE93E0089543 +:1024900083EC93E0089582EA93E0089581E893E065 +:1024A000089580E693E008958FE393E008958EE128 +:1024B00093E008958DEF92E008958CED92E00895F9 +:1024C0008BEB92E008958AE992E0089589E792E023 +:1024D000089588E592E008958BE897E1089585E5F1 +:1024E0009EE0089508956091B3017091B4018091C8 +:1024F000B5019091B6010E94A42956985E9825983E +:102500002D9826982E9827982F988330A9F028F494 +:10251000813051F0823069F012C0843041F0853052 +:1025200071F4259A2D9A08C0259A2D9A0895259A16 +:102530002D9A269A2E9A0895279A2F9A089556989A +:102540005E9808950C94731256985E9825982D986D +:1025500026982E9827982F988FEF90E090938900D7 +:102560008093880090938B0080938A0090938D00D5 +:1025700080938C00259A2D9A2FEF80E792E02150CE +:1025800080409040E1F700C00000269A2E9A2FEF7D +:1025900080E792E0215080409040E1F700C00000C9 +:1025A000279A2F9A2FEF80E792E0215080409040A9 +:1025B000E1F700C0000025982D982FEF80E792E00A +:1025C000215080409040E1F700C0000026982E98EE +:1025D0002FEF80E792E0215080409040E1F700C06B +:1025E000000027982F9856985E9825982D98269841 +:1025F0002E9827982F98089589EA8093800089E083 +:102600008093810024982C983F988AB18F748AB95E +:102610006E98479A8BB1806B8BB9769A0E94A41200 +:102620000C94721280E28093000180913601811136 +:102630000EC00E94611381E0809336012FEF83ED7D +:1026400090E3215080409040E1F700C0000080E41A +:102650000E9467138093000181112EC00E94911384 +:1026600080930001811128C00E9491138093000182 +:10267000811122C08FE30E94911380930001811188 +:102680001BC00E94891380E40E946713809300019D +:10269000811112C08CE00E9491138093000181117E +:1026A0000BC00E94911380930001811105C08FE33C +:1026B0000E949113809300010E9489138091000170 +:1026C00008951092B9008AE08093B800089594EAC2 +:1026D0009093BC009091BC0097FFFCCF9091B90003 +:1026E000987F983021F0903111F081E00895809327 +:1026F000BB0084E88093BC008091BC0087FFFCCFC6 +:102700008091B900887F883111F0803471F780E0C2 +:10271000089584E98093BC008091BC0084FDFCCFC7 +:1027200008958093BB0084E88093BC008091BC0036 +:1027300087FFFCCF9091B900987F81E0983209F42F +:1027400080E0089584E88093BC008091BC0087FFFE +:10275000FCCF8091BB00089580910001811115C0CC +:1027600080E40E9467138093000181110CC082E114 +:102770000E94911380930001811105C08FEF0E9488 +:102780009113809300010E94891384B1807F84B9E2 +:1027900085B1807F85B98AB1837F8AB98BB1837F08 +:1027A0008BB93E98469808950E94121380930001B9 +:1027B0000E94AC1380B38C7080BB81B3836F81BBEC +:1027C000E6E4F1E0A8E3B1E011921D9281E0E43586 +:1027D000F807D1F70C94FC12BF92CF92DF92EF92E0 +:1027E000FF920F931F93CF93DF9380910001882373 +:1027F00079F0809137018F5F80933701811108C094 +:102800000E94121380930001811102C00E94A41241 +:1028100008E311E0C0E0D0E0DD24D39482E0C82ECC +:10282000EE24E394F12CC73000F580910001811172 +:1028300062C080E40E94671380930001811112C07E +:1028400082E10E9491138093000181110BC0C701A6 +:102850000C2E01C0880F0A94EAF780950E9491130C +:10286000809300010E94891346C0CA30A1F028F469 +:10287000C83059F0C93061F005C0CC3089F070F033 +:10288000CD3089F0209A289810C0219A29980DC03F +:10289000229A2A980AC0239A2B9807C0529A01C0FC +:1028A000539A5B9802C03E9A4698E0EAEA95F1F79F +:1028B0008FB179995AC092E081708D25892B7C9BCC +:1028C00002C090E001C094E0892B7D9B02C090E0A3 +:1028D00001C098E0892B7E9B02C090E001C090E18E +:1028E000892B9FB19095991F9927991F9295990FC0 +:1028F000907E892B0FC08091000181114BC080E434 +:102900000E94671380930001882389F1B12C0E94F3 +:1029100089138B2DF8019081981719F08083C0924C +:1029200001010E94AC1321960F5F1F4FCE30D105DD +:1029300009F079CF80910101882371F18150809352 +:102940000101882339F08FE99FE00197F1F700C07A +:10295000000022C0A6E4B1E0E8E3F1E081918D93AC +:1029600091E0E634F907D1F717C090E0A5CF83E1F5 +:102970000E949113809300018111C8CF81E40E94CD +:102980006713809300018111C1CF0E94A213B82E5A +:10299000B094BDCF80E0BECF0E94A21281E0DF9153 +:1029A000CF911F910F91FF90EF90DF90CF90BF904C +:1029B0000895E82FF0E0EA5BFE4F808108950895C6 +:1029C0008B3B910578F4883A910540F5853A91055D +:1029D000D0F48430910508F0B1C08130910509F43C +:1029E000ADC06BC0803E910508F467C0883E91057C +:1029F00008F4A4C09C01205F31092031310508F0A2 +:102A00005CC090650895853A910509F459C0863AED +:102A1000910509F458C083E890E40895883A910537 +:102A200009F454C0893A910509F453C08A3A9105D2 +:102A300009F452C08B3A910509F451C08C3A9105C2 +:102A400009F450C08D3A910509F44FC0803B9105BF +:102A500009F44EC08E3A910509F44DC08F3A9105A4 +:102A600009F44CC0813B910509F44BC0823B9105B0 +:102A700009F44AC0833B910509F449C0843B9105A0 +:102A800009F448C0853B910509F447C0863B910590 +:102A900009F446C0873B910509F445C0883B910580 +:102AA00009F444C0893B910509F443C08A3B910570 +:102AB00009F042C08AE296E4089580E090E008952B +:102AC00081E890E4089582E890E4089582EE94E429 +:102AD000089589EE94E408958AEE94E4089585EBD0 +:102AE00094E4089586EB94E4089587EB94E40895C4 +:102AF0008CEC94E408958DEC94E4089583E895E4D7 +:102B000008958AE895E4089582E995E4089584E9B2 +:102B100095E4089581E296E4089583E296E40895A9 +:102B200084E296E4089585E296E4089586E296E4C8 +:102B3000089587E296E4089580E094E40895089566 +:102B400096E0799FF001112494E5899FE00DF11D35 +:102B50001124E60FF11DEE0FFF1FEC55F84E859185 +:102B600094910895880F991F8C5D994EFC01859171 +:102B700094910895880F991F8C55984EFC0185916A +:102B80009491089526E0729FF001112444E5849FFA +:102B9000E00DF11D1124E60FF11DEE0FFF1FEC55A6 +:102BA000F84E25913491C9019A9581159F4110F4F1 +:102BB000C9010895C90190528115904128F4C901B5 +:102BC0009F700E94BA150895C901905381159041D4 +:102BD00020F4C9019927906C0895211580E53807E4 +:102BE00069F40E9459239FEF24E34CE09150204068 +:102BF0004040E1F700C000000C949D2A213080E5A0 +:102C0000380731F48091CE0181608093CE01089520 +:102C1000C90190558115904108F050C0832F992724 +:102C20008F70992781309105D9F4A90143705527F8 +:102C300002C0880F991F4A95E2F79C68A90164E0D9 +:102C4000440F551F6A95E1F744275370842B952B49 +:102C500073E0220F331F7A95E1F7207633271DC0EA +:102C60008230910529F4922F8827816F906A089508 +:102C700083309105A9F4A9014370552781E090E0C4 +:102C800002C0880F991F4A95E2F79C6843E0220F23 +:102C9000331F4A95E1F7207E3770822B932B0895DE +:102CA0000497F1F4A9014370552781E090E002C038 +:102CB000880F991F4A95E2F79A68E8CFC9019057A3 +:102CC0008115904120F4C9019F7090620895C90157 +:102CD00090588115904120F4C9019F70906A089521 +:102CE000203E3105E0F4203C310558F52133310513 +:102CF00009F470C048F42932310509F464C02A325D +:102D0000310509F46EC074C029333105F1F0223861 +:102D10003105D9F02533310509F44EC069C0233E91 +:102D2000310589F138F4203E3105C1F0223E3105EC +:102D3000E1F05EC0263E310569F1273E3105A9F17B +:102D400057C0C9010E94B21508958091E10180FD2C +:102D500002C081FF4DC080EE90E04BC08091E10148 +:102D600080FFF9CF89E390E044C08091E10182FFC8 +:102D70000EC08091E10184FF03C080E090E039C083 +:102D800083EE90E036C08091E10182FFF2CF82EEC7 +:102D900090E02FC08091E10183FF0BC08091E101A1 +:102DA00084FDEBCF87EE90E024C08091E10183FFAA +:102DB000F5CF86EE90E01DC08091E10185FF07C050 +:102DC00089E290E016C08091E10185FFF9CF85E3AB +:102DD00090E00FC08091E10186FF07C08AE290E099 +:102DE00008C08091E10186FFF9CF81E390E001C046 +:102DF000C9010E94E014089508950C94FC16809176 +:102E000064010895CF93DF9300D01F92CDB7DEB752 +:102E10002091E701243019F523E029839B838A83DD +:102E20002093E9008FEF9091E800815095FD06C056 +:102E300095ED9A95F1F700008111F5CF8091E800AA +:102E400085FF0DC040E050E063E070E0CE010196E8 +:102E50000E946C198091E8008E778093E8000F90B3 +:102E60000F900F90DF91CF910895CF93DF9300D013 +:102E70001F92CDB7DEB72091E701243021F522E083 +:102E800029839B838A8383E08093E9008FEF90916D +:102E9000E800815095FD06C095ED9A95F1F7000088 +:102EA0008111F5CF8091E80085FF0DC040E050E032 +:102EB00063E070E0CE0101960E946C198091E800F9 +:102EC0008E778093E8000F900F900F90DF91CF9155 +:102ED00008952091E7012430F1F422E02093E900E5 +:102EE0002FEF3091E800215035FD06C035ED3A95C1 +:102EF000F1F700002111F5CF2091E80025FF0BC06C +:102F000040E050E065E070E00E946C198091E800BC +:102F10008E778093E8000895CF93DF93EC01809142 +:102F2000E701843009F046C090910C019923D9F053 +:102F300090910D019923B9F08093E9008FEF909162 +:102F4000E800815095FD06C095E19A95F1F70000E3 +:102F50008111F5CF8091E80085FF2CC040E050E062 +:102F600060E170E017C081E08093E9008FEF9091FD +:102F7000E800815095FD06C095ED9A95F1F70000A7 +:102F80008111F5CF8091E80085FF14C040E050E04A +:102F900068E070E0CE010E946C198091E8008E77A5 +:102FA0008093E80080E1FE01A4E5B1E001900D927C +:102FB0008A95E1F7DF91CF9108958091E601811123 +:102FC00009C00E94FE1A0E945B1B8091E20084608F +:102FD0008093E20008951092E601089508950C94FC +:102FE000C3300E94342A0E94C9300E94F81D0C94FC +:102FF000FD1642E061EC81E00E94781A42E061EC4B +:1030000082E00E94781A42E061EC83E00E94781A24 +:1030100042E161EC84E00C94781A8091E9018330FC +:1030200009F455C030F4813071F0823009F48EC05B +:1030300008958A3009F47AC08B3009F460C0893071 +:1030400009F09CC020C08091E801813A09F096C047 +:103050008091E800877F8093E8008091EC01909157 +:10306000ED01892B21F060E080E090E003C060E199 +:1030700084E591E070E00E94B5198091E8008B77BB +:103080008093E80008958091E801813209F076C0CC +:103090008091EC019091ED01009719F0039709F0F0 +:1030A0006DC08091E800877F8093E8008091E80000 +:1030B00082FD05C08091E7018111F8CF5FC080914A +:1030C000F100809364018091E8008B7753C0809178 +:1030D000E801813A09F052C08091EC019091ED0134 +:1030E000892B09F04BC08091E800877F8093E8002E +:1030F0008091E80080FFFCCF80910C0136C0809168 +:10310000E8018132D9F58091EC019091ED01892B94 +:10311000A9F58091E800877F8093E8000E94AD1AAE +:103120008091EA0180930C010C9459238091E8016D +:10313000813221F58091E800877F8093E8000E942A +:10314000AD1A8091EB018093650108958091E801AB +:10315000813AA1F48091E800877F8093E800809114 +:10316000E80080FFFCCF809165018093F1008091A1 +:10317000E8008E778093E8000C94AD1A089584B728 +:10318000877F84BF88E10FB6F89480936000109227 +:1031900060000FBE90E080E80FB6F8948093610065 +:1031A000909361000FBE0E94471E0E94FE1A0E946B +:1031B0005B1B8091E20084608093E20078940E941F +:1031C000D61D0E94491E82E091E00E94F31D0E94DC +:1031D000B1308091E701853069F40E94F729809130 +:1031E000E5018823B1F30E941F2A882391F30E94EE +:1031F0005619EFCF0E944F1EECCF292F33272330D3 +:103200003105A9F06CF42130310509F442C02230B7 +:10321000310509F043C08DE690E020EC3DE142C06D +:1032200021323105C9F02232310519F137C0992711 +:103230008130910541F08230910541F0892B71F583 +:10324000ECEBFDE105C0E4EAFDE102C0ECE8FDE1E4 +:10325000849190E09F0126C0643000F5E62FF0E0F5 +:10326000EE0FFF1FEE5DFE4F2081318189E090E07F +:1032700019C0643098F4E62FF0E0DF01AA0FBB1FFD +:10328000A65EBE4F2D913C91EA5EFE4F808190E09C +:1032900009C082E190E02DE23EE104C080E090E0D0 +:1032A00020E030E0FA0131832083089580E189BD78 +:1032B00082E189BD09B400FEFDCF8091D8008F7DE9 +:1032C0008093D8008091E00082608093E00080913C +:1032D000E00081FDFCCF0895CF92DF92EF92FF9244 +:1032E0000F931F93CF93DF937C018B01EA010E9420 +:1032F000CE1A811131C0209731F088819981081B45 +:10330000190BE80EF91EC12CD12C0115110519F16C +:103310008091E80085FD14C08091E8008E7780934D +:10332000E800209741F0888199818C0D9D1D99833B +:10333000888385E011C00E94CE1A882331F30CC027 +:10334000F70181917F018093F10001501109FFEF96 +:10335000CF1ADF0ADACF80E0DF91CF911F910F9172 +:10336000FF90EF90DF90CF9008952091EE01309183 +:10337000EF012617370748F06115710539F42091E0 +:10338000E8002E772093E80001C0B901FC0120E09D +:1033900061157105B9F18091E701882309F440C0F6 +:1033A000853009F43FC08091E80083FD3DC08091E5 +:1033B000E80082FF06C08091E80082FF26C080E01E +:1033C00008958091E80080FFE3CF2091F300809181 +:1033D000F20090E0922B6115710551F08830910553 +:1033E00038F421912093F100615071090196F3CFD7 +:1033F00021E0089709F020E08091E8008E77809323 +:10340000E800C6CF2111C7CFD6CF8091E70188232E +:1034100039F0853039F08091E80083FFCCCF04C0CB +:1034200082E0089583E0089581E008952091EE01FF +:103430003091EF012617370748F06115710539F40F +:103440002091E8002E772093E80001C0B901FC012B +:1034500020E061157105C1F18091E701882309F42D +:1034600041C0853009F440C08091E80083FD3EC032 +:103470008091E80082FF06C08091E80082FF27C0AB +:1034800080E008958091E80080FFE3CF2091F30071 +:103490008091F20090E0922B6115710559F088300F +:1034A000910540F424912093F10031966150710907 +:1034B0000196F2CF21E0089709F020E08091E80022 +:1034C0008E778093E800C5CF2111C6CFD5CF8091EC +:1034D000E701882339F0853039F08091E80083FFD7 +:1034E000CBCF04C082E0089583E0089581E0089581 +:1034F000982F973058F59093E900981739F070910C +:10350000EC002091ED005091F00003C0242F762FA5 +:1035100050E021FF19C03091EB003E7F3093EB006B +:103520003091ED003D7F3093ED003091EB00316044 +:103530003093EB007093EC002093ED005093F0007B +:103540002091EE0027FF07C09F5FD3CF8F7080933D +:10355000E90081E0089580E008958091E80187FD09 +:1035600005C08091E80080FF0EC012C08091E80085 +:1035700082FD05C08091E7018111F8CF0895809107 +:10358000E8008B7708C08091E7018111EACF0895A8 +:103590008091E8008E778093E80008958091E400A0 +:1035A0009091E50045E62091EC0020FF21C020919C +:1035B000E80020FD21C02091E701222389F0253079 +:1035C00089F02091EB0025FD0FC02091E40030919F +:1035D000E5002817390739F3415041F0C901E3CF1D +:1035E00082E0089583E0089581E0089584E00895DD +:1035F0002091E80022FFDFCF80E008950E946C1B3D +:103600000E94741BE0EEF0E0808181608083E8ED31 +:10361000F0E080818F77808319BCA7EDB0E08C91BA +:103620008E7F8C9380818F7E80831092E601089537 +:103630000F931F93CF93DF930E946C1B0E94741B08 +:10364000C8EDD0E088818F778883888180688883FF +:1036500088818F7D888319BC1092E7011092E30165 +:103660001092E5011092E40100EE10E0F801808173 +:103670008B7F808388818160888342E060E080E086 +:103680000E94781AE1EEF0E080818E7F8083E2EE86 +:10369000F0E0808181608083808188608083F80190 +:1036A00080818E7F8083888180618883DF91CF9144 +:1036B0001F910F910895E8EDF0E080818F7E808367 +:1036C000E7EDF0E080818160808384E082BF81E06B +:1036D0008093E6010C94181BE8EDF0E080818E7F6A +:1036E00080831092E20008951092DA001092E100B7 +:1036F00008951F920F920FB60F9211242F933F93AC +:103700004F935F936F937F938F939F93AF93BF93E9 +:10371000EF93FF938091E10082FF0BC08091E20064 +:1037200082FF07C08091E1008B7F8093E1000E94BF +:10373000D51D8091DA0080FF1FC08091D80080FFE6 +:103740001BC08091DA008E7F8093DA008091D900CF +:1037500080FF0DC080E189BD82E189BD09B400FE12 +:10376000FDCF81E08093E7010E94DD1705C019BC01 +:103770001092E7010E94EB178091E10080FF19C0D1 +:103780008091E20080FF15C08091E2008E7F8093DF +:10379000E2008091E20080618093E2008091D80095 +:1037A00080628093D80019BC85E08093E7010E9475 +:1037B000EF178091E10084FF30C08091E20084FF28 +:1037C0002CC080E189BD82E189BD09B400FEFDCF36 +:1037D0008091D8008F7D8093D8008091E1008F7E0A +:1037E0008093E1008091E2008F7E8093E2008091DF +:1037F000E20081608093E2008091E301882311F070 +:1038000084E007C08091E30087FF02C083E001C02D +:1038100081E08093E7010E94F1178091E10083FF2E +:1038200029C08091E20083FF25C08091E100877F5D +:103830008093E10082E08093E7011092E3018091A0 +:10384000E1008E7F8093E1008091E2008E7F809383 +:10385000E2008091E20080618093E20042E060E05B +:1038600080E00E94781A8091F00088608093F000D8 +:103870000E94EE17FF91EF91BF91AF919F918F91B1 +:103880007F916F915F914F913F912F910F900FBE5C +:103890000F901F9018951F920F920FB60F92112440 +:1038A0002F933F934F935F936F937F938F939F9348 +:1038B000AF93BF93CF93EF93FF93C091E900CF7085 +:1038C0008091EC001092E9008091F000877F809356 +:1038D000F00078940E94871C1092E9008091F0001B +:1038E00088608093F000C093E900FF91EF91CF9141 +:1038F000BF91AF919F918F917F916F915F914F9108 +:103900003F912F910F900FBE0F901F9018951F930E +:10391000CF93DF93CDB7DEB7AA970FB6F894DEBF8B +:103920000FBECDBFE8EEF1E08091F100819321E080 +:10393000E03FF207C9F70E940D188091E80083FF6D +:103940001CC12091E8013091E901832F90E08A3079 +:10395000910508F012C1FC01EE5EFE4F0C944B3253 +:10396000203881F0223809F008C18091EC018F7075 +:103970008093E9008091EB0085FB882780F9109205 +:10398000E90006C08091E4019091E5019111826007 +:103990009091E800977F9093E8008093F100109257 +:1039A000F100C5C0822F8D7F09F0E7C0222319F0F6 +:1039B000223061F0E2C08091EA01813009F0DDC07F +:1039C000333009F080E08093E50128C08091EA015E +:1039D000811124C02091EC012F7009F4CEC02093F6 +:1039E000E9008091EB0080FF19C08091EB0033303B +:1039F00011F4806211C080618093EB0081E090E05F +:103A0000022E01C0880F0A94EAF78093EA00109210 +:103A1000EA008091EB0088608093EB001092E9004F +:103A20008091E800877F86C02111A7C01091EA012C +:103A30001F778091E3008078812B8093E300809151 +:103A4000E800877F8093E8000E94AD1A8091E8002B +:103A500080FFFCCF8091E30080688093E300112316 +:103A600011F083E001C082E08093E70186C0205816 +:103A7000223008F082C08091EA019091EB018C3DE8 +:103A800023E0920779F583E08A838AE289834FB73E +:103A9000F894DE01139620E03EE051E2E32FF0E0DF +:103AA00050935700E49120FF03C0E295EF703F5F11 +:103AB000EF708E2F90E0EA3010F0C79601C0C096EC +:103AC0008D939D932F5F243149F74FBF8091E8007C +:103AD000877F8093E8006AE270E0CE0101960E9441 +:103AE000B51914C0AE014F5F5F4F6091EC010E94A9 +:103AF000FD18009709F441C02091E800277F20932A +:103B0000E800BC0189819A810E94161A8091E80020 +:103B10008B778093E80031C0203879F58091E800F8 +:103B2000877F8093E8008091E3018093F10080918A +:103B3000E8008E778093E8000E94AD1A1EC0211124 +:103B40001CC09091EA019230C0F48091E800877F18 +:103B50008093E8009093E3010E94AD1A8091E30105 +:103B6000811104C08091E30087FF02C084E001C09E +:103B700081E08093E7010E94F9178091E80083FFBC +:103B80000AC08091E800877F8093E8008091EB0075 +:103B900080628093EB00AA960FB6F894DEBF0FBE4A +:103BA000CDBFDF91CF911F9108950895CF9380915C +:103BB000E7018823B1F08091E9008F709091EC00CB +:103BC00090FF02C090E801C090E0C92FC82B10926E +:103BD000E9008091E80083FD0E94871CCF70C093AC +:103BE000E900CF91089590936B0180936A01089545 +:103BF000E0916A01F0916B01309721F00190F08122 +:103C0000E02D099480E00895E0916A01F0916B0144 +:103C1000309721F00280F381E02D09940895E0911E +:103C20006A01F0916B01309721F00480F581E02D5D +:103C300009940895209168013091690182179307D2 +:103C400071F09093690180936801E0916A01F091AD +:103C50006B01309721F00680F781E02D09940895DB +:103C600020916601309167018217930771F090935C +:103C7000670180936601E0916A01F0916B013097D2 +:103C800021F00084F185E02D0994089508950C94A5 +:103C9000461E0E943A2A0E94D4130C94002BCF9205 +:103CA000DF92EF92FF920F931F93CF93DF93CDB7E5 +:103CB000DEB72B970FB6F894DEBF0FBECDBF0E94C4 +:103CC000EC133DE6E32E31E0F32E00E010E0C02ED1 +:103CD000802F0E94D914F701D1907F01D826B1F42A +:103CE0000F5F1F4F0E30110591F78FEF89838A8385 +:103CF0001B820E94432A8160782F9D838C83498197 +:103D00005A816B818D810E94F21E41C09091CE013B +:103D100091FF04C08B870E94DF148B8520E030E088 +:103D20004D2D50E0922FBA01022E02C07595679575 +:103D30000A94E2F760FF25C02E83CF82EE24E3943D +:103D4000F12C02C0EE0CFF1C9A95E2F790E08E2158 +:103D50009F2121E0892B09F420E028870E94432A33 +:103D60008160782F9A8789874E815F8168858A85EF +:103D70000E94F21EF801E359FE4F80818E25808358 +:103D800006C02F5F3F4F2630310561F6A9CF0E9454 +:103D9000E42D10916C010E94F81D1817A1F00E94EB +:103DA000F81D80936C012B960FB6F894DEBF0FBE02 +:103DB000CDBFDF91CF911F910F91FF90EF90DF90DA +:103DC000CF900C94FD162B960FB6F894DEBF0FBE65 +:103DD000CDBFDF91CF911F910F91FF90EF90DF90BA +:103DE000CF900895CF93DF93CDB7DEB72B970FB663 +:103DF000F894DEBF0FBECDBF4F83588769877A879F +:103E00008B87DE01119686E0FD0111928A95E9F714 +:103E100085E0FE01379601900D928A95E1F7498180 +:103E20005A816B817C818D819E810E9425262B96F3 +:103E30000FB6F894DEBF0FBECDBFDF91CF910895CE +:103E4000CF93C82F882309F4C1C0823859F40E9447 +:103E5000F81D81FDBBC089E30E94C4280E947E2911 +:103E600089E30CC0833879F40E94F81D80FDAEC050 +:103E700083E50E94C4280E947E2983E50E940429CC +:103E8000CF910C947E29843859F40E94F81D82FD4C +:103E90009DC087E40E94C4280E947E2987E4EECF5B +:103EA0008CEF8C0F813A48F48C2F0E9419308111CD +:103EB0008DC08C2F0E94C428E3CF80E28C0F883005 +:103EC00048F4C77081E001C0880FCA95EAF70E94E4 +:103ED0004529D6CF8BE58C0F833078F4C53A29F08D +:103EE000C63A31F482E890E005C081E890E002C073 +:103EF00083E890E0CF910C941A1E88E58C0F8331F3 +:103F000008F064C0C83A39F1C93A41F1CA3A49F1F6 +:103F1000CB3A51F1CC3A59F1CD3A61F1C03B69F15C +:103F2000CE3A71F1CF3A79F1C13B81F1C23B89F1CF +:103F3000C33B91F1C43B99F1C53BA1F1C63BA9F14B +:103F4000C73BB1F1C83BB9F1C93BC1F1CA3BC9F5A7 +:103F50008AE292E038C082EE90E035C089EE90E0CF +:103F600032C08AEE90E02FC085EB90E02CC086EB4B +:103F700090E029C087EB90E026C08CEC90E023C055 +:103F80008DEC90E020C083E891E01DC08AE891E0CC +:103F90001AC082E991E017C084E991E014C081E27F +:103FA00092E011C083E292E00EC084E292E00BC086 +:103FB00085E292E008C086E292E005C087E292E0E6 +:103FC00002C080E090E0CF910C94301ECF91089514 +:103FD000882309F44BC0823859F40E94F81D81FFF0 +:103FE00045C089E30E94C4280E947E2989E30CC051 +:103FF000833871F40E94F81D80FF38C083E50E9469 +:10400000C4280E947E2983E50E9404290C947E29FD +:10401000843859F40E94F81D82FF28C087E40E946A +:10402000C4280E947E2987E4EFCF9CEF980F913A35 +:1040300058F390E2980F983050F4877091E001C0E7 +:10404000990F8A95EAF7892F0E944B29DFCF9BE5CC +:10405000980F933020F480E090E00C941A1E885A58 +:10406000833120F480E090E00C94301E0895882382 +:1040700021F00E9445290C947E290895882321F07F +:104080000E944B290C947E290895CF92DF92EF92E3 +:10409000FF920F931F93CF93DF93CDB7DEB728978F +:1040A0000FB6F894DEBF0FBECDBF8C0185E0F801DE +:1040B000DE01119601900D928A95E1F7F801408199 +:1040C0003181F280258122952F7083819481892B03 +:1040D00031F03F3F31F481E04F3F19F403C081E0FC +:1040E00001C080E080FDC4C249833A8389819A81FE +:1040F0002F830E9482289E8388870E9481280E94A5 +:1041000054274E81E42FE295EF70F0E0E45EFE4F1D +:104110002F8168850C944B32842F807F142F1F7061 +:10412000882311F01295107FFF2059F0112309F414 +:1041300054C2812F68870E9455290E947E29688574 +:104140004CC2862F0E94E81F112309F491C2812FCF +:104150000E945B2928960FB6F894DEBF0FBECDBF34 +:10416000DF91CF911F910F91FF90EF90DF90CF9053 +:104170000C947E29342F307F842F8F70303211F0D1 +:104180008295807F662319F0613019F12BC0FF20E2 +:10419000B1F0222309F493C1213009F090C128968F +:1041A0000FB6F894DEBF0FBECDBFDF91CF911F9148 +:1041B0000F91FF90EF90DF90CF900C946529222310 +:1041C00019F0213009F454C28E830E9468298E812F +:1041D00089C1FF2021F0223008F04AC270C12111AC +:1041E00047C280C1FF2021F0222309F468C1F5C134 +:1041F000222309F477C105C2242F26952695237022 +:1042000030E02115310521F021303105C9F030C2EF +:10421000FF2021F0862F942F937002C080E090E061 +:1042200028960FB6F894DEBF0FBECDBFDF91CF91B9 +:104230001F910F91FF90EF90DF90CF900C941A1E7A +:10424000FF2021F0862F942F937002C080E090E031 +:1042500028960FB6F894DEBF0FBECDBFDF91CF9189 +:104260001F910F91FF90EF90DF90CF900C94301E34 +:10427000862FFF2019F00E94EC2C02C00E94542DC2 +:1042800028960FB6F894DEBF0FBECDBFDF91CF9159 +:104290001F910F91FF90EF90DF90CF900C94D92D4C +:1042A000842F837009F076C0F110E2C1262F229589 +:1042B00026952770220F220F862F8F70C82ED12CA3 +:1042C000E12CF12C022E04C0CC0CDD1CEE1CFF1CDA +:1042D0000A94D2F764FF10C06FE070E080E090E0D5 +:1042E00004C0660F771F881F991F2A95D2F7609523 +:1042F00070958095909503C060E070E0CB01242F0D +:10430000269526952370422F50E042305105D1F07A +:104310004330510559F16C297D298E299F2941305F +:10432000510541F128960FB6F894DEBF0FBECDBF00 +:10433000DF91CF911F910F91FF90EF90DF90CF9081 +:104340000C9479276C297D298E299F2928960FB6F0 +:10435000F894DEBF0FBECDBFDF91CF911F910F91BB +:10436000FF90EF90DF90CF900C9493270E947927D5 +:10437000C701B60128960FB6F894DEBF0FBECDBFB9 +:10438000DF91CF911F910F91FF90EF90DF90CF9031 +:104390000C945F27FF2019F0842F817001C086954F +:1043A000882309F465C1262F229526952770220FB0 +:1043B000220F862F8F70C82ED12CE12CF12C022ECB +:1043C00004C0CC0CDD1CEE1CFF1C0A94D2F764FF69 +:1043D00010C06FE070E080E090E004C0660F771FCF +:1043E000881F991F2A95D2F76095709580959095B2 +:1043F00003C060E070E0CB01242F26952695237042 +:10440000422F50E042305105D1F04330510559F16F +:104410006C297D298E299F294130510541F128962B +:104420000FB6F894DEBF0FBECDBFDF91CF911F91C5 +:104430000F91FF90EF90DF90CF900C944D286C2956 +:104440007D298E299F2928960FB6F894DEBF0FBECE +:10445000CDBFDF91CF911F910F91FF90EF90DF9033 +:10446000CF900C9467280E944D28C701B60128966A +:104470000FB6F894DEBF0FBECDBFDF91CF911F9175 +:104480000F91FF90EF90DF90CF900C943328603F16 +:10449000C9F118F4603E50F49BC0623F09F460C05B +:1044A00008F44AC0633F09F46FC092C0162F1F7012 +:1044B000842F8F71FF2099F00E94CC27812F28969E +:1044C0000FB6F894DEBF0FBECDBFDF91CF911F9125 +:1044D0000F91FF90EF90DF90CF900C9437200E94C7 +:1044E000ED27812F28960FB6F894DEBF0FBECDBF03 +:1044F000DF91CF911F910F91FF90EF90DF90CF90C0 +:104500000C943E20FF20A1F02111B2C0842F8F71A6 +:1045100028960FB6F894DEBF0FBECDBFDF91CF91C6 +:104520001F910F91FF90EF90DF90CF900C94122885 +:10453000223008F09DC0EACFFF20A1F0842F8F71B8 +:1045400028960FB6F894DEBF0FBECDBFDF91CF9196 +:104550001F910F91FF90EF90DF90CF900C94CC279C +:10456000FF2061F3842F8F7128960FB6F894DEBF79 +:104570000FBECDBFDF91CF911F910F91FF90EF90B4 +:10458000DF90CF900C94ED27FF2091F0842F8F7156 +:1045900028960FB6F894DEBF0FBECDBFDF91CF9146 +:1045A0001F910F91FF90EF90DF90CF900C94B72761 +:1045B00028960FB6F894DEBF0FBECDBFDF91CF9126 +:1045C0001F910F91FF90EF90DF90CF900C94AD274B +:1045D000FF20A1F0222309F4B1CF862F28960FB631 +:1045E000F894DEBF0FBECDBFDF91CF911F910F9129 +:1045F000FF90EF90DF90CF900C94201F222309F4BE +:10460000B1CF862F28960FB6F894DEBF0FBECDBF70 +:10461000DF91CF911F910F91FF90EF90DF90CF909E +:104620000C94E81F4F70C8010E94031028960FB623 +:10463000F894DEBF0FBECDBFDF91CF911F910F91D8 +:10464000FF90EF90DF90CF900C94D2264F70C8016E +:1046500028960FB6F894DEBF0FBECDBFDF91CF9185 +:104660001F910F91FF90EF90DF90CF900C949F15CA +:1046700028960FB6F894DEBF0FBECDBFDF91CF9165 +:104680001F910F91FF90EF90DF90CF9008950E94BF +:1046900062290E9437290E947E290E94852E0E944D +:1046A000D92D80E090E00E941A1E80E090E00C94EA +:1046B000301E0E9452290C9447230E948228292FE1 +:1046C00022952F7030E02C3031054CF42A30310522 +:1046D0006CF4225031092230310590F407C02C309F +:1046E000310551F02F30310539F00AC0803E10F00D +:1046F000803F31F481E0089593FB882780F9089585 +:1047000080E00895CF93DF9300D000D01F92CDB703 +:10471000DEB70F900F900F900F900F90DF91CF9119 +:104720000895CF93DF9300D000D000D0CDB7DEB78F +:1047300026960FB6F894DEBF0FBECDBFDF91CF91A6 +:1047400008951F93CF93DF93C0917B0116E0809172 +:104750007C01C81799F0D0E01C9FF0011D9FF00D5F +:104760001124E358FE4F408151816281738184811D +:1047700095810E9491232196C770E9CFDF91CF9157 +:104780001F9108954091AD015091AE016091AF012C +:104790007091B0018091B1019091B2010C9491237C +:1047A000CF938091B20182958F7009F05FC08091A4 +:1047B000AF01882309F45AC020917B01A0917C01AC +:1047C0006091AD017091AE018091B0019091B10105 +:1047D00031E06F3F09F030E0B32FC6E02A1709F44B +:1047E00045C0009721F07F3F21F44B2F03C041E0EB +:1047F00001C040E030E040FD35C0C29FF001C39FE2 +:10480000F00D1124E358FE4F418174132BC04081F9 +:10481000641328C04281411125C043815481481747 +:10482000590710F441505109481B590B483C510598 +:10483000C8F48091B2018F7080618093B20186E0EC +:10484000829FF001839FF00D1124EE57FE4F80816F +:104850008F70806180838DEA91E00E944520CF9126 +:104860000C94A1232F5F3F4F2770B8CFCF910895AD +:10487000CF92DF92EF92FF920F931F93CF93DF932C +:10488000CDB7DEB762970FB6F894DEBF0FBECDBFCF +:104890008C0185E0F801DE011D9601900D928A954C +:1048A000E1F7D8014C9111965C91119712966C9199 +:1048B00012971396ED90FC9014977091AD01E091D2 +:1048C000AE012091B0013091B1012115310531F0D7 +:1048D000EF3F31F481E07F3F19F403C081E001C074 +:1048E00080E0B82FB170CB2E80FD6CC1D090AF01AD +:1048F000DD2009F4F5C0F091B201E216F30638F0BC +:10490000C701821B930B883C910548F09BC0209502 +:1049100030952E0D3F1D283C310508F093C08F2F98 +:10492000807F09F052C0E51314C0741312C0D62E54 +:1049300061110FC0FF70F061F093B2010E94C223B9 +:104940008DEA91E00E9445208091B201F8018583B3 +:104950006CC1EF2831F05F3F31F481E04F3F19F433 +:1049600003C081E001C080E080FD03C081E08627B4 +:1049700001C080E0F82FF170FF2E80FF1CC08091F5 +:104980007B0120917C0136E0821709F428C190E078 +:10499000389FF001399FF00D1124E358FE4F7181CB +:1049A000571306C07081471303C07281671303C099 +:1049B00001968770E9CFD62E662309F436C180911F +:1049C000B20181608093B20153C0E51308C0741333 +:1049D00006C0611104C0D8011596FC93AEC04D8786 +:1049E0005E878D859E856A8B0E945D236A898823F8 +:1049F00029F1D62E662311F12091B201822F8295E2 +:104A00008F7090E002970CF460C08091AD0190919E +:104A1000AE0198878F831986FB86EA862C87CE01A4 +:104A2000079651C0E51731F14D875E878D859E85CC +:104A30006A8B0E945D236A8981112EC0C8010E9481 +:104A40004520A4C08F2F807F69F77E2DF98AE88AE0 +:104A500089890E9482238DEA91E00E944520EDEA37 +:104A6000F1E086E0DF011D928A95E9F70E94C223FA +:104A7000D12CDBC07413D8CF6111D6CFD8011596D5 +:104A8000FC93C8010E944520EDEAF1E086E0DF01D9 +:104A90001D928A95E9F7C9C0D62E662379F2209136 +:104AA000B201822F82958F7090E0029774F080910E +:104AB000AD019091AE019A8389831B82FD82EC82C5 +:104AC0002E83CE0101960E94452086E0F801ADEAD2 +:104AD000B1E001900D928A95E1F70E94D0236FC05A +:104AE000E216F30628F0C701821B930B9C0104C059 +:104AF000209530952E0D3F1D283C310508F052C001 +:104B0000D62E662309F49ACFE5132CC074132AC05D +:104B10008091B20180FD1DC0982F92959F70C9F0C1 +:104B2000D80115968C9315979F3039F09F5F929519 +:104B3000907F8F70892B15968C93C8010E94452019 +:104B400086E0F801ADEAB1E001900D928A95E1F7B7 +:104B500036C086E0F801ADEAB1E001900D928A9589 +:104B6000E1F763C04D875E878D859E850E945D233A +:104B7000882379F086E0F801ADEAB1E001900D926A +:104B80008A95E1F70E94D0230E94C223DD24D394AA +:104B90004CC08091B20181608093B201C8010E9433 +:104BA000452043C07E2DF98AE88A89890E948223A4 +:104BB000EDEAF1E086E0DF011D928A95E9F70E94B7 +:104BC000C22333C0662309F439CF4D875E878D85B4 +:104BD0009E850E945D23882309F430CFCBCF4D877B +:104BE0005E878D859E850E948228292F22952F70B1 +:104BF00030E0223031052CF49F7041F0811106C065 +:104C00000CC0243031052CF49F7049F4805E88304C +:104C100020F0C8010E944520CF2CDC2C06C0D80112 +:104C200015969C91907F91F7F8CF8D2D62960FB6D7 +:104C3000F894DEBF0FBECDBFDF91CF911F910F91D2 +:104C4000FF90EF90DF90CF9008951F93CF93DF9365 +:104C5000CDB7DEB72C970FB6F894DEBF0FBECDBF31 +:104C60004F83588769877A878B879C87CE01079601 +:104C70000E9438248823C1F02F8138858A859B853E +:104C8000892B31F03F3F11F080E003C02F3FE1F767 +:104C900081E0811147C04F81588569857A858B8570 +:104CA0009C850E9491233EC086E0FE013796DE017E +:104CB000119601900D928A95E1F7FF81E8854A856A +:104CC0005B854115510531F0EF3F31F481E0FF3F45 +:104CD00019F403C081E001C080E080FD23C0209171 +:104CE0007C0130E0C90101968770992760917B01B2 +:104CF00070E086179707F1F1F983EA835D834C83AF +:104D000096E0929FD001939FB00D1124A358BE4FFF +:104D1000FE01319601900D929A95E1F780937C0106 +:104D20000E94A12316E080917B0190917C0189175C +:104D300079F1189FC001112483589E4F0E94382496 +:104D4000882331F1E0917B011E9FF0011124E3588B +:104D5000FE4F4081518162817381848195810E94DF +:104D6000912380917B0190E0019687709927809331 +:104D70007B01D9CF0E94592310927C0110927B01B4 +:104D8000EDEAF1E086E0DF011D928A95E9F7CACFEE +:104D90002C960FB6F894DEBF0FBECDBFDF91CF913A +:104DA0001F910895EF92FF920F931F93CF93DF937C +:104DB0009C01009709F471C0F12CEE24E394E90101 +:104DC0002196F9018491843740F4843008F056C06C +:104DD000813081F0823021F160C0853709F449C00B +:104DE000C0F19CE7980F903708F057C08F770E946A +:104DF000E81F46C089010E5F1F4FFE01849190E2BB +:104E0000980F983050F48770FE2D01C0FF0F8A95DF +:104E1000EAF78F2F0E94552915C00E94201F14C049 +:104E200089010E5F1F4FFE01849190E2980F983028 +:104E300068F48770FE2D01C0FF0F8A95EAF78F2F67 +:104E40000E945B290E947E29E8011AC00E94E81F87 +:104E5000FBCF2E5F3F4FFE01C491CC2341F08FE981 +:104E60009FE00197F1F700C00000C150F6CFE901C3 +:104E700007C0FE01F490E901229602C00E94201FA3 +:104E80008F2D882341F0EFE9FFE03197F1F700C063 +:104E900000008150F6CF9E0192CFDF91CF911F91FC +:104EA0000F91FF90EF90089508956093B70170936C +:104EB000B8018093B9019093BA010C9447230F93E2 +:104EC0001F930091B7011091B8012091B901309161 +:104ED000BA01062B172B282B392B0093B7011093FF +:104EE000B8012093B9013093BA011F910F910C942E +:104EF00047230F931F930091B7011091B8012091A0 +:104F0000B9013091BA0106231723282339230093CE +:104F1000B7011093B8012093B9013093BA011F91E2 +:104F20000F910C9447230F931F930091B701109199 +:104F3000B8012091B9013091BA0106271727282717 +:104F400039270093B7011093B8012093B90130932A +:104F5000BA011F910F910C9447231092B301109244 +:104F6000B4011092B5011092B6010C94472341E0B0 +:104F700050E060E070E004C0440F551F661F771FCB +:104F80008A95D2F74093B3015093B4016093B50171 +:104F90007093B6010C94472341E050E060E070E06C +:104FA00004C0440F551F661F771F8A95D2F7809162 +:104FB000B3019091B401A091B501B091B601842BD9 +:104FC000952BA62BB72B8093B3019093B401A0939C +:104FD000B501B093B6010C94472341E050E060E086 +:104FE00070E004C0440F551F661F771F8A95D2F7E3 +:104FF00040955095609570958091B3019091B40162 +:10500000A091B501B091B60184239523A623B723BF +:105010008093B3019093B401A093B501B093B6010E +:105020000C94472341E050E060E070E004C0440F7E +:10503000551F661F771F8A95D2F78091B301909113 +:10504000B401A091B501B091B60184279527A62798 +:10505000B7278093B3019093B401A093B501B093A7 +:10506000B6010C9447230F931F930091B301109145 +:10507000B4012091B5013091B601062B172B282BD6 +:10508000392B0093B3011093B4012093B5013093F1 +:10509000B6011F910F910C9447230F931F9300911A +:1050A000B3011091B4012091B5013091B6010623EE +:1050B0001723282339230093B3011093B4012093BD +:1050C000B5013093B6011F910F910C9447230F93B4 +:1050D0001F930091B3011091B4012091B50130915B +:1050E000B60106271727282739270093B301109305 +:1050F000B4012093B5013093B6011F910F910C9428 +:1051000047230895CF92DF92EF92FF920F931F9360 +:10511000CF93DF93EC01C090B701D090B801E0903D +:10512000B901F090BA018091B3019091B401A091BE +:10513000B501B091B601C82AD92AEA2AFB2A0FE1A3 +:1051400010E0B701A601002E04C07695679557952B +:1051500047950A94D2F740FF07C0BE01802F0E94F6 +:10516000C2158130910539F40150110950F7BE0183 +:1051700080E00E94C215DF91CF911F910F91FF90A7 +:10518000EF90DF90CF90089590910C019923D9F082 +:1051900090910D019923B9F0982F96959695969533 +:1051A0009F3088F5E0910E01F0910F01E90FF11D9C +:1051B000877021E030E001C0220F8A95EAF78181F3 +:1051C000822B8183089540910E0150910F0120E0C0 +:1051D00030E09FEFFA01E20FF31F6281681799F048 +:1051E0009F3F19F4611101C0922F2F5F3F4F2E3066 +:1051F000310581F79F3F39F0FA01E90FF11D97FD65 +:10520000FA9582830895089590910C019923E1F015 +:1052100090910D019923C1F0982F969596959695AA +:105220009F3020F5E0910E01F0910F01E90FF11D83 +:10523000877021E030E001C0220F8A95EAF72095BF +:10524000818128232183089540910E0150910F01FF +:1052500020E030E0FA01E20FF31F9281981301C0C1 +:1052600012822F5F3F4F2E303105A1F7089581E064 +:1052700090E0E0910E01F0910F01E80FF91F10820C +:10528000019680319105A9F708959091CD01982B51 +:105290009093CD01089580959091CD01982390939E +:1052A000CD0108951092CD0108959091CC01982BD5 +:1052B0009093CC01089580959091CC019823909380 +:1052C000CC0108951092CC0108958093BB010895FC +:1052D0001092BB01089540910E0150910F0120E002 +:1052E00030E080E0FA01E20FF31F918191118F5FAE +:1052F0002F5F3F4F2F303105A9F70895E0910E0140 +:10530000F0910F018091CD018083E0910E01F09129 +:105310000F0180819091CC01892B80839091BB01FA +:10532000992361F0E0910E01F0910F018081892BAA +:1053300080830E946B2981111092BB0180910E0124 +:1053400090910F010C94041ECF92DF92EF92FF9286 +:105350000F931F936C01EE24FF24C114D104E104C8 +:10536000F10421F46B017C0180E001C080E133276E +:105370002F2D1E2D0D2D011511052105310519F0BB +:10538000885F6801790197018601A4E03695279529 +:1053900017950795AA95D1F7011511052105310536 +:1053A00019F08C5F6801790197018601F2E036956A +:1053B000279517950795FA95D1F701151105210540 +:1053C000310519F08E5F68017901B701A601769564 +:1053D000679557954795452B462B472B09F08F5FCF +:1053E0001F910F91FF90EF90DF90CF9008958091E3 +:1053F000E701843009F11092CF0120E488E190E0C8 +:105400000FB6F894A895809360000FBE20936000BB +:1054100083B7817F846083BF83B7816083BF7894C3 +:10542000889583B78E7F83BF88E10FB6F894809309 +:105430006000109260000FBE089508950895CF9304 +:105440000E941D2A0E94EC130E941E2AC0E08C2F8D +:105450000E94D914811105C0CF5FCE30C1F780E022 +:1054600001C081E0CF9108950E9459230E94F81D48 +:105470000C94FD1682E084BD93E095BD9AEF97BD34 +:1054800080936E0008952FB7F8948091D001909189 +:10549000D101A091D201B091D3012FBF0895CF9235 +:1054A000DF92EF92FF920F931F932FB7F8944091E2 +:1054B000D0015091D1016091D2017091D3012FBFE1 +:1054C0006A017B01EE24FF248C0120E030E0C0164D +:1054D000D106E206F30610F441505109481B590B5E +:1054E000CA011F910F91FF90EF90DF90CF90089528 +:1054F0001F920F920FB60F9211248F939F93AF9329 +:10550000BF938091D0019091D101A091D201B0912F +:10551000D3010196A11DB11D8093D0019093D101BB +:10552000A093D201B093D301BF91AF919F918F917E +:105530000F900FBE0F901F9018950E94FE1AF894BE +:105540002FEF87EA91E6215080409040E1F700C0BC +:10555000000087E090EBDC018093F0019093F10173 +:10556000A093F201B093F3012CE088E190E00FB634 +:10557000F894A895809360000FBE20936000FFCF41 +:10558000EF92FF920F931F93CF93DF93E82EF12CAE +:105590008F2D0E94D914C0E0D0E0082F10E09801B0 +:1055A0000C2E02C0359527950A94E2F720FD05C020 +:1055B0002196C630D10599F709C06C2F7F2D80E068 +:1055C0000E94A015E812F4CF81E005C0F3948EE0AC +:1055D000F812DECF80E0DF91CF911F910F91FF9005 +:1055E000EF900895CF93C82F8CE20E94C02A8823A1 +:1055F00021F08C2FCF910C94C02A80E0CF91089598 +:10560000CF930E94452C811102C00E942B2CC5E62D +:10561000C15049F00E94EC138FE39CE90197F1F728 +:1056200000C00000F5CF89E20E94F22A811111C169 +:105630008AE20E94F22A81110E942B2C85E00E94AE +:10564000F22A81110E949D2A0E94502C8093CE0143 +:1056500087E00E94F22A882399F18BE10E94F22AC6 +:10566000882351F09091CE0191FB882780F921E0A9 +:10567000822780FB91F922C08EE00E94F22A8823C3 +:1056800051F09091CE0192FB882780F921E082278A +:1056900080FB92F913C080E10E94F22A9091CE0122 +:1056A000882341F093FB882780F921E0822780FB43 +:1056B00093F904C0892F809580FB90F99093CE01D7 +:1056C0008091CE010E94542C0E94622C8093E101B3 +:1056D00080EE0E94F22A882341F08091E101982F08 +:1056E000909590FB80F98093E10189E30E94F22A72 +:1056F000882359F09091E10191FB882780F921E0FE +:10570000822780FB91F99093E10182EE0E94F22AB8 +:10571000882359F09091E10192FB882780F921E0DC +:10572000822780FB92F99093E10186EE0E94F22A93 +:10573000882359F09091E10193FB882780F921E0BB +:10574000822780FB93F99093E10183EE0E94F22A75 +:10575000882359F09091E10194FB882780F921E09A +:10576000822780FB94F99093E10185E30E94F22A5D +:10577000882359F09091E10195FB882780F921E079 +:10578000822780FB95F99093E10181E30E94F22A40 +:10579000882359F09091E10196FB882780F921E058 +:1057A000822780FB96F99093E10181E10E94F22A21 +:1057B000882359F09091E10197FB882780F921E037 +:1057C000822780FB97F99093E1018091E1010E948B +:1057D000662C8091E10187FB882780F980930D0179 +:1057E00087E20E94F22AC82F8EE10E94F22A8111DC +:1057F000C2608FE10E94F22A8111C46080E20E949F +:10580000F22A8111C86081E20E94F22A8111C061EE +:1058100082E20E94F22A8111C06283E20E94F22A8F +:105820008111C06484E20E94F22A882311F0C068CA +:1058300002C0CC2329F08C2F0E945D2C6C2F03C05A +:105840000E94592C682F70E080E090E0CF910C947A +:105850005527CF9108956DEE7EEF80E090E00E9495 +:10586000813260E082E090E00E94733260E083E089 +:1058700090E00E94733260E084E090E00E94733216 +:1058800060E085E090E00C94733280E090E00E944C +:105890006D3221E08D3E9E4F09F020E0822F089569 +:1058A00082E090E00C946532682F82E090E00C94E6 +:1058B000733283E090E00C946532682F83E090E0CF +:1058C0000C94733284E090E00C946532682F84E08D +:1058D00090E00C9473328091D60180FF0BC06091F0 +:1058E000130185E0689FB001112475956795759542 +:1058F00067952AC081FF09C06091130185E0689F08 +:10590000B0011124759567951FC082FF07C0609193 +:10591000130185E0689FB001112416C04091D701A2 +:105920004423C9F060911201461788F720911301B2 +:1059300085E0289F90011124429FC001439F900D54 +:10594000112470E00E9437326038710540F461150F +:10595000710539F002C065E070E0862F08958FE789 +:10596000089581E008958091D60180FF08C060917C +:10597000110170E0759567957595679521C081FF58 +:1059800006C06091110170E07595679519C082FF9E +:1059900004C06091110170E010C08091D70188238C +:1059A000C1F0609110018617A0F790911101989FA6 +:1059B000C001112470E00E9437326038710528F46C +:1059C0006115710521F0862F08958FE7089581E014 +:1059D000089561E070E0F4CF803F21F40E946B2CC9 +:1059E000819504C0813F29F40E946B2C8093DA01D9 +:1059F0000895823F21F40E946B2C819504C0833F5F +:105A000029F40E946B2C8093D9010895893F19F4E1 +:105A10000E94B32C05C08A3F31F40E94B32C8195BB +:105A20008093DB0108958B3F21F40E94B32C819574 +:105A300004C08C3F29F40E94B32C8093DC010895AC +:105A4000843F21F48091D801816017C0853F21F403 +:105A50008091D801826011C0863F21F48091D801E5 +:105A600084600BC0873F21F48091D801886005C015 +:105A7000883F31F48091D80180618093D8010895E6 +:105A80008D3F21F48091D60181600BC08E3F21F4BF +:105A90008091D601826005C08F3F29F48091D601A4 +:105AA00084608093D6010895803F39F48091DA01B3 +:105AB00087FF6CC01092DA0169C0813F29F48091A0 +:105AC000DA011816BCF362C09091D901823F29F423 +:105AD00097FF5CC01092D90159C0833F19F4191681 +:105AE000CCF354C0893F41F48091DB0118160CF0CF +:105AF0004DC01092DB014AC08A3F29F48091DB013E +:105B000087FF44C0F6CF8B3F39F48091DC0187FFDB +:105B10003DC01092DC013AC08C3F29F48091DC0139 +:105B20001816BCF333C0843F21F48091D8018E7FD6 +:105B300017C0853F21F48091D8018D7F11C0863F29 +:105B400021F48091D8018B7F0BC0873F21F4809195 +:105B5000D801877F05C0883F31F48091D8018F7EBE +:105B60008093D80113C08D3F21F48091D6018E7FA0 +:105B70000BC08E3F21F48091D6018D7F05C08F3FF1 +:105B800029F48091D6018B7F8093D6018091D90131 +:105B900081110EC08091DA0181110AC08091DB0170 +:105BA000811106C08091DC01811102C01092D701E1 +:105BB000089588ED91E00E940F1E0E94432A909361 +:105BC000D5018093D40108951F93CF93DF938091E3 +:105BD000D4019091D5010E944F2A4091D7014423CE +:105BE00021F02091140130E006C0209115015AE007 +:105BF000259F900111248217930708F482C0809199 +:105C0000D9011091DA01D091DB01C091DC01811141 +:105C100007C0111105C0D11103C0CC2309F471C014 +:105C20004F3F19F04F5F4093D701181624F40E949C +:105C30006B2C8093D9018091D90187FF05C00E9408 +:105C40006B2C81958093D901111624F40E946B2C42 +:105C50008093DA018091DA0187FF05C00E946B2CE6 +:105C600081958093DA016091D901662339F1109111 +:105C7000DA01112319F1772767FD7095872F972F88 +:105C80000E94483123E333E343E35FE30E94AC31F6 +:105C90000E9415316093D901612F772767FD7095B8 +:105CA000872F972F0E94483123E333E343E35FE3D9 +:105CB0000E94AC310E9415316093DA011D1624F464 +:105CC0000E94B32C8093DB018091DB0187FF05C02C +:105CD0000E94B32C81958093DB011C1624F40E9452 +:105CE000B32C8093DC018091DC0187FF05C00E940A +:105CF000B32C81958093DC01DF91CF911F910C949F +:105D0000D92DDF91CF911F910895E8EDF1E085E065 +:105D1000DF011D928A95E9F71092D7011092D60102 +:105D20000895833081F128F4813059F08230D1F028 +:105D30000895853009F449C0B8F1863009F456C099 +:105D4000089520911501862F90E0820F911D8F3FBD +:105D5000910520F4620F6093150108958FEF8093F1 +:105D60001501089520911401862F90E0820F911D56 +:105D70008F3F910520F4620F6093140108958FEF17 +:105D800080931401089520911301862F90E0820FD3 +:105D9000911D8F3F910520F4620F609313010895C8 +:105DA0008FEF80931301089520911201862F90E0C8 +:105DB000820F911D8F3F910520F4620F60931201B5 +:105DC00008958FEF80931201089520911101862F7D +:105DD00090E0820F911D8F3F910520F4620F609338 +:105DE000110108958FEF8093110108952091100102 +:105DF000862F90E0820F911D8F3F910520F4620F56 +:105E00006093100108958FEF8093100108958330FF +:105E100011F128F4813049F0823091F008958530F5 +:105E200081F120F18630C1F1089580911501681744 +:105E300020F4861B80931501089510921501089592 +:105E400080911401681720F4861B80931401089533 +:105E500010921401089580911301681720F4861B95 +:105E600080931301089510921301089580911201F7 +:105E7000681720F4861B8093120108951092120176 +:105E8000089580911101681720F4861B80931101F9 +:105E9000089510921101089580911001681720F45F +:105EA000861B8093100108951092100108958D3182 +:105EB00009F442C020F58E3009F479C070F48730BF +:105EC00009F45EC020F4863009F442C033C0883043 +:105ED000D1F18B3009F4A7C02DC0863109F4A3C0DD +:105EE00038F4803109F46DC0813109F47BC022C0DF +:105EF000893109F498C08B3109F44FC01BC0853338 +:105F000009F479C048F4873209F475C008F478C000 +:105F1000893209F470C00EC0833438F48A3308F033 +:105F200071C0883309F47FC005C0833409F463C0AD +:105F30008834C1F080E008950E94CF300E94F81D9F +:105F40000E94FD1670C00E94502C0E94622C6BC0F3 +:105F50008091CE01817F8E7F8093CE0181E08093FE +:105F6000DE0108950E9459232FEF83ED90E3215025 +:105F700080409040E1F700C000000E949D2A53C07D +:105F80009091CE01892F817090FF03C0917F9E7FF9 +:105F900026C091609093CE0146C09091CE0191FBB6 +:105FA000882780F921E0822780FB91F913C0909126 +:105FB000CE0192FB882780F921E0822780FB92F9AD +:105FC00009C09091CE0193FB882780F921E08227B8 +:105FD00080FB93F99093CE01882329F191609093EF +:105FE000CE0108950E94592380910D0191E08927E7 +:105FF00080930D0118C061E070E080E090E00FC078 +:1060000023EE01C027EC280F61E070E080E090E013 +:1060100004C0660F771F881F991F2A95D2F70E9428 +:1060200055270E94592381E0089580E0089580E07B +:106030000895CF93C82F8091DE01813079F018F058 +:106040008230D1F184C0A0910E01B0910F018C91EA +:10605000813169F0823209F07CC009C0A0910E0143 +:10606000B0910F018C91813111F0823249F48C2F63 +:106070000E94153081111DC08C2F0E94572F1AC00D +:106080008C2F0E941730811114C0C43179F048F46C +:10609000CB3079F0C03109F060C082E08093DE013E +:1060A00008C0C93219F0C83321F057C01092DE0180 +:1060B00054C081E0817053C0C93289F118F5C431F0 +:1060C00071F1A8F4C73009F046C08AE08093150149 +:1060D00094E19093140193E0909313018093120143 +:1060E00088E08093110188E28093100134C0CE5182 +:1060F000C63088F5EC2FF0E0E65DFE4F808180939E +:10610000DD0129C0CE34E9F020F4CB3421F56AE07A +:1061100013C0C13579F0C235F1F461E00DC0809152 +:10612000DD01882319F01092DD0115C081E0809314 +:10613000DE0115C061E006C08091DD010E94912E54 +:106140000AC06AE08091DD010E94072F04C010920E +:10615000DE0180E004C081E002C080E0ABCFCF91DF +:106160000895E1E8F0E0808188608083808181602B +:1061700080838FB7F89493E09093890090ED90938B +:1061800088008FBF0895EFE6F0E080818260808311 +:106190000895EFE6F0E080818D7F80830895EFE63B +:1061A000F0E0808192E08927808308951F920F920A +:1061B0000FB60F9211242F933F934F935F936F93DA +:1061C0007F938F939F93AF93BF93EF93FF938091B0 +:1061D000DF019091E00101969093E0018093DF014F +:1061E000811103C082E00E94FD16E091E001E69576 +:1061F000E695F0E0E65CF04EE4918091DF018E13CD +:1062000003C080E00E94FD16FF91EF91BF91AF9116 +:106210009F918F917F916F915F914F913F912F91BE +:106220000F900FBE0F901F90189504D06894B11175 +:106230008DC0089570D088F09F5790F0B92F99279E +:10624000B751A0F0D1F0660F771F881F991F1AF081 +:10625000BA95C9F712C0B13081F077D0B1E0089596 +:1062600074C0672F782F8827B85F39F0B93FCCF317 +:10627000869577956795B395D9F73EF49095809577 +:10628000709561957F4F8F4F9F4F0895E89409C097 +:1062900097FB3EF490958095709561957F4F8F4F59 +:1062A0009F4F9923A9F0F92F96E9BB279395F6956F +:1062B000879577956795B795F111F8CFFAF4BB0FED +:1062C00011F460FF1BC06F5F7F4F8F4F9F4F16C051 +:1062D000882311F096E911C0772321F09EE8872FDB +:1062E000762F05C0662371F096E8862F70E060E097 +:1062F0002AF09A95660F771F881FDAF7880F969510 +:10630000879597F9089557FD9058440F551F59F0F8 +:106310005F3F71F04795880F97FB991F61F09F3F92 +:1063200079F087950895121613061406551FF2CFBB +:106330004695F1DF08C0161617061806991FF1CF0B +:1063400086957105610508940895E894BB27662732 +:106350007727CB0197F908950BD078C069D028F042 +:106360006ED018F0952309F05AC05FC01124EECF0B +:10637000CADFA0F3959FD1F3950F50E0551F629FA0 +:10638000F001729FBB27F00DB11D639FAA27F00D8E +:10639000B11DAA1F649F6627B00DA11D661F829FB5 +:1063A0002227B00DA11D621F739FB00DA11D621F9A +:1063B000839FA00D611D221F749F3327A00D611DB7 +:1063C000231F849F600D211D822F762F6A2F112499 +:1063D0009F5750408AF0E1F088234AF0EE0FFF1FEC +:1063E000BB1F661F771F881F91505040A9F79E3F23 +:1063F000510570F014C0AACF5F3FECF3983EDCF378 +:10640000869577956795B795F795E7959F5FC1F75F +:10641000FE2B880F911D9695879597F9089597F90A +:106420009F6780E870E060E008959FEF80EC08953A +:1064300000240A9416161706180609060895002463 +:106440000A9412161306140605060895092E0394DD +:10645000000C11F4882352F0BB0F40F4BF2B11F451 +:1064600060FF04C06F5F7F4F8F4F9F4F089597FB72 +:10647000072E16F4009407D077FD09D00E94513200 +:1064800007FC05D03EF4909581959F4F0895709537 +:1064900061957F4F0895EE0FFF1F0590F491E02D59 +:1064A0000994AA1BBB1B51E107C0AA1FBB1FA6175B +:1064B000B70710F0A61BB70B881F991F5A95A9F7AD +:1064C00080959095BC01CD010895F999FECF92BDBC +:1064D00081BDF89A992780B50895A8E1B0E042E01F +:1064E00050E00C948832262FF999FECF1FBA92BD46 +:1064F00081BD20BD0FB6F894FA9AF99A0FBE0196A5 +:1065000008950E947332272F0C947432DC01CB0162 +:10651000FC01F999FECF06C0F2BDE1BDF89A3196B3 +:1065200000B40D9241505040B8F70895F894FFCF51 +:106530002002FF168C176917351702170101BC01DD +:1065400028080A03140A3F4D3639FB1EAE1E781E7A +:106550003F1ED21DEB1D041E1D1E01020304050675 +:04656000070809001F +:00000001FF From 77fa2b0056f10c079af541a746fb12cb96fabe72 Mon Sep 17 00:00:00 2001 From: mbarkhau Date: Tue, 29 Mar 2016 18:35:47 +0200 Subject: [PATCH 4/5] Update compile_keymap.py --- .../keymaps/german-manuneo/compile_keymap.py | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py index 9767b1e074..af68672226 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py @@ -121,32 +121,30 @@ def loads(raw_data): // # start of the comment (.*) # the comment $ # until the end of line - """, re.MULTILINE | re.VERBOSE - ) - + """, re.MULTILINE | re.VERBOSE) + INLINE_COMMENT_RE = re.compile(r""" - (?:[\,\"\[\]\{\}\d]) # anythig that might end a expression + ([\,\"\[\]\{\}\d]) # anythig that might end a expression \s+ # comment must be preceded by whitespace // # start of the comment \s # and succeded by whitespace - ([^\"\]\}\{\[]*) # the comment (except things which might be json) + (?:[^\"\]\}\{\[]*) # the comment (except things which might be json) $ # until the end of line - """, re.MULTILINE | re.VERBOSE - ) - + """, re.MULTILINE | re.VERBOSE) + TRAILING_COMMA_RE = re.compile(r""" , # the comma - \s* # arbitrary whitespace (including newlines) + (?:\s*) # arbitrary whitespace + $ # only works if the trailing comma is followed by newline + (\s*) # arbitrary whitespace ([\]\}]) # end of an array or object - """, re.MULTILINE | re.VERBOSE - ) - + """, re.MULTILINE | re.VERBOSE) if isinstance(raw_data, bytes): raw_data = raw_data.decode('utf-8') raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data) raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data) - raw_data = TRAILING_COMMA_RE.sub(r"\1", raw_data) + raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data) return json.loads(raw_data) From 381a9fd55319d1f29783748f5d6d5c5820e81636 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Sat, 2 Apr 2016 23:07:58 +0200 Subject: [PATCH 5/5] use action function for unicode --- .../keymaps/german-manuneo/compile_keymap.py | 273 +- .../keymaps/german-manuneo/german-manuneo.hex | 2862 +++++++---------- .../keymaps/german-manuneo/keymap.c | 1004 ++---- .../keymaps/german-manuneo/keymap.md | 52 +- 4 files changed, 1651 insertions(+), 2540 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py index af68672226..3d26672762 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/compile_keymap.py @@ -20,6 +20,7 @@ import sys import json import unicodedata import collections +import itertools as it PY2 = sys.version_info.major == 2 @@ -27,11 +28,6 @@ if PY2: chr = unichr -BASEPATH = os.path.abspath(os.path.join( - os.path.dirname(__file__), "..", ".." -)) - - KEYBOARD_LAYOUTS = { # These map positions in the parsed layout to # positions in the KEYMAP MATRIX @@ -73,34 +69,33 @@ BLANK_LAYOUTS = [ # Wide Layout """ -.--------------------------------------------. .--------------------------------------------. -| | | | | | | | ! | | | | | | | -!------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+------! -| | | | | | | | ! | | | | | | | -!------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+------! -| | | | | | |-------! !-------! | | | | | | -!------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+------! -| | | | | | | | ! | | | | | | | -'------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+------' - | | | | | | ! | | | | | - '-----------------------------' '-----------------------------' - .---------------. .---------------. - | | | ! | | - .-------+-------+-------! !-------+-------+-------. - ! ! | | ! | ! ! - ! ! !-------! !-------! ! ! - | | | | ! | | | - '-----------------------' '-----------------------' +.---------------------------------------------. .---------------------------------------------. +| | | | | | | | ! | | | | | | | +!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------! +| | | | | | | | ! | | | | | | | +!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! +| | | | | | |-------! !-------! | | | | | | +!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------! +| | | | | | | | ! | | | | | | | +'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------' + | | | | | | ! | | | | | + '------------------------------' '------------------------------' + .---------------. .---------------. + | | | ! | | + .-------+-------+-------! !-------+-------+-------. + ! ! | | ! | ! ! + ! ! !-------! !-------! ! ! + | | | | ! | | | + '-----------------------' '-----------------------' """, ] DEFAULT_CONFIG = { - "includes_basedir": "quantum/", "keymaps_includes": [ "keymap_common.h", ], - 'filler': "-+.':x", + 'filler': "-+.'!:x", 'separator': "|", 'default_key_prefix': ["KC_"], } @@ -114,31 +109,34 @@ SECTIONS = [ # Markdown Parsing +ONELINE_COMMENT_RE = re.compile(r""" + ^ # comment must be at the start of the line + \s* # arbitrary whitespace + // # start of the comment + (.*) # the comment + $ # until the end of line +""", re.MULTILINE | re.VERBOSE +) + +INLINE_COMMENT_RE = re.compile(r""" + ([\,\"\[\]\{\}\d]) # anythig that might end a expression + \s+ # comment must be preceded by whitespace + // # start of the comment + \s # and succeded by whitespace + (?:[^\"\]\}\{\[]*) # the comment (except things which might be json) + $ # until the end of line +""", re.MULTILINE | re.VERBOSE) + +TRAILING_COMMA_RE = re.compile(r""" + , # the comma + (?:\s*) # arbitrary whitespace + $ # only works if the trailing comma is followed by newline + (\s*) # arbitrary whitespace + ([\]\}]) # end of an array or object +""", re.MULTILINE | re.VERBOSE) + + def loads(raw_data): - ONELINE_COMMENT_RE = re.compile(r""" - ^ # comment must be at the start of the line - \s* # arbitrary whitespace - // # start of the comment - (.*) # the comment - $ # until the end of line - """, re.MULTILINE | re.VERBOSE) - - INLINE_COMMENT_RE = re.compile(r""" - ([\,\"\[\]\{\}\d]) # anythig that might end a expression - \s+ # comment must be preceded by whitespace - // # start of the comment - \s # and succeded by whitespace - (?:[^\"\]\}\{\[]*) # the comment (except things which might be json) - $ # until the end of line - """, re.MULTILINE | re.VERBOSE) - - TRAILING_COMMA_RE = re.compile(r""" - , # the comma - (?:\s*) # arbitrary whitespace - $ # only works if the trailing comma is followed by newline - (\s*) # arbitrary whitespace - ([\]\}]) # end of an array or object - """, re.MULTILINE | re.VERBOSE) if isinstance(raw_data, bytes): raw_data = raw_data.decode('utf-8') @@ -164,6 +162,8 @@ def parse_config(path): name = line[2:] elif line.startswith("## "): name = line[3:] + else: + name = "" name = name.strip().replace(" ", "_").lower() if name in SECTIONS: @@ -209,6 +209,7 @@ def parse_config(path): pass end_section() + assert 'layout' in config return config # header file parsing @@ -218,16 +219,15 @@ IF0_RE = re.compile(r""" #if 0 $.*? #endif - """, re.MULTILINE | re.DOTALL | re.VERBOSE -) +""", re.MULTILINE | re.DOTALL | re.VERBOSE) COMMENT_RE = re.compile(r""" /\* .*? \*/" - """, re.MULTILINE | re.DOTALL | re.VERBOSE -) +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + def read_header_file(path): with io.open(path, encoding="utf-8") as fh: @@ -237,7 +237,7 @@ def read_header_file(path): return data -def regex_partial(re_str_fmt, flags=re.MULTILINE | re.DOTALL | re.VERBOSE): +def regex_partial(re_str_fmt, flags): def partial(*args, **kwargs): re_str = re_str_fmt.format(*args, **kwargs) return re.compile(re_str, flags) @@ -251,8 +251,7 @@ KEYDEF_REP = regex_partial(r""" (?:{}) # the prefixes (?:\w+) # the key name ) # capture group end - """ -) +""", re.MULTILINE | re.DOTALL | re.VERBOSE) ENUM_RE = re.compile(r""" @@ -264,8 +263,7 @@ ENUM_RE = re.compile(r""" \} ; ) # capture group end - """, re.MULTILINE | re.DOTALL | re.VERBOSE -) +""", re.MULTILINE | re.DOTALL | re.VERBOSE) ENUM_KEY_REP = regex_partial(r""" @@ -273,8 +271,8 @@ ENUM_KEY_REP = regex_partial(r""" {} # the prefixes \w+ # the key name ) # capture group end - """ -) +""", re.MULTILINE | re.DOTALL | re.VERBOSE) + def parse_keydefs(config, data): prefix_options = "|".join(config['key_prefixes']) @@ -289,26 +287,31 @@ def parse_keydefs(config, data): yield key_match.groups()[0] -def parse_valid_keys(config): - valid_keycodes = set() - paths = [ - os.path.join(BASEPATH, "tmk_core", "common", "keycode.h") - ] + [ - os.path.join( - BASEPATH, config['includes_dir'], include_path - ) for include_path in config['keymaps_includes'] - ] +def parse_valid_keys(config, out_path): + basepath = os.path.abspath(os.path.join(os.path.dirname(out_path))) + dirpaths = [] + subpaths = [] + while len(subpaths) < 6: + path = os.path.join(basepath, *subpaths) + dirpaths.append(path) + dirpaths.append(os.path.join(path, "tmk_core", "common")) + dirpaths.append(os.path.join(path, "quantum")) + subpaths.append('..') + + includes = set(config['keymaps_includes']) + includes.add("keycode.h") - for path in paths: - path = path.replace("/", os.sep) - # the config always uses forward slashe - if os.path.exists(path): - header_data = read_header_file(path) + valid_keycodes = set() + for dirpath, include in it.product(dirpaths, includes): + include_path = os.path.join(dirpath, include) + if os.path.exists(include_path): + header_data = read_header_file(include_path) valid_keycodes.update( parse_keydefs(config, header_data) ) return valid_keycodes + # Keymap Parsing def iter_raw_codes(layer_lines, filler, separator): @@ -325,6 +328,7 @@ def iter_raw_codes(layer_lines, filler, separator): def iter_indexed_codes(raw_codes, key_indexes): key_rows = {} key_indexes_flat = [] + for row_index, key_indexes in enumerate(key_indexes): for key_index in key_indexes: key_rows[key_index] = row_index @@ -384,8 +388,8 @@ def parse_code(raw_code, key_prefixes, valid_keycodes): return raw_code, None, None if MACRO_RE.match(raw_code): - code = macro_id = raw_code[2:-1] - return code, macro_id, None + macro_id = raw_code[2:-1] + return raw_code, macro_id, None if UNICODE_RE.match(raw_code): hex_code = raw_code[1:] @@ -404,10 +408,17 @@ def parse_keymap(config, key_indexes, layer_lines, valid_keycodes): layer_lines, config['filler'], config['separator'] )) indexed_codes = iter_indexed_codes(raw_codes, key_indexes) + key_prefixes = config['key_prefixes'] for raw_code, key_index, row_index in indexed_codes: code, macro_id, uc_hex = parse_code( - raw_code, config['key_prefixes'], valid_keycodes + raw_code, key_prefixes, valid_keycodes + ) + # TODO: line numbers for invalid codes + err_msg = "Could not parse key '{}' on row {}".format( + raw_code, row_index ) + assert code is not None, err_msg + # print(repr(raw_code), repr(code), macro_id, uc_hex) if macro_id: config['macro_ids'].add(macro_id) if uc_hex: @@ -482,9 +493,64 @@ void matrix_scan_user(void) { MACROCODE = """ #define UC_MODE_WIN 0 #define UC_MODE_LINUX 1 +#define UC_MODE_OSX 2 +// TODO: allow default mode to be configured static uint16_t unicode_mode = UC_MODE_WIN; +uint16_t hextokeycode(uint8_t hex) {{ + if (hex == 0x0) {{ + return KC_P0; + }} + if (hex < 0xA) {{ + return KC_P1 + (hex - 0x1); + }} + return KC_A + (hex - 0xA); +}} + +void unicode_action_function(uint16_t hi, uint16_t lo) {{ + switch (unicode_mode) {{ + case UC_MODE_WIN: + register_code(KC_LALT); + + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LALT); + break; + case UC_MODE_LINUX: + register_code(KC_LCTL); + register_code(KC_LSFT); + + register_code(KC_U); + unregister_code(KC_U); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LCTL); + unregister_code(KC_LSFT); + break; + case UC_MODE_OSX: + break; + }} +}} + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ if (!record->event.pressed) {{ return MACRO_NONE; @@ -494,57 +560,35 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{ case UM: unicode_mode = (unicode_mode + 1) % 2; break; - {macro_cases} +{macro_cases} +{unicode_macro_cases} default: break; }} - if (unicode_mode == UC_MODE_WIN) {{ - switch(id) {{ - {win_macro_cases} - default: - break; - }} - }} else if (unicode_mode == UC_MODE_LINUX) {{ - switch(id) {{ - {linux_macro_cases} - default: - break; - }} - }} return MACRO_NONE; }}; """ -WIN_UNICODE_MACRO_TEMPLATE = """ -case {0}: - return MACRODOWN( - D(LALT), T(KP_PLUS), {1}, U(LALT), END - ); -""" -LINUX_UNICODE_MACRO_TEMPLATE = """ -case {0}: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), {1}, T(KP_ENTER), END - ); -""" +UNICODE_MACRO_TEMPLATE = """ +case {macro_id}: + unicode_action_function(0x{hi:02x}, 0x{lo:02x}); + break; +""".strip() -def macro_cases(config, mode): - if mode == 'win': - template = WIN_UNICODE_MACRO_TEMPLATE - elif mode == 'linux': - template = LINUX_UNICODE_MACRO_TEMPLATE - else: - raise ValueError("Invalid mode: ", mode) - template = template.strip() +def unicode_macro_cases(config): for macro_id, uc_hex in config['unicode_macros'].items(): + hi = int(uc_hex, 16) >> 8 + lo = int(uc_hex, 16) & 0xFF unimacro_keys = ", ".join( "T({})".format( "KP_" + digit if digit.isdigit() else digit ) for digit in uc_hex ) - yield template.format(macro_id, unimacro_keys) + yield UNICODE_MACRO_TEMPLATE.format( + macro_id=macro_id, hi=hi, lo=lo + ) def iter_keymap_lines(keymap): @@ -599,8 +643,7 @@ def iter_keymap_parts(config, keymaps): # macros yield MACROCODE.format( macro_cases="", - win_macro_cases="\n".join(macro_cases(config, mode='win')), - linux_macro_cases="\n".join(macro_cases(config, mode='linux')), + unicode_macro_cases="\n".join(unicode_macro_cases(config)), ) # TODO: dynamically create blinking lights @@ -624,7 +667,7 @@ def main(argv=sys.argv[1:]): out_path = os.path.join(dirname, "keymap.c") config = parse_config(in_path) - valid_keys = parse_valid_keys(config) + valid_keys = parse_valid_keys(config, out_path) keymaps = parse_keymaps(config, valid_keys) with io.open(out_path, mode="w", encoding="utf-8") as fh: diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex b/keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex index cb8b7fa8d4..ee1d30967d 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/german-manuneo.hex @@ -1,1624 +1,1240 @@ -:100000000C94BD0F0C9401100C9401100C94011071 -:100010000C9401100C9401100C9401100C9401101C -:100020000C9401100C9401100C94791B0C944B1C33 -:100030000C9401100C9401100C9401100C940110FC -:100040000C9401100C94D6300C9401100C940110F7 -:100050000C9401100C94782A0C9401100C9401104B -:100060000C9401100C9401100C9401100C940110CC -:100070000C9401100C9401100C9401100C940110BC -:100080000C9401100C9401100C9401100C940110AC -:100090000C9401100C9401100C9401100C9401109C -:1000A0000C9401100C9401100C940110AB107810FA -:1000B0006310BD10E4101711F910FF1014113E1158 -:1000C0003511021138114E10F3102911321175102B -:1000D0006C10BA10B11099106F103010C6101A11B0 -:1000E00023112F119F10CF10AE1048102011ED10CA -:1000F0009010A5109C108410261193103910F01048 -:100100008A10C9106C12B410661054107E107B1047 -:10011000D210A2100E113F108D10B7102D10C0106C -:100120000B111111DB105D10F6104B1072105710EF -:10013000CC10FC103B113310A810C3100511D510C2 -:100140005A102C11EA10451096106010E110691039 -:1001500008114210D810E7103610511041111D112E -:1001600081103C10DE108710D311A0118B11E51106 -:100170000C123F12211227123C1266125D122A1233 -:10018000601276111B1251125A129D119411E21134 -:10019000D911C11197115811EE1142124B12571279 -:1001A000C711F711D611701148121512B811CD11DF -:1001B000C411AC114E12BB1161111812B211F11120 -:1001C0006F12DC118E117C11A611A311FA11CA1144 -:1001D00036126711B511DF115511E81133123912BA -:1001E000031285111E1273119A117F11F41124123A -:1001F00063125B11D011EB112D12FD1182115412FB -:1002000012126D11BE1188110912911130126A116A -:1002100000120F125E11791169124512A9116411B1 -:100220000612AF11B01CD21CBD1DD21CBD1D141D69 -:10023000371DBD1D8C1D9F1D8C208C20BA20BA201F -:10024000FC203821382338235021382347224722E5 -:10025000122338233823262301E001E10118021874 -:1002600002E002E10162026201620262010502052E -:1002700001070207015802580001E001E1011802DC -:100280001802E002E101620262015B025B016102AD -:1002900061015C025C015802580001E001E10118B3 -:1002A000021802E002E1015A025A01620262016090 -:1002B0000260015E025E015802580001E001E101A6 -:1002C00018021802E002E101620262015B025B01B6 -:1002D000610261015B025B015802580001E001E12B -:1002E0000118021802E002E101620262015B025B96 -:1002F00001610261015D025D015802580001E001E7 -:10030000E10118021802E002E101620262015B02EF -:100310005B0161026101060206015802580001E01A -:1003200001E10118021802E002E101620262015BD0 -:10033000025B01040204015D025D015802580001E4 -:10034000E001E10118021802E002E1015A025A013B -:10035000620262015F025F0109020901580258004E -:1003600001E001E10118021802E002E1016202620B -:10037000015B025B0161026101050205015802583F -:100380000001E001E10118021802E002E10162024D -:1003900062015B025B010502050161026101580215 -:1003A000580001E001E10118021802E002E10162D7 -:1003B0000262015B025B016102610160026001583F -:1003C00002580001E001E10118021802E002E10117 -:1003D000620262015B025B01060206015F025F01CD -:1003E0005802580001E001E10118021802E002E1A0 -:1003F0000162026201620262010502050106020653 -:10040000015802580001E001E10118021802E0025F -:10041000E101620262015B025B01040204015C0211 -:100420005C015802580001E001E10118021802E0E5 -:1004300002E1015A025A015A025A01620262016241 -:100440000262015802580001E001E101180218029D -:10045000E002E101620262015B025B01040204014D -:100460005F025F015802580001E001E10118021823 -:1004700002E002E1015A025A015A025A015E025E8A -:1004800001620262015802580001E001E101180214 -:100490001802E002E101620262015B025B010602F6 -:1004A00006015D025D015802580001E001E10118FA -:1004B000021802E002E1015A025A015A025A01628C -:1004C000026201610261015802580001E001E1018C -:1004D00018021802E002E1015A025A0162026201A6 -:1004E0005F025F01620262015802580001E001E10F -:1004F0000118021802E002E1015A025A0162026286 -:10050000015F025F01600260015802580001E001D2 -:10051000E10118021802E002E101620262015B02DD -:100520005B01610261015F025F015802580001E056 -:1005300001E10118021802E002E101620262015BBE -:10054000025B01610261015A025A0158025800011E -:10055000E001E10118021802E002E1015A025A0129 -:1005600062026201600260015F025F01580258008E -:1005700001E001E10118021802E002E101620262F9 -:10058000015B025B01610261015902590158025885 -:100590000001E001E10118021802E002E1015A0243 -:1005A0005A01620262016002600160026001580249 -:1005B000580001E001E10118021802E002E10162C5 -:1005C0000262015B025B01610261010402040158E5 -:1005D00002580001E001E10118021802E002E10105 -:1005E000620262015B025B0105020501060206016F -:1005F0005802580001E001E10118021802E002E18E -:1006000001620262015B025B01050205015C025CA2 -:10061000015802580001E001E10118021802E0024D -:10062000E1015A025A01620262015F025F01610246 -:1006300061015802580001E001E10118021802E0CE -:1006400002E1015A025A015902590161026101593C -:100650000259015802580001E001E1011802180294 -:10066000E002E1015A025A015A025A016202620191 -:100670005D025D015802580001E001E10118021815 -:1006800002E002E10162026201620262010502050A -:10069000015B025B015802580001E001E101180210 -:1006A0001802E002E10162026201620262010502D7 -:1006B0000501080208015802580001E001E1011893 -:1006C000021802E002E101620262016202620105B7 -:1006D000020501590259015802580001E001E101E7 -:1006E00018021802E002E1015A025A015A025A01A4 -:1006F000620262015B025B015802580001E001E105 -:100700000118021802E002E1015A025A0162026273 -:10071000015F025F015D025D015802580001E001C6 -:10072000E10118021802E002E101620262015B02CB -:100730005B01060206015C025C015802580001E000 -:1007400001E10118021802E002E101620262015BAC -:10075000025B01610261015E025E01580258000104 -:10076000E001E10118021802E002E1015A025A0117 -:100770006202620160026001590259015802580088 -:1007800001E001E10118021802E002E101620262E7 -:10079000015B025B01060206016102610158025819 -:1007A0000001E001E10118021802E002E101620229 -:1007B00062015B025B01040204015B025B015802FF -:1007C000580001E001E10118021802E002E1015ABB -:1007D000025A016202620160026001620262015813 -:1007E00002580001E001E10118021802E002E101F3 -:1007F0006202620162026201070207015F025F0199 -:100800005802580001E001E10118021802E002E17B -:10081000015A025A015A025A0162026201600260E0 -:10082000015802580001E001E10118021802E0023B -:10083000E101620262015B025B0161026101090286 -:1008400009015802580001E001E10118021802E014 -:1008500002E1015A025A015A025A01590259010889 -:100860000208015802580001E001E10118021802D3 -:10087000E002E101620262015B025B010602060125 -:100880005E025E015802580001E001E10118021801 -:1008900002E002E101620262015B025B0104020408 -:1008A000015E025E015802580001E001E1011802F8 -:1008B0001802E002E101620262015B025B010502D3 -:1008C0000501590259015802580001E001E10118DF -:1008D000021802E002E1015A025A015A025A015C6E -:1008E000025C015B025B015802580001E001E1017A -:1008F00018021802E002E1015A025A016202620182 -:10090000600260015A025A015802580001E001E1F8 -:100910000118021802E002E101620262015B025B5F -:1009200001050205015F025F015802580001E00164 -:10093000E10118021802E002E101620262015B02B9 -:100940005B0105020501600260015802580001E0E8 -:1009500001E10118021802E002E101620262015B9A -:10096000025B01610261010802080158025800019E -:10097000E001E10118021802E002E10162026201F5 -:100980005B025B01060206015A025A015802580036 -:1009900001E001E10118021802E002E101620262D5 -:1009A000015B025B01040204016202620158025809 -:1009B0000001E001E10118021802E002E1015A021F -:1009C0005A01620262015F025F015F025F01580229 -:1009D000580001E001E10118021802E002E10162A1 -:1009E0000262015B025B0105020501040204015879 -:1009F00002580001E001E10118021802E002E101E1 -:100A0000620262015B025B01050205015D025D019C -:100A10005802580001E001E10118021802E002E169 -:100A200001620262015B025B01050205015E025E7A -:100A3000015802580001E001E10118021802E00229 -:100A4000E101620262015B025B010502050107022E -:100A500007015802580001E001E10118021802E004 -:100A600002E1015A025A01590259015D025D015C1D -:100A7000025C015802580001E001E101180218026D -:100A8000E002E101620262015B025B010502050115 -:100A90005B025B015802580001E001E101180218F5 -:100AA00002E002E1015A025A01590259015D025D58 -:100AB00001610261015802580001E001E1011802E0 -:100AC0001802E002E101620262015B025B010602C0 -:100AD0000601590259015802580001E001E10118CC -:100AE000021802E002E101620262015B025B0106A0 -:100AF0000206015B025B015802580001E001E101BE -:100B000018021802E002E10162026201620262015F -:100B1000090209015F025F015802580001E001E18A -:100B20000118021802E002E101620262015B025B4D -:100B30000161026101070207015802580001E0014A -:100B4000E10118021802E002E1015A025A016202B0 -:100B50006201600260015C025C015802580001E021 -:100B600001E10118021802E002E101620262015B88 -:100B7000025B010402040160026001580258000196 -:100B8000E001E10118021802E002E10162026201E3 -:100B90005B025B010402040161026101580258001A -:100BA00001E001E10118021802E002E101620262C3 -:100BB0000162026201050205015A025A01580258F7 -:100BC0000001E001E10118021802E002E101620205 -:100BD00062015B025B0106020601620262015802C9 -:100BE000580001E001E10118021802E002E1015A97 -:100BF000025A0159025901610261015B025B01580D -:100C000002580001E001E10118021802E002E101CE -:100C10005A025A01620262015F025F015E025E01D6 -:100C20005802580001E001E10118021802E002E157 -:100C3000015A025A0159025901610261015A025ACC -:100C4000015802580001E001E10118021802E00217 -:100C5000E1015A025A01620262015F025F015C0215 -:100C60005C015802580001E001E10118021802E09D -:100C700002E1015A025A01620262016002600161EE -:100C80000261015802580001E001E1011802180256 -:100C9000E002E101620262015B025B010602060101 -:100CA000600260015802580001E001E101180218D9 -:100CB00002E002E1015A025A01590259015D025D46 -:100CC000015D025D015802580001E001E1011802D6 -:100CD0001802E002E101620262015B025B01610253 -:100CE0006101610261015802580001E001E101184F -:100CF000021802E002E1015A025A01620262016036 -:100D00000260015D025D015802580001E001E1014D -:100D100018021802E002E101620262015B025B015B -:100D2000050205015A025A015802580001E001E18A -:100D30000118021802E002E101620262016202622D -:100D40000105020501610261015802580001E0013C -:100D5000E10118021802E002E1015A025A015A02A6 -:100D60005A01620262015C025C015802580001E013 -:100D700001E10118021802E002E101620262015B76 -:100D8000025B010502050108020801580258000132 -:100D9000E001E10118021802E002E1015A025A01E1 -:100DA000590259015D025D015B025B015802580066 -:100DB00001E001E10118021802E002E101620262B1 -:100DC000015B025B0105020501050205015802589D -:100DD0000001E001E10118021802E002E1015A02FB -:100DE0005A01590259015D025D01050205015802CF -:100DF000580001E001E10118021802E002E1015A85 -:100E0000025A0162026201600260015B025B0158EA -:100E100002580001E001E10118021802E002E101BC -:100E2000620262015B025B01040204015902590182 -:100E30005802580001E001E10118021802E002E145 -:100E4000015A025A015902590161026101620262AA -:100E5000015802580001E001E10118021802E00205 -:100E6000E101620262015B025B0105020501090208 -:100E700009015802580001E201570257016202625B -:100E800001620262010502050107020702E2000198 -:100E9000E20157025701620262015B025B016102DB -:100EA00061015C025C02E20001E201570257015A53 -:100EB000025A0162026201600260015E025E02E2A9 -:100EC0000001E20157025701620262015B025B010D -:100ED000610261015B025B02E20001E2015702571D -:100EE00001620262015B025B01610261015D025D00 -:100EF00002E20001E20157025701620262015B0255 -:100F00005B016102610106020602E20001E2015793 -:100F1000025701620262015B025B01040204015D8F -:100F2000025D02E20001E201570257015A025A0132 -:100F3000620262015F025F0109020902E20001E24E -:100F40000157025701620262015B025B01610261AB -:100F50000105020502E20001E201570257016202A7 -:100F600062015B025B010502050161026102E200B0 -:100F700001E20157025701620262015B025B0161FB -:100F800002610160026002E20001E20157025701C2 -:100F9000620262015B025B01060206015F025F0200 -:100FA000E20001E20157025701620262016202623D -:100FB000010502050106020602E20001E2015702F4 -:100FC0005701620262015B025B01040204015C02E0 -:100FD0005C02E20001E201570257015A025A015A2B -:100FE000025A016202620162026202E20001E2014F -:100FF00057025701620262015B025B0104020401B5 -:101000005F025F02E20001E201570257015A025AF1 -:10101000015A025A015E025E0162026202E20001AE -:10102000E20157025701620262015B025B010602A4 -:1010300006015D025D02E20001E201570257015A1A -:10104000025A015A025A016202620161026102E21D -:101050000001E201570257015A025A01620262017D -:101060005F025F0162026202E20001E20157025781 -:10107000015A025A01620262015F025F016002606E -:1010800002E20001E20157025701620262015B02C3 -:101090005B01610261015F025F02E20001E2015750 -:1010A000025701620262015B025B01610261015A47 -:1010B000025A02E20001E201570257015A025A01A4 -:1010C00062026201600260015F025F02E20001E20F -:1010D0000157025701620262015B025B016102611A -:1010E0000159025902E20001E201570257015A0276 -:1010F0005A01620262016002600160026002E20065 -:1011000001E20157025701620262015B025B016169 -:1011100002610104020402E20001E20157025701E8 -:10112000620262015B025B01050205010602060222 -:10113000E20001E20157025701620262015B025BB9 -:1011400001050205015C025C02E20001E2015702B6 -:1011500057015A025A01620262015F025F01610295 -:101160006102E20001E201570257015A025A015995 -:101170000259016102610159025902E20001E201D2 -:10118000570257015A025A015A025A016202620179 -:101190005D025D02E20001E2015702570162026254 -:1011A0000162026201050205015B025B02E20001CD -:1011B000E201570257016202620162026201050206 -:1011C000050108020802E20001E20157025701622C -:1011D000026201620262010502050159025902E23E -:1011E0000001E201570257015A025A015A025A01FC -:1011F000620262015B025B02E20001E201570257F8 -:10120000015A025A01620262015F025F015D025DE2 -:1012100002E20001E20157025701620262015B0231 -:101220005B01060206015C025C02E20001E201577A -:10123000025701620262015B025B01610261015EB1 -:10124000025E02E20001E201570257015A025A010E -:10125000620262016002600159025902E20001E289 -:101260000157025701620262015B025B010602063E -:101270000161026102E20001E201570257016202CC -:1012800062015B025B01040204015B025B02E2009B -:1012900001E201570257015A025A016202620160DB -:1012A00002600162026202E20001E201570257019C -:1012B0006202620162026201070207015F025F02CD -:1012C000E20001E201570257015A025A015A025A3A -:1012D000016202620160026002E20001E201570263 -:1012E0005701620262015B025B0161026101090256 -:1012F0000902E20001E201570257015A025A015A5B -:10130000025A015902590108020802E20001E201F1 -:1013100057025701620262015B025B01060206018D -:101320005E025E02E20001E20157025701620262C0 -:10133000015B025B01040204015E025E02E2000145 -:10134000E20157025701620262015B025B01050282 -:10135000050159025902E20001E201570257015A00 -:10136000025A015A025A015C025C015B025B02E212 -:101370000001E201570257015A025A01620262015A -:10138000600260015A025A02E20001E2015702576C -:1013900001620262015B025B01050205015F025FFF -:1013A00002E20001E20157025701620262015B02A0 -:1013B0005B010502050160026002E20001E20157E3 -:1013C000025701620262015B025B01610261010876 -:1013D000020802E20001E2015702570162026201C3 -:1013E0005B025B01060206015A025A02E20001E2B8 -:1013F0000157025701620262015B025B01040204B1 -:101400000162026202E20001E201570257015A0240 -:101410005A01620262015F025F015F025F02E20045 -:1014200001E20157025701620262015B025B0105A2 -:1014300002050104020402E20001E2015702570121 -:10144000620262015B025B01050205015D025D0251 -:10145000E20001E20157025701620262015B025B96 -:1014600001050205015E025E02E20001E20157028F -:101470005701620262015B025B010502050107027E -:101480000702E20001E201570257015A025A0159CC -:101490000259015D025D015C025C02E20001E201B1 -:1014A00057025701620262015B025B0105020501FE -:1014B0005B025B02E20001E201570257015A025A45 -:1014C00001590259015D025D0161026102E2000100 -:1014D000E20157025701620262015B025B010602F0 -:1014E000060159025902E20001E201570257016266 -:1014F0000262015B025B01060206015B025B02E223 -:101500000001E201570257016202620162026201B8 -:10151000090209015F025F02E20001E2015702577E -:1015200001620262015B025B016102610107020765 -:1015300002E20001E201570257015A025A01620217 -:101540006201600260015C025C02E20001E201579C -:10155000025701620262015B025B01040204016046 -:10156000026002E20001E2015702570162026201D9 -:101570005B025B010402040161026102E20001E21C -:10158000015702570162026201620262010502050F -:10159000015A025A02E20001E201570257016202B7 -:1015A00062015B025B010602060162026202E20066 -:1015B00001E201570257015A025A015902590161C9 -:1015C0000261015B025B02E20001E2015702570186 -:1015D0005A025A01620262015F025F015E025E020C -:1015E000E20001E201570257015A025A0159025919 -:1015F00001610261015A025A02E20001E20157024E -:1016000057015A025A01620262015F025F015C02E5 -:101610005C02E20001E201570257015A025A0162DC -:101620000262016002600161026102E20001E20106 -:1016300057025701620262015B025B01060206016A -:1016400060026002E20001E201570257015A025AA9 -:1016500001590259015D025D015D025D02E2000176 -:10166000E20157025701620262015B025B01610203 -:10167000610161026102E20001E201570257015A71 -:10168000025A0162026201600260015D025D02E2D3 -:101690000001E20157025701620262015B025B0135 -:1016A000050205015A025A02E20001E201570257FF -:1016B00001620262016202620105020501610261CA -:1016C00002E20001E201570257015A025A015A028E -:1016D0005A01620262015C025C02E20001E201570F -:1016E000025701620262015B025B0105020501080B -:1016F000020802E20001E201570257015A025A01B0 -:10170000590259015D025D015B025B02E20001E2E8 -:101710000157025701620262015B025B010502058B -:101720000105020502E20001E201570257015A02D7 -:101730005A01590259015D025D0105020502E200EC -:1017400001E201570257015A025A01620262016026 -:101750000260015B025B02E20001E20157025701F5 -:10176000620262015B025B01040204015902590238 -:10177000E20001E201570257015A025A0159025987 -:10178000016102610162026202E20001E2015702AC -:101790005701620262015B025B0105020501090259 -:1017A0000902E200055204520152035201000000F6 -:1017B0001E001B0018002F00010029001F0013004D -:1017C0000C003300E300E1002000090004003400B5 -:1017D000E2002A0021001A0008000600E00065006F -:1017E00022000A0012001900000049002E004A00E1 -:1017F00000004D00000002542E02025400002B0095 -:1018000000005E0023000B001600050000004C00E5 -:1018100024000D0011001000E2004B0025000E0016 -:101820001500360001002C0026000F0017003700BD -:1018300050002800270014000700520051004E00FD -:1018400035001C002D001D004F00000001000100AC -:1018500001000100010000001E02300238020100F8 -:10186000010001001F026414380030000100010073 -:101870002002240223022702010001000100241497 -:1018800025140100010001000100271426140100A5 -:101890000000010001000100000001000000010043 -:1018A0000100010000000100000001000100310002 -:1018B00021022D1400000100010064002502220213 -:1018C000010001000100640226023602010001004D -:1018D00001000100301437023830010035021F02C8 -:1018E0003102553002300100010001002D020100DB -:1018F0003D30000001000100010001000100000076 -:101900003A00010001000100010001003B0001005C -:1019100001000100010001003C0001000100010084 -:10192000010001003D000100010001000100010073 -:101930003E00010001000100000001004400010020 -:1019400000000100000001004500010000005300FC -:10195000000001003F000100010001000000010043 -:1019600040005F005C00590062000100410060001F -:101970005D005A0085000100420061005E005B00CE -:101980006300010043005500560057005800010055 -:101990006700540056005700580000000100010085 -:1019A00001000100010000004D30393001005B30C2 -:1019B00001000100513058303C303B300100010043 -:1019C0005030013014145D30010001004A305930AC -:1019D00008145C30010001004930573004300030F9 -:1019E00000000100053001000000010000000100BE -:1019F0000100010000000100000001004F305A30DA -:101A000037301E02000001004E3001004B30010053 -:101A100001000100483056305430533001000100BD -:101A20004C30010003303A30010001005230010017 -:101A3000010001000100010001000100010001009E -:101A40000100000001000100010001000100000090 -:101A500042302030343001000100010046302E3089 -:101A6000263033300100010045302D301E3001009A -:101A70000100010040302B30223001000100010044 -:101A80003F3025302C300100000001000100010032 -:101A90000000010000000100010001000000010041 -:101AA000000001004430233031301F3000000100BD -:101AB000433035302A302930010001003E302730D4 -:101AC0003030010001000100413028303230010087 -:101AD0000100010047300100213001000100010038 -:101AE0000100363024302F300100000001000100D9 -:101AF0000100010001000000010008301B3001005E -:101B000001000100010015300D301A300100010004 -:101B10000100143006300100010001000100123004 -:101B20000A3001000100010001000C3013300100F7 -:101B300000000100010001000000010000000100A0 -:101B400001000100000001000000010001000B3055 -:101B5000183007300000010001001C301130103037 -:101B60000100010001000E301730010001000100EA -:101B700001000F30193001000100010001000100D7 -:101B8000093001000100010001001D300100163084 -:101B9000010000000100010001000100010000003F -:101BA000010001000100010001000100010001002D -:101BB000010001000100010001000100010001001D -:101BC000010001000100010001000100010001000D -:101BD00001000100010001000000010001000100FE -:101BE00000000100000001000100010000000100F0 -:101BF00000000100010001000100010000000100DF -:101C000001000100010001000100010001000100CC -:101C100001000100010001000100010001000100BC -:101C200001000100010001000100010001000100AC -:101C3000010001000100010001000000010001009D -:101C4000010001000100000001000100010001008D -:101C5000010001000100010001000100010001007C -:101C6000010001000100010001000100010001006C -:101C7000010001000100010001000100010001005C -:101C8000000001000100010000000100000001004F -:101C9000010001000000010000000100010001003E -:101CA000010001000000010001000100010001002D -:101CB000010001000100010001000100010001001C -:101CC000010001000100010001000100010001000C -:101CD00001000100010001000100010001000100FC -:101CE00001000000010001000100010001000000EE -:101CF00001000100010001000100010001000100DC -:101D000001000100010001000100010001000100CB -:101D100001000100010001000100010001000100BB -:101D200001000100010001000000010001000100AC -:101D3000000001000000010001000100000001009E -:101D4000000001000100010001000100000001008D -:101D5000010001000100010001000100010001007B -:101D6000010001000100010001000100010001006B -:101D7000010001000100010001000100010001005B -:101D800001000100010001000100000016034500F0 -:101D9000720067006F0044006F007800200045006B -:101DA0005A00000016034500720067006F004400EF -:101DB0006F007800200045005A0000000403090469 -:101DC00009026D00040100A0FA09040000010301EA -:101DD0000100092111010001223F000705810308CC -:101DE000000A090401000103010200092111010098 -:101DF00001224D000705820308000A0904020001C0 -:101E000003000000092111010001223600070583AB -:101E10000308000A0904030001030000000921115E -:101E2000010001223900070584031000011201108E -:101E30000100000008EDFE0713010001020001058A -:101E4000010906A101050719E029E71500250195FB -:101E5000087501810205081901290595057501918B -:101E600002950175039101050719002977150025D1 -:101E700001957875018102C005010980A1018502E3 -:101E800016010026B7001A01002AB7007510950147 -:101E90008100C0050C0901A1018503160100269CE3 -:101EA000021A01002A9C02751095018100C00501EB -:101EB0000902A1010901A10005091901290515005F -:101EC00025019505750181029501750381010501C3 -:101ED000093009311581257F950275088106093879 -:101EE0001581257F950175088106050C0A380215B4 -:101EF00081257F950175088106C0C005010906A1ED -:101F000001050719E029E7150025019508750181EC -:101F100002950175088101050819012905950575C6 -:101F20000191029501750391010507190029FF151B -:101F30000025FF950675088100C000000000000024 -:101F40000000000000010204060A0F17202C3A4A84 -:101F50005D71879DB3C7DAE9F5FCFFFCF5E9DAC7E7 -:101F6000B39D87715D4A3A2C20170F0A06040201BF -:101F70000000000000000000000011241FBECFEF91 -:101F8000DAE0DEBFCDBF04B603FE24C08091F001CD -:101F90009091F101A091F201B091F3018730904B43 -:101FA000A740B04BB9F41092F0011092F1011092D9 -:101FB000F2011092F30114BE84B7877F84BF88E1D9 -:101FC0000FB6F89480936000109260000FBEE0E0BE -:101FD000FFE3099511E0A0E0B1E0E0E3F5E602C01F -:101FE00005900D92A433B107D9F711E0A4E3B1E055 -:101FF00001C01D92A03FB107E1F70E94BF180C94E9 -:1020000096320C940000FC018281811103C080E0B3 -:1020100090E008956E3561F42091340130913501DE -:102020002F5F3F4F217033273093350120933401C8 -:1020300020913401309135012115310509F024C179 -:10204000862F90E08E35910528F4FC01EA5AFF4F67 -:102050000C944B3280E090E0089582E797E1089578 -:1020600089E597E1089580E497E1089587E297E193 -:1020700008958EE097E1089585EF96E108958CED3F -:1020800096E1089583EC96E108958AEA96E1089531 -:1020900081E996E1089588E796E108958FE596E154 -:1020A000089586E496E108958DE296E1089584E12D -:1020B00096E108958BEF95E1089582EE95E10895FC -:1020C00089EC95E1089580EB95E1089587E995E124 -:1020D00008958EE795E1089585E695E108958CE4ED -:1020E00095E1089583E395E108958AE195E10895E6 -:1020F00081E095E1089588EE94E108958FEC94E1F4 -:10210000089586EB94E108958DE994E1089584E8BB -:1021100094E108958BE694E1089582E594E10895B1 -:1021200089E394E1089580E294E1089587E094E1E1 -:1021300008958EEE93E1089585ED93E108958CEB7B -:1021400093E1089583EA93E108958AE893E108957D -:1021500081E793E1089588E593E108958FE393E1A2 -:10216000089586E293E108958DE093E1089584EF68 -:1021700092E108958BED92E1089582EC92E1089549 -:1021800089EA92E1089580E992E1089587E792E172 -:1021900008958EE592E1089585E492E108958CE238 -:1021A00092E1089583E192E108958AEF91E1089523 -:1021B00081EE91E1089588EC91E108958FEA91E133 -:1021C000089586E991E108958DE791E1089584E607 -:1021D00091E108958BE491E1089582E391E10895FE -:1021E00089E191E1089580E091E1089587EE90E121 -:1021F00008958EEC90E1089585EB90E108958CE9C7 -:1022000090E1089583E890E108958AE690E10895C9 -:1022100081E590E1089588E390E108958FE190E1F0 -:10222000089586E090E108958DEE9FE0089584ED95 -:102230009FE008958BEB9FE0089582EA9FE0089568 -:1022400089E89FE0089580E79FE0089587E59FE093 -:1022500008958EE39FE0089585E29FE008958CE065 -:102260009FE0089583EF9EE008958AED9EE0089533 -:1022700081EC9EE0089588EA9EE008958FE89EE054 -:10228000089586E79EE008952130310509F0BFCE1C -:10229000862F90E08E35910528F4FC01EC54FF4F19 -:1022A0000C944B3280E090E0089584E39EE0089522 -:1022B00083E19EE0089582EF9DE0089581ED9DE029 -:1022C000089580EB9DE008958FE89DE008958EE6E7 -:1022D0009DE008958DE49DE008958CE29DE00895D1 -:1022E0008BE09DE008958AEE9CE0089589EC9CE0E7 -:1022F000089588EA9CE0089587E89CE0089586E6C2 -:102300009CE0089585E49CE0089584E29CE00895B3 -:1023100083E09CE0089582EE9BE0089581EC9BE0D1 -:10232000089580EA9BE008958FE79BE008958EE58D -:102330009BE008958DE39BE008958CE19BE0089578 -:102340008BEF9AE008958AED9AE0089589EB9AE080 -:10235000089588E99AE0089587E79AE0089586E568 -:102360009AE0089585E39AE0089584E19AE008955B -:1023700083EF99E0089582ED99E0089581EB99E06B -:10238000089580E999E008958FE699E008958EE434 -:1023900099E008958DE299E008958CE099E0089520 -:1023A0008BEE98E008958AEC98E0089589EA98E029 -:1023B000089588E898E0089587E698E0089586E40F -:1023C00098E0089585E298E0089584E098E0089503 -:1023D00083EE97E0089582EC97E0089581EA97E014 -:1023E000089580E897E008958FE597E008958EE3DB -:1023F00097E008958DE197E008958CEF96E00895B9 -:102400008BED96E008958AEB96E0089589E996E0D1 -:10241000089588E796E0089587E596E0089586E3B5 -:1024200096E0089585E196E0089584EF95E008959B -:1024300083ED95E0089582EB95E0089581E995E0BC -:10244000089580E795E008958FE495E008958EE281 -:1024500095E008958DE095E008958CEE94E0089560 -:102460008BEC94E008958AEA94E0089589E894E07A -:10247000089588E694E0089587E494E0089586E25C -:1024800094E0089585E094E0089584EE93E0089543 -:1024900083EC93E0089582EA93E0089581E893E065 -:1024A000089580E693E008958FE393E008958EE128 -:1024B00093E008958DEF92E008958CED92E00895F9 -:1024C0008BEB92E008958AE992E0089589E792E023 -:1024D000089588E592E008958BE897E1089585E5F1 -:1024E0009EE0089508956091B3017091B4018091C8 -:1024F000B5019091B6010E94A42956985E9825983E -:102500002D9826982E9827982F988330A9F028F494 -:10251000813051F0823069F012C0843041F0853052 -:1025200071F4259A2D9A08C0259A2D9A0895259A16 -:102530002D9A269A2E9A0895279A2F9A089556989A -:102540005E9808950C94731256985E9825982D986D -:1025500026982E9827982F988FEF90E090938900D7 -:102560008093880090938B0080938A0090938D00D5 -:1025700080938C00259A2D9A2FEF80E792E02150CE -:1025800080409040E1F700C00000269A2E9A2FEF7D -:1025900080E792E0215080409040E1F700C00000C9 -:1025A000279A2F9A2FEF80E792E0215080409040A9 -:1025B000E1F700C0000025982D982FEF80E792E00A -:1025C000215080409040E1F700C0000026982E98EE -:1025D0002FEF80E792E0215080409040E1F700C06B -:1025E000000027982F9856985E9825982D98269841 -:1025F0002E9827982F98089589EA8093800089E083 -:102600008093810024982C983F988AB18F748AB95E -:102610006E98479A8BB1806B8BB9769A0E94A41200 -:102620000C94721280E28093000180913601811136 -:102630000EC00E94611381E0809336012FEF83ED7D -:1026400090E3215080409040E1F700C0000080E41A -:102650000E9467138093000181112EC00E94911384 -:1026600080930001811128C00E9491138093000182 -:10267000811122C08FE30E94911380930001811188 -:102680001BC00E94891380E40E946713809300019D -:10269000811112C08CE00E9491138093000181117E -:1026A0000BC00E94911380930001811105C08FE33C -:1026B0000E949113809300010E9489138091000170 -:1026C00008951092B9008AE08093B800089594EAC2 -:1026D0009093BC009091BC0097FFFCCF9091B90003 -:1026E000987F983021F0903111F081E00895809327 -:1026F000BB0084E88093BC008091BC0087FFFCCFC6 -:102700008091B900887F883111F0803471F780E0C2 -:10271000089584E98093BC008091BC0084FDFCCFC7 -:1027200008958093BB0084E88093BC008091BC0036 -:1027300087FFFCCF9091B900987F81E0983209F42F -:1027400080E0089584E88093BC008091BC0087FFFE -:10275000FCCF8091BB00089580910001811115C0CC -:1027600080E40E9467138093000181110CC082E114 -:102770000E94911380930001811105C08FEF0E9488 -:102780009113809300010E94891384B1807F84B9E2 -:1027900085B1807F85B98AB1837F8AB98BB1837F08 -:1027A0008BB93E98469808950E94121380930001B9 -:1027B0000E94AC1380B38C7080BB81B3836F81BBEC -:1027C000E6E4F1E0A8E3B1E011921D9281E0E43586 -:1027D000F807D1F70C94FC12BF92CF92DF92EF92E0 -:1027E000FF920F931F93CF93DF9380910001882373 -:1027F00079F0809137018F5F80933701811108C094 -:102800000E94121380930001811102C00E94A41241 -:1028100008E311E0C0E0D0E0DD24D39482E0C82ECC -:10282000EE24E394F12CC73000F580910001811172 -:1028300062C080E40E94671380930001811112C07E -:1028400082E10E9491138093000181110BC0C701A6 -:102850000C2E01C0880F0A94EAF780950E9491130C -:10286000809300010E94891346C0CA30A1F028F469 -:10287000C83059F0C93061F005C0CC3089F070F033 -:10288000CD3089F0209A289810C0219A29980DC03F -:10289000229A2A980AC0239A2B9807C0529A01C0FC -:1028A000539A5B9802C03E9A4698E0EAEA95F1F79F -:1028B0008FB179995AC092E081708D25892B7C9BCC -:1028C00002C090E001C094E0892B7D9B02C090E0A3 -:1028D00001C098E0892B7E9B02C090E001C090E18E -:1028E000892B9FB19095991F9927991F9295990FC0 -:1028F000907E892B0FC08091000181114BC080E434 -:102900000E94671380930001882389F1B12C0E94F3 -:1029100089138B2DF8019081981719F08083C0924C -:1029200001010E94AC1321960F5F1F4FCE30D105DD -:1029300009F079CF80910101882371F18150809352 -:102940000101882339F08FE99FE00197F1F700C07A -:10295000000022C0A6E4B1E0E8E3F1E081918D93AC -:1029600091E0E634F907D1F717C090E0A5CF83E1F5 -:102970000E949113809300018111C8CF81E40E94CD -:102980006713809300018111C1CF0E94A213B82E5A -:10299000B094BDCF80E0BECF0E94A21281E0DF9153 -:1029A000CF911F910F91FF90EF90DF90CF90BF904C -:1029B0000895E82FF0E0EA5BFE4F808108950895C6 -:1029C0008B3B910578F4883A910540F5853A91055D -:1029D000D0F48430910508F0B1C08130910509F43C -:1029E000ADC06BC0803E910508F467C0883E91057C -:1029F00008F4A4C09C01205F31092031310508F0A2 -:102A00005CC090650895853A910509F459C0863AED -:102A1000910509F458C083E890E40895883A910537 -:102A200009F454C0893A910509F453C08A3A9105D2 -:102A300009F452C08B3A910509F451C08C3A9105C2 -:102A400009F450C08D3A910509F44FC0803B9105BF -:102A500009F44EC08E3A910509F44DC08F3A9105A4 -:102A600009F44CC0813B910509F44BC0823B9105B0 -:102A700009F44AC0833B910509F449C0843B9105A0 -:102A800009F448C0853B910509F447C0863B910590 -:102A900009F446C0873B910509F445C0883B910580 -:102AA00009F444C0893B910509F443C08A3B910570 -:102AB00009F042C08AE296E4089580E090E008952B -:102AC00081E890E4089582E890E4089582EE94E429 -:102AD000089589EE94E408958AEE94E4089585EBD0 -:102AE00094E4089586EB94E4089587EB94E40895C4 -:102AF0008CEC94E408958DEC94E4089583E895E4D7 -:102B000008958AE895E4089582E995E4089584E9B2 -:102B100095E4089581E296E4089583E296E40895A9 -:102B200084E296E4089585E296E4089586E296E4C8 -:102B3000089587E296E4089580E094E40895089566 -:102B400096E0799FF001112494E5899FE00DF11D35 -:102B50001124E60FF11DEE0FFF1FEC55F84E859185 -:102B600094910895880F991F8C5D994EFC01859171 -:102B700094910895880F991F8C55984EFC0185916A -:102B80009491089526E0729FF001112444E5849FFA -:102B9000E00DF11D1124E60FF11DEE0FFF1FEC55A6 -:102BA000F84E25913491C9019A9581159F4110F4F1 -:102BB000C9010895C90190528115904128F4C901B5 -:102BC0009F700E94BA150895C901905381159041D4 -:102BD00020F4C9019927906C0895211580E53807E4 -:102BE00069F40E9459239FEF24E34CE09150204068 -:102BF0004040E1F700C000000C949D2A213080E5A0 -:102C0000380731F48091CE0181608093CE01089520 -:102C1000C90190558115904108F050C0832F992724 -:102C20008F70992781309105D9F4A90143705527F8 -:102C300002C0880F991F4A95E2F79C68A90164E0D9 -:102C4000440F551F6A95E1F744275370842B952B49 -:102C500073E0220F331F7A95E1F7207633271DC0EA -:102C60008230910529F4922F8827816F906A089508 -:102C700083309105A9F4A9014370552781E090E0C4 -:102C800002C0880F991F4A95E2F79C6843E0220F23 -:102C9000331F4A95E1F7207E3770822B932B0895DE -:102CA0000497F1F4A9014370552781E090E002C038 -:102CB000880F991F4A95E2F79A68E8CFC9019057A3 -:102CC0008115904120F4C9019F7090620895C90157 -:102CD00090588115904120F4C9019F70906A089521 -:102CE000203E3105E0F4203C310558F52133310513 -:102CF00009F470C048F42932310509F464C02A325D -:102D0000310509F46EC074C029333105F1F0223861 -:102D10003105D9F02533310509F44EC069C0233E91 -:102D2000310589F138F4203E3105C1F0223E3105EC -:102D3000E1F05EC0263E310569F1273E3105A9F17B -:102D400057C0C9010E94B21508958091E10180FD2C -:102D500002C081FF4DC080EE90E04BC08091E10148 -:102D600080FFF9CF89E390E044C08091E10182FFC8 -:102D70000EC08091E10184FF03C080E090E039C083 -:102D800083EE90E036C08091E10182FFF2CF82EEC7 -:102D900090E02FC08091E10183FF0BC08091E101A1 -:102DA00084FDEBCF87EE90E024C08091E10183FFAA -:102DB000F5CF86EE90E01DC08091E10185FF07C050 -:102DC00089E290E016C08091E10185FFF9CF85E3AB -:102DD00090E00FC08091E10186FF07C08AE290E099 -:102DE00008C08091E10186FFF9CF81E390E001C046 -:102DF000C9010E94E014089508950C94FC16809176 -:102E000064010895CF93DF9300D01F92CDB7DEB752 -:102E10002091E701243019F523E029839B838A83DD -:102E20002093E9008FEF9091E800815095FD06C056 -:102E300095ED9A95F1F700008111F5CF8091E800AA -:102E400085FF0DC040E050E063E070E0CE010196E8 -:102E50000E946C198091E8008E778093E8000F90B3 -:102E60000F900F90DF91CF910895CF93DF9300D013 -:102E70001F92CDB7DEB72091E701243021F522E083 -:102E800029839B838A8383E08093E9008FEF90916D -:102E9000E800815095FD06C095ED9A95F1F7000088 -:102EA0008111F5CF8091E80085FF0DC040E050E032 -:102EB00063E070E0CE0101960E946C198091E800F9 -:102EC0008E778093E8000F900F900F90DF91CF9155 -:102ED00008952091E7012430F1F422E02093E900E5 -:102EE0002FEF3091E800215035FD06C035ED3A95C1 -:102EF000F1F700002111F5CF2091E80025FF0BC06C -:102F000040E050E065E070E00E946C198091E800BC -:102F10008E778093E8000895CF93DF93EC01809142 -:102F2000E701843009F046C090910C019923D9F053 -:102F300090910D019923B9F08093E9008FEF909162 -:102F4000E800815095FD06C095E19A95F1F70000E3 -:102F50008111F5CF8091E80085FF2CC040E050E062 -:102F600060E170E017C081E08093E9008FEF9091FD -:102F7000E800815095FD06C095ED9A95F1F70000A7 -:102F80008111F5CF8091E80085FF14C040E050E04A -:102F900068E070E0CE010E946C198091E8008E77A5 -:102FA0008093E80080E1FE01A4E5B1E001900D927C -:102FB0008A95E1F7DF91CF9108958091E601811123 -:102FC00009C00E94FE1A0E945B1B8091E20084608F -:102FD0008093E20008951092E601089508950C94FC -:102FE000C3300E94342A0E94C9300E94F81D0C94FC -:102FF000FD1642E061EC81E00E94781A42E061EC4B -:1030000082E00E94781A42E061EC83E00E94781A24 -:1030100042E161EC84E00C94781A8091E9018330FC -:1030200009F455C030F4813071F0823009F48EC05B -:1030300008958A3009F47AC08B3009F460C0893071 -:1030400009F09CC020C08091E801813A09F096C047 -:103050008091E800877F8093E8008091EC01909157 -:10306000ED01892B21F060E080E090E003C060E199 -:1030700084E591E070E00E94B5198091E8008B77BB -:103080008093E80008958091E801813209F076C0CC -:103090008091EC019091ED01009719F0039709F0F0 -:1030A0006DC08091E800877F8093E8008091E80000 -:1030B00082FD05C08091E7018111F8CF5FC080914A -:1030C000F100809364018091E8008B7753C0809178 -:1030D000E801813A09F052C08091EC019091ED0134 -:1030E000892B09F04BC08091E800877F8093E8002E -:1030F0008091E80080FFFCCF80910C0136C0809168 -:10310000E8018132D9F58091EC019091ED01892B94 -:10311000A9F58091E800877F8093E8000E94AD1AAE -:103120008091EA0180930C010C9459238091E8016D -:10313000813221F58091E800877F8093E8000E942A -:10314000AD1A8091EB018093650108958091E801AB -:10315000813AA1F48091E800877F8093E800809114 -:10316000E80080FFFCCF809165018093F1008091A1 -:10317000E8008E778093E8000C94AD1A089584B728 -:10318000877F84BF88E10FB6F89480936000109227 -:1031900060000FBE90E080E80FB6F8948093610065 -:1031A000909361000FBE0E94471E0E94FE1A0E946B -:1031B0005B1B8091E20084608093E20078940E941F -:1031C000D61D0E94491E82E091E00E94F31D0E94DC -:1031D000B1308091E701853069F40E94F729809130 -:1031E000E5018823B1F30E941F2A882391F30E94EE -:1031F0005619EFCF0E944F1EECCF292F33272330D3 -:103200003105A9F06CF42130310509F442C02230B7 -:10321000310509F043C08DE690E020EC3DE142C06D -:1032200021323105C9F02232310519F137C0992711 -:103230008130910541F08230910541F0892B71F583 -:10324000ECEBFDE105C0E4EAFDE102C0ECE8FDE1E4 -:10325000849190E09F0126C0643000F5E62FF0E0F5 -:10326000EE0FFF1FEE5DFE4F2081318189E090E07F -:1032700019C0643098F4E62FF0E0DF01AA0FBB1FFD -:10328000A65EBE4F2D913C91EA5EFE4F808190E09C -:1032900009C082E190E02DE23EE104C080E090E0D0 -:1032A00020E030E0FA0131832083089580E189BD78 -:1032B00082E189BD09B400FEFDCF8091D8008F7DE9 -:1032C0008093D8008091E00082608093E00080913C -:1032D000E00081FDFCCF0895CF92DF92EF92FF9244 -:1032E0000F931F93CF93DF937C018B01EA010E9420 -:1032F000CE1A811131C0209731F088819981081B45 -:10330000190BE80EF91EC12CD12C0115110519F16C -:103310008091E80085FD14C08091E8008E7780934D -:10332000E800209741F0888199818C0D9D1D99833B -:10333000888385E011C00E94CE1A882331F30CC027 -:10334000F70181917F018093F10001501109FFEF96 -:10335000CF1ADF0ADACF80E0DF91CF911F910F9172 -:10336000FF90EF90DF90CF9008952091EE01309183 -:10337000EF012617370748F06115710539F42091E0 -:10338000E8002E772093E80001C0B901FC0120E09D -:1033900061157105B9F18091E701882309F440C0F6 -:1033A000853009F43FC08091E80083FD3DC08091E5 -:1033B000E80082FF06C08091E80082FF26C080E01E -:1033C00008958091E80080FFE3CF2091F300809181 -:1033D000F20090E0922B6115710551F08830910553 -:1033E00038F421912093F100615071090196F3CFD7 -:1033F00021E0089709F020E08091E8008E77809323 -:10340000E800C6CF2111C7CFD6CF8091E70188232E -:1034100039F0853039F08091E80083FFCCCF04C0CB -:1034200082E0089583E0089581E008952091EE01FF -:103430003091EF012617370748F06115710539F40F -:103440002091E8002E772093E80001C0B901FC012B -:1034500020E061157105C1F18091E701882309F42D -:1034600041C0853009F440C08091E80083FD3EC032 -:103470008091E80082FF06C08091E80082FF27C0AB -:1034800080E008958091E80080FFE3CF2091F30071 -:103490008091F20090E0922B6115710559F088300F -:1034A000910540F424912093F10031966150710907 -:1034B0000196F2CF21E0089709F020E08091E80022 -:1034C0008E778093E800C5CF2111C6CFD5CF8091EC -:1034D000E701882339F0853039F08091E80083FFD7 -:1034E000CBCF04C082E0089583E0089581E0089581 -:1034F000982F973058F59093E900981739F070910C -:10350000EC002091ED005091F00003C0242F762FA5 -:1035100050E021FF19C03091EB003E7F3093EB006B -:103520003091ED003D7F3093ED003091EB00316044 -:103530003093EB007093EC002093ED005093F0007B -:103540002091EE0027FF07C09F5FD3CF8F7080933D -:10355000E90081E0089580E008958091E80187FD09 -:1035600005C08091E80080FF0EC012C08091E80085 -:1035700082FD05C08091E7018111F8CF0895809107 -:10358000E8008B7708C08091E7018111EACF0895A8 -:103590008091E8008E778093E80008958091E400A0 -:1035A0009091E50045E62091EC0020FF21C020919C -:1035B000E80020FD21C02091E701222389F0253079 -:1035C00089F02091EB0025FD0FC02091E40030919F -:1035D000E5002817390739F3415041F0C901E3CF1D -:1035E00082E0089583E0089581E0089584E00895DD -:1035F0002091E80022FFDFCF80E008950E946C1B3D -:103600000E94741BE0EEF0E0808181608083E8ED31 -:10361000F0E080818F77808319BCA7EDB0E08C91BA -:103620008E7F8C9380818F7E80831092E601089537 -:103630000F931F93CF93DF930E946C1B0E94741B08 -:10364000C8EDD0E088818F778883888180688883FF -:1036500088818F7D888319BC1092E7011092E30165 -:103660001092E5011092E40100EE10E0F801808173 -:103670008B7F808388818160888342E060E080E086 -:103680000E94781AE1EEF0E080818E7F8083E2EE86 -:10369000F0E0808181608083808188608083F80190 -:1036A00080818E7F8083888180618883DF91CF9144 -:1036B0001F910F910895E8EDF0E080818F7E808367 -:1036C000E7EDF0E080818160808384E082BF81E06B -:1036D0008093E6010C94181BE8EDF0E080818E7F6A -:1036E00080831092E20008951092DA001092E100B7 -:1036F00008951F920F920FB60F9211242F933F93AC -:103700004F935F936F937F938F939F93AF93BF93E9 -:10371000EF93FF938091E10082FF0BC08091E20064 -:1037200082FF07C08091E1008B7F8093E1000E94BF -:10373000D51D8091DA0080FF1FC08091D80080FFE6 -:103740001BC08091DA008E7F8093DA008091D900CF -:1037500080FF0DC080E189BD82E189BD09B400FE12 -:10376000FDCF81E08093E7010E94DD1705C019BC01 -:103770001092E7010E94EB178091E10080FF19C0D1 -:103780008091E20080FF15C08091E2008E7F8093DF -:10379000E2008091E20080618093E2008091D80095 -:1037A00080628093D80019BC85E08093E7010E9475 -:1037B000EF178091E10084FF30C08091E20084FF28 -:1037C0002CC080E189BD82E189BD09B400FEFDCF36 -:1037D0008091D8008F7D8093D8008091E1008F7E0A -:1037E0008093E1008091E2008F7E8093E2008091DF -:1037F000E20081608093E2008091E301882311F070 -:1038000084E007C08091E30087FF02C083E001C02D -:1038100081E08093E7010E94F1178091E10083FF2E -:1038200029C08091E20083FF25C08091E100877F5D -:103830008093E10082E08093E7011092E3018091A0 -:10384000E1008E7F8093E1008091E2008E7F809383 -:10385000E2008091E20080618093E20042E060E05B -:1038600080E00E94781A8091F00088608093F000D8 -:103870000E94EE17FF91EF91BF91AF919F918F91B1 -:103880007F916F915F914F913F912F910F900FBE5C -:103890000F901F9018951F920F920FB60F92112440 -:1038A0002F933F934F935F936F937F938F939F9348 -:1038B000AF93BF93CF93EF93FF93C091E900CF7085 -:1038C0008091EC001092E9008091F000877F809356 -:1038D000F00078940E94871C1092E9008091F0001B -:1038E00088608093F000C093E900FF91EF91CF9141 -:1038F000BF91AF919F918F917F916F915F914F9108 -:103900003F912F910F900FBE0F901F9018951F930E -:10391000CF93DF93CDB7DEB7AA970FB6F894DEBF8B -:103920000FBECDBFE8EEF1E08091F100819321E080 -:10393000E03FF207C9F70E940D188091E80083FF6D -:103940001CC12091E8013091E901832F90E08A3079 -:10395000910508F012C1FC01EE5EFE4F0C944B3253 -:10396000203881F0223809F008C18091EC018F7075 -:103970008093E9008091EB0085FB882780F9109205 -:10398000E90006C08091E4019091E5019111826007 -:103990009091E800977F9093E8008093F100109257 -:1039A000F100C5C0822F8D7F09F0E7C0222319F0F6 -:1039B000223061F0E2C08091EA01813009F0DDC07F -:1039C000333009F080E08093E50128C08091EA015E -:1039D000811124C02091EC012F7009F4CEC02093F6 -:1039E000E9008091EB0080FF19C08091EB0033303B -:1039F00011F4806211C080618093EB0081E090E05F -:103A0000022E01C0880F0A94EAF78093EA00109210 -:103A1000EA008091EB0088608093EB001092E9004F -:103A20008091E800877F86C02111A7C01091EA012C -:103A30001F778091E3008078812B8093E300809151 -:103A4000E800877F8093E8000E94AD1A8091E8002B -:103A500080FFFCCF8091E30080688093E300112316 -:103A600011F083E001C082E08093E70186C0205816 -:103A7000223008F082C08091EA019091EB018C3DE8 -:103A800023E0920779F583E08A838AE289834FB73E -:103A9000F894DE01139620E03EE051E2E32FF0E0DF -:103AA00050935700E49120FF03C0E295EF703F5F11 -:103AB000EF708E2F90E0EA3010F0C79601C0C096EC -:103AC0008D939D932F5F243149F74FBF8091E8007C -:103AD000877F8093E8006AE270E0CE0101960E9441 -:103AE000B51914C0AE014F5F5F4F6091EC010E94A9 -:103AF000FD18009709F441C02091E800277F20932A -:103B0000E800BC0189819A810E94161A8091E80020 -:103B10008B778093E80031C0203879F58091E800F8 -:103B2000877F8093E8008091E3018093F10080918A -:103B3000E8008E778093E8000E94AD1A1EC0211124 -:103B40001CC09091EA019230C0F48091E800877F18 -:103B50008093E8009093E3010E94AD1A8091E30105 -:103B6000811104C08091E30087FF02C084E001C09E -:103B700081E08093E7010E94F9178091E80083FFBC -:103B80000AC08091E800877F8093E8008091EB0075 -:103B900080628093EB00AA960FB6F894DEBF0FBE4A -:103BA000CDBFDF91CF911F9108950895CF9380915C -:103BB000E7018823B1F08091E9008F709091EC00CB -:103BC00090FF02C090E801C090E0C92FC82B10926E -:103BD000E9008091E80083FD0E94871CCF70C093AC -:103BE000E900CF91089590936B0180936A01089545 -:103BF000E0916A01F0916B01309721F00190F08122 -:103C0000E02D099480E00895E0916A01F0916B0144 -:103C1000309721F00280F381E02D09940895E0911E -:103C20006A01F0916B01309721F00480F581E02D5D -:103C300009940895209168013091690182179307D2 -:103C400071F09093690180936801E0916A01F091AD -:103C50006B01309721F00680F781E02D09940895DB -:103C600020916601309167018217930771F090935C -:103C7000670180936601E0916A01F0916B013097D2 -:103C800021F00084F185E02D0994089508950C94A5 -:103C9000461E0E943A2A0E94D4130C94002BCF9205 -:103CA000DF92EF92FF920F931F93CF93DF93CDB7E5 -:103CB000DEB72B970FB6F894DEBF0FBECDBF0E94C4 -:103CC000EC133DE6E32E31E0F32E00E010E0C02ED1 -:103CD000802F0E94D914F701D1907F01D826B1F42A -:103CE0000F5F1F4F0E30110591F78FEF89838A8385 -:103CF0001B820E94432A8160782F9D838C83498197 -:103D00005A816B818D810E94F21E41C09091CE013B -:103D100091FF04C08B870E94DF148B8520E030E088 -:103D20004D2D50E0922FBA01022E02C07595679575 -:103D30000A94E2F760FF25C02E83CF82EE24E3943D -:103D4000F12C02C0EE0CFF1C9A95E2F790E08E2158 -:103D50009F2121E0892B09F420E028870E94432A33 -:103D60008160782F9A8789874E815F8168858A85EF -:103D70000E94F21EF801E359FE4F80818E25808358 -:103D800006C02F5F3F4F2630310561F6A9CF0E9454 -:103D9000E42D10916C010E94F81D1817A1F00E94EB -:103DA000F81D80936C012B960FB6F894DEBF0FBE02 -:103DB000CDBFDF91CF911F910F91FF90EF90DF90DA -:103DC000CF900C94FD162B960FB6F894DEBF0FBE65 -:103DD000CDBFDF91CF911F910F91FF90EF90DF90BA -:103DE000CF900895CF93DF93CDB7DEB72B970FB663 -:103DF000F894DEBF0FBECDBF4F83588769877A879F -:103E00008B87DE01119686E0FD0111928A95E9F714 -:103E100085E0FE01379601900D928A95E1F7498180 -:103E20005A816B817C818D819E810E9425262B96F3 -:103E30000FB6F894DEBF0FBECDBFDF91CF910895CE -:103E4000CF93C82F882309F4C1C0823859F40E9447 -:103E5000F81D81FDBBC089E30E94C4280E947E2911 -:103E600089E30CC0833879F40E94F81D80FDAEC050 -:103E700083E50E94C4280E947E2983E50E940429CC -:103E8000CF910C947E29843859F40E94F81D82FD4C -:103E90009DC087E40E94C4280E947E2987E4EECF5B -:103EA0008CEF8C0F813A48F48C2F0E9419308111CD -:103EB0008DC08C2F0E94C428E3CF80E28C0F883005 -:103EC00048F4C77081E001C0880FCA95EAF70E94E4 -:103ED0004529D6CF8BE58C0F833078F4C53A29F08D -:103EE000C63A31F482E890E005C081E890E002C073 -:103EF00083E890E0CF910C941A1E88E58C0F8331F3 -:103F000008F064C0C83A39F1C93A41F1CA3A49F1F6 -:103F1000CB3A51F1CC3A59F1CD3A61F1C03B69F15C -:103F2000CE3A71F1CF3A79F1C13B81F1C23B89F1CF -:103F3000C33B91F1C43B99F1C53BA1F1C63BA9F14B -:103F4000C73BB1F1C83BB9F1C93BC1F1CA3BC9F5A7 -:103F50008AE292E038C082EE90E035C089EE90E0CF -:103F600032C08AEE90E02FC085EB90E02CC086EB4B -:103F700090E029C087EB90E026C08CEC90E023C055 -:103F80008DEC90E020C083E891E01DC08AE891E0CC -:103F90001AC082E991E017C084E991E014C081E27F -:103FA00092E011C083E292E00EC084E292E00BC086 -:103FB00085E292E008C086E292E005C087E292E0E6 -:103FC00002C080E090E0CF910C94301ECF91089514 -:103FD000882309F44BC0823859F40E94F81D81FFF0 -:103FE00045C089E30E94C4280E947E2989E30CC051 -:103FF000833871F40E94F81D80FF38C083E50E9469 -:10400000C4280E947E2983E50E9404290C947E29FD -:10401000843859F40E94F81D82FF28C087E40E946A -:10402000C4280E947E2987E4EFCF9CEF980F913A35 -:1040300058F390E2980F983050F4877091E001C0E7 -:10404000990F8A95EAF7892F0E944B29DFCF9BE5CC -:10405000980F933020F480E090E00C941A1E885A58 -:10406000833120F480E090E00C94301E0895882382 -:1040700021F00E9445290C947E290895882321F07F -:104080000E944B290C947E290895CF92DF92EF92E3 -:10409000FF920F931F93CF93DF93CDB7DEB728978F -:1040A0000FB6F894DEBF0FBECDBF8C0185E0F801DE -:1040B000DE01119601900D928A95E1F7F801408199 -:1040C0003181F280258122952F7083819481892B03 -:1040D00031F03F3F31F481E04F3F19F403C081E0FC -:1040E00001C080E080FDC4C249833A8389819A81FE -:1040F0002F830E9482289E8388870E9481280E94A5 -:1041000054274E81E42FE295EF70F0E0E45EFE4F1D -:104110002F8168850C944B32842F807F142F1F7061 -:10412000882311F01295107FFF2059F0112309F414 -:1041300054C2812F68870E9455290E947E29688574 -:104140004CC2862F0E94E81F112309F491C2812FCF -:104150000E945B2928960FB6F894DEBF0FBECDBF34 -:10416000DF91CF911F910F91FF90EF90DF90CF9053 -:104170000C947E29342F307F842F8F70303211F0D1 -:104180008295807F662319F0613019F12BC0FF20E2 -:10419000B1F0222309F493C1213009F090C128968F -:1041A0000FB6F894DEBF0FBECDBFDF91CF911F9148 -:1041B0000F91FF90EF90DF90CF900C946529222310 -:1041C00019F0213009F454C28E830E9468298E812F -:1041D00089C1FF2021F0223008F04AC270C12111AC -:1041E00047C280C1FF2021F0222309F468C1F5C134 -:1041F000222309F477C105C2242F26952695237022 -:1042000030E02115310521F021303105C9F030C2EF -:10421000FF2021F0862F942F937002C080E090E061 -:1042200028960FB6F894DEBF0FBECDBFDF91CF91B9 -:104230001F910F91FF90EF90DF90CF900C941A1E7A -:10424000FF2021F0862F942F937002C080E090E031 -:1042500028960FB6F894DEBF0FBECDBFDF91CF9189 -:104260001F910F91FF90EF90DF90CF900C94301E34 -:10427000862FFF2019F00E94EC2C02C00E94542DC2 -:1042800028960FB6F894DEBF0FBECDBFDF91CF9159 -:104290001F910F91FF90EF90DF90CF900C94D92D4C -:1042A000842F837009F076C0F110E2C1262F229589 -:1042B00026952770220F220F862F8F70C82ED12CA3 -:1042C000E12CF12C022E04C0CC0CDD1CEE1CFF1CDA -:1042D0000A94D2F764FF10C06FE070E080E090E0D5 -:1042E00004C0660F771F881F991F2A95D2F7609523 -:1042F00070958095909503C060E070E0CB01242F0D -:10430000269526952370422F50E042305105D1F07A -:104310004330510559F16C297D298E299F2941305F -:10432000510541F128960FB6F894DEBF0FBECDBF00 -:10433000DF91CF911F910F91FF90EF90DF90CF9081 -:104340000C9479276C297D298E299F2928960FB6F0 -:10435000F894DEBF0FBECDBFDF91CF911F910F91BB -:10436000FF90EF90DF90CF900C9493270E947927D5 -:10437000C701B60128960FB6F894DEBF0FBECDBFB9 -:10438000DF91CF911F910F91FF90EF90DF90CF9031 -:104390000C945F27FF2019F0842F817001C086954F -:1043A000882309F465C1262F229526952770220FB0 -:1043B000220F862F8F70C82ED12CE12CF12C022ECB -:1043C00004C0CC0CDD1CEE1CFF1C0A94D2F764FF69 -:1043D00010C06FE070E080E090E004C0660F771FCF -:1043E000881F991F2A95D2F76095709580959095B2 -:1043F00003C060E070E0CB01242F26952695237042 -:10440000422F50E042305105D1F04330510559F16F -:104410006C297D298E299F294130510541F128962B -:104420000FB6F894DEBF0FBECDBFDF91CF911F91C5 -:104430000F91FF90EF90DF90CF900C944D286C2956 -:104440007D298E299F2928960FB6F894DEBF0FBECE -:10445000CDBFDF91CF911F910F91FF90EF90DF9033 -:10446000CF900C9467280E944D28C701B60128966A -:104470000FB6F894DEBF0FBECDBFDF91CF911F9175 -:104480000F91FF90EF90DF90CF900C943328603F16 -:10449000C9F118F4603E50F49BC0623F09F460C05B -:1044A00008F44AC0633F09F46FC092C0162F1F7012 -:1044B000842F8F71FF2099F00E94CC27812F28969E -:1044C0000FB6F894DEBF0FBECDBFDF91CF911F9125 -:1044D0000F91FF90EF90DF90CF900C9437200E94C7 -:1044E000ED27812F28960FB6F894DEBF0FBECDBF03 -:1044F000DF91CF911F910F91FF90EF90DF90CF90C0 -:104500000C943E20FF20A1F02111B2C0842F8F71A6 -:1045100028960FB6F894DEBF0FBECDBFDF91CF91C6 -:104520001F910F91FF90EF90DF90CF900C94122885 -:10453000223008F09DC0EACFFF20A1F0842F8F71B8 -:1045400028960FB6F894DEBF0FBECDBFDF91CF9196 -:104550001F910F91FF90EF90DF90CF900C94CC279C -:10456000FF2061F3842F8F7128960FB6F894DEBF79 -:104570000FBECDBFDF91CF911F910F91FF90EF90B4 -:10458000DF90CF900C94ED27FF2091F0842F8F7156 -:1045900028960FB6F894DEBF0FBECDBFDF91CF9146 -:1045A0001F910F91FF90EF90DF90CF900C94B72761 -:1045B00028960FB6F894DEBF0FBECDBFDF91CF9126 -:1045C0001F910F91FF90EF90DF90CF900C94AD274B -:1045D000FF20A1F0222309F4B1CF862F28960FB631 -:1045E000F894DEBF0FBECDBFDF91CF911F910F9129 -:1045F000FF90EF90DF90CF900C94201F222309F4BE -:10460000B1CF862F28960FB6F894DEBF0FBECDBF70 -:10461000DF91CF911F910F91FF90EF90DF90CF909E -:104620000C94E81F4F70C8010E94031028960FB623 -:10463000F894DEBF0FBECDBFDF91CF911F910F91D8 -:10464000FF90EF90DF90CF900C94D2264F70C8016E -:1046500028960FB6F894DEBF0FBECDBFDF91CF9185 -:104660001F910F91FF90EF90DF90CF900C949F15CA -:1046700028960FB6F894DEBF0FBECDBFDF91CF9165 -:104680001F910F91FF90EF90DF90CF9008950E94BF -:1046900062290E9437290E947E290E94852E0E944D -:1046A000D92D80E090E00E941A1E80E090E00C94EA -:1046B000301E0E9452290C9447230E948228292FE1 -:1046C00022952F7030E02C3031054CF42A30310522 -:1046D0006CF4225031092230310590F407C02C309F -:1046E000310551F02F30310539F00AC0803E10F00D -:1046F000803F31F481E0089593FB882780F9089585 -:1047000080E00895CF93DF9300D000D01F92CDB703 -:10471000DEB70F900F900F900F900F90DF91CF9119 -:104720000895CF93DF9300D000D000D0CDB7DEB78F -:1047300026960FB6F894DEBF0FBECDBFDF91CF91A6 -:1047400008951F93CF93DF93C0917B0116E0809172 -:104750007C01C81799F0D0E01C9FF0011D9FF00D5F -:104760001124E358FE4F408151816281738184811D -:1047700095810E9491232196C770E9CFDF91CF9157 -:104780001F9108954091AD015091AE016091AF012C -:104790007091B0018091B1019091B2010C9491237C -:1047A000CF938091B20182958F7009F05FC08091A4 -:1047B000AF01882309F45AC020917B01A0917C01AC -:1047C0006091AD017091AE018091B0019091B10105 -:1047D00031E06F3F09F030E0B32FC6E02A1709F44B -:1047E00045C0009721F07F3F21F44B2F03C041E0EB -:1047F00001C040E030E040FD35C0C29FF001C39FE2 -:10480000F00D1124E358FE4F418174132BC04081F9 -:10481000641328C04281411125C043815481481747 -:10482000590710F441505109481B590B483C510598 -:10483000C8F48091B2018F7080618093B20186E0EC -:10484000829FF001839FF00D1124EE57FE4F80816F -:104850008F70806180838DEA91E00E944520CF9126 -:104860000C94A1232F5F3F4F2770B8CFCF910895AD -:10487000CF92DF92EF92FF920F931F93CF93DF932C -:10488000CDB7DEB762970FB6F894DEBF0FBECDBFCF -:104890008C0185E0F801DE011D9601900D928A954C -:1048A000E1F7D8014C9111965C91119712966C9199 -:1048B00012971396ED90FC9014977091AD01E091D2 -:1048C000AE012091B0013091B1012115310531F0D7 -:1048D000EF3F31F481E07F3F19F403C081E001C074 -:1048E00080E0B82FB170CB2E80FD6CC1D090AF01AD -:1048F000DD2009F4F5C0F091B201E216F30638F0BC -:10490000C701821B930B883C910548F09BC0209502 -:1049100030952E0D3F1D283C310508F093C08F2F98 -:10492000807F09F052C0E51314C0741312C0D62E54 -:1049300061110FC0FF70F061F093B2010E94C223B9 -:104940008DEA91E00E9445208091B201F8018583B3 -:104950006CC1EF2831F05F3F31F481E04F3F19F433 -:1049600003C081E001C080E080FD03C081E08627B4 -:1049700001C080E0F82FF170FF2E80FF1CC08091F5 -:104980007B0120917C0136E0821709F428C190E078 -:10499000389FF001399FF00D1124E358FE4F7181CB -:1049A000571306C07081471303C07281671303C099 -:1049B00001968770E9CFD62E662309F436C180911F -:1049C000B20181608093B20153C0E51308C0741333 -:1049D00006C0611104C0D8011596FC93AEC04D8786 -:1049E0005E878D859E856A8B0E945D236A898823F8 -:1049F00029F1D62E662311F12091B201822F8295E2 -:104A00008F7090E002970CF460C08091AD0190919E -:104A1000AE0198878F831986FB86EA862C87CE01A4 -:104A2000079651C0E51731F14D875E878D859E85CC -:104A30006A8B0E945D236A8981112EC0C8010E9481 -:104A40004520A4C08F2F807F69F77E2DF98AE88AE0 -:104A500089890E9482238DEA91E00E944520EDEA37 -:104A6000F1E086E0DF011D928A95E9F70E94C223FA -:104A7000D12CDBC07413D8CF6111D6CFD8011596D5 -:104A8000FC93C8010E944520EDEAF1E086E0DF01D9 -:104A90001D928A95E9F7C9C0D62E662379F2209136 -:104AA000B201822F82958F7090E0029774F080910E -:104AB000AD019091AE019A8389831B82FD82EC82C5 -:104AC0002E83CE0101960E94452086E0F801ADEAD2 -:104AD000B1E001900D928A95E1F70E94D0236FC05A -:104AE000E216F30628F0C701821B930B9C0104C059 -:104AF000209530952E0D3F1D283C310508F052C001 -:104B0000D62E662309F49ACFE5132CC074132AC05D -:104B10008091B20180FD1DC0982F92959F70C9F0C1 -:104B2000D80115968C9315979F3039F09F5F929519 -:104B3000907F8F70892B15968C93C8010E94452019 -:104B400086E0F801ADEAB1E001900D928A95E1F7B7 -:104B500036C086E0F801ADEAB1E001900D928A9589 -:104B6000E1F763C04D875E878D859E850E945D233A -:104B7000882379F086E0F801ADEAB1E001900D926A -:104B80008A95E1F70E94D0230E94C223DD24D394AA -:104B90004CC08091B20181608093B201C8010E9433 -:104BA000452043C07E2DF98AE88A89890E948223A4 -:104BB000EDEAF1E086E0DF011D928A95E9F70E94B7 -:104BC000C22333C0662309F439CF4D875E878D85B4 -:104BD0009E850E945D23882309F430CFCBCF4D877B -:104BE0005E878D859E850E948228292F22952F70B1 -:104BF00030E0223031052CF49F7041F0811106C065 -:104C00000CC0243031052CF49F7049F4805E88304C -:104C100020F0C8010E944520CF2CDC2C06C0D80112 -:104C200015969C91907F91F7F8CF8D2D62960FB6D7 -:104C3000F894DEBF0FBECDBFDF91CF911F910F91D2 -:104C4000FF90EF90DF90CF9008951F93CF93DF9365 -:104C5000CDB7DEB72C970FB6F894DEBF0FBECDBF31 -:104C60004F83588769877A878B879C87CE01079601 -:104C70000E9438248823C1F02F8138858A859B853E -:104C8000892B31F03F3F11F080E003C02F3FE1F767 -:104C900081E0811147C04F81588569857A858B8570 -:104CA0009C850E9491233EC086E0FE013796DE017E -:104CB000119601900D928A95E1F7FF81E8854A856A -:104CC0005B854115510531F0EF3F31F481E0FF3F45 -:104CD00019F403C081E001C080E080FD23C0209171 -:104CE0007C0130E0C90101968770992760917B01B2 -:104CF00070E086179707F1F1F983EA835D834C83AF -:104D000096E0929FD001939FB00D1124A358BE4FFF -:104D1000FE01319601900D929A95E1F780937C0106 -:104D20000E94A12316E080917B0190917C0189175C -:104D300079F1189FC001112483589E4F0E94382496 -:104D4000882331F1E0917B011E9FF0011124E3588B -:104D5000FE4F4081518162817381848195810E94DF -:104D6000912380917B0190E0019687709927809331 -:104D70007B01D9CF0E94592310927C0110927B01B4 -:104D8000EDEAF1E086E0DF011D928A95E9F7CACFEE -:104D90002C960FB6F894DEBF0FBECDBFDF91CF913A -:104DA0001F910895EF92FF920F931F93CF93DF937C -:104DB0009C01009709F471C0F12CEE24E394E90101 -:104DC0002196F9018491843740F4843008F056C06C -:104DD000813081F0823021F160C0853709F449C00B -:104DE000C0F19CE7980F903708F057C08F770E946A -:104DF000E81F46C089010E5F1F4FFE01849190E2BB -:104E0000980F983050F48770FE2D01C0FF0F8A95DF -:104E1000EAF78F2F0E94552915C00E94201F14C049 -:104E200089010E5F1F4FFE01849190E2980F983028 -:104E300068F48770FE2D01C0FF0F8A95EAF78F2F67 -:104E40000E945B290E947E29E8011AC00E94E81F87 -:104E5000FBCF2E5F3F4FFE01C491CC2341F08FE981 -:104E60009FE00197F1F700C00000C150F6CFE901C3 -:104E700007C0FE01F490E901229602C00E94201FA3 -:104E80008F2D882341F0EFE9FFE03197F1F700C063 -:104E900000008150F6CF9E0192CFDF91CF911F91FC -:104EA0000F91FF90EF90089508956093B70170936C -:104EB000B8018093B9019093BA010C9447230F93E2 -:104EC0001F930091B7011091B8012091B901309161 -:104ED000BA01062B172B282B392B0093B7011093FF -:104EE000B8012093B9013093BA011F910F910C942E -:104EF00047230F931F930091B7011091B8012091A0 -:104F0000B9013091BA0106231723282339230093CE -:104F1000B7011093B8012093B9013093BA011F91E2 -:104F20000F910C9447230F931F930091B701109199 -:104F3000B8012091B9013091BA0106271727282717 -:104F400039270093B7011093B8012093B90130932A -:104F5000BA011F910F910C9447231092B301109244 -:104F6000B4011092B5011092B6010C94472341E0B0 -:104F700050E060E070E004C0440F551F661F771FCB -:104F80008A95D2F74093B3015093B4016093B50171 -:104F90007093B6010C94472341E050E060E070E06C -:104FA00004C0440F551F661F771F8A95D2F7809162 -:104FB000B3019091B401A091B501B091B601842BD9 -:104FC000952BA62BB72B8093B3019093B401A0939C -:104FD000B501B093B6010C94472341E050E060E086 -:104FE00070E004C0440F551F661F771F8A95D2F7E3 -:104FF00040955095609570958091B3019091B40162 -:10500000A091B501B091B60184239523A623B723BF -:105010008093B3019093B401A093B501B093B6010E -:105020000C94472341E050E060E070E004C0440F7E -:10503000551F661F771F8A95D2F78091B301909113 -:10504000B401A091B501B091B60184279527A62798 -:10505000B7278093B3019093B401A093B501B093A7 -:10506000B6010C9447230F931F930091B301109145 -:10507000B4012091B5013091B601062B172B282BD6 -:10508000392B0093B3011093B4012093B5013093F1 -:10509000B6011F910F910C9447230F931F9300911A -:1050A000B3011091B4012091B5013091B6010623EE -:1050B0001723282339230093B3011093B4012093BD -:1050C000B5013093B6011F910F910C9447230F93B4 -:1050D0001F930091B3011091B4012091B50130915B -:1050E000B60106271727282739270093B301109305 -:1050F000B4012093B5013093B6011F910F910C9428 -:1051000047230895CF92DF92EF92FF920F931F9360 -:10511000CF93DF93EC01C090B701D090B801E0903D -:10512000B901F090BA018091B3019091B401A091BE -:10513000B501B091B601C82AD92AEA2AFB2A0FE1A3 -:1051400010E0B701A601002E04C07695679557952B -:1051500047950A94D2F740FF07C0BE01802F0E94F6 -:10516000C2158130910539F40150110950F7BE0183 -:1051700080E00E94C215DF91CF911F910F91FF90A7 -:10518000EF90DF90CF90089590910C019923D9F082 -:1051900090910D019923B9F0982F96959695969533 -:1051A0009F3088F5E0910E01F0910F01E90FF11D9C -:1051B000877021E030E001C0220F8A95EAF78181F3 -:1051C000822B8183089540910E0150910F0120E0C0 -:1051D00030E09FEFFA01E20FF31F6281681799F048 -:1051E0009F3F19F4611101C0922F2F5F3F4F2E3066 -:1051F000310581F79F3F39F0FA01E90FF11D97FD65 -:10520000FA9582830895089590910C019923E1F015 -:1052100090910D019923C1F0982F969596959695AA -:105220009F3020F5E0910E01F0910F01E90FF11D83 -:10523000877021E030E001C0220F8A95EAF72095BF -:10524000818128232183089540910E0150910F01FF -:1052500020E030E0FA01E20FF31F9281981301C0C1 -:1052600012822F5F3F4F2E303105A1F7089581E064 -:1052700090E0E0910E01F0910F01E80FF91F10820C -:10528000019680319105A9F708959091CD01982B51 -:105290009093CD01089580959091CD01982390939E -:1052A000CD0108951092CD0108959091CC01982BD5 -:1052B0009093CC01089580959091CC019823909380 -:1052C000CC0108951092CC0108958093BB010895FC -:1052D0001092BB01089540910E0150910F0120E002 -:1052E00030E080E0FA01E20FF31F918191118F5FAE -:1052F0002F5F3F4F2F303105A9F70895E0910E0140 -:10530000F0910F018091CD018083E0910E01F09129 -:105310000F0180819091CC01892B80839091BB01FA -:10532000992361F0E0910E01F0910F018081892BAA -:1053300080830E946B2981111092BB0180910E0124 -:1053400090910F010C94041ECF92DF92EF92FF9286 -:105350000F931F936C01EE24FF24C114D104E104C8 -:10536000F10421F46B017C0180E001C080E133276E -:105370002F2D1E2D0D2D011511052105310519F0BB -:10538000885F6801790197018601A4E03695279529 -:1053900017950795AA95D1F7011511052105310536 -:1053A00019F08C5F6801790197018601F2E036956A -:1053B000279517950795FA95D1F701151105210540 -:1053C000310519F08E5F68017901B701A601769564 -:1053D000679557954795452B462B472B09F08F5FCF -:1053E0001F910F91FF90EF90DF90CF9008958091E3 -:1053F000E701843009F11092CF0120E488E190E0C8 -:105400000FB6F894A895809360000FBE20936000BB -:1054100083B7817F846083BF83B7816083BF7894C3 -:10542000889583B78E7F83BF88E10FB6F894809309 -:105430006000109260000FBE089508950895CF9304 -:105440000E941D2A0E94EC130E941E2AC0E08C2F8D -:105450000E94D914811105C0CF5FCE30C1F780E022 -:1054600001C081E0CF9108950E9459230E94F81D48 -:105470000C94FD1682E084BD93E095BD9AEF97BD34 -:1054800080936E0008952FB7F8948091D001909189 -:10549000D101A091D201B091D3012FBF0895CF9235 -:1054A000DF92EF92FF920F931F932FB7F8944091E2 -:1054B000D0015091D1016091D2017091D3012FBFE1 -:1054C0006A017B01EE24FF248C0120E030E0C0164D -:1054D000D106E206F30610F441505109481B590B5E -:1054E000CA011F910F91FF90EF90DF90CF90089528 -:1054F0001F920F920FB60F9211248F939F93AF9329 -:10550000BF938091D0019091D101A091D201B0912F -:10551000D3010196A11DB11D8093D0019093D101BB -:10552000A093D201B093D301BF91AF919F918F917E -:105530000F900FBE0F901F9018950E94FE1AF894BE -:105540002FEF87EA91E6215080409040E1F700C0BC -:10555000000087E090EBDC018093F0019093F10173 -:10556000A093F201B093F3012CE088E190E00FB634 -:10557000F894A895809360000FBE20936000FFCF41 -:10558000EF92FF920F931F93CF93DF93E82EF12CAE -:105590008F2D0E94D914C0E0D0E0082F10E09801B0 -:1055A0000C2E02C0359527950A94E2F720FD05C020 -:1055B0002196C630D10599F709C06C2F7F2D80E068 -:1055C0000E94A015E812F4CF81E005C0F3948EE0AC -:1055D000F812DECF80E0DF91CF911F910F91FF9005 -:1055E000EF900895CF93C82F8CE20E94C02A8823A1 -:1055F00021F08C2FCF910C94C02A80E0CF91089598 -:10560000CF930E94452C811102C00E942B2CC5E62D -:10561000C15049F00E94EC138FE39CE90197F1F728 -:1056200000C00000F5CF89E20E94F22A811111C169 -:105630008AE20E94F22A81110E942B2C85E00E94AE -:10564000F22A81110E949D2A0E94502C8093CE0143 -:1056500087E00E94F22A882399F18BE10E94F22AC6 -:10566000882351F09091CE0191FB882780F921E0A9 -:10567000822780FB91F922C08EE00E94F22A8823C3 -:1056800051F09091CE0192FB882780F921E082278A -:1056900080FB92F913C080E10E94F22A9091CE0122 -:1056A000882341F093FB882780F921E0822780FB43 -:1056B00093F904C0892F809580FB90F99093CE01D7 -:1056C0008091CE010E94542C0E94622C8093E101B3 -:1056D00080EE0E94F22A882341F08091E101982F08 -:1056E000909590FB80F98093E10189E30E94F22A72 -:1056F000882359F09091E10191FB882780F921E0FE -:10570000822780FB91F99093E10182EE0E94F22AB8 -:10571000882359F09091E10192FB882780F921E0DC -:10572000822780FB92F99093E10186EE0E94F22A93 -:10573000882359F09091E10193FB882780F921E0BB -:10574000822780FB93F99093E10183EE0E94F22A75 -:10575000882359F09091E10194FB882780F921E09A -:10576000822780FB94F99093E10185E30E94F22A5D -:10577000882359F09091E10195FB882780F921E079 -:10578000822780FB95F99093E10181E30E94F22A40 -:10579000882359F09091E10196FB882780F921E058 -:1057A000822780FB96F99093E10181E10E94F22A21 -:1057B000882359F09091E10197FB882780F921E037 -:1057C000822780FB97F99093E1018091E1010E948B -:1057D000662C8091E10187FB882780F980930D0179 -:1057E00087E20E94F22AC82F8EE10E94F22A8111DC -:1057F000C2608FE10E94F22A8111C46080E20E949F -:10580000F22A8111C86081E20E94F22A8111C061EE -:1058100082E20E94F22A8111C06283E20E94F22A8F -:105820008111C06484E20E94F22A882311F0C068CA -:1058300002C0CC2329F08C2F0E945D2C6C2F03C05A -:105840000E94592C682F70E080E090E0CF910C947A -:105850005527CF9108956DEE7EEF80E090E00E9495 -:10586000813260E082E090E00E94733260E083E089 -:1058700090E00E94733260E084E090E00E94733216 -:1058800060E085E090E00C94733280E090E00E944C -:105890006D3221E08D3E9E4F09F020E0822F089569 -:1058A00082E090E00C946532682F82E090E00C94E6 -:1058B000733283E090E00C946532682F83E090E0CF -:1058C0000C94733284E090E00C946532682F84E08D -:1058D00090E00C9473328091D60180FF0BC06091F0 -:1058E000130185E0689FB001112475956795759542 -:1058F00067952AC081FF09C06091130185E0689F08 -:10590000B0011124759567951FC082FF07C0609193 -:10591000130185E0689FB001112416C04091D701A2 -:105920004423C9F060911201461788F720911301B2 -:1059300085E0289F90011124429FC001439F900D54 -:10594000112470E00E9437326038710540F461150F -:10595000710539F002C065E070E0862F08958FE789 -:10596000089581E008958091D60180FF08C060917C -:10597000110170E0759567957595679521C081FF58 -:1059800006C06091110170E07595679519C082FF9E -:1059900004C06091110170E010C08091D70188238C -:1059A000C1F0609110018617A0F790911101989FA6 -:1059B000C001112470E00E9437326038710528F46C -:1059C0006115710521F0862F08958FE7089581E014 -:1059D000089561E070E0F4CF803F21F40E946B2CC9 -:1059E000819504C0813F29F40E946B2C8093DA01D9 -:1059F0000895823F21F40E946B2C819504C0833F5F -:105A000029F40E946B2C8093D9010895893F19F4E1 -:105A10000E94B32C05C08A3F31F40E94B32C8195BB -:105A20008093DB0108958B3F21F40E94B32C819574 -:105A300004C08C3F29F40E94B32C8093DC010895AC -:105A4000843F21F48091D801816017C0853F21F403 -:105A50008091D801826011C0863F21F48091D801E5 -:105A600084600BC0873F21F48091D801886005C015 -:105A7000883F31F48091D80180618093D8010895E6 -:105A80008D3F21F48091D60181600BC08E3F21F4BF -:105A90008091D601826005C08F3F29F48091D601A4 -:105AA00084608093D6010895803F39F48091DA01B3 -:105AB00087FF6CC01092DA0169C0813F29F48091A0 -:105AC000DA011816BCF362C09091D901823F29F423 -:105AD00097FF5CC01092D90159C0833F19F4191681 -:105AE000CCF354C0893F41F48091DB0118160CF0CF -:105AF0004DC01092DB014AC08A3F29F48091DB013E -:105B000087FF44C0F6CF8B3F39F48091DC0187FFDB -:105B10003DC01092DC013AC08C3F29F48091DC0139 -:105B20001816BCF333C0843F21F48091D8018E7FD6 -:105B300017C0853F21F48091D8018D7F11C0863F29 -:105B400021F48091D8018B7F0BC0873F21F4809195 -:105B5000D801877F05C0883F31F48091D8018F7EBE -:105B60008093D80113C08D3F21F48091D6018E7FA0 -:105B70000BC08E3F21F48091D6018D7F05C08F3FF1 -:105B800029F48091D6018B7F8093D6018091D90131 -:105B900081110EC08091DA0181110AC08091DB0170 -:105BA000811106C08091DC01811102C01092D701E1 -:105BB000089588ED91E00E940F1E0E94432A909361 -:105BC000D5018093D40108951F93CF93DF938091E3 -:105BD000D4019091D5010E944F2A4091D7014423CE -:105BE00021F02091140130E006C0209115015AE007 -:105BF000259F900111248217930708F482C0809199 -:105C0000D9011091DA01D091DB01C091DC01811141 -:105C100007C0111105C0D11103C0CC2309F471C014 -:105C20004F3F19F04F5F4093D701181624F40E949C -:105C30006B2C8093D9018091D90187FF05C00E9408 -:105C40006B2C81958093D901111624F40E946B2C42 -:105C50008093DA018091DA0187FF05C00E946B2CE6 -:105C600081958093DA016091D901662339F1109111 -:105C7000DA01112319F1772767FD7095872F972F88 -:105C80000E94483123E333E343E35FE30E94AC31F6 -:105C90000E9415316093D901612F772767FD7095B8 -:105CA000872F972F0E94483123E333E343E35FE3D9 -:105CB0000E94AC310E9415316093DA011D1624F464 -:105CC0000E94B32C8093DB018091DB0187FF05C02C -:105CD0000E94B32C81958093DB011C1624F40E9452 -:105CE000B32C8093DC018091DC0187FF05C00E940A -:105CF000B32C81958093DC01DF91CF911F910C949F -:105D0000D92DDF91CF911F910895E8EDF1E085E065 -:105D1000DF011D928A95E9F71092D7011092D60102 -:105D20000895833081F128F4813059F08230D1F028 -:105D30000895853009F449C0B8F1863009F456C099 -:105D4000089520911501862F90E0820F911D8F3FBD -:105D5000910520F4620F6093150108958FEF8093F1 -:105D60001501089520911401862F90E0820F911D56 -:105D70008F3F910520F4620F6093140108958FEF17 -:105D800080931401089520911301862F90E0820FD3 -:105D9000911D8F3F910520F4620F609313010895C8 -:105DA0008FEF80931301089520911201862F90E0C8 -:105DB000820F911D8F3F910520F4620F60931201B5 -:105DC00008958FEF80931201089520911101862F7D -:105DD00090E0820F911D8F3F910520F4620F609338 -:105DE000110108958FEF8093110108952091100102 -:105DF000862F90E0820F911D8F3F910520F4620F56 -:105E00006093100108958FEF8093100108958330FF -:105E100011F128F4813049F0823091F008958530F5 -:105E200081F120F18630C1F1089580911501681744 -:105E300020F4861B80931501089510921501089592 -:105E400080911401681720F4861B80931401089533 -:105E500010921401089580911301681720F4861B95 -:105E600080931301089510921301089580911201F7 -:105E7000681720F4861B8093120108951092120176 -:105E8000089580911101681720F4861B80931101F9 -:105E9000089510921101089580911001681720F45F -:105EA000861B8093100108951092100108958D3182 -:105EB00009F442C020F58E3009F479C070F48730BF -:105EC00009F45EC020F4863009F442C033C0883043 -:105ED000D1F18B3009F4A7C02DC0863109F4A3C0DD -:105EE00038F4803109F46DC0813109F47BC022C0DF -:105EF000893109F498C08B3109F44FC01BC0853338 -:105F000009F479C048F4873209F475C008F478C000 -:105F1000893209F470C00EC0833438F48A3308F033 -:105F200071C0883309F47FC005C0833409F463C0AD -:105F30008834C1F080E008950E94CF300E94F81D9F -:105F40000E94FD1670C00E94502C0E94622C6BC0F3 -:105F50008091CE01817F8E7F8093CE0181E08093FE -:105F6000DE0108950E9459232FEF83ED90E3215025 -:105F700080409040E1F700C000000E949D2A53C07D -:105F80009091CE01892F817090FF03C0917F9E7FF9 -:105F900026C091609093CE0146C09091CE0191FBB6 -:105FA000882780F921E0822780FB91F913C0909126 -:105FB000CE0192FB882780F921E0822780FB92F9AD -:105FC00009C09091CE0193FB882780F921E08227B8 -:105FD00080FB93F99093CE01882329F191609093EF -:105FE000CE0108950E94592380910D0191E08927E7 -:105FF00080930D0118C061E070E080E090E00FC078 -:1060000023EE01C027EC280F61E070E080E090E013 -:1060100004C0660F771F881F991F2A95D2F70E9428 -:1060200055270E94592381E0089580E0089580E07B -:106030000895CF93C82F8091DE01813079F018F058 -:106040008230D1F184C0A0910E01B0910F018C91EA -:10605000813169F0823209F07CC009C0A0910E0143 -:10606000B0910F018C91813111F0823249F48C2F63 -:106070000E94153081111DC08C2F0E94572F1AC00D -:106080008C2F0E941730811114C0C43179F048F46C -:10609000CB3079F0C03109F060C082E08093DE013E -:1060A00008C0C93219F0C83321F057C01092DE0180 -:1060B00054C081E0817053C0C93289F118F5C431F0 -:1060C00071F1A8F4C73009F046C08AE08093150149 -:1060D00094E19093140193E0909313018093120143 -:1060E00088E08093110188E28093100134C0CE5182 -:1060F000C63088F5EC2FF0E0E65DFE4F808180939E -:10610000DD0129C0CE34E9F020F4CB3421F56AE07A -:1061100013C0C13579F0C235F1F461E00DC0809152 -:10612000DD01882319F01092DD0115C081E0809314 -:10613000DE0115C061E006C08091DD010E94912E54 -:106140000AC06AE08091DD010E94072F04C010920E -:10615000DE0180E004C081E002C080E0ABCFCF91DF -:106160000895E1E8F0E0808188608083808181602B -:1061700080838FB7F89493E09093890090ED90938B -:1061800088008FBF0895EFE6F0E080818260808311 -:106190000895EFE6F0E080818D7F80830895EFE63B -:1061A000F0E0808192E08927808308951F920F920A -:1061B0000FB60F9211242F933F934F935F936F93DA -:1061C0007F938F939F93AF93BF93EF93FF938091B0 -:1061D000DF019091E00101969093E0018093DF014F -:1061E000811103C082E00E94FD16E091E001E69576 -:1061F000E695F0E0E65CF04EE4918091DF018E13CD -:1062000003C080E00E94FD16FF91EF91BF91AF9116 -:106210009F918F917F916F915F914F913F912F91BE -:106220000F900FBE0F901F90189504D06894B11175 -:106230008DC0089570D088F09F5790F0B92F99279E -:10624000B751A0F0D1F0660F771F881F991F1AF081 -:10625000BA95C9F712C0B13081F077D0B1E0089596 -:1062600074C0672F782F8827B85F39F0B93FCCF317 -:10627000869577956795B395D9F73EF49095809577 -:10628000709561957F4F8F4F9F4F0895E89409C097 -:1062900097FB3EF490958095709561957F4F8F4F59 -:1062A0009F4F9923A9F0F92F96E9BB279395F6956F -:1062B000879577956795B795F111F8CFFAF4BB0FED -:1062C00011F460FF1BC06F5F7F4F8F4F9F4F16C051 -:1062D000882311F096E911C0772321F09EE8872FDB -:1062E000762F05C0662371F096E8862F70E060E097 -:1062F0002AF09A95660F771F881FDAF7880F969510 -:10630000879597F9089557FD9058440F551F59F0F8 -:106310005F3F71F04795880F97FB991F61F09F3F92 -:1063200079F087950895121613061406551FF2CFBB -:106330004695F1DF08C0161617061806991FF1CF0B -:1063400086957105610508940895E894BB27662732 -:106350007727CB0197F908950BD078C069D028F042 -:106360006ED018F0952309F05AC05FC01124EECF0B -:10637000CADFA0F3959FD1F3950F50E0551F629FA0 -:10638000F001729FBB27F00DB11D639FAA27F00D8E -:10639000B11DAA1F649F6627B00DA11D661F829FB5 -:1063A0002227B00DA11D621F739FB00DA11D621F9A -:1063B000839FA00D611D221F749F3327A00D611DB7 -:1063C000231F849F600D211D822F762F6A2F112499 -:1063D0009F5750408AF0E1F088234AF0EE0FFF1FEC -:1063E000BB1F661F771F881F91505040A9F79E3F23 -:1063F000510570F014C0AACF5F3FECF3983EDCF378 -:10640000869577956795B795F795E7959F5FC1F75F -:10641000FE2B880F911D9695879597F9089597F90A -:106420009F6780E870E060E008959FEF80EC08953A -:1064300000240A9416161706180609060895002463 -:106440000A9412161306140605060895092E0394DD -:10645000000C11F4882352F0BB0F40F4BF2B11F451 -:1064600060FF04C06F5F7F4F8F4F9F4F089597FB72 -:10647000072E16F4009407D077FD09D00E94513200 -:1064800007FC05D03EF4909581959F4F0895709537 -:1064900061957F4F0895EE0FFF1F0590F491E02D59 -:1064A0000994AA1BBB1B51E107C0AA1FBB1FA6175B -:1064B000B70710F0A61BB70B881F991F5A95A9F7AD -:1064C00080959095BC01CD010895F999FECF92BDBC -:1064D00081BDF89A992780B50895A8E1B0E042E01F -:1064E00050E00C948832262FF999FECF1FBA92BD46 -:1064F00081BD20BD0FB6F894FA9AF99A0FBE0196A5 -:1065000008950E947332272F0C947432DC01CB0162 -:10651000FC01F999FECF06C0F2BDE1BDF89A3196B3 -:1065200000B40D9241505040B8F70895F894FFCF51 -:106530002002FF168C176917351702170101BC01DD -:1065400028080A03140A3F4D3639FB1EAE1E781E7A -:106550003F1ED21DEB1D041E1D1E01020304050675 -:04656000070809001F +:100000000C9412040C9456040C9456040C9456044C +:100010000C9456040C9456040C9456040C945604F8 +:100020000C9456040C9456040C944F0F0C9421100D +:100030000C9456040C9456040C9456040C945604D8 +:100040000C9456040C94D6240C9456040C94560428 +:100050000C9456040C94751E0C9456040C9456047F +:100060000C9456040C9456040C9456040C945604A8 +:100070000C9456040C9456040C9456040C94560498 +:100080000C9456040C9456040C9456040C94560488 +:100090000C9456040C9456040C9456040C94560478 +:1000A0000C9456040C9456040C945604A305700545 +:1000B0005B05B505DC050F06F105F7050C063A06EC +:1000C0002F06FA0532064605EB0523062C066D05BC +:1000D0006405B205A905910567052605BE05140648 +:1000E0001D0629069705C705A60540051A06E5055C +:1000F00088059D0594057C0520068B053105E805DE +:100100008205C1052005AC055E054C057605730525 +:10011000CA059A05060637058505AF052305B80506 +:1001200003060906D3055505EE0543056A054F0587 +:10013000C405F40535062905A005BB05FD05CD055B +:1001400052052606E2053D058E055805D9056105CF +:1001500000063A05D005DF052C0549053F061706C0 +:1001600079053405D6057F0514058610A81093116E +:10017000A8109311EA100D119311621175116E14EC +:100180006E149C149C14DE141A151A171A173215C3 +:100190001A1729162916F4161A171A1708170552CE +:1001A000045201520352010000001E001B001800FF +:1001B0002F00010029001F0013000C003300E30092 +:1001C000E1002000090004003400E2002A002100C0 +:1001D0001A0008000600E000650022000A00120074 +:1001E0001900000049002E004A0000004D000000E8 +:1001F00002542E02025400002B0000005E30230047 +:100200000B001600050000004C0024000D0011003A +:100210001000E4004B0025000E0015003600E6003B +:100220002C0026000F001700370050002800270080 +:1002300014000700520051004E0035001C002D0034 +:100240001D004F000000010001000100010001003D +:1002500000001E02300238020100010001001F02EE +:10026000641438003000010001002002240223023F +:1002700027020100010001002414251401000100DF +:1002800001000100271426140100000001000100F4 +:100290000100000001000000010001000100000059 +:1002A0000100000001000100310021022D140000B6 +:1002B000010001006400250222020100010001008A +:1002C0006402260236020100010001000100301420 +:1002D00037023830010035021F023102553002303A +:1002E0000100010001002D0201003D30000001006D +:1002F000010001000100010000003A0001000100BE +:100300000100010001003B000100010001000100AB +:1003100001003C00010001000100010001003D005E +:10032000010001000100010001003E000100010088 +:100330000100000001004400010000000100000075 +:1003400001004500010000005300000001003F00D3 +:100350000100010001000000010040005F005C009E +:10036000590062000100410060005D005A008500F4 +:100370000100420061005E005B0063000100430079 +:100380005500560057005800010067005400560001 +:1003900057005800000001000100010001000100A9 +:1003A00000004D30393001005B3001000100513058 +:1003B00058303C303B300100010050300130141403 +:1003C0005D30010001004A30593008145C300100F2 +:1003D0000100493057300430003000000100053082 +:1003E0000100000001000000010001000100000008 +:1003F0000100000001004F305A3037301E0200006B +:1004000001004E3001004B30010001000100483076 +:10041000563054305330010001004C30010003309D +:100420003A300100010052300100010001000100DA +:1004300001000100010001000100010000000100B5 +:100440000100010001000100000042302030343082 +:1004500001000100010046302E302630333001000B +:10046000010045302D301E300100010001004030F8 +:100470002B3022300100010001003F3025302C30AC +:100480000100000001000100010000000100000067 +:1004900001000100010000000100000001004430E3 +:1004A000233031301F3000000100433035302A3016 +:1004B0002930010001003E302730303001000100BA +:1004C0000100413028303230010001000100473086 +:1004D000010021300100010001000100363024300C +:1004E0002F300100000001000100010001000100A7 +:1004F0000000010008301B30010001000100010074 +:1005000015300D301A3001000100010014300630A2 +:10051000010001000100010012300A300100010059 +:10052000010001000C301330010000000100010047 +:1005300001000000010000000100010001000000B6 +:1005400001000000010001000B30183007300000EE +:10055000010001001C3011301030010001000100C9 +:100560000E30173001000100010001000F3019307A +:10057000010001000100010001000930010001003B +:10058000010001001D3001001630010000000100D3 +:100590000100010001000100000001000100010054 +:1005A0000100010001000100010001000100010043 +:1005B0000100010001000100010001000100010033 +:1005C0000100010001000100010001000100010023 +:1005D0000100000001000100010000000100000016 +:1005E0000100010001000000010000000100010005 +:1005F00001000100010000000100010001000100F4 +:1006000001000100010001000100010001000100E2 +:1006100001000100010001000100010001000100D2 +:1006200001000100010001000100010001000100C2 +:1006300001000100000016034500720067006F0012 +:1006400044006F007800200045005A0000001603A7 +:100650004500720067006F0044006F0078002000C2 +:1006600045005A0000000403090409026D0004015A +:1006700000A0FA0904000001030101000921110191 +:100680000001223F000705810308000A0904010058 +:100690000103010200092111010001224D0007059B +:1006A000820308000A090402000103000000092176 +:1006B000110100012236000705830308000A09041E +:1006C000030001030000000921110100012239008B +:1006D000070584031000011201100100000008ED5D +:1006E000FE071301000102000105010906A1010531 +:1006F0000719E029E7150025019508750181020514 +:100700000819012905950575019102950175039157 +:1007100001050719002977150025019578750181D4 +:1007200002C005010980A101850216010026B7005B +:100730001A01002AB700751095018100C0050C0947 +:1007400001A1018503160100269C021A01002A9CC2 +:1007500002751095018100C005010902A10109017E +:10076000A100050919012905150025019505750147 +:100770008102950175038101050109300931158157 +:10078000257F95027508810609381581257F950119 +:1007900075088106050C0A38021581257F950175BB +:1007A000088106C0C005010906A101050719E02955 +:1007B000E7150025019508750181029501750881ED +:1007C0000105081901290595057501910295017525 +:1007D0000391010507190029FF150025FF950675EE +:1007E000088100C0000000000000000000000001BF +:1007F0000204060A0F17202C3A4A5D71879DB3C781 +:10080000DAE9F5FCFFFCF5E9DAC7B39D87715D4ACB +:100810003A2C20170F0A0604020100000000000015 +:100820000000000011241FBECFEFDAE0DEBFCDBF15 +:1008300004B603FE24C08091F1019091F201A091D1 +:10084000F301B091F4018730904BA740B04BB9F45D +:100850001092F1011092F2011092F3011092F40142 +:1008600014BE84B7877F84BF88E10FB6F894809365 +:100870006000109260000FBEE0E0FFE3099511E018 +:10088000A0E0B1E0E0E3FDE402C005900D92A433E6 +:10089000B107D9F711E0A4E3B1E001C01D92A13F77 +:1008A000B107E1F70E94950C0C9496260C94000079 +:1008B000282F882341F090E02A3018F4885A9F4F5F +:1008C00008950697089582E690E008950F931F9388 +:1008D000CF93DF938C01EB0180913401909135012E +:1008E000009709F448C0019709F089C080EE0E9482 +:1008F000F71281EE0E94F71288E10E94F71288E158 +:100900000E94BF13C801807F992724E096958795A0 +:100910002A95E1F70E945804182F0E94F712812FA0 +:100920000E94BF13802F8F700E945804182F0E94BE +:10093000F712812F0E94BF13CE01807F992734E0E8 +:10094000969587953A95E1F70E945804D82F0E9412 +:10095000F7128D2F0E94BF138C2F8F700E945804A6 +:10096000C82F0E94F7128C2F0E94BF1380EE0E94A6 +:10097000BF1381EE3EC082EE0E94F71287E50E940F +:10098000F71287E50E94BF13C801807F992744E0D2 +:10099000969587954A95E1F70E945804182F0E9472 +:1009A000F712812F0E94BF13802F8F700E9458046E +:1009B000182F0E94F712812F0E94BF13CE01807F53 +:1009C000992754E0969587955A95E1F70E94580427 +:1009D000D82F0E94F7128D2F0E94BF138C2F8F707B +:1009E0000E945804C82F0E94F7128C2F0E94BF1338 +:1009F00082EEDF91CF911F910F910C94BF13DF9185 +:100A0000CF911F910F910895FC018281882309F4F1 +:100A10003CC1862F90E08F35910508F036C1FC016E +:100A2000EA5AFF4F0C944B26809134019091350186 +:100A3000019681709927909335018093340125C1E7 +:100A40006FEB70E019C160E970E008C061EA70E026 +:100A500013C163E870E00BC16BE570E081E290E0E8 +:100A600012C16BEB70E008C163E570E0F7CF6EEB8D +:100A700070E002C164E070E0D4C069EB70E001C1D5 +:100A800062EB70E0F9C065E870E0F1C069E970E020 +:100A9000F3C065E570E0E2CF68EC70E0EDC069E8B6 +:100AA00070E0E5C064E770E0E2C062E970E0D6CFD4 +:100AB00066E770E0DCC063E970E0D0CF60EC70E026 +:100AC000DBC062EB70E0DDC069EA70E0D5C068EAC7 +:100AD00070E0D2C064E870E0CAC06DE970E0CCC0DC +:100AE00067EF70E0CEC063EC70E0C6C061EC70E010 +:100AF000C3C069E570E0B2CF63EB70E0BDC064E5F0 +:100B000070E0ACCF6DEB70E0B7C066EB70E0B4C0E6 +:100B100065EB70E0B1C06AEB70E0AEC067E770E013 +:100B2000A6C060EA70E0A8C062EC70E0A5C06EE903 +:100B300070E0A2C068EB70E09FC067EB70E09CC003 +:100B400062E870E094C063E470E06BC061EB70E059 +:100B500093C066EA70E090C066EC70E08DC06EE114 +:100B600070E05FC06FE970E087C068E070E059C076 +:100B700067ED70E086C060E870E079C063EA70E01D +:100B80007BC069EC70E078C061E870E070C066E935 +:100B900070E072C064EC70E06FC065E770E067C041 +:100BA00063E070E03EC061EB70E06BC06EEB70E044 +:100BB00068C063EB70E065C065E070E032C061E979 +:100BC00070E04CCF69E770E052C064EB70E054C055 +:100BD0006CEB70E051C06AE970E04EC068E870E00C +:100BE00046C061E970E048C067E870E040C062E973 +:100BF00070E042C067E970E03FC068E770E037C06E +:100C000060E770E034C069E070E00BC065EC70E054 +:100C100033C060E670E005C067EA70E02DC060E0B8 +:100C200070E082E290E02FC064EA70E025C06CEBD7 +:100C300070E027C067EC70E01FC068E970E01CC07E +:100C400069EB70E019C06BE970E016C06FE770E007 +:100C50000EC065EA70E010C06CE970E00DC065E997 +:100C600070E00AC063E970E007C066E870E080E207 +:100C700090E009C064E970E083E090E004C06DEBAF +:100C800070E080E090E00E94660480E090E00895CB +:100C900008956091B3017091B4018091B501909174 +:100CA000B6010E94A11D56985E9825982D98269809 +:100CB0002E9827982F988330A9F028F4813051F08E +:100CC000823069F012C0843041F0853071F4259A89 +:100CD0002D9A08C0259A2D9A0895259A2D9A269A1C +:100CE0002E9A0895279A2F9A089556985E980895F7 +:100CF0000C94490656985E9825982D9826982E981B +:100D000027982F988FEF90E0909389008093880028 +:100D100090938B0080938A0090938D0080938C0039 +:100D2000259A2D9A2FEF80E792E021508040904045 +:100D3000E1F700C00000269A2E9A2FEF80E792E09C +:100D4000215080409040E1F700C00000279A2F9A80 +:100D50002FEF80E792E0215080409040E1F700C003 +:100D6000000025982D982FEF80E792E021508040D9 +:100D70009040E1F700C0000026982E982FEF80E702 +:100D800092E0215080409040E1F700C00000279899 +:100D90002F9856985E9825982D9826982E982798E3 +:100DA0002F98089589EA8093800089E080938100DC +:100DB00024982C983F988AB18F748AB96E98479A74 +:100DC0008BB1806B8BB9769A0E947A060C94480698 +:100DD00080E2809300018091360181110EC00E9453 +:100DE000370781E0809336012FEF83ED90E32150A8 +:100DF00080409040E1F700C0000080E40E943D0781 +:100E00008093000181112EC00E946707809300012A +:100E1000811128C00E94670780930001811122C0C0 +:100E20008FE30E9467078093000181111BC00E941D +:100E30005F0780E40E943D0780930001811112C08A +:100E40008CE00E9467078093000181110BC00E9413 +:100E5000670780930001811105C08FE30E94670737 +:100E6000809300010E945F07809100010895109215 +:100E7000B9008AE08093B800089594EA9093BC008A +:100E80009091BC0097FFFCCF9091B900987F98306B +:100E900021F0903111F081E008958093BB0084E847 +:100EA0008093BC008091BC0087FFFCCF8091B9008B +:100EB000887F883111F0803471F780E0089584E9EB +:100EC0008093BC008091BC0084FDFCCF089580938A +:100ED000BB0084E88093BC008091BC0087FFFCCFFE +:100EE0009091B900987F81E0983209F480E00895EC +:100EF00084E88093BC008091BC0087FFFCCF809188 +:100F0000BB00089580910001811115C080E40E940A +:100F10003D078093000181110CC082E10E946707A8 +:100F200080930001811105C08FEF0E9467078093B5 +:100F300000010E945F0784B1807F84B985B1807F02 +:100F400085B98AB1837F8AB98BB1837F8BB93E988B +:100F5000469808950E94E806809300010E94820747 +:100F600080B38C7080BB81B3836F81BBE6E4F1E01A +:100F7000A8E3B1E011921D9281E0E435F807D1F7C2 +:100F80000C94D206BF92CF92DF92EF92FF920F9312 +:100F90001F93CF93DF9380910001882379F0809194 +:100FA00037018F5F80933701811108C00E94E806E6 +:100FB00080930001811102C00E947A0608E311E0CB +:100FC000C0E0D0E0DD24D39482E0C82EEE24E39488 +:100FD000F12CC73000F580910001811162C080E4DE +:100FE0000E943D0780930001811112C082E10E949E +:100FF00067078093000181110BC0C7010C2E01C04F +:10100000880F0A94EAF780950E9467078093000191 +:101010000E945F0746C0CA30A1F028F4C83059F0DA +:10102000C93061F005C0CC3089F070F0CD3089F066 +:10103000209A289810C0219A29980DC0229A2A989F +:101040000AC0239A2B9807C0529A01C0539A5B9802 +:1010500002C03E9A4698E0EAEA95F1F78FB1799995 +:101060005AC092E081708D25892B7C9B02C090E054 +:1010700001C094E0892B7D9B02C090E001C098E004 +:10108000892B7E9B02C090E001C090E1892B9FB12B +:101090009095991F9927991F9295990F907E892B6A +:1010A0000FC08091000181114BC080E40E943D0778 +:1010B00080930001882389F1B12C0E945F078B2D5A +:1010C000F8019081981719F08083C09201010E9465 +:1010D000820721960F5F1F4FCE30D10509F079CFDF +:1010E00080910101882371F181508093010188234F +:1010F00039F08FE99FE00197F1F700C0000022C0AE +:10110000A6E4B1E0E8E3F1E081918D9391E0E6346B +:10111000F907D1F717C090E0A5CF83E10E946707D8 +:10112000809300018111C8CF81E40E943D07809324 +:1011300000018111C1CF0E947807B82EB094BDCFB5 +:1011400080E0BECF0E94780681E0DF91CF911F91B1 +:101150000F91FF90EF90DF90CF90BF900895E82F10 +:10116000F0E0EA5BFE4F8081089508958B3B910586 +:1011700078F4883A910540F5853A9105D0F48430A9 +:10118000910508F0B1C08130910509F4ADC06BC084 +:10119000803E910508F467C0883E910508F4A4C01C +:1011A0009C01205F31092031310508F05CC0906559 +:1011B0000895853A910509F459C0863A910509F4D4 +:1011C00058C083E890E40895883A910509F454C022 +:1011D000893A910509F453C08A3A910509F452C03D +:1011E0008B3A910509F451C08C3A910509F450C02D +:1011F0008D3A910509F44FC0803B910509F44EC02A +:101200008E3A910509F44DC08F3A910509F44CC00E +:10121000813B910509F44BC0823B910509F44AC01A +:10122000833B910509F449C0843B910509F448C00A +:10123000853B910509F447C0863B910509F446C0FA +:10124000873B910509F445C0883B910509F444C0EA +:10125000893B910509F443C08A3B910509F042C0DE +:101260008AE296E4089580E090E0089581E890E4B1 +:10127000089582E890E4089582EE94E4089589EE5A +:1012800094E408958AEE94E4089585EB94E4089537 +:1012900086EB94E4089587EB94E408958CEC94E451 +:1012A00008958DEC94E4089583E895E408958AE820 +:1012B00095E4089582E995E4089584E995E4089514 +:1012C00081E296E4089583E296E4089584E296E448 +:1012D000089585E296E4089586E296E4089587E20B +:1012E00096E4089580E094E40895089596E0799F47 +:1012F000F001112494E5899FE00DF11D1124E60F02 +:10130000F11DEE0FFF1FE256FE4F85919491089557 +:10131000880F991F825E9F4FFC01859194910895DB +:10132000880F991F82569E4FFC01859194910895D4 +:1013300026E0729FF001112444E5849FE00DF11D29 +:101340001124E60FF11DEE0FFF1FE256FE4F25910F +:101350003491C9019A9581159F4110F4C9010895EE +:10136000C90190528115904128F4C9019F700E94D3 +:1013700090090895C90190538115904120F4C90145 +:101380009927906C0895211580E5380769F40E942B +:101390003D179FEF24E34CE0915020404040E1F79F +:1013A00000C000000C949A1E213080E5380731F40B +:1013B0008091CF0181608093CF010895C90190553C +:1013C0008115904108F050C0832F99278F7099277D +:1013D00081309105D9F4A9014370552702C0880FC7 +:1013E000991F4A95E2F79C68A90164E0440F551FD4 +:1013F0006A95E1F744275370842B952B73E0220FF5 +:10140000331F7A95E1F7207633271DC0823091058E +:1014100029F4922F8827816F906A0895833091056F +:10142000A9F4A9014370552781E090E002C0880F1C +:10143000991F4A95E2F79C6843E0220F331F4A95B3 +:10144000E1F7207E3770822B932B08950497F1F4F7 +:10145000A9014370552781E090E002C0880F991FD1 +:101460004A95E2F79A68E8CFC901905781159041F3 +:1014700020F4C9019F7090620895C90190588115A8 +:10148000904120F4C9019F70906A0895203E310573 +:10149000E0F4203C310558F52133310509F470C0E2 +:1014A00048F42932310509F464C02A32310509F4BF +:1014B0006EC074C029333105F1F022383105D9F0FE +:1014C0002533310509F44EC069C0233E310589F149 +:1014D00038F4203E3105C1F0223E3105E1F05EC016 +:1014E000263E310569F1273E3105A9F157C0C901F2 +:1014F0000E94880908958091E20180FD02C081FF69 +:101500004DC080EE90E04BC08091E20180FFF9CFAA +:1015100089E390E044C08091E20182FF0EC0809197 +:10152000E20184FF03C080E090E039C083EE90E0E8 +:1015300036C08091E20182FFF2CF82EE90E02FC0B0 +:101540008091E20183FF0BC08091E20184FDEBCF2B +:1015500087EE90E024C08091E20183FFF5CF86EE14 +:1015600090E01DC08091E20185FF07C089E290E014 +:1015700016C08091E20185FFF9CF85E390E00FC0AE +:101580008091E20186FF07C08AE290E008C0809166 +:10159000E20186FFF9CF81E390E001C0C9010E941A +:1015A000B608089508950C94D20A809164010895B4 +:1015B000CF93DF9300D01F92CDB7DEB72091E80123 +:1015C000243019F523E029839B838A832093E90043 +:1015D0008FEF9091E800815095FD06C095ED9A95AA +:1015E000F1F700008111F5CF8091E80085FF0DC073 +:1015F00040E050E063E070E0CE0101960E94420DB1 +:101600008091E8008E778093E8000F900F900F9004 +:10161000DF91CF910895CF93DF9300D01F92CDB784 +:10162000DEB72091E801243021F522E029839B8355 +:101630008A8383E08093E9008FEF9091E8008150E6 +:1016400095FD06C095ED9A95F1F700008111F5CF53 +:101650008091E80085FF0DC040E050E063E070E05D +:10166000CE0101960E94420D8091E8008E77809312 +:10167000E8000F900F900F90DF91CF910895209187 +:10168000E8012430F1F422E02093E9002FEF3091BB +:10169000E800215035FD06C035ED3A95F1F7000020 +:1016A0002111F5CF2091E80025FF0BC040E050E06C +:1016B00065E070E00E94420D8091E8008E77809393 +:1016C000E8000895CF93DF93EC018091E801843026 +:1016D00009F046C090910C019923D9F090910D0129 +:1016E0009923B9F08093E9008FEF9091E800815041 +:1016F00095FD06C095E19A95F1F700008111F5CFAF +:101700008091E80085FF2CC040E050E060E170E08F +:1017100017C081E08093E9008FEF9091E80081503D +:1017200095FD06C095ED9A95F1F700008111F5CF72 +:101730008091E80085FF14C040E050E068E070E070 +:10174000CE010E94420D8091E8008E778093E800E0 +:1017500080E1FE01A4E5B1E001900D928A95E1F7E8 +:10176000DF91CF9108958091E701811109C00E9416 +:10177000D40E0E94310F8091E20084608093E200D9 +:1017800008951092E701089508950C94C3240E94CF +:10179000311E0E94C9240E94CE110C94D30A42E04B +:1017A00061EC81E00E944E0E42E061EC82E00E941A +:1017B0004E0E42E061EC83E00E944E0E42E161EC8D +:1017C00084E00C944E0E8091EA01833009F455C0F8 +:1017D00030F4813071F0823009F48EC008958A307F +:1017E00009F47AC08B3009F460C0893009F09CC0DC +:1017F00020C08091E901813A09F096C08091E8000B +:10180000877F8093E8008091ED019091EE01892B14 +:1018100021F060E080E090E003C060E184E591E0C9 +:1018200070E00E948B0D8091E8008B778093E80038 +:1018300008958091E901813209F076C08091ED012F +:101840009091EE01009719F0039709F06DC0809117 +:10185000E800877F8093E8008091E80082FD05C062 +:101860008091E8018111F8CF5FC08091F1008093F1 +:1018700064018091E8008B7753C08091E901813A3F +:1018800009F052C08091ED019091EE01892B09F091 +:101890004BC08091E800877F8093E8008091E8004A +:1018A00080FFFCCF80910C0136C08091E90181322C +:1018B000D9F58091ED019091EE01892BA9F58091E8 +:1018C000E800877F8093E8000E94830E8091EB01FF +:1018D00080930C010C943D178091E901813221F530 +:1018E0008091E800877F8093E8000E94830E8091BA +:1018F000EC018093650108958091E901813AA1F49A +:101900008091E800877F8093E8008091E80080FF65 +:10191000FCCF809165018093F1008091E8008E7783 +:101920008093E8000C94830E089584B7877F84BF6A +:1019300088E10FB6F89480936000109260000FBEAB +:1019400090E080E80FB6F894809361009093610076 +:101950000FBE0E941D120E94D40E0E94310F809172 +:10196000E20084608093E20078940E94AC110E94AF +:101970001F1282E091E00E94C9110E94B12480915F +:10198000E801853069F40E94F41D8091E601882306 +:10199000B1F30E941C1E882391F30E942C0DEFCFFF +:1019A0000E942512ECCF292F332723303105A9F0CF +:1019B0006CF42130310509F442C02230310509F0C0 +:1019C00043C08DE690E02AE636E042C02132310580 +:1019D000C9F02232310519F137C0992781309105BC +:1019E00041F08230910541F0892B71F5E6E6F6E091 +:1019F00005C0EEE4F6E002C0E6E3F6E0849190E094 +:101A00009F0126C0643000F5E62FF0E0EE0FFF1FC7 +:101A1000EE5DFE4F2081318189E090E019C0643095 +:101A200098F4E62FF0E0DF01AA0FBB1FA65EBE4FC1 +:101A30002D913C91EA5EFE4F808190E009C082E1E9 +:101A400090E027ED36E004C080E090E020E030E058 +:101A5000FA0131832083089580E189BD82E189BD47 +:101A600009B400FEFDCF8091D8008F7D8093D8000F +:101A70008091E00082608093E0008091E00081FD31 +:101A8000FCCF0895CF92DF92EF92FF920F931F93B6 +:101A9000CF93DF937C018B01EA010E94A40E811198 +:101AA00031C0209731F088819981081B190BE80E0D +:101AB000F91EC12CD12C0115110519F18091E800F6 +:101AC00085FD14C08091E8008E778093E800209710 +:101AD00041F0888199818C0D9D1D9983888385E0D3 +:101AE00011C00E94A40E882331F30CC0F70181912C +:101AF0007F018093F10001501109FFEFCF1ADF0A37 +:101B0000DACF80E0DF91CF911F910F91FF90EF909E +:101B1000DF90CF9008952091EF013091F0012617CA +:101B2000370748F06115710539F42091E8002E77E8 +:101B30002093E80001C0B901FC0120E061157105A6 +:101B4000B9F18091E801882309F440C0853009F497 +:101B50003FC08091E80083FD3DC08091E80082FF96 +:101B600006C08091E80082FF26C080E00895809141 +:101B7000E80080FFE3CF2091F3008091F20090E035 +:101B8000922B6115710551F08830910538F421913F +:101B90002093F100615071090196F3CF21E008977D +:101BA00009F020E08091E8008E778093E800C6CFAE +:101BB0002111C7CFD6CF8091E801882339F0853035 +:101BC00039F08091E80083FFCCCF04C082E0089513 +:101BD00083E0089581E008952091EF013091F001B4 +:101BE0002617370748F06115710539F42091E80090 +:101BF0002E772093E80001C0B901FC0120E06115B7 +:101C00007105C1F18091E801882309F441C0853054 +:101C100009F440C08091E80083FD3EC08091E80057 +:101C200082FF06C08091E80082FF27C080E008950F +:101C30008091E80080FFE3CF2091F3008091F200D3 +:101C400090E0922B6115710559F08830910540F4B0 +:101C500024912093F1003196615071090196F2CFE1 +:101C600021E0089709F020E08091E8008E778093CA +:101C7000E800C5CF2111C6CFD5CF8091E8018823D8 +:101C800039F0853039F08091E80083FFCBCF04C074 +:101C900082E0089583E0089581E00895982F9730B9 +:101CA00058F59093E900981739F07091EC00209165 +:101CB000ED005091F00003C0242F762F50E021FF5B +:101CC00019C03091EB003E7F3093EB003091ED0076 +:101CD0003D7F3093ED003091EB0031603093EB00AD +:101CE0007093EC002093ED005093F0002091EE00F3 +:101CF00027FF07C09F5FD3CF8F708093E90081E0FB +:101D0000089580E008958091E90187FD05C08091E4 +:101D1000E80080FF0EC012C08091E80082FD05C07F +:101D20008091E8018111F8CF08958091E8008B77C8 +:101D300008C08091E8018111EACF08958091E80000 +:101D40008E778093E80008958091E4009091E500FB +:101D500045E62091EC0020FF21C02091E80020FD05 +:101D600021C02091E801222389F0253089F02091BB +:101D7000EB0025FD0FC02091E4003091E50028170D +:101D8000390739F3415041F0C901E3CF82E00895AA +:101D900083E0089581E0089584E008952091E800AB +:101DA00022FFDFCF80E008950E94420F0E944A0F79 +:101DB000E0EEF0E0808181608083E8EDF0E08081FA +:101DC0008F77808319BCA7EDB0E08C918E7F8C93C8 +:101DD00080818F7E80831092E70108950F931F9377 +:101DE000CF93DF930E94420F0E944A0FC8EDD0E0CC +:101DF00088818F77888388818068888388818F7DB8 +:101E0000888319BC1092E8011092E4011092E60157 +:101E10001092E50100EE10E0F80180818B7F808355 +:101E200088818160888342E060E080E00E944E0EFD +:101E3000E1EEF0E080818E7F8083E2EEF0E0808151 +:101E400081608083808188608083F80180818E7FBB +:101E50008083888180618883DF91CF911F910F916A +:101E60000895E8EDF0E080818F7E8083E7EDF0E07B +:101E700080818160808384E082BF81E08093E7017C +:101E80000C94EE0EE8EDF0E080818E7F808310925E +:101E9000E20008951092DA001092E10008951F9276 +:101EA0000F920FB60F9211242F933F934F935F938E +:101EB0006F937F938F939F93AF93BF93EF93FF9312 +:101EC0008091E10082FF0BC08091E20082FF07C099 +:101ED0008091E1008B7F8093E1000E94AB118091A3 +:101EE000DA0080FF1FC08091D80080FF1BC0809166 +:101EF000DA008E7F8093DA008091D90080FF0DC0D8 +:101F000080E189BD82E189BD09B400FEFDCF81E099 +:101F10008093E8010E94B30B05C019BC1092E80140 +:101F20000E94C10B8091E10080FF19C08091E20006 +:101F300080FF15C08091E2008E7F8093E200809147 +:101F4000E20080618093E2008091D80080628093FB +:101F5000D80019BC85E08093E8010E94C50B8091F0 +:101F6000E10084FF30C08091E20084FF2CC080E15A +:101F700089BD82E189BD09B400FEFDCF8091D80002 +:101F80008F7D8093D8008091E1008F7E8093E10067 +:101F90008091E2008F7E8093E2008091E200816078 +:101FA0008093E2008091E401882311F084E007C06F +:101FB0008091E30087FF02C083E001C081E080934D +:101FC000E8010E94C70B8091E10083FF29C0809146 +:101FD000E20083FF25C08091E100877F8093E100CC +:101FE00082E08093E8011092E4018091E1008E7F0D +:101FF0008093E1008091E2008E7F8093E2008091E7 +:10200000E20080618093E20042E060E080E00E94B4 +:102010004E0E8091F00088608093F0000E94C40B07 +:10202000FF91EF91BF91AF919F918F917F916F91B0 +:102030005F914F913F912F910F900FBE0F901F9086 +:1020400018951F920F920FB60F9211242F933F9362 +:102050004F935F936F937F938F939F93AF93BF93B0 +:10206000CF93EF93FF93C091E900CF708091EC0084 +:102070001092E9008091F000877F8093F0007894BF +:102080000E945D101092E9008091F00088608093BA +:10209000F000C093E900FF91EF91CF91BF91AF9114 +:1020A0009F918F917F916F915F914F913F912F9170 +:1020B0000F900FBE0F901F9018951F93CF93DF9333 +:1020C000CDB7DEB7AA970FB6F894DEBF0FBECDBF6F +:1020D000E9EEF1E08091F100819321E0E13FF20728 +:1020E000C9F70E94E30B8091E80083FF1CC1209197 +:1020F000E9013091EA01832F90E08A30910508F0E0 +:1021000012C1FC01EB54FF4F0C944B26203881F098 +:10211000223809F008C18091ED018F708093E900A9 +:102120008091EB0085FB882780F91092E90006C0BA +:102130008091E5019091E601911182609091E80013 +:10214000977F9093E8008093F1001092F100C5C052 +:10215000822F8D7F09F0E7C0222319F0223061F031 +:10216000E2C08091EB01813009F0DDC0333009F02D +:1021700080E08093E60128C08091EB01811124C0AA +:102180002091ED012F7009F4CEC02093E9008091D9 +:10219000EB0080FF19C08091EB00333011F48062B6 +:1021A00011C080618093EB0081E090E0022E01C0BD +:1021B000880F0A94EAF78093EA001092EA0080916F +:1021C000EB0088608093EB001092E9008091E800BA +:1021D000877F86C02111A7C01091EB011F778091E6 +:1021E000E3008078812B8093E3008091E800877F73 +:1021F0008093E8000E94830E8091E80080FFFCCF6E +:102200008091E30080688093E300112311F083E064 +:1022100001C082E08093E80186C02058223008F097 +:1022200082C08091EB019091EC018C3D23E09207FC +:1022300079F583E08A838AE289834FB7F894DE01D7 +:10224000139620E03EE051E2E32FF0E05093570078 +:10225000E49120FF03C0E295EF703F5FEF708E2F97 +:1022600090E0EA3010F0C79601C0C0968D939D9320 +:102270002F5F243149F74FBF8091E800877F80931B +:10228000E8006AE270E0CE0101960E948B0D14C056 +:10229000AE014F5F5F4F6091ED010E94D30C00973C +:1022A00009F441C02091E800277F2093E800BC0199 +:1022B00089819A810E94EC0D8091E8008B77809350 +:1022C000E80031C0203879F58091E800877F80935D +:1022D000E8008091E4018093F1008091E8008E771E +:1022E0008093E8000E94830E1EC021111CC09091B3 +:1022F000EB019230C0F48091E800877F8093E80082 +:102300009093E4010E94830E8091E401811104C046 +:102310008091E30087FF02C084E001C081E08093E8 +:10232000E8010E94CF0B8091E80083FF0AC08091F2 +:10233000E800877F8093E8008091EB0080628093C3 +:10234000EB00AA960FB6F894DEBF0FBECDBFDF91AB +:10235000CF911F9108950895CF938091E80188232C +:10236000B1F08091E9008F709091EC0090FF02C075 +:1023700090E801C090E0C92FC82B1092E90080912D +:10238000E80083FD0E945D10CF70C093E900CF91FB +:10239000089590936B0180936A010895E0916A011A +:1023A000F0916B01309721F00190F081E02D0994BC +:1023B00080E00895E0916A01F0916B01309721F07F +:1023C0000280F381E02D09940895E0916A01F09173 +:1023D0006B01309721F00480F581E02D0994089578 +:1023E00020916801309169018217930771F09093F1 +:1023F000690180936801E0916A01F0916B01309767 +:1024000021F00680F781E02D09940895209166015E +:10241000309167018217930771F090936701809361 +:102420006601E0916A01F0916B01309721F0008420 +:10243000F185E02D0994089508950C941C120E94D2 +:10244000371E0E94AA070C94FD1ECF92DF92EF92D6 +:10245000FF920F931F93CF93DF93CDB7DEB72B97E8 +:102460000FB6F894DEBF0FBECDBF0E94C2073DE697 +:10247000E32E31E0F32E00E010E0C02E802F0E940A +:10248000AF08F701D1907F01D826B1F40F5F1F4F3D +:102490000E30110591F78FEF89838A831B820E948A +:1024A000401E8160782F9D838C8349815A816B8186 +:1024B0008D810E94C81241C09091CF0191FF04C04C +:1024C0008B870E94B5088B8520E030E04D2D50E0D1 +:1024D000922FBA01022E02C0759567950A94E2F711 +:1024E00060FF25C02E83CF82EE24E394F12C02C03E +:1024F000EE0CFF1C9A95E2F790E08E219F2121E0DF +:10250000892B09F420E028870E94401E8160782FE3 +:102510009A8789874E815F8168858A850E94C81263 +:10252000F801E359FE4F80818E25808306C02F5F1E +:102530003F4F2630310561F6A9CF0E94E12110916D +:102540006C010E94CE111817A1F00E94CE11809349 +:102550006C012B960FB6F894DEBF0FBECDBFDF9196 +:10256000CF911F910F91FF90EF90DF90CF900C943F +:10257000D30A2B960FB6F894DEBF0FBECDBFDF9106 +:10258000CF911F910F91FF90EF90DF90CF90089522 +:10259000CF93DF93CDB7DEB72B970FB6F894DEBF9E +:1025A0000FBECDBF4F83588769877A878B87DE013F +:1025B000119686E0FD0111928A95E9F785E0FE010A +:1025C000379601900D928A95E1F749815A816B8186 +:1025D0007C818D819E810E94091A2B960FB6F894FA +:1025E000DEBF0FBECDBFDF91CF9108950895CF9389 +:1025F000C82F882309F4C1C0823859F40E94CE1133 +:1026000081FDBBC089E30E94A81C0E94721D89E362 +:102610000CC0833879F40E94CE1180FDAEC083E5F2 +:102620000E94A81C0E94721D83E50E94E81CCF91A5 +:102630000C94721D843859F40E94CE1182FD9DC005 +:1026400087E40E94A81C0E94721D87E4EECF8CEFE5 +:102650008C0F813A48F48C2F0E94192481118DC06F +:102660008C2F0E94A81CE3CF80E28C0F883048F4A6 +:10267000C77081E001C0880FCA95EAF70E94291D42 +:10268000D6CF8BE58C0F833078F4C53A29F0C63A63 +:1026900031F482E890E005C081E890E002C083E870 +:1026A00090E0CF910C94F01188E58C0F833108F005 +:1026B00064C0C83A39F1C93A41F1CA3A49F1CB3A52 +:1026C00051F1CC3A59F1CD3A61F1C03B69F1CE3AC2 +:1026D00071F1CF3A79F1C13B81F1C23B89F1C33B42 +:1026E00091F1C43B99F1C53BA1F1C63BA9F1C73BB0 +:1026F000B1F1C83BB9F1C93BC1F1CA3BC9F58AE2A6 +:1027000092E038C082EE90E035C089EE90E032C0B1 +:102710008AEE90E02FC085EB90E02CC086EB90E035 +:1027200029C087EB90E026C08CEC90E023C08DECB4 +:1027300090E020C083E891E01DC08AE891E01AC0D3 +:1027400082E991E017C084E991E014C081E292E04F +:1027500011C083E292E00EC084E292E00BC085E2F9 +:1027600092E008C086E292E005C087E292E002C0F3 +:1027700080E090E0CF910C940612CF9108958823C9 +:1027800009F44BC0823859F40E94CE1181FF45C034 +:1027900089E30E94A81C0E94721D89E30CC0833843 +:1027A00071F40E94CE1180FF38C083E50E94A81CFE +:1027B0000E94721D83E50E94E81C0C94721D8438EF +:1027C00059F40E94CE1182FF28C087E40E94A81C01 +:1027D0000E94721D87E4EFCF9CEF980F913A58F357 +:1027E00090E2980F983050F4877091E001C0990FF3 +:1027F0008A95EAF7892F0E942F1DDFCF9BE5980F5E +:10280000933020F480E090E00C94F011885A8331EA +:1028100020F480E090E00C9406120895882321F0C3 +:102820000E94291D0C94721D0895882321F00E9496 +:102830002F1D0C94721D0895CF92DF92EF92FF929C +:102840000F931F93CF93DF93CDB7DEB728970FB6C3 +:10285000F894DEBF0FBECDBF8C0185E0F801DE012C +:10286000119601900D928A95E1F7F801D080E180F0 +:10287000F280258122952F7083819481892B39F0F4 +:10288000FFEFEF1206C081E0DF1203C003C081E05A +:1028900001C080E080FDCEC2C8012F830E94F612E5 +:1028A000D982EA8289819A810E94661C9E838887E8 +:1028B0000E94651C0E94381B2F814E816885FF2075 +:1028C00029F00E94461D68854E812F81E42FE295F4 +:1028D000EF70F0E0E154FF4F0C944B26842F807F83 +:1028E000142F1F70882311F01295107FFF2059F0CC +:1028F000112309F454C2812F68870E94391D0E9458 +:10290000721D68854CC2862F0E94BF13112309F4E3 +:1029100091C2812F0E943F1D28960FB6F894DEBF0A +:102920000FBECDBFDF91CF911F910F91FF90EF9020 +:10293000DF90CF900C94721D342F307F842F8F70D6 +:10294000303211F08295807F662319F0613019F1E1 +:102950002BC0FF20B1F0222309F493C1213009F0EC +:1029600090C128960FB6F894DEBF0FBECDBFDF91A1 +:10297000CF911F910F91FF90EF90DF90CF900C942B +:10298000591D222319F0213009F454C28E830E946C +:102990005C1D8E8189C1FF2021F0223008F04AC2DF +:1029A00070C1211147C280C1FF2021F0222309F408 +:1029B00068C1F5C1222309F477C105C2242F2695E9 +:1029C0002695237030E02115310521F021303105A5 +:1029D000C9F030C2FF2021F0862F942F937002C0DF +:1029E00080E090E028960FB6F894DEBF0FBECDBF12 +:1029F000DF91CF911F910F91FF90EF90DF90CF90DB +:102A00000C94F011FF2021F0862F942F937002C0B8 +:102A100080E090E028960FB6F894DEBF0FBECDBFE1 +:102A2000DF91CF911F910F91FF90EF90DF90CF90AA +:102A30000C940612862FFF2019F00E94E92002C094 +:102A40000E94512128960FB6F894DEBF0FBECDBF6D +:102A5000DF91CF911F910F91FF90EF90DF90CF907A +:102A60000C94D621842F837009F076C0F110E2C156 +:102A7000262F229526952770220F220F862F8F70E2 +:102A8000C82ED12CE12CF12C022E04C0CC0CDD1C64 +:102A9000EE1CFF1C0A94D2F764FF10C06FE070E0D8 +:102AA00080E090E004C0660F771F881F991F2A9569 +:102AB000D2F7609570958095909503C060E070E0C6 +:102AC000CB01242F269526952370422F50E04230CB +:102AD0005105D1F04330510559F16C297D298E29DA +:102AE0009F294130510541F128960FB6F894DEBF79 +:102AF0000FBECDBFDF91CF911F910F91FF90EF904F +:102B0000DF90CF900C945D1B6C297D298E299F2925 +:102B100028960FB6F894DEBF0FBECDBFDF91CF91E0 +:102B20001F910F91FF90EF90DF90CF900C94771B47 +:102B30000E945D1BC701B60128960FB6F894DEBF50 +:102B40000FBECDBFDF91CF911F910F91FF90EF90FE +:102B5000DF90CF900C94431BFF2019F0842F8170DD +:102B600001C08695882309F465C1262F22952695F4 +:102B70002770220F220F862F8F70C82ED12CE12CA8 +:102B8000F12C022E04C0CC0CDD1CEE1CFF1C0A94A0 +:102B9000D2F764FF10C06FE070E080E090E004C006 +:102BA000660F771F881F991F2A95D2F76095709539 +:102BB0008095909503C060E070E0CB01242F2695AE +:102BC00026952370422F50E042305105D1F043301A +:102BD000510559F16C297D298E299F2941305105D4 +:102BE00041F128960FB6F894DEBF0FBECDBFDF913E +:102BF000CF911F910F91FF90EF90DF90CF900C94A9 +:102C0000311C6C297D298E299F2928960FB6F894AE +:102C1000DEBF0FBECDBFDF91CF911F910F91FF900F +:102C2000EF90DF90CF900C944B1C0E94311CC70199 +:102C3000B60128960FB6F894DEBF0FBECDBFDF9168 +:102C4000CF911F910F91FF90EF90DF90CF900C9458 +:102C5000171C603FC9F118F4603E50F49BC0623FFE +:102C600009F460C008F44AC0633F09F46FC092C021 +:102C7000162F1F70842F8F71FF2099F00E94B01BB8 +:102C8000812F28960FB6F894DEBF0FBECDBFDF911F +:102C9000CF911F910F91FF90EF90DF90CF900C9408 +:102CA0000E140E94D11B812F28960FB6F894DEBF18 +:102CB0000FBECDBFDF91CF911F910F91FF90EF908D +:102CC000DF90CF900C941514FF20A1F02111B2C019 +:102CD000842F8F7128960FB6F894DEBF0FBECDBF3C +:102CE000DF91CF911F910F91FF90EF90DF90CF90E8 +:102CF0000C94F61B223008F09DC0EACFFF20A1F013 +:102D0000842F8F7128960FB6F894DEBF0FBECDBF0B +:102D1000DF91CF911F910F91FF90EF90DF90CF90B7 +:102D20000C94B01BFF2061F3842F8F7128960FB68F +:102D3000F894DEBF0FBECDBFDF91CF911F910F91F1 +:102D4000FF90EF90DF90CF900C94D11BFF2091F07B +:102D5000842F8F7128960FB6F894DEBF0FBECDBFBB +:102D6000DF91CF911F910F91FF90EF90DF90CF9067 +:102D70000C949B1B28960FB6F894DEBF0FBECDBFF8 +:102D8000DF91CF911F910F91FF90EF90DF90CF9047 +:102D90000C94911BFF20A1F0222309F4B1CF862FC0 +:102DA00028960FB6F894DEBF0FBECDBFDF91CF914E +:102DB0001F910F91FF90EF90DF90CF900C94F7123E +:102DC000222309F4B1CF862F28960FB6F894DEBFE0 +:102DD0000FBECDBFDF91CF911F910F91FF90EF906C +:102DE000DF90CF900C94BF134F70C8010E94040570 +:102DF00028960FB6F894DEBF0FBECDBFDF91CF91FE +:102E00001F910F91FF90EF90DF90CF900C94B61A26 +:102E10004F70C80128960FB6F894DEBF0FBECDBF25 +:102E2000DF91CF911F910F91FF90EF90DF90CF90A6 +:102E30000C94750928960FB6F894DEBF0FBECDBF6F +:102E4000DF91CF911F910F91FF90EF90DF90CF9086 +:102E500008950E94461D0E94561D0E941B1D0E943F +:102E6000721D0E9482220E94D62180E090E00E9482 +:102E7000F01180E090E00C9406120E94361D0C9434 +:102E800029170E94661C292F22952F7030E02C30C4 +:102E900031054CF42A3031056CF4225031092230CE +:102EA000310590F407C02C30310551F02F30310539 +:102EB00039F00AC0803E10F0803F31F481E008957F +:102EC00093FB882780F9089580E00895CF93DF93DE +:102ED00000D000D01F92CDB7DEB70F900F900F90AB +:102EE0000F900F90DF91CF910895CF93DF9300D093 +:102EF00000D000D0CDB7DEB726960FB6F894DEBF6F +:102F00000FBECDBFDF91CF9108951F93CF93DF9375 +:102F1000C0917B0116E080917C01C81799F0D0E048 +:102F20001C9FF0011D9FF00D1124E358FE4F4081BE +:102F3000518162817381848195810E9475172196E8 +:102F4000C770E9CFDF91CF911F9108954091AD01F6 +:102F50005091AE016091AF017091B0018091B101CB +:102F60009091B2010C947517CF938091B201829524 +:102F70008F7009F05FC08091AF01882309F45AC0B7 +:102F800020917B01A0917C016091AD017091AE0117 +:102F90008091B0019091B10131E06F3F09F030E0D4 +:102FA000B32FC6E02A1709F445C0009721F07F3FF0 +:102FB00021F44B2F03C041E001C040E030E040FD70 +:102FC00035C0C29FF001C39FF00D1124E358FE4F9E +:102FD000418174132BC04081641328C04281411188 +:102FE00025C0438154814817590710F441505109B5 +:102FF000481B590B483C5105C8F48091B2018F70B1 +:1030000080618093B20186E0829FF001839FF00D82 +:103010001124EE57FE4F80818F70806180838DEA8E +:1030200091E00E941C14CF910C9485172F5F3F4FA5 +:103030002770B8CFCF910895CF92DF92EF92FF9291 +:103040000F931F93CF93DF93CDB7DEB762970FB681 +:10305000F894DEBF0FBECDBF8C0185E0F801DE0124 +:103060001D9601900D928A95E1F7D8014C91119629 +:103070005C91119712966C9112971396ED90FC90BB +:1030800014977091AD01E091AE012091B0013091A3 +:10309000B1012115310531F0EF3F31F481E07F3F7F +:1030A00019F403C081E001C080E0B82FB170CB2ECD +:1030B00080FD6CC1D090AF01DD2009F4F5C0F09126 +:1030C000B201E216F30638F0C701821B930B883C6D +:1030D000910548F09BC0209530952E0D3F1D283C52 +:1030E000310508F093C08F2F807F09F052C0E5139F +:1030F00014C0741312C0D62E61110FC0FF70F0619E +:10310000F093B2010E94A6178DEA91E00E941C1470 +:103110008091B201F80185836CC1EF2831F05F3FE7 +:1031200031F481E04F3F19F403C081E001C080E039 +:1031300080FD03C081E0862701C080E0F82FF17098 +:10314000FF2E80FF1CC080917B0120917C0136E026 +:10315000821709F428C190E0389FF001399FF00DE3 +:103160001124E358FE4F7181571306C07081471335 +:1031700003C07281671303C001968770E9CFD62E12 +:10318000662309F436C18091B20181608093B20157 +:1031900053C0E51308C0741306C0611104C0D80100 +:1031A0001596FC93AEC04D875E878D859E856A8B94 +:1031B0000E9441176A89882329F1D62E662311F1CE +:1031C0002091B201822F82958F7090E002970CF4CB +:1031D00060C08091AD019091AE0198878F83198670 +:1031E000FB86EA862C87CE01079651C0E51731F1A0 +:1031F0004D875E878D859E856A8B0E9441176A89FF +:1032000081112EC0C8010E941C14A4C08F2F807F82 +:1032100069F77E2DF98AE88A89890E9466178DEA06 +:1032200091E00E941C14EDEAF1E086E0DF011D92BE +:103230008A95E9F70E94A617D12CDBC07413D8CF6A +:103240006111D6CFD8011596FC93C8010E941C14B9 +:10325000EDEAF1E086E0DF011D928A95E9F7C9C049 +:10326000D62E662379F22091B201822F82958F703B +:1032700090E0029774F08091AD019091AE019A8335 +:1032800089831B82FD82EC822E83CE0101960E94EF +:103290001C1486E0F801ADEAB1E001900D928A9528 +:1032A000E1F70E94B4176FC0E216F30628F0C701D9 +:1032B000821B930B9C0104C0209530952E0D3F1D61 +:1032C000283C310508F052C0D62E662309F49ACF67 +:1032D000E5132CC074132AC08091B20180FD1DC07B +:1032E000982F92959F70C9F0D80115968C931597D9 +:1032F0009F3039F09F5F9295907F8F70892B159644 +:103300008C93C8010E941C1486E0F801ADEAB1E07C +:1033100001900D928A95E1F736C086E0F801ADEA9A +:10332000B1E001900D928A95E1F763C04D875E8709 +:103330008D859E850E944117882379F086E0F801EB +:10334000ADEAB1E001900D928A95E1F70E94B417C1 +:103350000E94A617DD24D3944CC08091B2018160F5 +:103360008093B201C8010E941C1443C07E2DF98ACB +:10337000E88A89890E946617EDEAF1E086E0DF01BC +:103380001D928A95E9F70E94A61733C0662309F4B7 +:1033900039CF4D875E878D859E850E944117882392 +:1033A00009F430CFCBCF4D875E878D859E850E94F7 +:1033B000661C292F22952F7030E0223031052CF425 +:1033C0009F7041F0811106C00CC0243031052CF4EF +:1033D0009F7049F4805E883020F0C8010E941C1460 +:1033E000CF2CDC2C06C0D80115969C91907F91F7CC +:1033F000F8CF8D2D62960FB6F894DEBF0FBECDBF0D +:10340000DF91CF911F910F91FF90EF90DF90CF90C0 +:1034100008951F93CF93DF93CDB7DEB72C970FB6E8 +:10342000F894DEBF0FBECDBF4F83588769877A8778 +:103430008B879C87CE0107960E941C188823C1F0B9 +:103440002F8138858A859B85892B31F03F3F11F08C +:1034500080E003C02F3FE1F781E0811147C04F8139 +:10346000588569857A858B859C850E9475173EC035 +:1034700086E0FE013796DE01119601900D928A9545 +:10348000E1F7FF81E8854A855B854115510531F0FB +:10349000EF3F31F481E0FF3F19F403C081E001C048 +:1034A00080E080FD23C020917C0130E0C9010196BD +:1034B0008770992760917B0170E086179707F1F17B +:1034C000F983EA835D834C8396E0929FD001939FBA +:1034D000B00D1124A358BE4FFE01319601900D92FC +:1034E0009A95E1F780937C010E94851716E0809100 +:1034F0007B0190917C01891779F1189FC0011124FB +:1035000083589E4F0E941C18882331F1E0917B0163 +:103510001E9FF0011124E358FE4F408151816281CA +:103520007381848195810E94751780917B0190E061 +:1035300001968770992780937B01D9CF0E943D1710 +:1035400010927C0110927B01EDEAF1E086E0DF0150 +:103550001D928A95E9F7CACF2C960FB6F894DEBF74 +:103560000FBECDBFDF91CF911F910895EF92FF92D3 +:103570000F931F93CF93DF939C01009709F471C0C1 +:10358000F12CEE24E394E9012196F901849184372A +:1035900040F4843008F056C0813081F0823021F14F +:1035A00060C0853709F449C0C0F19CE7980F903797 +:1035B00008F057C08F770E94BF1346C089010E5F85 +:1035C0001F4FFE01849190E2980F983050F487705D +:1035D000FE2D01C0FF0F8A95EAF78F2F0E94491D2B +:1035E00015C00E94F71214C089010E5F1F4FFE0123 +:1035F000849190E2980F983068F48770FE2D01C096 +:10360000FF0F8A95EAF78F2F0E944F1D0E94721DAF +:10361000E8011AC00E94BF13FBCF2E5F3F4FFE018F +:10362000C491CC2341F08FE99FE00197F1F700C0EE +:103630000000C150F6CFE90107C0FE01F490E90196 +:10364000229602C00E94F7128F2D882341F0EFE9E5 +:10365000FFE03197F1F700C000008150F6CF9E01E6 +:1036600092CFDF91CF911F910F91FF90EF9008952E +:1036700008956093B7017093B8018093B901909356 +:10368000BA010C9429170F931F930091B701109161 +:10369000B8012091B9013091BA01062B172B282BC4 +:1036A000392B0093B7011093B8012093B9013093DF +:1036B000BA011F910F910C9429170F931F9300913A +:1036C000B7011091B8012091B9013091BA010623D8 +:1036D0001723282339230093B7011093B8012093AF +:1036E000B9013093BA011F910F910C9429170F93D0 +:1036F0001F930091B7011091B8012091B901309149 +:10370000BA0106271727282739270093B7011093F6 +:10371000B8012093B9013093BA011F910F910C9415 +:1037200029171092B3011092B4011092B5011092B2 +:10373000B6010C94291741E050E060E070E004C04D +:10374000440F551F661F771F8A95D2F74093B30128 +:103750005093B4016093B5017093B6010C9429178E +:1037600041E050E060E070E004C0440F551F661F68 +:10377000771F8A95D2F78091B3019091B401A091FF +:10378000B501B091B601842B952BA62BB72B809356 +:10379000B3019093B401A093B501B093B6010C941A +:1037A000291741E050E060E070E004C0440F551F6D +:1037B000661F771F8A95D2F7409550956095709552 +:1037C0008091B3019091B401A091B501B091B6017F +:1037D00084239523A623B7238093B3019093B40148 +:1037E000A093B501B093B6010C94291741E050E0C5 +:1037F00060E070E004C0440F551F661F771F8A9574 +:10380000D2F78091B3019091B401A091B501B0912C +:10381000B60184279527A627B7278093B3019093F5 +:10382000B401A093B501B093B6010C9429170F937E +:103830001F930091B3011091B4012091B501309113 +:10384000B601062B172B282B392B0093B3011093AD +:10385000B4012093B5013093B6011F910F910C94E0 +:1038600029170F931F930091B3011091B401209178 +:10387000B5013091B601062317232823392300937D +:10388000B3011093B4012093B5013093B6011F9199 +:103890000F910C9429170F931F930091B30110916E +:1038A000B4012091B5013091B601062717272827CA +:1038B00039270093B3011093B4012093B5013093DD +:1038C000B6011F910F910C9429170895CF92DF92A2 +:1038D000EF92FF920F931F93CF93DF93EC01C09071 +:1038E000B701D090B801E090B901F090BA01809191 +:1038F000B3019091B401A091B501B091B601C82A6D +:10390000D92AEA2AFB2A0FE110E0B701A601002E0E +:1039100004C076956795579547950A94D2F740FF6E +:1039200007C0BE01802F0E9498098130910539F4AB +:103930000150110950F7BE0180E00E949809DF9103 +:10394000CF911F910F91FF90EF90DF90CF9008954E +:1039500090910C019923D9F090910D019923B9F020 +:10396000982F9695969596959F3088F5E0910E0143 +:10397000F0910F01E90FF11D877021E030E001C0E7 +:10398000220F8A95EAF78181822B818308954091E5 +:103990000E0150910F0120E030E09FEFFA01E20F9D +:1039A000F31F6281681799F09F3F19F4611101C0FC +:1039B000922F2F5F3F4F2E30310581F79F3F39F017 +:1039C000FA01E90FF11D97FDFA9582830895089594 +:1039D00090910C019923E1F090910D019923C1F090 +:1039E000982F9695969596959F3020F5E0910E012B +:1039F000F0910F01E90FF11D877021E030E001C067 +:103A0000220F8A95EAF72095818128232183089542 +:103A100040910E0150910F0120E030E0FA01E20FD9 +:103A2000F31F9281981301C012822F5F3F4F2E30F7 +:103A30003105A1F7089581E090E0E0910E01F09149 +:103A40000F01E80FF91F1082019680319105A9F747 +:103A500008959091CE01982B9093CE010895809572 +:103A60009091CE0198239093CE0108951092CE01AB +:103A700008959091CD01982B9093CD010895809554 +:103A80009091CD0198239093CD0108951092CD018E +:103A900008959091CC01982B9093CC010895809536 +:103AA0009091CC0198239093CC0108951092CC0171 +:103AB00008958093BB0108951092BB010895409131 +:103AC0000E0150910F0120E030E080E0FA01E20F9A +:103AD000F31F918191118F5F2F5F3F4F2F30310581 +:103AE000A9F70895E0910E01F0910F018091CE01A8 +:103AF0008083E0910E01F0910F0180819091CD01C2 +:103B0000892B8083E0910E01F0910F0180819091CB +:103B1000CC01892B80839091BB01992361F0E091C6 +:103B20000E01F0910F018081892B80830E945F1D1F +:103B300081111092BB0180910E0190910F010C94A4 +:103B4000DA11CF92DF92EF92FF920F931F936C01E5 +:103B5000EE24FF24C114D104E104F10421F46B012B +:103B60007C0180E001C080E133272F2D1E2D0D2D1B +:103B7000011511052105310519F0885F68017901EA +:103B800097018601A4E03695279517950795AA9584 +:103B9000D1F7011511052105310519F08C5F680178 +:103BA000790197018601F2E03695279517950795DB +:103BB000FA95D1F7011511052105310519F08E5F30 +:103BC00068017901B701A6017695679557954795E4 +:103BD000452B462B472B09F08F5F1F910F91FF90CC +:103BE000EF90DF90CF9008958091E801843009F143 +:103BF0001092D00120E488E190E00FB6F894A895E7 +:103C0000809360000FBE2093600083B7817F846043 +:103C100083BF83B7816083BF7894889583B78E7F95 +:103C200083BF88E10FB6F894809360001092600023 +:103C30000FBE089508950895CF930E941A1E0E9402 +:103C4000C2070E941B1EC0E08C2F0E94AF0881118A +:103C500005C0CF5FCE30C1F780E001C081E0CF91D9 +:103C600008950E943D170E94CE110C94D30A82E061 +:103C700084BD93E095BD9AEF97BD80936E00089543 +:103C80002FB7F8948091D1019091D201A091D301E6 +:103C9000B091D4012FBF0895CF92DF92EF92FF929F +:103CA0000F931F932FB7F8944091D1015091D201F7 +:103CB0006091D3017091D4012FBF6A017B01EE2482 +:103CC000FF248C0120E030E0C016D106E206F306A6 +:103CD00010F441505109481B590BCA011F910F9113 +:103CE000FF90EF90DF90CF9008951F920F920FB644 +:103CF0000F9211248F939F93AF93BF938091D10123 +:103D00009091D201A091D301B091D4010196A11D4F +:103D1000B11D8093D1019093D201A093D301B093B0 +:103D2000D401BF91AF919F918F910F900FBE0F90D3 +:103D30001F9018950E94D40EF8942FEF87EA91E611 +:103D4000215080409040E1F700C0000087E090EBF8 +:103D5000DC018093F1019093F201A093F301B09301 +:103D6000F4012CE088E190E00FB6F894A8958093D8 +:103D700060000FBE20936000FFCFEF92FF920F9381 +:103D80001F93CF93DF93E82EF12C8F2D0E94AF0865 +:103D9000C0E0D0E0082F10E098010C2E02C035954D +:103DA00027950A94E2F720FD05C02196C630D1057B +:103DB00099F709C06C2F7F2D80E00E947609E812E8 +:103DC000F4CF81E005C0F3948EE0F812DECF80E0FE +:103DD000DF91CF911F910F91FF90EF900895CF93B6 +:103DE000C82F8CE20E94BD1E882321F08C2FCF911A +:103DF0000C94BD1E80E0CF910895CF930E94422085 +:103E0000811102C00E942820C5E6C15049F00E94DD +:103E1000C2078FE39CE90197F1F700C00000F5CFDE +:103E200089E20E94EF1E811111C18AE20E94EF1EF9 +:103E300081110E94282085E00E94EF1E81110E94BE +:103E40009A1E0E944D208093CF0187E00E94EF1EB2 +:103E5000882399F18BE10E94EF1E882351F0909105 +:103E6000CF0191FB882780F921E0822780FB91F91F +:103E700022C08EE00E94EF1E882351F09091CF0166 +:103E800092FB882780F921E0822780FB92F913C0FA +:103E900080E10E94EF1E9091CF01882341F093FBB7 +:103EA000882780F921E0822780FB93F904C0892FBD +:103EB000809580FB90F99093CF018091CF010E9473 +:103EC00051200E945F208093E20180EE0E94EF1E4D +:103ED000882341F08091E201982F909590FB80F922 +:103EE0008093E20189E30E94EF1E882359F09091AC +:103EF000E20191FB882780F921E0822780FB91F97C +:103F00009093E20182EE0E94EF1E882359F0909177 +:103F1000E20192FB882780F921E0822780FB92F959 +:103F20009093E20186EE0E94EF1E882359F0909153 +:103F3000E20193FB882780F921E0822780FB93F937 +:103F40009093E20183EE0E94EF1E882359F0909136 +:103F5000E20194FB882780F921E0822780FB94F915 +:103F60009093E20185E30E94EF1E882359F090911F +:103F7000E20195FB882780F921E0822780FB95F9F3 +:103F80009093E20181E30E94EF1E882359F0909103 +:103F9000E20196FB882780F921E0822780FB96F9D1 +:103FA0009093E20181E10E94EF1E882359F09091E5 +:103FB000E20197FB882780F921E0822780FB97F9AF +:103FC0009093E2018091E2010E9463208091E201DE +:103FD00087FB882780F980930D0187E20E94EF1EFE +:103FE000C82F8EE10E94EF1E8111C2608FE10E94F6 +:103FF000EF1E8111C46080E20E94EF1E8111C86033 +:1040000081E20E94EF1E8111C06182E20E94EF1ED8 +:104010008111C06283E20E94EF1E8111C06484E2BC +:104020000E94EF1E882311F0C06802C0CC2329F043 +:104030008C2F0E945A206C2F03C00E945620682F9C +:1040400070E080E090E0CF910C94391BCF910895FF +:104050006DEE7EEF80E090E00E94812660E082E0DD +:1040600090E00E94732660E083E090E00E94732657 +:1040700060E084E090E00E94732660E085E090E0DC +:104080000C94732680E090E00E946D2621E08D3E26 +:104090009E4F09F020E0822F089582E090E00C947A +:1040A0006526682F82E090E00C94732683E090E010 +:1040B0000C946526682F83E090E00C94732684E0CE +:1040C00090E00C946526682F84E090E00C947326B1 +:1040D0008091D70180FF0BC06091130185E0689F3C +:1040E000B001112475956795759567952AC081FF74 +:1040F00009C06091130185E0689FB0011124759596 +:1041000067951FC082FF07C06091130185E0689F1B +:10411000B001112416C04091D8014423C9F0609128 +:104120001201461788F72091130185E0289F90011E +:104130001124429FC001439F900D112470E00E9402 +:1041400037266038710540F46115710539F002C0F9 +:1041500065E070E0862F08958FE7089581E0089567 +:104160008091D70180FF08C06091110170E07595C2 +:1041700067957595679521C081FF06C06091110113 +:1041800070E07595679519C082FF04C060911101B8 +:1041900070E010C08091D8018823C1F060911001B7 +:1041A0008617A0F790911101989FC001112470E02B +:1041B0000E9437266038710528F46115710521F0D9 +:1041C000862F08958FE7089581E0089561E070E0FB +:1041D000F4CF803F21F40E946820819504C0813F84 +:1041E00029F40E9468208093DB010895823F21F426 +:1041F0000E946820819504C0833F29F40E946820B2 +:104200008093DA010895893F19F40E94B02005C017 +:104210008A3F31F40E94B02081958093DC0108959B +:104220008B3F21F40E94B020819504C08C3F29F47B +:104230000E94B0208093DD010895843F21F4809195 +:10424000D901816017C0853F21F48091D901826036 +:1042500011C0863F21F48091D90184600BC0873F53 +:1042600021F48091D901886005C0883F31F48091A4 +:10427000D90180618093D90108958D3F21F4809107 +:10428000D70181600BC08E3F21F48091D7018260FD +:1042900005C08F3F29F48091D70184608093D701B6 +:1042A0000895803F39F48091DB0187FF6CC0109244 +:1042B000DB0169C0813F29F48091DB011816BCF352 +:1042C00062C09091DA01823F29F497FF5CC010929E +:1042D000DA0159C0833F19F41916CCF354C0893F51 +:1042E00041F48091DC0118160CF04DC01092DC01F5 +:1042F0004AC08A3F29F48091DC0187FF44C0F6CF91 +:104300008B3F39F48091DD0187FF3DC01092DD01C4 +:104310003AC08C3F29F48091DD011816BCF333C0FC +:10432000843F21F48091D9018E7F17C0853F21F40D +:104330008091D9018D7F11C0863F21F48091D901F0 +:104340008B7F0BC0873F21F48091D901877F05C007 +:10435000883F31F48091D9018F7E8093D90113C0B9 +:104360008D3F21F48091D7018E7F0BC08E3F21F4C9 +:104370008091D7018D7F05C08F3F29F48091D701AF +:104380008B7F8093D7018091DA0181110EC08091DB +:10439000DB0181110AC08091DC01811106C080918E +:1043A000DD01811102C01092D801089589ED91E0DC +:1043B0000E94E5110E94401E9093D6018093D50182 +:1043C00008951F93CF93DF938091D5019091D601EB +:1043D0000E944C1E4091D801442321F020911401E9 +:1043E00030E006C0209115015AE0259F900111246C +:1043F0008217930708F482C08091DA011091DB01E3 +:10440000D091DC01C091DD01811107C0111105C0FF +:10441000D11103C0CC2309F471C04F3F19F04F5F95 +:104420004093D801181624F40E9468208093DA0182 +:104430008091DA0187FF05C00E94682081958093F2 +:10444000DA01111624F40E9468208093DB01809128 +:10445000DB0187FF05C00E94682081958093DB0106 +:104460006091DA01662339F11091DB01112319F112 +:10447000772767FD7095872F972F0E94482523E3A4 +:1044800033E343E35FE30E94AC250E94152560936C +:10449000DA01612F772767FD7095872F972F0E948C +:1044A000482523E333E343E35FE30E94AC250E9406 +:1044B00015256093DB011D1624F40E94B020809323 +:1044C000DC018091DC0187FF05C00E94B02081954E +:1044D0008093DC011C1624F40E94B0208093DD013F +:1044E0008091DD0187FF05C00E94B02081958093F7 +:1044F000DD01DF91CF911F910C94D621DF91CF91F7 +:104500001F910895E9EDF1E085E0DF011D928A95A4 +:10451000E9F71092D8011092D7010895833081F104 +:1045200028F4813059F08230D1F00895853009F4B3 +:1045300049C0B8F1863009F456C00895209115019C +:10454000862F90E0820F911D8F3F910520F4620F1E +:104550006093150108958FEF8093150108952091C0 +:104560001401862F90E0820F911D8F3F910520F45A +:10457000620F6093140108958FEF809314010895E2 +:1045800020911301862F90E0820F911D8F3F91059E +:1045900020F4620F6093130108958FEF809313014D +:1045A000089520911201862F90E0820F911D8F3F78 +:1045B000910520F4620F6093120108958FEF8093AC +:1045C0001201089520911101862F90E0820F911D14 +:1045D0008F3F910520F4620F6093110108958FEFD2 +:1045E00080931101089520911001862F90E0820F91 +:1045F000911D8F3F910520F4620F60931001089583 +:104600008FEF809310010895833011F128F48130E9 +:1046100049F0823091F00895853081F120F18630A3 +:10462000C1F1089580911501681720F4861B8093CD +:1046300015010895109215010895809114016817CD +:1046400020F4861B8093140108951092140108959C +:1046500080911301681720F4861B8093130108953D +:1046600010921301089580911201681720F4861B9F +:104670008093120108951092120108958091110102 +:10468000681720F4861B8093110108951092110180 +:10469000089580911001681720F4861B8093100103 +:1046A00008951092100108958D3109F442C020F54B +:1046B0008E3009F47CC070F4873009F45EC020F4B9 +:1046C000863009F442C033C08830D1F18B3009F410 +:1046D000AAC02DC0863109F4A6C038F4803109F48F +:1046E00070C0813109F47EC022C0893109F49BC0B9 +:1046F0008B3109F452C01BC0853309F48CC048F4D7 +:10470000873209F488C008F478C0893209F483C07C +:104710000EC0833438F48A3308F06DC0883309F44E +:1047200082C005C0833409F476C08834C1F080E0CB +:1047300008950E94CF240E94CE110E94D30A73C014 +:104740000E944D200E945F206EC08091CF01817F2A +:104750008E7F8093CF0181E08093DF0108950E94D6 +:104760003D172FEF83ED90E3215080409040E1F71B +:1047700000C000000E949A1E56C09091CF01892F60 +:104780008095817080FB90F919F09660986027C041 +:10479000997F977F9093CF0146C09091CF0191FB75 +:1047A000882780F921E0822780FB91F913C090913E +:1047B000CF0192FB882780F921E0822780FB92F9C4 +:1047C00009C09091CF0193FB882780F921E08227CF +:1047D00080FB93F99093CF01882329F19160909306 +:1047E000CF0108950E943D1780910D0191E0892726 +:1047F00080930D0118C027EC01C023EE280F61E063 +:1048000070E080E090E004C0660F771F881F991F5A +:104810002A95D2F704C061E070E080E090E00E9449 +:10482000391B0E943D1781E0089580E0089580E0E3 +:104830000895CF93C82F8091DF01813079F018F06F +:104840008230D1F184C0A0910E01B0910F018C9102 +:10485000813169F0823209F07CC009C0A0910E015B +:10486000B0910F018C91813111F0823249F48C2F7B +:104870000E94152481111DC08C2F0E9454231AC040 +:104880008C2F0E941724811114C0C43179F048F490 +:10489000CB3079F0C03109F060C082E08093DF0155 +:1048A00008C0C93219F0C83321F057C01092DF0197 +:1048B00054C081E0817053C0C93289F118F5C43108 +:1048C00071F1A8F4C73009F046C08AE08093150161 +:1048D00094E19093140193E090931301809312015B +:1048E00088E08093110188E28093100134C0CE519A +:1048F000C63088F5EC2FF0E0E65DFE4F80818093B6 +:10490000DE0129C0CE34E9F020F4CB3421F56AE091 +:1049100013C0C13579F0C235F1F461E00DC080916A +:10492000DE01882319F01092DE0115C081E080932A +:10493000DF0115C061E006C08091DE010E948E2279 +:104940000AC06AE08091DE010E94042304C0109234 +:10495000DF0180E004C081E002C080E0ABCFCF91F6 +:104960000895E1E8F0E08081886080838081816043 +:1049700080838FB7F89493E09093890090ED9093A3 +:1049800088008FBF0895EFE6F0E080818260808329 +:104990000895EFE6F0E080818D7F80830895EFE653 +:1049A000F0E0808192E08927808308951F920F9222 +:1049B0000FB60F9211242F933F934F935F936F93F2 +:1049C0007F938F939F93AF93BF93EF93FF938091C8 +:1049D000E0019091E10101969093E1018093E00163 +:1049E000811103C082E00E94D30AE091E101E695C3 +:1049F000E695F0E0EC51F84FE4918091E0018E13E0 +:104A000003C080E00E94D30AFF91EF91BF91AF9164 +:104A10009F918F917F916F915F914F913F912F91D6 +:104A20000F900FBE0F901F90189504D06894B1118D +:104A30008DC0089570D088F09F5790F0B92F9927B6 +:104A4000B751A0F0D1F0660F771F881F991F1AF099 +:104A5000BA95C9F712C0B13081F077D0B1E00895AE +:104A600074C0672F782F8827B85F39F0B93FCCF32F +:104A7000869577956795B395D9F73EF4909580958F +:104A8000709561957F4F8F4F9F4F0895E89409C0AF +:104A900097FB3EF490958095709561957F4F8F4F71 +:104AA0009F4F9923A9F0F92F96E9BB279395F69587 +:104AB000879577956795B795F111F8CFFAF4BB0F05 +:104AC00011F460FF1BC06F5F7F4F8F4F9F4F16C069 +:104AD000882311F096E911C0772321F09EE8872FF3 +:104AE000762F05C0662371F096E8862F70E060E0AF +:104AF0002AF09A95660F771F881FDAF7880F969528 +:104B0000879597F9089557FD9058440F551F59F010 +:104B10005F3F71F04795880F97FB991F61F09F3FAA +:104B200079F087950895121613061406551FF2CFD3 +:104B30004695F1DF08C0161617061806991FF1CF23 +:104B400086957105610508940895E894BB2766274A +:104B50007727CB0197F908950BD078C069D028F05A +:104B60006ED018F0952309F05AC05FC01124EECF23 +:104B7000CADFA0F3959FD1F3950F50E0551F629FB8 +:104B8000F001729FBB27F00DB11D639FAA27F00DA6 +:104B9000B11DAA1F649F6627B00DA11D661F829FCD +:104BA0002227B00DA11D621F739FB00DA11D621FB2 +:104BB000839FA00D611D221F749F3327A00D611DCF +:104BC000231F849F600D211D822F762F6A2F1124B1 +:104BD0009F5750408AF0E1F088234AF0EE0FFF1F04 +:104BE000BB1F661F771F881F91505040A9F79E3F3B +:104BF000510570F014C0AACF5F3FECF3983EDCF390 +:104C0000869577956795B795F795E7959F5FC1F777 +:104C1000FE2B880F911D9695879597F9089597F922 +:104C20009F6780E870E060E008959FEF80EC089552 +:104C300000240A941616170618060906089500247B +:104C40000A9412161306140605060895092E0394F5 +:104C5000000C11F4882352F0BB0F40F4BF2B11F469 +:104C600060FF04C06F5F7F4F8F4F9F4F089597FB8A +:104C7000072E16F4009407D077FD09D00E94512624 +:104C800007FC05D03EF4909581959F4F089570954F +:104C900061957F4F0895EE0FFF1F0590F491E02D71 +:104CA0000994AA1BBB1B51E107C0AA1FBB1FA61773 +:104CB000B70710F0A61BB70B881F991F5A95A9F7C5 +:104CC00080959095BC01CD010895F999FECF92BDD4 +:104CD00081BDF89A992780B50895A8E1B0E042E037 +:104CE00050E00C948826262FF999FECF1FBA92BD6A +:104CF00081BD20BD0FB6F894FA9AF99A0FBE0196BD +:104D000008950E947326272F0C947426DC01CB0192 +:104D1000FC01F999FECF06C0F2BDE1BDF89A3196CB +:104D200000B40D9241505040B8F70895F894FFCF69 +:104D30002002D50A620B3F0B0B0BD80A0101BC0104 +:104D400028080A03140A3F4D3639A50758072207D9 +:104D5000E9067C069506AE06C706010203040506B1 +:044D60000708090037 :00000001FF diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c index 23611ddd89..92b712bd8a 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.c @@ -106,8 +106,6 @@ #define L4 4 // layer_4 #define L5 5 // layer_5 #define L6 6 // layer_6 -#define L7 7 // layer_7 -#define L8 8 // layer_8 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* @@ -120,7 +118,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! * |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| + * | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT| * '------------------------' '------------------------' * .-----------. .-----------. * |INS |TG(2)| !M(UM)|DELT | @@ -143,8 +141,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { TG(2), DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z, DE_S, DE_N, DE_R, DE_T, DE_D, DE_SS, KC_TAB, DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y, - KC_LALT, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, - UM, KC_DELT, + KC_RCTL, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, + M(UM), KC_DELT, KC_PGUP, KC_PGDN, KC_ENTER, KC_SPACE ), @@ -376,91 +374,70 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), -/* - * .------------------------------------.------------------------------------. - * | | | | | | | | | | | | | | | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | | | | | | | | | | | | | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | |-----!-----! | | | | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | | | | | | | | | | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' -*/ -[L7] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), -/* - * .------------------------------------.------------------------------------. - * | | | | | | | | | | | | | | | - * !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - * | | | | | | | | | | | | | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | |-----!-----! | | | | | | - * !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - * | | | | | | | | | | | | | | | - * '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - * | | | | | | ! | | | | | - * '------------------------' '------------------------' - * .-----------. .-----------. - * | | | ! | | - * .-----+-----+-----! !-----+-----+-----. - * ! ! | | ! | ! ! - * ! ! !-----! !-----! ! ! - * | | | | ! | | | - * '-----------------' '-----------------' -*/ -[L8] = KEYMAP( - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_TRNS, - KC_TRNS, - KC_TRNS, KC_TRNS, KC_TRNS -), }; const uint16_t PROGMEM fn_actions[] = {}; #define UC_MODE_WIN 0 #define UC_MODE_LINUX 1 +#define UC_MODE_OSX 2 +// TODO: allow default mode to be configured static uint16_t unicode_mode = UC_MODE_WIN; +uint16_t hextokeycode(uint8_t hex) { + if (hex == 0x0) { + return KC_P0; + } + if (hex < 0xA) { + return KC_P1 + (hex - 0x1); + } + return KC_A + (hex - 0xA); +} + +void unicode_action_function(uint16_t hi, uint16_t lo) { + switch (unicode_mode) { + case UC_MODE_WIN: + register_code(KC_LALT); + + register_code(KC_PPLS); + unregister_code(KC_PPLS); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LALT); + break; + case UC_MODE_LINUX: + register_code(KC_LCTL); + register_code(KC_LSFT); + + register_code(KC_U); + unregister_code(KC_U); + + register_code(hextokeycode((hi & 0xF0) >> 4)); + unregister_code(hextokeycode((hi & 0xF0) >> 4)); + register_code(hextokeycode((hi & 0x0F))); + unregister_code(hextokeycode((hi & 0x0F))); + register_code(hextokeycode((lo & 0xF0) >> 4)); + unregister_code(hextokeycode((lo & 0xF0) >> 4)); + register_code(hextokeycode((lo & 0x0F))); + unregister_code(hextokeycode((lo & 0x0F))); + + unregister_code(KC_LCTL); + unregister_code(KC_LSFT); + break; + case UC_MODE_OSX: + break; + } +} + const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { if (!record->event.pressed) { return MACRO_NONE; @@ -470,772 +447,291 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { case UM: unicode_mode = (unicode_mode + 1) % 2; break; - - default: - break; - } - if (unicode_mode == UC_MODE_WIN) { - switch(id) { - case UC_GREEK_SMALL_LETTER_OMICRON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(F), U(LALT), END - ); -case UC_LEFTWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_0), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_RHO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_1), U(LALT), END - ); -case UC_SUBSCRIPT_THREE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_3), U(LALT), END - ); -case UC_VULGAR_FRACTION_ONE_EIGHTH: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(B), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_LAMDA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(B), U(LALT), END - ); -case UC_VULGAR_FRACTION_ONE_THIRD: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_3), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_XI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(E), U(LALT), END - ); -case UC_THERE_DOES_NOT_EXIST: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_4), U(LALT), END - ); -case UC_SUPERSCRIPT_ONE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_9), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_BETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_2), U(LALT), END - ); -case UC_SUBSCRIPT_FIVE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_5), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_IOTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_9), U(LALT), END - ); -case UC_VULGAR_FRACTION_ONE_FIFTH: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_5), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_PSI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_8), U(LALT), END - ); -case UC_SUBSCRIPT_NINE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_9), U(LALT), END - ); -case UC_SUPERSCRIPT_FOUR: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_4), U(LALT), END - ); -case UC_RIGHTWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_2), U(LALT), END - ); -case UC_SUPERSCRIPT_SIX: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_6), U(LALT), END - ); -case UC_DOWNWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_3), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_PI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_0), U(LALT), END - ); -case UC_SUPERSCRIPT_TWO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_2), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_OMEGA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_9), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_PSI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_8), U(LALT), END - ); -case UC_SUBSCRIPT_FOUR: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_4), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_NU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(D), U(LALT), END - ); -case UC_DIVISION_SIGN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(F), T(KP_7), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_SIGMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_3), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_RHO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_1), U(LALT), END - ); -case UC_VULGAR_FRACTION_ONE_SIXTH: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_9), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_GAMMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_3), U(LALT), END - ); -case UC_VULGAR_FRACTION_TWO_THIRDS: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_5), T(KP_4), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_NU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(D), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_ZETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_6), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_EPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_5), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_KAPPA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(A), U(LALT), END - ); -case UC_SUPERSCRIPT_SEVEN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_7), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_PI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_0), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_FINAL_SIGMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_2), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_XI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(E), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_THETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_8), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_ETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_7), U(LALT), END - ); -case UC_SUBSCRIPT_TWO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_2), U(LALT), END - ); -case UC_ASYMPTOTICALLY_EQUAL_TO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_4), T(KP_3), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_ALPHA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_1), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_PHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_6), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_PHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_6), U(LALT), END - ); -case UC_INFINITY: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_1), T(E), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_OMICRON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(F), U(LALT), END - ); -case UC_ELEMENT_OF: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_8), U(LALT), END - ); -case UC_MULTIPLICATION_SIGN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(D), T(KP_7), U(LALT), END - ); -case UC_SUBSCRIPT_ZERO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_0), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_SIGMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_3), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_OMEGA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_9), U(LALT), END - ); -case UC_SUBSCRIPT_ONE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_1), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_ZETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_6), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_TAU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_4), U(LALT), END - ); -case UC_SUPERSCRIPT_FIVE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_5), U(LALT), END - ); -case UC_THERE_EXISTS: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_3), U(LALT), END - ); -case UC_PLUS_MINUS_SIGN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_1), U(LALT), END - ); -case UC_VULGAR_FRACTION_THREE_QUARTERS: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(E), U(LALT), END - ); -case UC_SUPERSCRIPT_THREE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(KP_3), U(LALT), END - ); -case UC_EMPTY_SET: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_5), U(LALT), END - ); -case UC_UPWARDS_ARROW: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_1), T(KP_9), T(KP_1), U(LALT), END - ); -case UC_SUPERSCRIPT_NINE: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_9), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_DELTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_4), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_MU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(C), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_KAPPA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(A), U(LALT), END - ); -case UC_SUBSCRIPT_EIGHT: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_8), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_ALPHA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_1), U(LALT), END - ); -case UC_SUBSCRIPT_SEVEN: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_7), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_BETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_2), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_ETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_7), U(LALT), END - ); -case UC_SUPERSCRIPT_EIGHT: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_8), U(LALT), END - ); -case UC_SUPERSCRIPT_ZERO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(KP_0), U(LALT), END - ); -case UC_NOT_AN_ELEMENT_OF: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_9), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_UPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_5), U(LALT), END - ); -case UC_NOT_EQUAL_TO: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_6), T(KP_0), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_CHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_7), U(LALT), END - ); -case UC_FOR_ALL: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_2), T(KP_0), T(KP_0), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_TAU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_4), U(LALT), END - ); -case UC_VULGAR_FRACTION_ONE_QUARTER: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(C), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_CHI: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(C), T(KP_7), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_THETA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_8), U(LALT), END - ); -case UC_GREEK_SMALL_LETTER_IOTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(B), T(KP_9), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_LAMDA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(B), U(LALT), END - ); -case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_7), T(F), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_UPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(A), T(KP_5), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_MU: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(C), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_EPSILON: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_5), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_GAMMA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_3), U(LALT), END - ); -case UC_SUBSCRIPT_SIX: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_2), T(KP_0), T(KP_8), T(KP_6), U(LALT), END - ); -case UC_GREEK_CAPITAL_LETTER_DELTA: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_3), T(KP_9), T(KP_4), U(LALT), END - ); -case UC_VULGAR_FRACTION_ONE_HALF: - return MACRODOWN( - D(LALT), T(KP_PLUS), T(KP_0), T(KP_0), T(B), T(D), U(LALT), END - ); - default: - break; - } - } else if (unicode_mode == UC_MODE_LINUX) { - switch(id) { - case UC_GREEK_SMALL_LETTER_OMICRON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(F), T(KP_ENTER), END - ); + +case UC_GREEK_SMALL_LETTER_OMICRON: + unicode_action_function(0x03, 0xbf); + break; case UC_LEFTWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_0), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x90); + break; case UC_GREEK_CAPITAL_LETTER_RHO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_1), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa1); + break; case UC_SUBSCRIPT_THREE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x83); + break; case UC_VULGAR_FRACTION_ONE_EIGHTH: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(B), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x5b); + break; case UC_GREEK_SMALL_LETTER_LAMDA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(B), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xbb); + break; case UC_VULGAR_FRACTION_ONE_THIRD: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x53); + break; case UC_GREEK_SMALL_LETTER_XI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(E), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xbe); + break; case UC_THERE_DOES_NOT_EXIST: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x04); + break; case UC_SUPERSCRIPT_ONE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xb9); + break; case UC_GREEK_SMALL_LETTER_BETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_2), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb2); + break; case UC_SUBSCRIPT_FIVE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x85); + break; case UC_GREEK_CAPITAL_LETTER_IOTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x99); + break; case UC_VULGAR_FRACTION_ONE_FIFTH: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x55); + break; case UC_GREEK_SMALL_LETTER_PSI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_8), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc8); + break; case UC_SUBSCRIPT_NINE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x89); + break; case UC_SUPERSCRIPT_FOUR: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x74); + break; case UC_RIGHTWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_2), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x92); + break; case UC_SUPERSCRIPT_SIX: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_6), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x76); + break; case UC_DOWNWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x93); + break; case UC_GREEK_SMALL_LETTER_PI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_0), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc0); + break; case UC_SUPERSCRIPT_TWO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_2), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xb2); + break; case UC_GREEK_CAPITAL_LETTER_OMEGA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa9); + break; case UC_GREEK_CAPITAL_LETTER_PSI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_8), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa8); + break; case UC_SUBSCRIPT_FOUR: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x84); + break; case UC_GREEK_CAPITAL_LETTER_NU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(D), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x9d); + break; case UC_DIVISION_SIGN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(F), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xf7); + break; case UC_GREEK_SMALL_LETTER_SIGMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc3); + break; case UC_GREEK_SMALL_LETTER_RHO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_1), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc1); + break; case UC_VULGAR_FRACTION_ONE_SIXTH: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x59); + break; case UC_GREEK_SMALL_LETTER_GAMMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb3); + break; case UC_VULGAR_FRACTION_TWO_THIRDS: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_5), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x54); + break; case UC_GREEK_SMALL_LETTER_NU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(D), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xbd); + break; case UC_GREEK_SMALL_LETTER_ZETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_6), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb6); + break; case UC_GREEK_SMALL_LETTER_EPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb5); + break; case UC_GREEK_SMALL_LETTER_KAPPA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(A), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xba); + break; case UC_SUPERSCRIPT_SEVEN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x77); + break; case UC_GREEK_CAPITAL_LETTER_PI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_0), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa0); + break; case UC_GREEK_SMALL_LETTER_FINAL_SIGMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_2), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc2); + break; case UC_GREEK_CAPITAL_LETTER_XI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(E), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x9e); + break; case UC_GREEK_SMALL_LETTER_THETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_8), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb8); + break; case UC_GREEK_SMALL_LETTER_ETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb7); + break; case UC_SUBSCRIPT_TWO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_2), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x82); + break; case UC_ASYMPTOTICALLY_EQUAL_TO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_4), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x43); + break; case UC_GREEK_SMALL_LETTER_ALPHA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_1), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb1); + break; case UC_GREEK_CAPITAL_LETTER_PHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_6), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa6); + break; case UC_GREEK_SMALL_LETTER_PHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_6), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc6); + break; case UC_INFINITY: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_1), T(E), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x1e); + break; case UC_GREEK_CAPITAL_LETTER_OMICRON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(F), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x9f); + break; case UC_ELEMENT_OF: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_8), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x08); + break; case UC_MULTIPLICATION_SIGN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(D), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xd7); + break; case UC_SUBSCRIPT_ZERO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_0), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x80); + break; case UC_GREEK_CAPITAL_LETTER_SIGMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa3); + break; case UC_GREEK_SMALL_LETTER_OMEGA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc9); + break; case UC_SUBSCRIPT_ONE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_1), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x81); + break; case UC_GREEK_CAPITAL_LETTER_ZETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_6), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x96); + break; case UC_GREEK_SMALL_LETTER_TAU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc4); + break; case UC_SUPERSCRIPT_FIVE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x75); + break; case UC_THERE_EXISTS: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x03); + break; case UC_PLUS_MINUS_SIGN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_1), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xb1); + break; case UC_VULGAR_FRACTION_THREE_QUARTERS: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(E), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xbe); + break; case UC_SUPERSCRIPT_THREE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xb3); + break; case UC_EMPTY_SET: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x05); + break; case UC_UPWARDS_ARROW: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_1), T(KP_9), T(KP_1), T(KP_ENTER), END - ); + unicode_action_function(0x21, 0x91); + break; case UC_SUPERSCRIPT_NINE: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x79); + break; case UC_GREEK_SMALL_LETTER_DELTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb4); + break; case UC_GREEK_SMALL_LETTER_MU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(C), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xbc); + break; case UC_GREEK_CAPITAL_LETTER_KAPPA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(A), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x9a); + break; case UC_SUBSCRIPT_EIGHT: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_8), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x88); + break; case UC_GREEK_CAPITAL_LETTER_ALPHA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_1), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x91); + break; case UC_SUBSCRIPT_SEVEN: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x87); + break; case UC_GREEK_CAPITAL_LETTER_BETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_2), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x92); + break; case UC_GREEK_CAPITAL_LETTER_ETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x97); + break; case UC_SUPERSCRIPT_EIGHT: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_8), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x78); + break; case UC_SUPERSCRIPT_ZERO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(KP_0), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x70); + break; case UC_NOT_AN_ELEMENT_OF: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x09); + break; case UC_GREEK_SMALL_LETTER_UPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc5); + break; case UC_NOT_EQUAL_TO: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_6), T(KP_0), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x60); + break; case UC_GREEK_CAPITAL_LETTER_CHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa7); + break; case UC_FOR_ALL: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_2), T(KP_0), T(KP_0), T(KP_ENTER), END - ); + unicode_action_function(0x22, 0x00); + break; case UC_GREEK_CAPITAL_LETTER_TAU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa4); + break; case UC_VULGAR_FRACTION_ONE_QUARTER: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(C), T(KP_ENTER), END - ); + unicode_action_function(0x00, 0xbc); + break; case UC_GREEK_SMALL_LETTER_CHI: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(C), T(KP_7), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xc7); + break; case UC_GREEK_CAPITAL_LETTER_THETA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_8), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x98); + break; case UC_GREEK_SMALL_LETTER_IOTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(B), T(KP_9), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xb9); + break; case UC_GREEK_CAPITAL_LETTER_LAMDA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(B), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x9b); + break; case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_7), T(F), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x7f); + break; case UC_GREEK_CAPITAL_LETTER_UPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(A), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0xa5); + break; case UC_GREEK_CAPITAL_LETTER_MU: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(C), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x9c); + break; case UC_GREEK_CAPITAL_LETTER_EPSILON: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_5), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x95); + break; case UC_GREEK_CAPITAL_LETTER_GAMMA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_3), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x93); + break; case UC_SUBSCRIPT_SIX: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_2), T(KP_0), T(KP_8), T(KP_6), T(KP_ENTER), END - ); + unicode_action_function(0x20, 0x86); + break; case UC_GREEK_CAPITAL_LETTER_DELTA: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_3), T(KP_9), T(KP_4), T(KP_ENTER), END - ); + unicode_action_function(0x03, 0x94); + break; case UC_VULGAR_FRACTION_ONE_HALF: - return MACRODOWN( - D(LCTRL), D(LSHIFT), T(U), U(LCTRL), U(LSHIFT), T(KP_0), T(KP_0), T(B), T(D), T(KP_ENTER), END - ); - default: - break; - } + unicode_action_function(0x00, 0xbd); + break; + default: + break; } return MACRO_NONE; }; diff --git a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md index 1dc019ab05..2c9e0a8376 100644 --- a/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md +++ b/keyboard/ergodox_ez/keymaps/german-manuneo/keymap.md @@ -2,14 +2,15 @@ Compile this file to a `keymap.c` file using `compile_keymap.py` - compile_keymap.py keymaps/german-manuneo/keymap.md + python compile_keymap.py keymaps/german-manuneo/keymap.md + +Tested with python 2.7 and python 3.4 # Layout Config { "layout": "ergodox_ez", - "includes_dir": "quantum/", "keymaps_includes": [ "ergodox_ez.h", "action_layer.h", @@ -17,8 +18,6 @@ Compile this file to a `keymap.c` file using `compile_keymap.py` "keymap_extras/keymap_german.h", ], "key_prefixes": ["DE_", "KC_"], - "filler": "-+.'!x", - "separator": "|", "macros": { // TODO: implement macros // "MUC": "", @@ -41,7 +40,7 @@ Compile this file to a `keymap.c` file using `compile_keymap.py` !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y | '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | |LGUI|LALT|LCTL| !LALT| |LEFT|DOWN|RGHT| + | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT| '------------------------' '------------------------' .-----------. .-----------. |INS |TG(2)| !M(UM)|DELT | @@ -187,46 +186,3 @@ http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html | | | | ! | | | '-----------------' '-----------------' - -## Layer 7 - - .------------------------------------.------------------------------------. - | | | | | | | | | | | | | | | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | | | | | | | | | | | | | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | |-----!-----! | | | | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | | | | | | | | | | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------' - - -## Layer 8 - - .------------------------------------.------------------------------------. - | | | | | | | | | | | | | | | - !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----! - | | | | | | | | | | | | | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | |-----!-----! | | | | | | - !-----+----+----+----x----x----! ! !----x----x----+----+----+-----! - | | | | | | | | | | | | | | | - '-----+----+----+----+----+----------'----------+----+----+----+----+-----' - | | | | | | ! | | | | | - '------------------------' '------------------------' - .-----------. .-----------. - | | | ! | | - .-----+-----+-----! !-----+-----+-----. - ! ! | | ! | ! ! - ! ! !-----! !-----! ! ! - | | | | ! | | | - '-----------------' '-----------------'