forked from mirrors/qmk_userspace
		
	Merge remote-tracking branch 'upstream/master' into develop
This commit is contained in:
		
				commit
				
					
						7797070b37
					
				
			
		
					 15 changed files with 550 additions and 570 deletions
				
			
		| 
						 | 
					@ -118,7 +118,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @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
 | 
					 * @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
 | 
					 * @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
 | 
					 * @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
 | 
					 * @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)
 | 
					#elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_RGB)
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -155,7 +155,7 @@
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return                          The bit index
 | 
					 * @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
 | 
					 * @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
 | 
					 * @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
 | 
					 * @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
 | 
					 * @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
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* --- PRIVATE VARIABLES ---------------------------------------------------- */
 | 
					/* --- PRIVATE VARIABLES ---------------------------------------------------- */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ static void set_led_color_rgb(LED_TYPE color, int pos) {
 | 
				
			||||||
#elif (WS2812_BYTE_ORDER == WS2812_BYTE_ORDER_RGB)
 | 
					#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 + 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 + 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
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,7 @@ uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}};
 | 
				
			||||||
#elif LED_DRIVER_COUNT == 4
 | 
					#elif LED_DRIVER_COUNT == 4
 | 
				
			||||||
uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}, {0}};
 | 
					uint8_t g_led_control_registers[LED_DRIVER_COUNT][18] = {{0}, {0}, {0}, {0}};
 | 
				
			||||||
#endif
 | 
					#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
 | 
					// This is the bit pattern in the LED control registers
 | 
				
			||||||
// (for matrix A, add one to register for matrix B)
 | 
					// (for matrix A, add one to register for matrix B)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,3 @@
 | 
				
			||||||
# Default mt4rgb Layout
 | 
					# Default mt4rgb Layout
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is the default layout that comes flashed on every mt64rgb. All key pins are shown in the file.
 | 
					This is the default layout that comes flashed on every mt64rgb. All key pins are shown in the file.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,16 +1,16 @@
 | 
				
			||||||
# mt64rgb 
 | 
					# mt64rgb 
 | 
				
			||||||
 | 
					
 | 
				
			||||||

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