From 6ea4b06f9fc19825605477cdc27f5bec0f3dc0a9 Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 18 Dec 2020 01:06:30 +1100 Subject: [PATCH] Run cformat and dos2unix manually (#11235) --- drivers/chibios/ws2812_pwm.c | 12 +- drivers/chibios/ws2812_spi.c | 2 +- drivers/issi/is31fl3731-simple.c | 2 +- keyboards/mt64rgb/keymaps/default/readme.md | 6 +- keyboards/mt64rgb/readme.md | 32 +- keyboards/zinc/keymaps/default/readme_en.md | 2 +- quantum/debounce/sym_defer_pk.c | 10 +- quantum/matrix.c | 20 +- quantum/split_common/matrix.c | 20 +- quantum/split_common/split_util.c | 8 +- .../protocol/arm_atsam/usb/udi_device_conf.h | 4 +- .../protocol/arm_atsam/usb/udi_hid_kbd_desc.c | 4 +- tmk_core/protocol/chibios/usb_main.c | 222 +++--- tmk_core/protocol/usb_descriptor.h | 52 +- util/pro_micro_ISP_B6_10.hex | 724 +++++++++--------- 15 files changed, 550 insertions(+), 570 deletions(-) diff --git a/drivers/chibios/ws2812_pwm.c b/drivers/chibios/ws2812_pwm.c index 7595e2fa2..3af922c06 100644 --- a/drivers/chibios/ws2812_pwm.c +++ b/drivers/chibios/ws2812_pwm.c @@ -118,7 +118,7 @@ * * @return The bit index */ -# define WS2812_RED_BIT(led, bit) WS2812_BIT((led), 1, (bit)) +# define WS2812_RED_BIT(led, bit) WS2812_BIT((led), 1, (bit)) /** * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given green bit @@ -130,7 +130,7 @@ * * @return The bit index */ -# define WS2812_GREEN_BIT(led, bit) WS2812_BIT((led), 0, (bit)) +# define WS2812_GREEN_BIT(led, bit) WS2812_BIT((led), 0, (bit)) /** * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given blue bit @@ -142,7 +142,7 @@ * * @return The bit index */ -# define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 2, (bit)) +# define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 2, (bit)) #elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_RGB) /** @@ -155,7 +155,7 @@ * * @return The bit index */ -# define WS2812_RED_BIT(led, bit) WS2812_BIT((led), 0, (bit)) +# define WS2812_RED_BIT(led, bit) WS2812_BIT((led), 0, (bit)) /** * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given green bit @@ -167,7 +167,7 @@ * * @return The bit index */ -# define WS2812_GREEN_BIT(led, bit) WS2812_BIT((led), 1, (bit)) +# define WS2812_GREEN_BIT(led, bit) WS2812_BIT((led), 1, (bit)) /** * @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given blue bit @@ -179,7 +179,7 @@ * * @return The bit index */ -# define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 2, (bit)) +# define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 2, (bit)) #endif /* --- PRIVATE VARIABLES ---------------------------------------------------- */ diff --git a/drivers/chibios/ws2812_spi.c b/drivers/chibios/ws2812_spi.c index 1dec1f516..a93342436 100644 --- a/drivers/chibios/ws2812_spi.c +++ b/drivers/chibios/ws2812_spi.c @@ -69,7 +69,7 @@ static void set_led_color_rgb(LED_TYPE color, int pos) { #elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_RGB) for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + j] = get_protocol_eq(color.r, j); for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE + j] = get_protocol_eq(color.g, j); - for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j); + for (int j = 0; j < 4; j++) tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.b, j); #endif } diff --git a/drivers/issi/is31fl3731-simple.c b/drivers/issi/is31fl3731-simple.c index cffb4d87f..7c86841f1 100644 --- a/drivers/issi/is31fl3731-simple.c +++ b/drivers/issi/is31fl3731-simple.c @@ -75,7 +75,7 @@ uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}}; #elif LED_DRIVER_COUNT == 4 uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}, {0}}; #endif -bool g_led_control_registers_update_required[LED_DRIVER_COUNT] = {false}; +bool g_led_control_registers_update_required[LED_DRIVER_COUNT] = {false}; // This is the bit pattern in the LED control registers // (for matrix A, add one to register for matrix B) diff --git a/keyboards/mt64rgb/keymaps/default/readme.md b/keyboards/mt64rgb/keymaps/default/readme.md index f42a9a615..5508f7df1 100644 --- a/keyboards/mt64rgb/keymaps/default/readme.md +++ b/keyboards/mt64rgb/keymaps/default/readme.md @@ -1,3 +1,3 @@ -# Default mt4rgb Layout - -This is the default layout that comes flashed on every mt64rgb. All key pins are shown in the file. \ No newline at end of file +# Default mt4rgb Layout + +This is the default layout that comes flashed on every mt64rgb. All key pins are shown in the file. diff --git a/keyboards/mt64rgb/readme.md b/keyboards/mt64rgb/readme.md index c412835b8..dcc941236 100644 --- a/keyboards/mt64rgb/readme.md +++ b/keyboards/mt64rgb/readme.md @@ -1,16 +1,16 @@ -# mt64rgb - -![mt64rgb](https://i.imgur.com/kxGGUg9.jpg?1) - -A 60% keyboard PCB made by MT. -It supports an ANSI-based 64-key layout, with hotswap sockets and per-key RGB backlight. - -* Keyboard Maintainer: [MT](https://github.com/704340378) -* Hardware Supported: mt64rgb (atmega32u4) -* Hardware Availability: [麦田外设](https://shop110310565.taobao.com) - -Make example for this keyboard (after setting up your build environment): - - make mt64rgb:default - -See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). +# mt64rgb + +![mt64rgb](https://i.imgur.com/kxGGUg9.jpg?1) + +A 60% keyboard PCB made by MT. +It supports an ANSI-based 64-key layout, with hotswap sockets and per-key RGB backlight. + +* Keyboard Maintainer: [MT](https://github.com/704340378) +* Hardware Supported: mt64rgb (atmega32u4) +* Hardware Availability: [麦田外设](https://shop110310565.taobao.com) + +Make example for this keyboard (after setting up your build environment): + + make mt64rgb:default + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/zinc/keymaps/default/readme_en.md b/keyboards/zinc/keymaps/default/readme_en.md index 6447e96ed..3be6b2961 100644 --- a/keyboards/zinc/keymaps/default/readme_en.md +++ b/keyboards/zinc/keymaps/default/readme_en.md @@ -1,4 +1,4 @@ -# The Default Zinc Layout +# The Default Zinc Layout ## layout ### Qwerty diff --git a/quantum/debounce/sym_defer_pk.c b/quantum/debounce/sym_defer_pk.c index f404cf9c4..6c0e3bb07 100644 --- a/quantum/debounce/sym_defer_pk.c +++ b/quantum/debounce/sym_defer_pk.c @@ -38,12 +38,12 @@ static bool counters_need_update; #define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1) static uint8_t wrapping_timer_read(void) { - static uint16_t time = 0; + static uint16_t time = 0; static uint8_t last_result = 0; - uint16_t new_time = timer_read(); - uint16_t diff = new_time - time; - time = new_time; - last_result = (last_result + diff) % (MAX_DEBOUNCE + 1); + uint16_t new_time = timer_read(); + uint16_t diff = new_time - time; + time = new_time; + last_result = (last_result + diff) % (MAX_DEBOUNCE + 1); return last_result; } diff --git a/quantum/matrix.c b/quantum/matrix.c index cab0d2ddc..9083ff386 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -40,9 +40,7 @@ static inline void setPinOutput_writeLow(pin_t pin) { } static inline void setPinInputHigh_atomic(pin_t pin) { - ATOMIC_BLOCK_FORCEON { - setPinInputHigh(pin); - } + ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); } } // matrix code @@ -82,13 +80,9 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) #elif defined(DIODE_DIRECTION) # if (DIODE_DIRECTION == COL2ROW) -static void select_row(uint8_t row) { - setPinOutput_writeLow(row_pins[row]); -} +static void select_row(uint8_t row) { setPinOutput_writeLow(row_pins[row]); } -static void unselect_row(uint8_t row) { - setPinInputHigh_atomic(row_pins[row]); -} +static void unselect_row(uint8_t row) { setPinInputHigh_atomic(row_pins[row]); } static void unselect_rows(void) { for (uint8_t x = 0; x < MATRIX_ROWS; x++) { @@ -133,13 +127,9 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) # elif (DIODE_DIRECTION == ROW2COL) -static void select_col(uint8_t col) { - setPinOutput_writeLow(col_pins[col]); -} +static void select_col(uint8_t col) { setPinOutput_writeLow(col_pins[col]); } -static void unselect_col(uint8_t col) { - setPinInputHigh_atomic(col_pins[col]); -} +static void unselect_col(uint8_t col) { setPinInputHigh_atomic(col_pins[col]); } static void unselect_cols(void) { for (uint8_t x = 0; x < MATRIX_COLS; x++) { diff --git a/quantum/split_common/matrix.c b/quantum/split_common/matrix.c index cd5a024c3..51bf8b109 100644 --- a/quantum/split_common/matrix.c +++ b/quantum/split_common/matrix.c @@ -53,9 +53,7 @@ static inline void setPinOutput_writeLow(pin_t pin) { } static inline void setPinInputHigh_atomic(pin_t pin) { - ATOMIC_BLOCK_FORCEON { - setPinInputHigh(pin); - } + ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); } } // matrix code @@ -95,13 +93,9 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) #elif defined(DIODE_DIRECTION) # if (DIODE_DIRECTION == COL2ROW) -static void select_row(uint8_t row) { - setPinOutput_writeLow(row_pins[row]); -} +static void select_row(uint8_t row) { setPinOutput_writeLow(row_pins[row]); } -static void unselect_row(uint8_t row) { - setPinInputHigh_atomic(row_pins[row]); -} +static void unselect_row(uint8_t row) { setPinInputHigh_atomic(row_pins[row]); } static void unselect_rows(void) { for (uint8_t x = 0; x < ROWS_PER_HAND; x++) { @@ -146,13 +140,9 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) # elif (DIODE_DIRECTION == ROW2COL) -static void select_col(uint8_t col) { - setPinOutput_writeLow(col_pins[col]); -} +static void select_col(uint8_t col) { setPinOutput_writeLow(col_pins[col]); } -static void unselect_col(uint8_t col) { - setPinInputHigh_atomic(col_pins[col]); -} +static void unselect_col(uint8_t col) { setPinInputHigh_atomic(col_pins[col]); } static void unselect_cols(void) { for (uint8_t x = 0; x < MATRIX_COLS; x++) { diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index 97d49961d..2ae44e6e1 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -95,7 +95,7 @@ static uint8_t peek_matrix_intersection(pin_t out_pin, pin_t in_pin) { uint8_t pin_state = readPin(in_pin); // Set out_pin to a setting that is less susceptible to noise. setPinInputHigh(out_pin); - matrix_io_delay(); // Wait for the pull-up to go HIGH. + matrix_io_delay(); // Wait for the pull-up to go HIGH. return pin_state; } #endif @@ -106,11 +106,11 @@ __attribute__((weak)) bool is_keyboard_left(void) { setPinInput(SPLIT_HAND_PIN); return readPin(SPLIT_HAND_PIN); #elif defined(SPLIT_HAND_MATRIX_GRID) -# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT +# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT return peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID); -# else +# else return !peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID); -# endif +# endif #elif defined(EE_HANDS) return eeconfig_read_handedness(); #elif defined(MASTER_RIGHT) diff --git a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h index 505db47b0..9c9d94789 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h @@ -291,7 +291,7 @@ typedef struct { extern uint8_t udi_hid_kbd_report_set; // report buffer (to host) -# define UDI_HID_KBD_REPORT_SIZE 8 +#define UDI_HID_KBD_REPORT_SIZE 8 extern uint8_t udi_hid_kbd_report[UDI_HID_KBD_REPORT_SIZE]; COMPILER_PACK_RESET() @@ -784,7 +784,7 @@ COMPILER_PACK_RESET() COMPILER_PACK_SET(1) typedef struct { - usb_conf_desc_t conf; + usb_conf_desc_t conf; udi_hid_kbd_desc_t hid_kbd; #ifdef MOUSE_ENABLE udi_hid_mou_desc_t hid_mou; diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c index a3fb46a3d..814389b6e 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd_desc.c @@ -83,7 +83,7 @@ UDC_DESC_STORAGE usb_dev_desc_t udc_device_desc = {.bLength = sizeof(usb #ifdef USB_DEVICE_PRODUCT_NAME .iProduct = 2, #else - .iProduct = 0, // No product string + .iProduct = 0, // No product string #endif #if (defined USB_DEVICE_SERIAL_NAME || defined USB_DEVICE_GET_SERIAL_NAME_POINTER) .iSerialNumber = 3, @@ -120,7 +120,7 @@ UDC_DESC_STORAGE udc_desc_t udc_desc = { .conf.iConfiguration = 0, .conf.bmAttributes = /* USB_CONFIG_ATTR_MUST_SET | */ USB_DEVICE_ATTR, .conf.bMaxPower = USB_CONFIG_MAX_POWER(USB_DEVICE_POWER), - .hid_kbd = UDI_HID_KBD_DESC, + .hid_kbd = UDI_HID_KBD_DESC, #ifdef RAW_ENABLE .hid_raw = UDI_HID_RAW_DESC, #endif diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index 096e6e676..9745d147c 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -194,107 +194,107 @@ typedef struct { #if STM32_USB_USE_OTG1 /* Reusable initialization structure - see USBEndpointConfig comment at top of file */ -#define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \ - { \ - .queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \ - .inout_ep_config = \ - { \ - stream##_IN_MODE, /* Interrupt EP */ \ - NULL, /* SETUP packet notification callback */ \ - qmkusbDataTransmitted, /* IN notification callback */ \ - qmkusbDataReceived, /* OUT notification callback */ \ - stream##_EPSIZE, /* IN maximum packet size */ \ - stream##_EPSIZE, /* OUT maximum packet size */ \ - NULL, /* IN Endpoint state */ \ - NULL, /* OUT endpoint state */ \ - 2, /* IN multiplier */ \ - NULL /* SETUP buffer (not a SETUP endpoint) */ \ - }, \ - .int_ep_config = \ - { \ - USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ \ - NULL, /* SETUP packet notification callback */ \ - qmkusbInterruptTransmitted, /* IN notification callback */ \ - NULL, /* OUT notification callback */ \ - CDC_NOTIFICATION_EPSIZE, /* IN maximum packet size */ \ - 0, /* OUT maximum packet size */ \ - NULL, /* IN Endpoint state */ \ - NULL, /* OUT endpoint state */ \ - 2, /* IN multiplier */ \ - NULL, /* SETUP buffer (not a SETUP endpoint) */ \ - }, \ - .config = { \ - .usbp = &USB_DRIVER, \ - .bulk_in = stream##_IN_EPNUM, \ - .bulk_out = stream##_OUT_EPNUM, \ - .int_in = notification, \ - .in_buffers = stream##_IN_CAPACITY, \ - .out_buffers = stream##_OUT_CAPACITY, \ - .in_size = stream##_EPSIZE, \ - .out_size = stream##_EPSIZE, \ - .fixed_size = fixedsize, \ - .ib = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \ - .ob = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \ - } \ - } +# define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \ + { \ + .queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \ + .inout_ep_config = \ + { \ + stream##_IN_MODE, /* Interrupt EP */ \ + NULL, /* SETUP packet notification callback */ \ + qmkusbDataTransmitted, /* IN notification callback */ \ + qmkusbDataReceived, /* OUT notification callback */ \ + stream##_EPSIZE, /* IN maximum packet size */ \ + stream##_EPSIZE, /* OUT maximum packet size */ \ + NULL, /* IN Endpoint state */ \ + NULL, /* OUT endpoint state */ \ + 2, /* IN multiplier */ \ + NULL /* SETUP buffer (not a SETUP endpoint) */ \ + }, \ + .int_ep_config = \ + { \ + USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ \ + NULL, /* SETUP packet notification callback */ \ + qmkusbInterruptTransmitted, /* IN notification callback */ \ + NULL, /* OUT notification callback */ \ + CDC_NOTIFICATION_EPSIZE, /* IN maximum packet size */ \ + 0, /* OUT maximum packet size */ \ + NULL, /* IN Endpoint state */ \ + NULL, /* OUT endpoint state */ \ + 2, /* IN multiplier */ \ + NULL, /* SETUP buffer (not a SETUP endpoint) */ \ + }, \ + .config = { \ + .usbp = &USB_DRIVER, \ + .bulk_in = stream##_IN_EPNUM, \ + .bulk_out = stream##_OUT_EPNUM, \ + .int_in = notification, \ + .in_buffers = stream##_IN_CAPACITY, \ + .out_buffers = stream##_OUT_CAPACITY, \ + .in_size = stream##_EPSIZE, \ + .out_size = stream##_EPSIZE, \ + .fixed_size = fixedsize, \ + .ib = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \ + .ob = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \ + } \ + } #else /* Reusable initialization structure - see USBEndpointConfig comment at top of file */ -#define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \ - { \ - .queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \ - .in_ep_config = \ - { \ - stream##_IN_MODE, /* Interrupt EP */ \ - NULL, /* SETUP packet notification callback */ \ - qmkusbDataTransmitted, /* IN notification callback */ \ - NULL, /* OUT notification callback */ \ - stream##_EPSIZE, /* IN maximum packet size */ \ - 0, /* OUT maximum packet size */ \ - NULL, /* IN Endpoint state */ \ - NULL, /* OUT endpoint state */ \ - 2, /* IN multiplier */ \ - NULL /* SETUP buffer (not a SETUP endpoint) */ \ - }, \ - .out_ep_config = \ - { \ - stream##_OUT_MODE, /* Interrupt EP */ \ - NULL, /* SETUP packet notification callback */ \ - NULL, /* IN notification callback */ \ - qmkusbDataReceived, /* OUT notification callback */ \ - 0, /* IN maximum packet size */ \ - stream##_EPSIZE, /* OUT maximum packet size */ \ - NULL, /* IN Endpoint state */ \ - NULL, /* OUT endpoint state */ \ - 2, /* IN multiplier */ \ - NULL, /* SETUP buffer (not a SETUP endpoint) */ \ - }, \ - .int_ep_config = \ - { \ - USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ \ - NULL, /* SETUP packet notification callback */ \ - qmkusbInterruptTransmitted, /* IN notification callback */ \ - NULL, /* OUT notification callback */ \ - CDC_NOTIFICATION_EPSIZE, /* IN maximum packet size */ \ - 0, /* OUT maximum packet size */ \ - NULL, /* IN Endpoint state */ \ - NULL, /* OUT endpoint state */ \ - 2, /* IN multiplier */ \ - NULL, /* SETUP buffer (not a SETUP endpoint) */ \ - }, \ - .config = { \ - .usbp = &USB_DRIVER, \ - .bulk_in = stream##_IN_EPNUM, \ - .bulk_out = stream##_OUT_EPNUM, \ - .int_in = notification, \ - .in_buffers = stream##_IN_CAPACITY, \ - .out_buffers = stream##_OUT_CAPACITY, \ - .in_size = stream##_EPSIZE, \ - .out_size = stream##_EPSIZE, \ - .fixed_size = fixedsize, \ - .ib = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \ - .ob = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \ - } \ - } +# define QMK_USB_DRIVER_CONFIG(stream, notification, fixedsize) \ + { \ + .queue_capacity_in = stream##_IN_CAPACITY, .queue_capacity_out = stream##_OUT_CAPACITY, \ + .in_ep_config = \ + { \ + stream##_IN_MODE, /* Interrupt EP */ \ + NULL, /* SETUP packet notification callback */ \ + qmkusbDataTransmitted, /* IN notification callback */ \ + NULL, /* OUT notification callback */ \ + stream##_EPSIZE, /* IN maximum packet size */ \ + 0, /* OUT maximum packet size */ \ + NULL, /* IN Endpoint state */ \ + NULL, /* OUT endpoint state */ \ + 2, /* IN multiplier */ \ + NULL /* SETUP buffer (not a SETUP endpoint) */ \ + }, \ + .out_ep_config = \ + { \ + stream##_OUT_MODE, /* Interrupt EP */ \ + NULL, /* SETUP packet notification callback */ \ + NULL, /* IN notification callback */ \ + qmkusbDataReceived, /* OUT notification callback */ \ + 0, /* IN maximum packet size */ \ + stream##_EPSIZE, /* OUT maximum packet size */ \ + NULL, /* IN Endpoint state */ \ + NULL, /* OUT endpoint state */ \ + 2, /* IN multiplier */ \ + NULL, /* SETUP buffer (not a SETUP endpoint) */ \ + }, \ + .int_ep_config = \ + { \ + USB_EP_MODE_TYPE_INTR, /* Interrupt EP */ \ + NULL, /* SETUP packet notification callback */ \ + qmkusbInterruptTransmitted, /* IN notification callback */ \ + NULL, /* OUT notification callback */ \ + CDC_NOTIFICATION_EPSIZE, /* IN maximum packet size */ \ + 0, /* OUT maximum packet size */ \ + NULL, /* IN Endpoint state */ \ + NULL, /* OUT endpoint state */ \ + 2, /* IN multiplier */ \ + NULL, /* SETUP buffer (not a SETUP endpoint) */ \ + }, \ + .config = { \ + .usbp = &USB_DRIVER, \ + .bulk_in = stream##_IN_EPNUM, \ + .bulk_out = stream##_OUT_EPNUM, \ + .int_in = notification, \ + .in_buffers = stream##_IN_CAPACITY, \ + .out_buffers = stream##_OUT_CAPACITY, \ + .in_size = stream##_EPSIZE, \ + .out_size = stream##_EPSIZE, \ + .fixed_size = fixedsize, \ + .ib = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_IN_CAPACITY, stream##_EPSIZE)]){}, \ + .ob = (__attribute__((aligned(4))) uint8_t[BQ_BUFFER_SIZE(stream##_OUT_CAPACITY, stream##_EPSIZE)]){}, \ + } \ + } #endif typedef struct { @@ -388,12 +388,12 @@ static void usb_event_cb(USBDriver *usbp, usbevent_t event) { usbInitEndpointI(usbp, SHARED_IN_EPNUM, &shared_ep_config); #endif for (int i = 0; i < NUM_USB_DRIVERS; i++) { - #if STM32_USB_USE_OTG1 +#if STM32_USB_USE_OTG1 usbInitEndpointI(usbp, drivers.array[i].config.bulk_in, &drivers.array[i].inout_ep_config); - #else +#else usbInitEndpointI(usbp, drivers.array[i].config.bulk_in, &drivers.array[i].in_ep_config); usbInitEndpointI(usbp, drivers.array[i].config.bulk_out, &drivers.array[i].out_ep_config); - #endif +#endif if (drivers.array[i].config.int_in) { usbInitEndpointI(usbp, drivers.array[i].config.int_in, &drivers.array[i].int_ep_config); } @@ -544,7 +544,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { #ifdef NKRO_ENABLE keymap_config.nkro = !!keyboard_protocol; if (!keymap_config.nkro && keyboard_idle) { -#else /* NKRO_ENABLE */ +#else /* NKRO_ENABLE */ if (keyboard_idle) { #endif /* NKRO_ENABLE */ /* arm the idle timer if boot protocol & idle */ @@ -562,7 +562,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) { /* arm the timer */ #ifdef NKRO_ENABLE if (!keymap_config.nkro && keyboard_idle) { -#else /* NKRO_ENABLE */ +#else /* NKRO_ENABLE */ if (keyboard_idle) { #endif /* NKRO_ENABLE */ osalSysLockFromISR(); @@ -618,21 +618,21 @@ static const USBConfig usbcfg = { */ void init_usb_driver(USBDriver *usbp) { for (int i = 0; i < NUM_USB_DRIVERS; i++) { - #if STM32_USB_USE_OTG1 +#if STM32_USB_USE_OTG1 QMKUSBDriver *driver = &drivers.array[i].driver; drivers.array[i].inout_ep_config.in_state = &drivers.array[i].in_ep_state; drivers.array[i].inout_ep_config.out_state = &drivers.array[i].out_ep_state; drivers.array[i].int_ep_config.in_state = &drivers.array[i].int_ep_state; qmkusbObjectInit(driver, &drivers.array[i].config); qmkusbStart(driver, &drivers.array[i].config); - #else +#else QMKUSBDriver *driver = &drivers.array[i].driver; drivers.array[i].in_ep_config.in_state = &drivers.array[i].in_ep_state; drivers.array[i].out_ep_config.out_state = &drivers.array[i].out_ep_state; drivers.array[i].int_ep_config.in_state = &drivers.array[i].int_ep_state; qmkusbObjectInit(driver, &drivers.array[i].config); qmkusbStart(driver, &drivers.array[i].config); - #endif +#endif } /* @@ -689,7 +689,7 @@ static void keyboard_idle_timer_cb(void *arg) { #ifdef NKRO_ENABLE if (!keymap_config.nkro && keyboard_idle && keyboard_protocol) { -#else /* NKRO_ENABLE */ +#else /* NKRO_ENABLE */ if (keyboard_idle && keyboard_protocol) { #endif /* NKRO_ENABLE */ /* TODO: are we sure we want the KBD_ENDPOINT? */ @@ -738,7 +738,7 @@ void send_keyboard(report_keyboard_t *report) { usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)report, sizeof(struct nkro_report)); } else #endif /* NKRO_ENABLE */ - { /* regular protocol */ + { /* regular protocol */ /* need to wait until the previous packet has made it through */ /* busy wait, should be short and not very common */ if (usbGetTransmitStatusI(&USB_DRIVER, KEYBOARD_IN_EPNUM)) { @@ -805,7 +805,7 @@ void send_mouse(report_mouse_t *report) { osalSysUnlock(); } -#else /* MOUSE_ENABLE */ +#else /* MOUSE_ENABLE */ void send_mouse(report_mouse_t *report) { (void)report; } #endif /* MOUSE_ENABLE */ @@ -885,7 +885,7 @@ void console_task(void) { } while (size > 0); } -#else /* CONSOLE_ENABLE */ +#else /* CONSOLE_ENABLE */ int8_t sendchar(uint8_t c) { (void)c; return 0; diff --git a/tmk_core/protocol/usb_descriptor.h b/tmk_core/protocol/usb_descriptor.h index 1b43cbf3b..3a7c0bdba 100644 --- a/tmk_core/protocol/usb_descriptor.h +++ b/tmk_core/protocol/usb_descriptor.h @@ -204,12 +204,12 @@ enum usb_endpoints { #endif #ifdef RAW_ENABLE - RAW_IN_EPNUM = NEXT_EPNUM, - #if STM32_USB_USE_OTG1 - #define RAW_OUT_EPNUM RAW_IN_EPNUM - #else + RAW_IN_EPNUM = NEXT_EPNUM, +# if STM32_USB_USE_OTG1 +# define RAW_OUT_EPNUM RAW_IN_EPNUM +# else RAW_OUT_EPNUM = NEXT_EPNUM, - #endif +# endif #endif #ifdef SHARED_EP_ENABLE @@ -220,44 +220,44 @@ enum usb_endpoints { CONSOLE_IN_EPNUM = NEXT_EPNUM, # ifdef PROTOCOL_CHIBIOS - // ChibiOS has enough memory and descriptor to actually enable the endpoint - // It could use the same endpoint numbers, as that's supported by ChibiOS - // But the QMK code currently assumes that the endpoint numbers are different - #if STM32_USB_USE_OTG1 - #define CONSOLE_OUT_EPNUM CONSOLE_IN_EPNUM - #else +// ChibiOS has enough memory and descriptor to actually enable the endpoint +// It could use the same endpoint numbers, as that's supported by ChibiOS +// But the QMK code currently assumes that the endpoint numbers are different +# if STM32_USB_USE_OTG1 +# define CONSOLE_OUT_EPNUM CONSOLE_IN_EPNUM +# else CONSOLE_OUT_EPNUM = NEXT_EPNUM, - #endif +# endif # else # define CONSOLE_OUT_EPNUM CONSOLE_IN_EPNUM # endif #endif #ifdef MIDI_ENABLE - MIDI_STREAM_IN_EPNUM = NEXT_EPNUM, - #if STM32_USB_USE_OTG1 - #define MIDI_STREAM_OUT_EPNUM MIDI_STREAM_IN_EPNUM - #else + MIDI_STREAM_IN_EPNUM = NEXT_EPNUM, +# if STM32_USB_USE_OTG1 +# define MIDI_STREAM_OUT_EPNUM MIDI_STREAM_IN_EPNUM +# else MIDI_STREAM_OUT_EPNUM = NEXT_EPNUM, - #endif +# endif #endif #ifdef VIRTSER_ENABLE CDC_NOTIFICATION_EPNUM = NEXT_EPNUM, CDC_IN_EPNUM = NEXT_EPNUM, - #if STM32_USB_USE_OTG1 - #define CDC_OUT_EPNUM CDC_IN_EPNUM - #else - CDC_OUT_EPNUM = NEXT_EPNUM, - #endif +# if STM32_USB_USE_OTG1 +# define CDC_OUT_EPNUM CDC_IN_EPNUM +# else + CDC_OUT_EPNUM = NEXT_EPNUM, +# endif #endif #ifdef JOYSTICK_ENABLE - JOYSTICK_IN_EPNUM = NEXT_EPNUM, - #if STM32_USB_USE_OTG1 + JOYSTICK_IN_EPNUM = NEXT_EPNUM, +# if STM32_USB_USE_OTG1 JOYSTICK_OUT_EPNUM = JOYSTICK_IN_EPNUM, - #else +# else JOYSTICK_OUT_EPNUM = NEXT_EPNUM, - #endif +# endif #endif }; diff --git a/util/pro_micro_ISP_B6_10.hex b/util/pro_micro_ISP_B6_10.hex index cf61bebb9..34ccbd2ae 100644 --- a/util/pro_micro_ISP_B6_10.hex +++ b/util/pro_micro_ISP_B6_10.hex @@ -1,362 +1,362 @@ -:10000000BDC00000E3C00000E1C00000DFC0000090 -:10001000DDC00000DBC00000D9C00000D7C0000078 -:10002000D5C00000D3C000003AC70000B1C700002F -:10003000CDC00000CBC00000C9C00000C7C0000098 -:10004000C5C00000C3C00000C1C00000BFC00000A8 -:10005000BDC00000BBC00000B9C000007FC60000EA -:10006000B5C00000B3C00000B1C00000AFC00000C8 -:10007000ADC00000ABC00000A9C00000A7C00000D8 -:10008000A5C00000A3C00000A1C000009FC00000E8 -:100090009DC000009BC0000099C0000097C00000F8 -:1000A00095C0000093C0000091C000000001000056 -:1000B0005D0112000200001A014300030000160156 -:1000C0000401030904FC001802030904E4001603F8 -:1000D000030904D6000C0C03310032003300340055 -:1000E0003500000016035500530042002000530065 -:1000F00065007200690061006C0000001803540084 -:10010000650065006E007300790064007500690089 -:100110006E006F000000040309040902430002019D -:1001200000C0320904000001020201000524001091 -:10013000010524010001042402060524060001072C -:1001400005820308004009040100020A00000007BC -:100150000503024000000705840240000012010070 -:100160000202000020C01683040001010203010006 -:1001700001C10201803601813600110B11241FBE1E -:10018000CFEFDAE0DEBFCDBF11E0A0E0B1E0EAE5FD -:10019000F6E102C005900D92A232B107D9F722E034 -:1001A000A2E2B1E001C01D92A935B207E1F710E06B -:1001B000CEEBD0E004C02197FE010E94250BCD3B81 -:1001C000D107C9F70E942D090C942B0B19CFDC0124 -:1001D000ED91FC910190F081E02D09948EBD00001D -:1001E0000DB407FEFDCF8EB508950F931F930FB684 -:1001F000F8948091440290914502A0914602B091FA -:1002000047020FBE409122015091230160912401C9 -:10021000709125018C019D01041B150B260B370BDA -:100220000832110521053105F0F0809322019093E9 -:100230002301A0932401B09325012091010180EEB8 -:10024000820F813A28F090910001919590930001DE -:1002500080910001820F80930101529A803810F43E -:100260005A9801C05A9A1F910F91089590912601B2 -:10027000882319F0911103C004C0911102C02E9A75 -:1002800001C02E98809180008F7D8093800008951A -:100290000F931F93CF93DF938B01EC01DD27FE01BA -:1002A0009ED46EE170E080E090E098D5FE019DD490 -:1002B0006EE170E080E090E091D50150110978F78F -:1002C000DF91CF911F910F91089540E05BE460E0D2 -:1002D00070E08FE492E00E94AA0A509A62E070E017 -:1002E00085E090E0D5DF519A62E070E086E090E032 -:1002F000CFDF529A62E070E087E090E0C9CF8823B8 -:1003000011F0589A01C0589884B58F7D84BD089526 -:10031000CF93DF9300D01F92CDB7DEB72B834A83F4 -:1003200069835CDF6981862F59DF4A81842F56DF1C -:100330002B81822F0F900F900F90DF91CF914ECF96 -:1003400020913A012093270180913B01809328015D -:1003500080913C018093290180913D0180932A0185 -:1003600080913E0180932B0180913F0180932C016D -:100370008091400180932D018091410180932E0155 -:100380008091420180932F018091440190E0982F49 -:10039000882730914501830F911D909331018093FF -:1003A00030018091460190E0982F882730914701D5 -:1003B000830F911D90933301809332018091480106 -:1003C00090E0982F882730914901830F911D9093D9 -:1003D00035018093340180914A0190E0A0E0B0E0C3 -:1003E000BA2FA92F982F882730914B01830F911D89 -:1003F000A11DB11DDC019927882740914C0150E0D7 -:10040000542F4427052E000C660B770B840F951F85 -:10041000A61FB71F30914D01830F911DA11DB11D66 -:100420008093360190933701A0933801B09339013E -:1004300081E0203E08F480E080932601089581E069 -:1004400015DF269A6DD380914202882381F0813096 -:1004500051F48DB3809340029DB380914102809509 -:1004600089238DBB04C08FB7F8948093400283E545 -:100470008CBD1DBC299864E170E080E090E0AED4B2 -:1004800080E0F4DE80E991E00197F1F781E0EEDEB3 -:1004900062E370E080E090E0A1D420E040E063E51A -:1004A0008CEA36DF81E090E090933D0280933C023D -:1004B000089541D322982A982198299880E0D6DE81 -:1004C00026982E98EDE7F0E080818F7D8083109252 -:1004D0003D0210923C020895242F880F880F880F48 -:1004E000462F672F805C14CFCF93DF9300D0CDB71A -:1004F000DEB7482F692F80E090E049836A83FFDEF2 -:1005000020E049816A818CE403DF6EE170E080E0E5 -:1005100090E064D481E090E00F900F90DF91CF9154 -:10052000EECE209132013091330180913A029091C8 -:100530003B022032310511F4807F089520343105CB -:1005400011F4807E08952038310511F4807C0895DF -:100550002115314009F480780895CF92DF92EF920F -:10056000FF920F931F93CF93DF936C01DADF8C011F -:10057000C0E0D0E0CC15DD0554F5D3DF7C010817D1 -:10058000190721F0C801B0DFCCDF7C01FE01E65C79 -:10059000FE4F60913A0270913B02408180E09CDF07 -:1005A0002296FE01E75CFE4F60913A0270913B0299 -:1005B000408181E091DF20913A0230913B022F5F30 -:1005C0003F4F30933B0220933A028701D3CFC801BB -:1005D0008BDF80E1DF91CF911F910F91FF90EF9022 -:1005E000DF90CF900895462F880F880F880F20E066 -:1005F000672F805E8DCE0F931F93CF93DF938C0177 -:10060000C0E0D0E0C017D10704F560913A027091C4 -:100610003B0280E0E8DF682F8FE492E0D8DD609154 -:100620003A0270913B0281E0DEDF682F8FE492E0B6 -:10063000CEDD20913A0230913B022F5F3F4F309345 -:100640003B0220933A022296DDCF80E1DF91CF91E9 -:100650001F910F910895EF92FF920F931F93CF93E5 -:10066000DF937C0100913A0210913B02000F111FB1 -:10067000E801CE01801B910B8E159F055CF42FEFD6 -:100680004C2F6D2F80EA44DE682F8FE492E09FDDCF -:100690002196EFCF80E1DF91CF911F910F91FF90D5 -:1006A000EF9008958FE492E0F2D5892BD9F38FE48F -:1006B00092E026C608950F931F93CF93DF938C018A -:1006C000CAE3D1E0CE018A539140801791071CF410 -:1006D000E9DF8993F7CFDF91CF911F910F910895B3 -:1006E000EF92FF920F931F93CF93DF93EC018B0157 -:1006F000CB01E1DF80E090E002DE8AE3E82E81E0DA -:10070000F82E0C0F1D1FC017D10771F0F7012191B2 -:100710007F014C2F6D2F80ECFBDD6DE270E080E0FF -:1007200090E05CD32196EFCF81E090E0E8DD80E1BE -:10073000DF91CF911F910F91FF90EF9008950F934C -:100740001F93CF93DF938C01C0913A02D0913B026B -:1007500080913401909135018017910718F0CC0FEA -:10076000DD1F0BC080913E0290913F020196909355 -:100770003F0280933E0281E10FC00132110540F03B -:1007800060E270E0CE01ACDFA09600521109F5CF17 -:10079000B801CE01A5DF80E1DF91CF911F910F91CC -:1007A000089580DF803231F464E18FE492E00FDD60 -:1007B00060E10AC080913E0290913F0201969093C1 -:1007C0003F0280933E0265E18FE492E000CDCF933B -:1007D000C82F68DF803251F464E18FE492E0F7DCE7 -:1007E0006C2F8FE492E0F3DC60E10AC080913E025E -:1007F00090913F02019690933F0280933E0265E103 -:100800008FE492E0CF91E3CC813859F020F4803826 -:1008100061F482E00BC0823831F0833931F483E532 -:1008200005C081E003C082E101C080E0D0CF84E058 -:1008300090E041DFEAE3F1E0238142816181808140 -:1008400067DDC5CFCF93DF93EC0135DF2BDF80323F -:1008500041F464E18FE492E0BADCCE017EDE682FE1 -:100860000AC080913E0290913F02019690933F0210 -:1008700080933E0265E18FE492E0DF91CF91A7CCB7 -:10088000CF93DF930FDFC82FD0E0DC2FCC270ADF18 -:10089000C80FD11D07DF863421F4CE01DF91CF913F -:1008A000D1CF8534B9F4CE014ADFC82FFBDE8032C8 -:1008B00031F464E18FE492E08ADC6C2F0CC080910B -:1008C0003E0290913F02019690933F0280933E0238 -:1008D00065E101C061E18FE492E0DF91CF9177CCD7 -:1008E0000F931F93CF93DF93DDDEC82FDBDE082F3E -:1008F000D9DE182FD7DE803259F080913E029091D8 -:100900003F02019690933F0280933E0265E115C03D -:10091000D0E0DC2FCC27C00FD11D64E18FE492E042 -:1009200056DC163419F4CE0166DE06C0153419F40F -:10093000CE0191DE01C081E1682F8FE492E0DF916A -:10094000CF911F910F9143CCADDE803259F0809151 -:100950003E0290913F02019690933F0280933E02A7 -:1009600065E120C064E18FE492E031DC20E040E00A -:1009700060E080E3CDDC682F8FE492E028DC20E0AB -:1009800041E060E080E3C4DC682F8FE492E01FDC8C -:1009900020E042E060E080E3BBDC682F8FE492E07F -:1009A00016DC60E18FE492E012CC7CDE813509F444 -:1009B00077C0E0F4813409F460C050F4803309F466 -:1009C00040C0813309F442C0803209F07AC06FC060 -:1009D000853409F454C0803509F455C0823409F0D7 -:1009E00070C084E190E067DEABDC4CC0813609F476 -:1009F00053C0F0F4863509F452C0803609F44BC078 -:100A0000853509F05EC04EDE90E090933B02809306 -:100A10003A0248DE90E0982F882720913A023091E0 -:100A20003B02820F931F90933B0280933A022AC0AD -:100A30008437A1F1853709F439C0843609F041C003 -:100A40001FCF10923F0210923E021CC02BDE80325C -:100A500071F564E18FE492E0BADBE0914F02F0912E -:100A600050020280F381E02D47E050E069E071E040 -:100A70008FE492E0099560E133C014DEC5CE85E0D5 -:100A800090E019DE8ECE80913C0290913D02892B40 -:100A9000C9F7D5DCF7CF06DE05DEF4CF21CFC7CE10 -:100AA00010923F0210923E0204DDECCF4DCF8091B8 -:100AB0003E0290913F02019690933F0280933E0246 -:100AC0000EC080913E0290913F02019690933F02AA -:100AD00080933E02E7DD803211F462E101C065E1FE -:100AE0008FE492E074CB80913C0290913D02892B7F -:100AF00011F0589A01C0589884B58F7D84BD8091BB -:100B00003E0290913F02892B11F0599A01C05998E9 -:100B10006CDB8FE492E0BBD3892B09F046CF0895BC -:100B2000289A209A8CB580618CBD8CB580648CBD70 -:100B3000219A229A08958CB58F7B8CBD08951DBA99 -:100B4000109268001CBC10BE1FBA10927A0010925E -:100B50006E0010926F00109271001092720010924D -:100B6000C900ECEBF0E0108214B817B81AB81DB841 -:100B700010BA108215B818B81BB81EB811BA08956B -:100B8000F894E1E6F0E020E82083108283E084BD61 -:100B900085BDEEE6F0E080818160808381E0809316 -:100BA000800092E090938100809390009093910058 -:100BB0009093C00094E09093C1008093C200809312 -:100BC000C3001092C40086E880937A0020937B00D3 -:100BD00010927E0010927D0040D178940895E93102 -:100BE00050F4EE0FE450FA4F0994E93120F4EE0F7F -:100BF000E25DF94F09940895289A0895299A089575 -:100C00002A9A08952B9A08952F9A6AC0589A58C024 -:100C1000599A08955A9A08955B9A0895469A66C01B -:100C2000479A6AC05E9A08955F9A6CC02C9A08959C -:100C30002D9A4AC02E9A4EC08F9A08958E9A089582 -:100C40008D9A08958C9A0895899A0895889A08959E -:100C50005C9A08955D9A0895769A08952898089563 -:100C6000299808952A9808952B9808952F9838C0A8 -:100C7000589826C0599808955A9808955B980895F1 -:100C8000469834C0479838C05E9808955F983AC037 -:100C90002C9808952D9818C02E981CC08F980895F0 -:100CA0008E9808958D9808958C9808958998089540 -:100CB000889808955C9808955D98089576980895A9 -:100CC000E4B5EF7DE4BD0895E0918000EF77E09317 -:100CD00080000895E0918000EF7DE093800008950A -:100CE000E0918000E77FE09380000895E09190001C -:100CF000EF77E09390000895E091C000EF77E093E4 -:100D0000C0000895E091C200E77FE093C20008951B -:100D1000F89484B7877F84BF80916000806180935E -:100D200060001092600080E29EE40197F1F781E09C -:100D30008093E00080E28093D80080E69AEE0197ED -:100D4000F1F7FDDE0C94003FFFCFF894F8DE80E66B -:100D50009AEE0197F1F70C940000FFCF8F938FB7B5 -:100D60008F93809143028D5F8D37D0F4809343023F -:100D7000809144028F5F80934402D8F080914502B5 -:100D80008F4F80934502A8F0809146028F4F809349 -:100D9000460278F0809147028F4F8093470209C046 -:100DA0008D5780934302809144028E5F809344026A -:100DB00028F7809148028C5F8093480258F0809118 -:100DC00049028F4F8093490228F080914A028F4F49 -:100DD00080934A028F918FBF8F911895CF92DF92A7 -:100DE000EF92FF926B017C0119D09B01C114D104D9 -:100DF000E104F10471F012D0621B730B683E734082 -:100E0000A8F381E0C81AD108E108F10828513C4F45 -:100E1000EDCFFF90EF90DF90CF9008950FB6F8944C -:100E200066B515B2709148028091490290914A02CC -:100E30000FBE10FE05C06F3F19F07C5F8F4F9F4FB4 -:100E400011240024660F001C660F001C70290895F1 -:100E50008091E80080FFFCCF08958091D80087FF43 -:100E600002C085FF1BC081E08093D70080EA809399 -:100E7000D80082E189BD09B400FEFDCF80E98093EE -:100E8000D8001092E00010925B0210925A02109269 -:100E900059021092E1008DE08093E20008951F92C4 -:100EA0000F920FB60F9211242F933F934F935F939E -:100EB0006F937F938F939F93AF93BF93EF93FF9322 -:100EC0009091E1001092E10093FF11C01092E900AF -:100ED00081E08093EB001092EC0082E28093ED00C1 -:100EE00088E08093F00010925B021092590292FF0A -:100EF0001DC080915B028823C9F080914E02882337 -:100F000059F0815080934E02811106C084E0809395 -:100F1000E9008AE38093E80080914D02882331F054 -:100F2000815080934D02811101C0F2DE90FF0CC010 -:100F300080E18093E20010925B0281E080935A028C -:100F400080EA8093D80019BC80915A02882379F0F6 -:100F500094FF0DC082E189BD09B400FEFDCF80E998 -:100F60008093D8008DE08093E20010925A02FF91A6 -:100F7000EF91BF91AF919F918F917F916F915F9111 -:100F80004F913F912F910F900FBE0F901F9018958A -:100F90001F920F920FB60F921124EF92FF920F93B0 -:100FA0001F932F933F934F935F936F937F938F93F1 -:100FB0009F93AF93BF93CF93EF93FF931092E9006A -:100FC0008091E80083FF30C1C091F1008091F10071 -:100FD000E090F100F090F1000091F1001091F1002B -:100FE0002091F1003091F10092EF9093E80086306B -:100FF00009F03FC086E0ECEAF0E0459155914E15CE -:101000005F0511F0359615C0459155914017510770 -:1010100011F033960EC04591559184912F3F3105C3 -:1010200019F010F02FEF30E0281708F4822F3EEF70 -:1010300008C0815011F7F8C0891B3093E80088235D -:10104000A9F09091E800292F2570D9F392FDEFC007 -:10105000982F813208F090E2292F222369F3FA01B8 -:1010600045914093F100AF012150F7CF903249F301 -:10107000DEC0853049F48EEF8093E800E9DE8E2DE6 -:1010800080688093E300D3C0893001F5C111CCC0E2 -:10109000E0925B021092590210924E028EEF809302 -:1010A000E80081E0EFE6F1E08093E900959190930C -:1010B000EB00992331F095919093EC0095919093EA -:1010C000ED008F5F853081F78EE1A9C0883049F44B -:1010D000C03809F0A9C0BCDE80915B028093F100AA -:1010E0007DC0813279F4C13A09F09EC0B1DEE2E000 -:1010F000F1E087E08E0F90819093F10031968E138E -:10110000FACF6CC0803209F047C0C13209F08CC000 -:101110008091E80082FFFCCFE2E0F1E087E08E0FF3 -:101120009091F100908331968E13FACF8BEF8093DC -:10113000E8008EEF8093E8003091020140910301B6 -:10114000809104012091050190E0A0E0B0E0DC0175 -:1011500099278827942B832BB22B86389105A105DC -:10116000B10521F48FE080934D0261C0863991056D -:10117000A105B10509F05BC084E08093E9009FEF11 -:101180008091EE00837039F09093E8008091E80040 -:1011900082FDFCCFF5CFD9DD823231F4C13209F0C6 -:1011A00043C0E092590204C0833221F4C132E1F518 -:1011B0004FDE14C0811116C04BDEC23851F40093CB -:1011C000E9008091EB0085FB882780F91092E90007 -:1011D00001C080E08093F1001092F1008EEF8093C7 -:1011E000E80025C0982F9D7F9130F1F4C230E1F4E2 -:1011F000EF28D1F40F779FEF900F9630A8F49EEF71 -:101200009093E8000093E900833071F089E18093C6 -:10121000EB0081E090E001C0880F0A95EAF7809327 -:10122000EA001092EA0003C081E28093EB00FF9194 -:10123000EF91CF91BF91AF919F918F917F916F91DE -:101240005F914F913F912F911F910F91FF90EF90E0 -:101250000F900FBE0F901F90189592DC36D843DC8C -:10126000FECFCF93DF931F92CDB7DEB76983DC014A -:10127000ED91FC910280F381E02D41E050E0BE0150 -:101280006F5F7F4F09950F90DF91CF910895FC011B -:101290008FB7F89490915B02911102C090E010C05A -:1012A00093E09093E9009091F200911109C0209190 -:1012B000E80022FFF3CF25FDF1CF2BE62093E800D5 -:1012C0008FBF2085318537FD03C09F3F09F09F5FA9 -:1012D000892F90E00895CF93DF93EC01888599855D -:1012E00097FF09C0E881F9810680F781E02DCE01E2 -:1012F00009959987888788859985DF91CF91089589 -:10130000FC012085318537FD07C04FEF5FEF518726 -:101310004087C901992708959FB7F89480915B028F -:10132000882369F083E08093E9002BE68091E80050 -:1013300085FD09C082FF03C02093E800F7CF9FBF5F -:101340008FEF9FEF08958091F1002091E80025FD37 -:1013500003C02BE62093E8009FBF90E00895DF9242 -:10136000EF92FF920F931F93CF93DF938C01EB01CA -:1013700080915B02882371F07FB7F89484E08093BA -:10138000E90080914C02882369F08091E80085FD96 -:1013900007C07FBF81E0F801828320E030E0D1C048 -:1013A00010924C0220E030E064E080E4F82EA1EFDF -:1013B000B0E09AE3E92EE3E0DE2E4115510509F491 -:1013C000BFC08091E400815F9091E80095FD16C058 -:1013D0007FBF9091E400981304C081E080934C0299 -:1013E00005C090915B02911104C081E0F8018283F5 -:1013F000A8C07FB7F8946093E900E6CF8091F2002F -:101400009F2D981BE92FF0E04E175F0708F4942FEB -:10141000E92FF0E04E1B5F0B2E0F3F1FE0E4E91BAE -:10142000E03428F4EE0FFF27E85EF54F099480C002 -:1014300099919C9399919C9399919C9399919C9348 -:1014400099919C9399919C9399919C9399919C9338 -:1014500099919C9399919C9399919C9399919C9328 -:1014600099919C9399919C9399919C9399919C9318 -:1014700099919C9399919C9399919C9399919C9308 -:1014800099919C9399919C9399919C9399919C93F8 -:1014900099919C9399919C9399919C9399919C93E8 -:1014A00099919C9399919C9399919C9399919C93D8 -:1014B00099919C9399919C9399919C9399919C93C8 -:1014C00099919C9399919C9399919C9399919C93B8 -:1014D00099919C9399919C9399919C9399919C93A8 -:1014E00099919C9399919C9399919C9399919C9398 -:1014F00099919C9399919C9399919C9399919C9388 -:1015000099919C9399919C9399919C9399919C9377 -:1015100099919C9399919C9399919C9399919C9367 -:1015200099919C9399919C9399919C9399919C9357 -:101530008091E80085FFE092E800D0924E023DCF16 -:101540007FBFC901DF91CF911F910F91FF90EF9065 -:10155000DF9008952FEF3FEFFC01318720877DDC7E -:101560000FB6F8948091440290914502A0914602F2 -:10157000B09147020FBE9C0180915B02882329F045 -:1015800068EC70E080E090E029CC80915A028823DA -:1015900001F10FB6F8948091440290914502A09118 -:1015A0004602B09147020FBE40915A02442389F08F -:1015B0000FB6F89440914402509145026091460262 -:1015C000709147020FBE481B590B4B3F510560F30A -:1015D00011C00FB6F8948091440290914502A091F9 -:1015E0004602B09147020FBE821B930B853C994087 -:1015F00008F4C2CF08959FB7F89480915B028823C6 -:1016000021F080914E02811102C09FBF089584E0B5 -:101610008093E9008AE38093E80010924E02F5CFB0 -:10162000EACFEFE4F2E08AE0DF011D928A95E9F764 -:1016300088EE93E0A0E0B0E083839483A583B68333 -:1016400085E191E0918380830895EE0FFF1F05905F -:0A165000F491E02D0994F894FFCF07 -:10165A00088000E10000000008415652204953501A -:10166A0000000000003109AF09470980096B091021 -:02167A000B0063 -:00000001FF +:10000000BDC00000E3C00000E1C00000DFC0000090 +:10001000DDC00000DBC00000D9C00000D7C0000078 +:10002000D5C00000D3C000003AC70000B1C700002F +:10003000CDC00000CBC00000C9C00000C7C0000098 +:10004000C5C00000C3C00000C1C00000BFC00000A8 +:10005000BDC00000BBC00000B9C000007FC60000EA +:10006000B5C00000B3C00000B1C00000AFC00000C8 +:10007000ADC00000ABC00000A9C00000A7C00000D8 +:10008000A5C00000A3C00000A1C000009FC00000E8 +:100090009DC000009BC0000099C0000097C00000F8 +:1000A00095C0000093C0000091C000000001000056 +:1000B0005D0112000200001A014300030000160156 +:1000C0000401030904FC001802030904E4001603F8 +:1000D000030904D6000C0C03310032003300340055 +:1000E0003500000016035500530042002000530065 +:1000F00065007200690061006C0000001803540084 +:10010000650065006E007300790064007500690089 +:100110006E006F000000040309040902430002019D +:1001200000C0320904000001020201000524001091 +:10013000010524010001042402060524060001072C +:1001400005820308004009040100020A00000007BC +:100150000503024000000705840240000012010070 +:100160000202000020C01683040001010203010006 +:1001700001C10201803601813600110B11241FBE1E +:10018000CFEFDAE0DEBFCDBF11E0A0E0B1E0EAE5FD +:10019000F6E102C005900D92A232B107D9F722E034 +:1001A000A2E2B1E001C01D92A935B207E1F710E06B +:1001B000CEEBD0E004C02197FE010E94250BCD3B81 +:1001C000D107C9F70E942D090C942B0B19CFDC0124 +:1001D000ED91FC910190F081E02D09948EBD00001D +:1001E0000DB407FEFDCF8EB508950F931F930FB684 +:1001F000F8948091440290914502A0914602B091FA +:1002000047020FBE409122015091230160912401C9 +:10021000709125018C019D01041B150B260B370BDA +:100220000832110521053105F0F0809322019093E9 +:100230002301A0932401B09325012091010180EEB8 +:10024000820F813A28F090910001919590930001DE +:1002500080910001820F80930101529A803810F43E +:100260005A9801C05A9A1F910F91089590912601B2 +:10027000882319F0911103C004C0911102C02E9A75 +:1002800001C02E98809180008F7D8093800008951A +:100290000F931F93CF93DF938B01EC01DD27FE01BA +:1002A0009ED46EE170E080E090E098D5FE019DD490 +:1002B0006EE170E080E090E091D50150110978F78F +:1002C000DF91CF911F910F91089540E05BE460E0D2 +:1002D00070E08FE492E00E94AA0A509A62E070E017 +:1002E00085E090E0D5DF519A62E070E086E090E032 +:1002F000CFDF529A62E070E087E090E0C9CF8823B8 +:1003000011F0589A01C0589884B58F7D84BD089526 +:10031000CF93DF9300D01F92CDB7DEB72B834A83F4 +:1003200069835CDF6981862F59DF4A81842F56DF1C +:100330002B81822F0F900F900F90DF91CF914ECF96 +:1003400020913A012093270180913B01809328015D +:1003500080913C018093290180913D0180932A0185 +:1003600080913E0180932B0180913F0180932C016D +:100370008091400180932D018091410180932E0155 +:100380008091420180932F018091440190E0982F49 +:10039000882730914501830F911D909331018093FF +:1003A00030018091460190E0982F882730914701D5 +:1003B000830F911D90933301809332018091480106 +:1003C00090E0982F882730914901830F911D9093D9 +:1003D00035018093340180914A0190E0A0E0B0E0C3 +:1003E000BA2FA92F982F882730914B01830F911D89 +:1003F000A11DB11DDC019927882740914C0150E0D7 +:10040000542F4427052E000C660B770B840F951F85 +:10041000A61FB71F30914D01830F911DA11DB11D66 +:100420008093360190933701A0933801B09339013E +:1004300081E0203E08F480E080932601089581E069 +:1004400015DF269A6DD380914202882381F0813096 +:1004500051F48DB3809340029DB380914102809509 +:1004600089238DBB04C08FB7F8948093400283E545 +:100470008CBD1DBC299864E170E080E090E0AED4B2 +:1004800080E0F4DE80E991E00197F1F781E0EEDEB3 +:1004900062E370E080E090E0A1D420E040E063E51A +:1004A0008CEA36DF81E090E090933D0280933C023D +:1004B000089541D322982A982198299880E0D6DE81 +:1004C00026982E98EDE7F0E080818F7D8083109252 +:1004D0003D0210923C020895242F880F880F880F48 +:1004E000462F672F805C14CFCF93DF9300D0CDB71A +:1004F000DEB7482F692F80E090E049836A83FFDEF2 +:1005000020E049816A818CE403DF6EE170E080E0E5 +:1005100090E064D481E090E00F900F90DF91CF9154 +:10052000EECE209132013091330180913A029091C8 +:100530003B022032310511F4807F089520343105CB +:1005400011F4807E08952038310511F4807C0895DF +:100550002115314009F480780895CF92DF92EF920F +:10056000FF920F931F93CF93DF936C01DADF8C011F +:10057000C0E0D0E0CC15DD0554F5D3DF7C010817D1 +:10058000190721F0C801B0DFCCDF7C01FE01E65C79 +:10059000FE4F60913A0270913B02408180E09CDF07 +:1005A0002296FE01E75CFE4F60913A0270913B0299 +:1005B000408181E091DF20913A0230913B022F5F30 +:1005C0003F4F30933B0220933A028701D3CFC801BB +:1005D0008BDF80E1DF91CF911F910F91FF90EF9022 +:1005E000DF90CF900895462F880F880F880F20E066 +:1005F000672F805E8DCE0F931F93CF93DF938C0177 +:10060000C0E0D0E0C017D10704F560913A027091C4 +:100610003B0280E0E8DF682F8FE492E0D8DD609154 +:100620003A0270913B0281E0DEDF682F8FE492E0B6 +:10063000CEDD20913A0230913B022F5F3F4F309345 +:100640003B0220933A022296DDCF80E1DF91CF91E9 +:100650001F910F910895EF92FF920F931F93CF93E5 +:10066000DF937C0100913A0210913B02000F111FB1 +:10067000E801CE01801B910B8E159F055CF42FEFD6 +:100680004C2F6D2F80EA44DE682F8FE492E09FDDCF +:100690002196EFCF80E1DF91CF911F910F91FF90D5 +:1006A000EF9008958FE492E0F2D5892BD9F38FE48F +:1006B00092E026C608950F931F93CF93DF938C018A +:1006C000CAE3D1E0CE018A539140801791071CF410 +:1006D000E9DF8993F7CFDF91CF911F910F910895B3 +:1006E000EF92FF920F931F93CF93DF93EC018B0157 +:1006F000CB01E1DF80E090E002DE8AE3E82E81E0DA +:10070000F82E0C0F1D1FC017D10771F0F7012191B2 +:100710007F014C2F6D2F80ECFBDD6DE270E080E0FF +:1007200090E05CD32196EFCF81E090E0E8DD80E1BE +:10073000DF91CF911F910F91FF90EF9008950F934C +:100740001F93CF93DF938C01C0913A02D0913B026B +:1007500080913401909135018017910718F0CC0FEA +:10076000DD1F0BC080913E0290913F020196909355 +:100770003F0280933E0281E10FC00132110540F03B +:1007800060E270E0CE01ACDFA09600521109F5CF17 +:10079000B801CE01A5DF80E1DF91CF911F910F91CC +:1007A000089580DF803231F464E18FE492E00FDD60 +:1007B00060E10AC080913E0290913F0201969093C1 +:1007C0003F0280933E0265E18FE492E000CDCF933B +:1007D000C82F68DF803251F464E18FE492E0F7DCE7 +:1007E0006C2F8FE492E0F3DC60E10AC080913E025E +:1007F00090913F02019690933F0280933E0265E103 +:100800008FE492E0CF91E3CC813859F020F4803826 +:1008100061F482E00BC0823831F0833931F483E532 +:1008200005C081E003C082E101C080E0D0CF84E058 +:1008300090E041DFEAE3F1E0238142816181808140 +:1008400067DDC5CFCF93DF93EC0135DF2BDF80323F +:1008500041F464E18FE492E0BADCCE017EDE682FE1 +:100860000AC080913E0290913F02019690933F0210 +:1008700080933E0265E18FE492E0DF91CF91A7CCB7 +:10088000CF93DF930FDFC82FD0E0DC2FCC270ADF18 +:10089000C80FD11D07DF863421F4CE01DF91CF913F +:1008A000D1CF8534B9F4CE014ADFC82FFBDE8032C8 +:1008B00031F464E18FE492E08ADC6C2F0CC080910B +:1008C0003E0290913F02019690933F0280933E0238 +:1008D00065E101C061E18FE492E0DF91CF9177CCD7 +:1008E0000F931F93CF93DF93DDDEC82FDBDE082F3E +:1008F000D9DE182FD7DE803259F080913E029091D8 +:100900003F02019690933F0280933E0265E115C03D +:10091000D0E0DC2FCC27C00FD11D64E18FE492E042 +:1009200056DC163419F4CE0166DE06C0153419F40F +:10093000CE0191DE01C081E1682F8FE492E0DF916A +:10094000CF911F910F9143CCADDE803259F0809151 +:100950003E0290913F02019690933F0280933E02A7 +:1009600065E120C064E18FE492E031DC20E040E00A +:1009700060E080E3CDDC682F8FE492E028DC20E0AB +:1009800041E060E080E3C4DC682F8FE492E01FDC8C +:1009900020E042E060E080E3BBDC682F8FE492E07F +:1009A00016DC60E18FE492E012CC7CDE813509F444 +:1009B00077C0E0F4813409F460C050F4803309F466 +:1009C00040C0813309F442C0803209F07AC06FC060 +:1009D000853409F454C0803509F455C0823409F0D7 +:1009E00070C084E190E067DEABDC4CC0813609F476 +:1009F00053C0F0F4863509F452C0803609F44BC078 +:100A0000853509F05EC04EDE90E090933B02809306 +:100A10003A0248DE90E0982F882720913A023091E0 +:100A20003B02820F931F90933B0280933A022AC0AD +:100A30008437A1F1853709F439C0843609F041C003 +:100A40001FCF10923F0210923E021CC02BDE80325C +:100A500071F564E18FE492E0BADBE0914F02F0912E +:100A600050020280F381E02D47E050E069E071E040 +:100A70008FE492E0099560E133C014DEC5CE85E0D5 +:100A800090E019DE8ECE80913C0290913D02892B40 +:100A9000C9F7D5DCF7CF06DE05DEF4CF21CFC7CE10 +:100AA00010923F0210923E0204DDECCF4DCF8091B8 +:100AB0003E0290913F02019690933F0280933E0246 +:100AC0000EC080913E0290913F02019690933F02AA +:100AD00080933E02E7DD803211F462E101C065E1FE +:100AE0008FE492E074CB80913C0290913D02892B7F +:100AF00011F0589A01C0589884B58F7D84BD8091BB +:100B00003E0290913F02892B11F0599A01C05998E9 +:100B10006CDB8FE492E0BBD3892B09F046CF0895BC +:100B2000289A209A8CB580618CBD8CB580648CBD70 +:100B3000219A229A08958CB58F7B8CBD08951DBA99 +:100B4000109268001CBC10BE1FBA10927A0010925E +:100B50006E0010926F00109271001092720010924D +:100B6000C900ECEBF0E0108214B817B81AB81DB841 +:100B700010BA108215B818B81BB81EB811BA08956B +:100B8000F894E1E6F0E020E82083108283E084BD61 +:100B900085BDEEE6F0E080818160808381E0809316 +:100BA000800092E090938100809390009093910058 +:100BB0009093C00094E09093C1008093C200809312 +:100BC000C3001092C40086E880937A0020937B00D3 +:100BD00010927E0010927D0040D178940895E93102 +:100BE00050F4EE0FE450FA4F0994E93120F4EE0F7F +:100BF000E25DF94F09940895289A0895299A089575 +:100C00002A9A08952B9A08952F9A6AC0589A58C024 +:100C1000599A08955A9A08955B9A0895469A66C01B +:100C2000479A6AC05E9A08955F9A6CC02C9A08959C +:100C30002D9A4AC02E9A4EC08F9A08958E9A089582 +:100C40008D9A08958C9A0895899A0895889A08959E +:100C50005C9A08955D9A0895769A08952898089563 +:100C6000299808952A9808952B9808952F9838C0A8 +:100C7000589826C0599808955A9808955B980895F1 +:100C8000469834C0479838C05E9808955F983AC037 +:100C90002C9808952D9818C02E981CC08F980895F0 +:100CA0008E9808958D9808958C9808958998089540 +:100CB000889808955C9808955D98089576980895A9 +:100CC000E4B5EF7DE4BD0895E0918000EF77E09317 +:100CD00080000895E0918000EF7DE093800008950A +:100CE000E0918000E77FE09380000895E09190001C +:100CF000EF77E09390000895E091C000EF77E093E4 +:100D0000C0000895E091C200E77FE093C20008951B +:100D1000F89484B7877F84BF80916000806180935E +:100D200060001092600080E29EE40197F1F781E09C +:100D30008093E00080E28093D80080E69AEE0197ED +:100D4000F1F7FDDE0C94003FFFCFF894F8DE80E66B +:100D50009AEE0197F1F70C940000FFCF8F938FB7B5 +:100D60008F93809143028D5F8D37D0F4809343023F +:100D7000809144028F5F80934402D8F080914502B5 +:100D80008F4F80934502A8F0809146028F4F809349 +:100D9000460278F0809147028F4F8093470209C046 +:100DA0008D5780934302809144028E5F809344026A +:100DB00028F7809148028C5F8093480258F0809118 +:100DC00049028F4F8093490228F080914A028F4F49 +:100DD00080934A028F918FBF8F911895CF92DF92A7 +:100DE000EF92FF926B017C0119D09B01C114D104D9 +:100DF000E104F10471F012D0621B730B683E734082 +:100E0000A8F381E0C81AD108E108F10828513C4F45 +:100E1000EDCFFF90EF90DF90CF9008950FB6F8944C +:100E200066B515B2709148028091490290914A02CC +:100E30000FBE10FE05C06F3F19F07C5F8F4F9F4FB4 +:100E400011240024660F001C660F001C70290895F1 +:100E50008091E80080FFFCCF08958091D80087FF43 +:100E600002C085FF1BC081E08093D70080EA809399 +:100E7000D80082E189BD09B400FEFDCF80E98093EE +:100E8000D8001092E00010925B0210925A02109269 +:100E900059021092E1008DE08093E20008951F92C4 +:100EA0000F920FB60F9211242F933F934F935F939E +:100EB0006F937F938F939F93AF93BF93EF93FF9322 +:100EC0009091E1001092E10093FF11C01092E900AF +:100ED00081E08093EB001092EC0082E28093ED00C1 +:100EE00088E08093F00010925B021092590292FF0A +:100EF0001DC080915B028823C9F080914E02882337 +:100F000059F0815080934E02811106C084E0809395 +:100F1000E9008AE38093E80080914D02882331F054 +:100F2000815080934D02811101C0F2DE90FF0CC010 +:100F300080E18093E20010925B0281E080935A028C +:100F400080EA8093D80019BC80915A02882379F0F6 +:100F500094FF0DC082E189BD09B400FEFDCF80E998 +:100F60008093D8008DE08093E20010925A02FF91A6 +:100F7000EF91BF91AF919F918F917F916F915F9111 +:100F80004F913F912F910F900FBE0F901F9018958A +:100F90001F920F920FB60F921124EF92FF920F93B0 +:100FA0001F932F933F934F935F936F937F938F93F1 +:100FB0009F93AF93BF93CF93EF93FF931092E9006A +:100FC0008091E80083FF30C1C091F1008091F10071 +:100FD000E090F100F090F1000091F1001091F1002B +:100FE0002091F1003091F10092EF9093E80086306B +:100FF00009F03FC086E0ECEAF0E0459155914E15CE +:101000005F0511F0359615C0459155914017510770 +:1010100011F033960EC04591559184912F3F3105C3 +:1010200019F010F02FEF30E0281708F4822F3EEF70 +:1010300008C0815011F7F8C0891B3093E80088235D +:10104000A9F09091E800292F2570D9F392FDEFC007 +:10105000982F813208F090E2292F222369F3FA01B8 +:1010600045914093F100AF012150F7CF903249F301 +:10107000DEC0853049F48EEF8093E800E9DE8E2DE6 +:1010800080688093E300D3C0893001F5C111CCC0E2 +:10109000E0925B021092590210924E028EEF809302 +:1010A000E80081E0EFE6F1E08093E900959190930C +:1010B000EB00992331F095919093EC0095919093EA +:1010C000ED008F5F853081F78EE1A9C0883049F44B +:1010D000C03809F0A9C0BCDE80915B028093F100AA +:1010E0007DC0813279F4C13A09F09EC0B1DEE2E000 +:1010F000F1E087E08E0F90819093F10031968E138E +:10110000FACF6CC0803209F047C0C13209F08CC000 +:101110008091E80082FFFCCFE2E0F1E087E08E0FF3 +:101120009091F100908331968E13FACF8BEF8093DC +:10113000E8008EEF8093E8003091020140910301B6 +:10114000809104012091050190E0A0E0B0E0DC0175 +:1011500099278827942B832BB22B86389105A105DC +:10116000B10521F48FE080934D0261C0863991056D +:10117000A105B10509F05BC084E08093E9009FEF11 +:101180008091EE00837039F09093E8008091E80040 +:1011900082FDFCCFF5CFD9DD823231F4C13209F0C6 +:1011A00043C0E092590204C0833221F4C132E1F518 +:1011B0004FDE14C0811116C04BDEC23851F40093CB +:1011C000E9008091EB0085FB882780F91092E90007 +:1011D00001C080E08093F1001092F1008EEF8093C7 +:1011E000E80025C0982F9D7F9130F1F4C230E1F4E2 +:1011F000EF28D1F40F779FEF900F9630A8F49EEF71 +:101200009093E8000093E900833071F089E18093C6 +:10121000EB0081E090E001C0880F0A95EAF7809327 +:10122000EA001092EA0003C081E28093EB00FF9194 +:10123000EF91CF91BF91AF919F918F917F916F91DE +:101240005F914F913F912F911F910F91FF90EF90E0 +:101250000F900FBE0F901F90189592DC36D843DC8C +:10126000FECFCF93DF931F92CDB7DEB76983DC014A +:10127000ED91FC910280F381E02D41E050E0BE0150 +:101280006F5F7F4F09950F90DF91CF910895FC011B +:101290008FB7F89490915B02911102C090E010C05A +:1012A00093E09093E9009091F200911109C0209190 +:1012B000E80022FFF3CF25FDF1CF2BE62093E800D5 +:1012C0008FBF2085318537FD03C09F3F09F09F5FA9 +:1012D000892F90E00895CF93DF93EC01888599855D +:1012E00097FF09C0E881F9810680F781E02DCE01E2 +:1012F00009959987888788859985DF91CF91089589 +:10130000FC012085318537FD07C04FEF5FEF518726 +:101310004087C901992708959FB7F89480915B028F +:10132000882369F083E08093E9002BE68091E80050 +:1013300085FD09C082FF03C02093E800F7CF9FBF5F +:101340008FEF9FEF08958091F1002091E80025FD37 +:1013500003C02BE62093E8009FBF90E00895DF9242 +:10136000EF92FF920F931F93CF93DF938C01EB01CA +:1013700080915B02882371F07FB7F89484E08093BA +:10138000E90080914C02882369F08091E80085FD96 +:1013900007C07FBF81E0F801828320E030E0D1C048 +:1013A00010924C0220E030E064E080E4F82EA1EFDF +:1013B000B0E09AE3E92EE3E0DE2E4115510509F491 +:1013C000BFC08091E400815F9091E80095FD16C058 +:1013D0007FBF9091E400981304C081E080934C0299 +:1013E00005C090915B02911104C081E0F8018283F5 +:1013F000A8C07FB7F8946093E900E6CF8091F2002F +:101400009F2D981BE92FF0E04E175F0708F4942FEB +:10141000E92FF0E04E1B5F0B2E0F3F1FE0E4E91BAE +:10142000E03428F4EE0FFF27E85EF54F099480C002 +:1014300099919C9399919C9399919C9399919C9348 +:1014400099919C9399919C9399919C9399919C9338 +:1014500099919C9399919C9399919C9399919C9328 +:1014600099919C9399919C9399919C9399919C9318 +:1014700099919C9399919C9399919C9399919C9308 +:1014800099919C9399919C9399919C9399919C93F8 +:1014900099919C9399919C9399919C9399919C93E8 +:1014A00099919C9399919C9399919C9399919C93D8 +:1014B00099919C9399919C9399919C9399919C93C8 +:1014C00099919C9399919C9399919C9399919C93B8 +:1014D00099919C9399919C9399919C9399919C93A8 +:1014E00099919C9399919C9399919C9399919C9398 +:1014F00099919C9399919C9399919C9399919C9388 +:1015000099919C9399919C9399919C9399919C9377 +:1015100099919C9399919C9399919C9399919C9367 +:1015200099919C9399919C9399919C9399919C9357 +:101530008091E80085FFE092E800D0924E023DCF16 +:101540007FBFC901DF91CF911F910F91FF90EF9065 +:10155000DF9008952FEF3FEFFC01318720877DDC7E +:101560000FB6F8948091440290914502A0914602F2 +:10157000B09147020FBE9C0180915B02882329F045 +:1015800068EC70E080E090E029CC80915A028823DA +:1015900001F10FB6F8948091440290914502A09118 +:1015A0004602B09147020FBE40915A02442389F08F +:1015B0000FB6F89440914402509145026091460262 +:1015C000709147020FBE481B590B4B3F510560F30A +:1015D00011C00FB6F8948091440290914502A091F9 +:1015E0004602B09147020FBE821B930B853C994087 +:1015F00008F4C2CF08959FB7F89480915B028823C6 +:1016000021F080914E02811102C09FBF089584E0B5 +:101610008093E9008AE38093E80010924E02F5CFB0 +:10162000EACFEFE4F2E08AE0DF011D928A95E9F764 +:1016300088EE93E0A0E0B0E083839483A583B68333 +:1016400085E191E0918380830895EE0FFF1F05905F +:0A165000F491E02D0994F894FFCF07 +:10165A00088000E10000000008415652204953501A +:10166A0000000000003109AF09470980096B091021 +:02167A000B0063 +:00000001FF