From 94907b91cf049c02df7a5bfa18b5f13d039dee94 Mon Sep 17 00:00:00 2001 From: Niklas Fauth Date: Fri, 9 Feb 2018 08:53:25 +0100 Subject: [PATCH] refactored code, moved user-relevant defines to config.h --- .gitignore | 3 +- Inc/config.h | 21 ++ Inc/defines.h | 9 +- Makefile | 22 +- Src/bldc.c | 218 ++++++++++++++ Src/comms.c | 50 ++++ Src/main.c | 235 +-------------- Src/setup.c | 9 +- build/hover.hex | 782 ++++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 1099 insertions(+), 250 deletions(-) create mode 100644 Inc/config.h create mode 100644 Src/bldc.c create mode 100644 Src/comms.c create mode 100644 build/hover.hex diff --git a/.gitignore b/.gitignore index 567609b..eb48f10 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -build/ +build/* +!build/hover.hex diff --git a/Inc/config.h b/Inc/config.h new file mode 100644 index 0000000..606da56 --- /dev/null +++ b/Inc/config.h @@ -0,0 +1,21 @@ +#pragma once +#include "stm32f1xx_hal.h" + +#define R 0.27 +#define P 15 +#define PSI 0.02 +#define V 23 + +#define MILLI_R (R * 1000) +#define MILLI_PSI (PSI * 1000) +#define MILLI_V (V * 1000) + +#define PWM_FREQ 16000 // PWM frequency in Hz +#define DEAD_TIME 32 // PWM deadtime + +#define DC_CUR_LIMIT 5 // Motor DC current limit in amps + +#define DEBUG_SERIAL_SERVOTERM +//#define DEBUG_SERIAL_ASCII +#define DEBUG_BAUD 115200 // UART baud rate +//#define DEBUG_I2C_LCD diff --git a/Inc/defines.h b/Inc/defines.h index e63d6c2..19c7aea 100644 --- a/Inc/defines.h +++ b/Inc/defines.h @@ -117,13 +117,8 @@ #define CHARGER_PIN GPIO_PIN_12 #define CHARGER_PORT GPIOA -#define PWM_FREQ 16000 -#define DEAD_TIME 32 - -#define R 0.27 -#define P 15 -#define PSI 0.02 -#define V 23 +#define MOTOR_AMP_CONV_DC_AMP 0.02 +#define ADC_BATTERY_VOLT 0.02647435897435897435897435897436 #define MILLI_R (R * 1000) #define MILLI_PSI (PSI * 1000) diff --git a/Makefile b/Makefile index 232a093..c35c45c 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,8 @@ Src/system_stm32f1xx.c \ Src/setup.c \ Src/stm32f1xx_it.c \ Src/main.c \ +Src/bldc.c \ +Src/comms.c \ # ASM sources ASM_SOURCES = \ @@ -53,7 +55,7 @@ AR = $(PREFIX)ar SZ = $(PREFIX)size HEX = $(CP) -O ihex BIN = $(CP) -O binary -S - + ####################################### # CFLAGS ####################################### @@ -71,7 +73,7 @@ MCU = $(CPU) -mthumb $(FPU) $(FLOAT-ABI) # macros for gcc # AS defines -AS_DEFS = +AS_DEFS = # C defines C_DEFS = \ @@ -80,7 +82,7 @@ C_DEFS = \ # AS includes -AS_INCLUDES = +AS_INCLUDES = # C includes C_INCLUDES = \ @@ -130,7 +132,7 @@ vpath %.c $(sort $(dir $(C_SOURCES))) OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o))) vpath %.s $(sort $(dir $(ASM_SOURCES))) -$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) +$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@ $(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR) @@ -142,12 +144,12 @@ $(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile $(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR) $(HEX) $< $@ - + $(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR) - $(BIN) $< $@ - + $(BIN) $< $@ + $(BUILD_DIR): - mkdir $@ + mkdir $@ format: find Src/ Inc/ -iname '*.h' -o -iname '*.c' | xargs clang-format -i @@ -156,10 +158,10 @@ format: ####################################### clean: -rm -fR .dep $(BUILD_DIR) - + ####################################### # dependencies ####################################### -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) -# *** EOF *** \ No newline at end of file +# *** EOF *** diff --git a/Src/bldc.c b/Src/bldc.c new file mode 100644 index 0000000..5c3b40b --- /dev/null +++ b/Src/bldc.c @@ -0,0 +1,218 @@ + +#include "stm32f1xx_hal.h" +#include "defines.h" +#include "setup.h" +#include "config.h" + + +volatile int posl = 0; +volatile int posr = 0; +volatile int pwml = 0; +volatile int pwmr = 0; + +extern volatile adc_buf_t adc_buffer; + +const int pwm_res = 64000000 / 2 / PWM_FREQ; // = 2000 + +const uint8_t hall_to_pos[8] = { + 0, + 0, + 2, + 1, + 4, + 5, + 3, + 0, +}; + +inline void blockPWM(int pwm, int pos, int *u, int *v, int *w) { + switch(pos) { + case 0: + *u = 0; + *v = pwm; + *w = -pwm; + break; + case 1: + *u = -pwm; + *v = pwm; + *w = 0; + break; + case 2: + *u = -pwm; + *v = 0; + *w = pwm; + break; + case 3: + *u = 0; + *v = -pwm; + *w = pwm; + break; + case 4: + *u = pwm; + *v = -pwm; + *w = 0; + break; + case 5: + *u = pwm; + *v = 0; + *w = -pwm; + break; + default: + *u = 0; + *v = 0; + *w = 0; + } +} + +inline void blockPhaseCurrent(int pos, int u, int v, int *q) { + switch(pos) { + case 0: + *q = u - v; + // *u = 0; + // *v = pwm; + // *w = -pwm; + break; + case 1: + *q = u; + // *u = -pwm; + // *v = pwm; + // *w = 0; + break; + case 2: + *q = u; + // *u = -pwm; + // *v = 0; + // *w = pwm; + break; + case 3: + *q = v; + // *u = 0; + // *v = -pwm; + // *w = pwm; + break; + case 4: + *q = v; + // *u = pwm; + // *v = -pwm; + // *w = 0; + break; + case 5: + *q = -(u - v); + // *u = pwm; + // *v = 0; + // *w = -pwm; + break; + default: + *q = 0; + // *u = 0; + // *v = 0; + // *w = 0; + } +} + +int last_pos = 0; +int timer = 0; +int max_time = PWM_FREQ / 10; +volatile int vel = 0; + +int offsetcount = 0; +int offsetrl1 = 2000; +int offsetrl2 = 2000; +int offsetrr1 = 2000; +int offsetrr2 = 2000; +int offsetdcl = 2000; +int offsetdcr = 2000; + +int curl = 0; +// int errorl = 0; +// int kp = 5; +// volatile int cmdl = 0; + +void DMA1_Channel1_IRQHandler() { + DMA1->IFCR = DMA_IFCR_CTCIF1; + // HAL_GPIO_WritePin(LED_PORT, LED_PIN, 1); + + if(offsetcount < 1000) { // calibrate ADC offsets + offsetcount++; + offsetrl1 = (adc_buffer.rl1 + offsetrl1) / 2; + offsetrl2 = (adc_buffer.rl2 + offsetrl2) / 2; + offsetrr1 = (adc_buffer.rr1 + offsetrr1) / 2; + offsetrr2 = (adc_buffer.rr2 + offsetrr2) / 2; + offsetdcl = (adc_buffer.dcl + offsetdcl) / 2; + offsetdcr = (adc_buffer.dcr + offsetdcr) / 2; + return; + } + + if((adc_buffer.dcl - offsetdcl) * MOTOR_AMP_CONV_DC_AMP > DC_CUR_LIMIT) { + LEFT_TIM->BDTR &= ~TIM_BDTR_MOE; + //HAL_GPIO_WritePin(LED_PORT, LED_PIN, 1); + } else { + LEFT_TIM->BDTR |= TIM_BDTR_MOE; + //HAL_GPIO_WritePin(LED_PORT, LED_PIN, 0); + } + + if((adc_buffer.dcr - offsetdcr) * MOTOR_AMP_CONV_DC_AMP > DC_CUR_LIMIT) { + RIGHT_TIM->BDTR &= ~TIM_BDTR_MOE; + } else { + RIGHT_TIM->BDTR |= TIM_BDTR_MOE; + } + + int ul, vl, wl; + int ur, vr, wr; + + uint8_t hall_ul = !(LEFT_HALL_U_PORT->IDR & LEFT_HALL_U_PIN); + uint8_t hall_vl = !(LEFT_HALL_V_PORT->IDR & LEFT_HALL_V_PIN); + uint8_t hall_wl = !(LEFT_HALL_W_PORT->IDR & LEFT_HALL_W_PIN); + + uint8_t hall_ur = !(RIGHT_HALL_U_PORT->IDR & RIGHT_HALL_U_PIN); + uint8_t hall_vr = !(RIGHT_HALL_V_PORT->IDR & RIGHT_HALL_V_PIN); + uint8_t hall_wr = !(RIGHT_HALL_W_PORT->IDR & RIGHT_HALL_W_PIN); + + uint8_t halll = hall_ul * 1 + hall_vl * 2 + hall_wl * 4; + posl = hall_to_pos[halll]; + posl += 2; + posl %= 6; + + uint8_t hallr = hall_ur * 1 + hall_vr * 2 + hall_wr * 4; + posr = hall_to_pos[hallr]; + posr += 2; + posr %= 6; + + blockPhaseCurrent(posl, adc_buffer.rl1 - offsetrl1, adc_buffer.rl2 - offsetrl2, &curl); + + consoleScope(0, 0, (adc_buffer.rl1 - offsetrl1) / 8, (adc_buffer.rl2 - offsetrl1) / 8, 0, 0, 0, 0); + + timer++; + + // if(timer > max_time){ + // timer = max_time; + // vel = 0; + // } + + // if(pos != last_pos){ + // vel = 1000 * PWM_FREQ / timer / P / 6 * 2; + + // if((pos - last_pos + 6) % 6 > 2){ + // vel = -vel; + // } + + // timer = 0; + // } + // last_pos = pos; + + //YOLOTEST + // errorl = cmdl - curl; + // pwml = kp * errorl; + + blockPWM(pwml, posl, &ul, &vl, &wl); + blockPWM(pwmr, posr, &ur, &vr, &wr); + + LEFT_TIM->LEFT_TIM_U = CLAMP(ul + pwm_res / 2, 10, pwm_res-10); + LEFT_TIM->LEFT_TIM_V = CLAMP(vl + pwm_res / 2, 10, pwm_res-10); + LEFT_TIM->LEFT_TIM_W = CLAMP(wl + pwm_res / 2, 10, pwm_res-10); + + RIGHT_TIM->RIGHT_TIM_U = CLAMP(ur + pwm_res / 2, 10, pwm_res-10); + RIGHT_TIM->RIGHT_TIM_V = CLAMP(vr + pwm_res / 2, 10, pwm_res-10); + RIGHT_TIM->RIGHT_TIM_W = CLAMP(wr + pwm_res / 2, 10, pwm_res-10); + // HAL_GPIO_WritePin(LED_PORT, LED_PIN, 0);blockPhaseCurrent +} diff --git a/Src/comms.c b/Src/comms.c new file mode 100644 index 0000000..ac0742d --- /dev/null +++ b/Src/comms.c @@ -0,0 +1,50 @@ +#include "stm32f1xx_hal.h" +#include "defines.h" +#include "setup.h" +#include "config.h" +#include "stdio.h" +#include "string.h" + +UART_HandleTypeDef huart2; + +volatile uint8_t uart_buf[300]; +//volatile char char_buf[300]; + +void consoleScope(int16_t ch0, int16_t ch1, int16_t ch2, int16_t ch3, int16_t ch4, int16_t ch5, int16_t ch6, int16_t ch7) { + #ifdef DEBUG_SERIAL_SERVOTERM + uart_buf[0] = 0xff; + uart_buf[1] = CLAMP(ch0+127, 0, 255); + uart_buf[2] = CLAMP(ch1+127, 0, 255); + uart_buf[3] = CLAMP(ch2+127, 0, 255); + uart_buf[4] = CLAMP(ch3+127, 0, 255); + uart_buf[5] = CLAMP(ch4+127, 0, 255); + uart_buf[6] = CLAMP(ch5+127, 0, 255); + uart_buf[7] = CLAMP(ch6+127, 0, 255); + uart_buf[8] = CLAMP(ch7+127, 0, 255); + uart_buf[9] = '\n'; + + if(DMA1_Channel2->CNDTR == 0) { + DMA1_Channel2->CCR &= ~DMA_CCR_EN; + DMA1_Channel2->CNDTR = 10; + DMA1_Channel2->CMAR = (uint32_t)uart_buf; + DMA1_Channel2->CCR |= DMA_CCR_EN; + } + #endif + + #ifdef DEBUG_SERIAL_ASCII + memset(&uart_buf, 0, sizeof(uart_buf)); + sprintf(uart_buf, "%i;%i;%i;%i;%i;%i;%i;%i\n\r", ch0, ch1, ch2, ch3, ch4, ch5, ch6, ch7); + + if(DMA1_Channel2->CNDTR == 0) { + DMA1_Channel2->CCR &= ~DMA_CCR_EN; + DMA1_Channel2->CNDTR = strlen(uart_buf); + DMA1_Channel2->CMAR = (uint32_t)uart_buf; + DMA1_Channel2->CCR |= DMA_CCR_EN; + } + #endif +} + +void consoleLog(char *message) +{ + HAL_UART_Transmit_DMA(&huart2, (uint8_t *)message, strlen(message)); +} diff --git a/Src/main.c b/Src/main.c index 9b4da6a..6bd849c 100644 --- a/Src/main.c +++ b/Src/main.c @@ -21,6 +21,7 @@ #include "stm32f1xx_hal.h" #include "defines.h" #include "setup.h" +#include "config.h" void SystemClock_Config(void); @@ -30,231 +31,9 @@ extern ADC_HandleTypeDef hadc1; extern ADC_HandleTypeDef hadc2; extern volatile adc_buf_t adc_buffer; -volatile int posl = 0; -volatile int posr = 0; -volatile int pwml = 0; -volatile int pwmr = 0; +extern volatile int pwml; +extern volatile int pwmr; -const int pwm_res = 64000000 / 2 / PWM_FREQ; - -const uint8_t hall_to_pos[8] = { - 0, - 0, - 2, - 1, - 4, - 5, - 3, - 0, -}; - -inline void block(int pwm, int pos, int *u, int *v, int *w) { - switch(pos) { - case 0: - *u = 0; - *v = pwm; - *w = -pwm; - break; - case 1: - *u = -pwm; - *v = pwm; - *w = 0; - break; - case 2: - *u = -pwm; - *v = 0; - *w = pwm; - break; - case 3: - *u = 0; - *v = -pwm; - *w = pwm; - break; - case 4: - *u = pwm; - *v = -pwm; - *w = 0; - break; - case 5: - *u = pwm; - *v = 0; - *w = -pwm; - break; - default: - *u = 0; - *v = 0; - *w = 0; - } -} - -inline void block2(int pos, int u, int v, int *q) { - switch(pos) { - case 0: - *q = u - v; - // *u = 0; - // *v = pwm; - // *w = -pwm; - break; - case 1: - *q = u; - // *u = -pwm; - // *v = pwm; - // *w = 0; - break; - case 2: - *q = u; - // *u = -pwm; - // *v = 0; - // *w = pwm; - break; - case 3: - *q = v; - // *u = 0; - // *v = -pwm; - // *w = pwm; - break; - case 4: - *q = v; - // *u = pwm; - // *v = -pwm; - // *w = 0; - break; - case 5: - *q = -(u - v); - // *u = pwm; - // *v = 0; - // *w = -pwm; - break; - default: - *q = 0; - // *u = 0; - // *v = 0; - // *w = 0; - } -} - -int last_pos = 0; -int timer = 0; -int max_time = PWM_FREQ / 10; -volatile int vel = 0; - -int offsetcount = 0; -int offsetrl1 = 2000; -int offsetrl2 = 2000; -int offsetrr1 = 2000; -int offsetrr2 = 2000; -int offsetdcl = 2000; -int offsetdcr = 2000; - -volatile uint8_t uart_buf[10]; -int curl = 0; -// int errorl = 0; -// int kp = 5; -// volatile int cmdl = 0; - -void DMA1_Channel1_IRQHandler() { - DMA1->IFCR = DMA_IFCR_CTCIF1; - // HAL_GPIO_WritePin(LED_PORT, LED_PIN, 1); - - if(offsetcount < 1000) { - offsetcount++; - offsetrl1 = (adc_buffer.rl1 + offsetrl1) / 2; - offsetrl2 = (adc_buffer.rl2 + offsetrl2) / 2; - offsetrr1 = (adc_buffer.rr1 + offsetrr1) / 2; - offsetrr2 = (adc_buffer.rr2 + offsetrr2) / 2; - offsetdcl = (adc_buffer.dcl + offsetdcl) / 2; - offsetdcr = (adc_buffer.dcr + offsetdcr) / 2; - return; - } - - if(adc_buffer.dcl - offsetdcl > 40) { - LEFT_TIM->BDTR &= ~TIM_BDTR_MOE; - HAL_GPIO_WritePin(LED_PORT, LED_PIN, 1); - } else { - LEFT_TIM->BDTR |= TIM_BDTR_MOE; - HAL_GPIO_WritePin(LED_PORT, LED_PIN, 0); - } - - if(adc_buffer.dcr - offsetdcr > 40) { - RIGHT_TIM->BDTR &= ~TIM_BDTR_MOE; - } else { - RIGHT_TIM->BDTR |= TIM_BDTR_MOE; - } - - int ul, vl, wl; - int ur, vr, wr; - - uint8_t hall_ul = !(LEFT_HALL_U_PORT->IDR & LEFT_HALL_U_PIN); - uint8_t hall_vl = !(LEFT_HALL_V_PORT->IDR & LEFT_HALL_V_PIN); - uint8_t hall_wl = !(LEFT_HALL_W_PORT->IDR & LEFT_HALL_W_PIN); - - uint8_t hall_ur = !(RIGHT_HALL_U_PORT->IDR & RIGHT_HALL_U_PIN); - uint8_t hall_vr = !(RIGHT_HALL_V_PORT->IDR & RIGHT_HALL_V_PIN); - uint8_t hall_wr = !(RIGHT_HALL_W_PORT->IDR & RIGHT_HALL_W_PIN); - - uint8_t halll = hall_ul * 1 + hall_vl * 2 + hall_wl * 4; - posl = hall_to_pos[halll]; - posl += 2; - posl %= 6; - - uint8_t hallr = hall_ur * 1 + hall_vr * 2 + hall_wr * 4; - posr = hall_to_pos[hallr]; - posr += 2; - posr %= 6; - - block2(posl, adc_buffer.rl1 - offsetrl1, adc_buffer.rl2 - offsetrl2, &curl); - uart_buf[0] = 0xff; - uart_buf[1] = 127; //adc_buffer.dcl - 1850 + 127; - uart_buf[2] = 127; //adc_buffer.dcr - 1850 + 127; - uart_buf[3] = 127; ////CLAMP((adc_buffer.rr1 - offsetrr1) / 8 + 127,0,255); - uart_buf[4] = 127; ////CLAMP((adc_buffer.rr2 - offsetrr2) / 8 + 127,0,255); - uart_buf[5] = CLAMP((adc_buffer.rl1 - offsetrl1) / 8 + 127, 0, 255); - uart_buf[6] = CLAMP((adc_buffer.rl2 - offsetrl2) / 8 + 127, 0, 255); - uart_buf[7] = 127; //CLAMP(curl / 8 + 127,0,255);//adc_buffer.batt1 - 1550 + 127; - uart_buf[8] = 127 + posl * 20; //adc_buffer.bat1 - 1550 + 127; - uart_buf[9] = '\n'; - - if(DMA1_Channel2->CNDTR == 0) { - DMA1_Channel2->CCR &= ~DMA_CCR_EN; - DMA1_Channel2->CNDTR = 10; - DMA1_Channel2->CMAR = (uint32_t)uart_buf; - DMA1_Channel2->CCR |= DMA_CCR_EN; - } - - timer++; - - // if(timer > max_time){ - // timer = max_time; - // vel = 0; - // } - - // if(pos != last_pos){ - // vel = 1000 * PWM_FREQ / timer / P / 6 * 2; - - // if((pos - last_pos + 6) % 6 > 2){ - // vel = -vel; - // } - - // timer = 0; - // } - // last_pos = pos; - - //YOLOTEST - // errorl = cmdl - curl; - // pwml = kp * errorl; - - block(pwml, posl, &ul, &vl, &wl); - block(pwmr, posr, &ur, &vr, &wr); - - LEFT_TIM->LEFT_TIM_U = CLAMP(ul + pwm_res / 2, 10, pwm_res-10); - LEFT_TIM->LEFT_TIM_V = CLAMP(vl + pwm_res / 2, 10, pwm_res-10); - LEFT_TIM->LEFT_TIM_W = CLAMP(wl + pwm_res / 2, 10, pwm_res-10); - - RIGHT_TIM->RIGHT_TIM_U = CLAMP(ur + pwm_res / 2, 10, pwm_res-10); - RIGHT_TIM->RIGHT_TIM_V = CLAMP(vr + pwm_res / 2, 10, pwm_res-10); - RIGHT_TIM->RIGHT_TIM_W = CLAMP(wr + pwm_res / 2, 10, pwm_res-10); - // HAL_GPIO_WritePin(LED_PORT, LED_PIN, 0); -} int milli_vel_error_sum = 0; @@ -323,7 +102,7 @@ void SystemClock_Config(void) { RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInit; - /**Initializes the CPU, AHB and APB busses clocks + /**Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; @@ -333,7 +112,7 @@ void SystemClock_Config(void) { RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16; HAL_RCC_OscConfig(&RCC_OscInitStruct); - /**Initializes the CPU, AHB and APB busses clocks + /**Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; @@ -347,11 +126,11 @@ void SystemClock_Config(void) { PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV8; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit); - /**Configure the Systick interrupt time + /**Configure the Systick interrupt time */ HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000); - /**Configure the Systick + /**Configure the Systick */ HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); diff --git a/Src/setup.c b/Src/setup.c index 47dd73f..c9a5d9f 100644 --- a/Src/setup.c +++ b/Src/setup.c @@ -35,6 +35,7 @@ pb10 usart3 dma1 channel2/3 */ #include "defines.h" +#include "config.h" TIM_HandleTypeDef htim_right; TIM_HandleTypeDef htim_left; @@ -48,7 +49,7 @@ void UART_Init() { UART_HandleTypeDef huart3; huart3.Instance = USART3; - huart3.Init.BaudRate = 115200; + huart3.Init.BaudRate = DEBUG_BAUD; huart3.Init.WordLength = UART_WORDLENGTH_8B; huart3.Init.StopBits = UART_STOPBITS_1; huart3.Init.Parity = UART_PARITY_NONE; @@ -330,11 +331,11 @@ void MX_ADC1_Init(void) { hadc1.Init.NbrOfConversion = 5; HAL_ADC_Init(&hadc1); /**Enable or disable the remapping of ADC1_ETRGREG: - * ADC1 External Event regular conversion is connected to TIM8 TRG0 + * ADC1 External Event regular conversion is connected to TIM8 TRG0 */ __HAL_AFIO_REMAP_ADC1_ETRGREG_ENABLE(); - /**Configure the ADC multi-mode + /**Configure the ADC multi-mode */ multimode.Mode = ADC_DUALMODE_REGSIMULT; HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode); @@ -388,7 +389,7 @@ void MX_ADC2_Init(void) { // HAL_ADC_DeInit(&hadc2); // hadc2.Instance->CR2 = 0; - /**Common config + /**Common config */ hadc2.Instance = ADC2; hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE; diff --git a/build/hover.hex b/build/hover.hex new file mode 100644 index 0000000..8a6f50a --- /dev/null +++ b/build/hover.hex @@ -0,0 +1,782 @@ +:020000040800F2 +:1000000000C000206D2F00082D29000831290008AC +:1000100035290008392900083D29000800000000A2 +:10002000000000000000000000000000412900085E +:100030004529000800000000492900084D29000852 +:10004000B52F0008B52F0008B52F0008B52F000800 +:10005000B52F0008B52F0008B52F0008B52F0008F0 +:10006000B52F0008B52F0008B52F0008A92A0008F1 +:10007000B52F0008B52F0008B52F0008B52F0008D0 +:10008000B52F0008B52F0008B52F0008B52F0008C0 +:10009000B52F0008B52F0008B52F0008B52F0008B0 +:1000A000B52F0008B52F0008B52F0008B52F0008A0 +:1000B000B52F0008B52F0008B52F0008B52F000890 +:1000C000B52F0008B52F0008B52F0008B52F000880 +:1000D000B52F0008B52F0008B52F0008B52F000870 +:1000E000B52F0008B52F0008B52F0008B52F000860 +:1000F000B52F0008B52F0008B52F0008B52F000850 +:10010000B52F0008B52F0008B52F0008B52F00083F +:10011000B52F0008B52F0008B52F0008B52F00082F +:10012000B52F0008B52F0008B52F0008B52F00081F +:1001300000000000000000000000000000000000BF +:1001400000000000000000000000000000000000AF +:10015000000000000000000000000000000000009F +:10016000000000000000000000000000000000008F +:10017000000000000000000000000000000000007F +:10018000000000000000000000000000000000006F +:10019000000000000000000000000000000000005F +:1001A000000000000000000000000000000000004F +:1001B000000000000000000000000000000000003F +:1001C000000000000000000000000000000000002F +:1001D000000000000000000000000000000000001F +:0401E0005FF8E0F1F3 +:1001E800044B05481B1A062B02D9044B03B11847C8 +:1001F800704700BF1F0000201C0000200000000006 +:1002080005490648091A891001EBD171491002D035 +:10021800034B03B1184770471C0000201C00002046 +:100228000000000010B5064C237843B9FFF7D8FF4B +:10023800044B13B10448AFF300800123237010BDB1 +:100248001C000020000000000430000808B5084B1E +:100258001BB108480849AFF300800848036813B980 +:10026800BDE80840CCE7064B002BF9D09847F7E7E4 +:100278000000000004300008200000201C000020BE +:100288000000000081F0004102E000BF83F000435D +:1002980030B54FEA41044FEA430594EA050F08BF19 +:1002A80090EA020F1FBF54EA000C55EA020C7FEADD +:1002B800645C7FEA655C00F0E2804FEA5454D4EB5A +:1002C8005555B8BF6D420CDD2C4480EA020281EA24 +:1002D800030382EA000083EA010180EA020281EA5C +:1002E8000303362D88BF30BD11F0004F4FEA0131AE +:1002F8004FF4801C4CEA113102D0404261EB4101BD +:1003080013F0004F4FEA03334CEA133302D0524242 +:1003180063EB430394EA050F00F0A780A4F10104FE +:10032800D5F1200E0DDB02FA0EFC22FA05F2801838 +:1003380041F1000103FA0EF2801843FA05F359411E +:100348000EE0A5F120050EF1200E012A03FA0EFC9D +:1003580028BF4CF0020C43FA05F3C01851EBE371C7 +:1003680001F0004507D54FF0000EDCF1000C7EEBE4 +:1003780000006EEB0101B1F5801F1BD3B1F5001F22 +:100388000CD349085FEA30004FEA3C0C04F1010441 +:100398004FEA445212F5800F80F09A80BCF1004F6A +:1003A80008BF5FEA500C50F1000041EB045141EAEC +:1003B800050130BD5FEA4C0C404141EB010111F4ED +:1003C800801FA4F10104E9D191F0000F04BF014698 +:1003D8000020B1FA81F308BF2033A3F10B03B3F176 +:1003E80020020CDA0C3208DD02F1140CC2F10C0206 +:1003F80001FA0CF021FA02F10CE002F11402D8BF64 +:10040800C2F1200C01FA02F120FA0CFCDCBF41EA2F +:100418000C019040E41AA2BF01EB0451294330BDFE +:100428006FEA04041F3C1CDA0C340EDC04F11404DB +:10043800C4F1200220FA04F001FA02F340EA0300B2 +:1004480021FA04F345EA030130BDC4F10C04C4F1F8 +:10045800200220FA02F001FA04F340EA03002946D8 +:1004680030BD21FA04F0294630BD94F0000F83F422 +:10047800801306BF81F480110134013D4EE77FEA05 +:10048800645C18BF7FEA655C29D094EA050F08BF51 +:1004980090EA020F05D054EA000C04BF1946104632 +:1004A80030BD91EA030F1EBF0021002030BD5FEA76 +:1004B800545C05D14000494128BF41F0004130BD9E +:1004C80014F580043CBF01F5801130BD01F00045F2 +:1004D80045F0FE4141F470014FF0000030BD7FEA65 +:1004E800645C1ABF194610467FEA655C1CBF0B4660 +:1004F800024650EA013406BF52EA033591EA030F77 +:1005080041F4002130BD00BF90F0000F04BF00216E +:10051800704730B54FF4806404F132044FF00005A1 +:100528004FF0000150E700BF90F0000F04BF00211A +:10053800704730B54FF4806404F1320410F0004580 +:1005480048BF40424FF000013EE700BF42004FEA7B +:10055800E2014FEA31014FEA02701FBF12F07F43F8 +:1005680093F07F4F81F06051704792F0000F14BFF5 +:1005780093F07F4F704730B54FF4607401F0004539 +:1005880021F0004120E700BF50EA010208BF704790 +:1005980030B54FF000050AE050EA010208BF704785 +:1005A80030B511F0004502D5404261EB41014FF4EE +:1005B800806404F132045FEA915C3FF4DCAE4FF0F2 +:1005C80003025FEADC0C18BF03325FEADC0C18BFD9 +:1005D800033202EBDC02C2F1200300FA03FC20FA2A +:1005E80002F001FA03FE40EA0E0021FA02F1144477 +:1005F800C1E600BF70B54FF0FF0C4CF4E06C1CEA8C +:1006080011541DBF1CEA135594EA0C0F95EA0C0F00 +:1006180000F0DEF82C4481EA030621EA4C5123EA73 +:100628004C5350EA013518BF52EA033541F48011A2 +:1006380043F4801338D0A0FB02CE4FF00005E1FB55 +:1006480002E506F00042E0FB03E54FF00006E1FB9F +:1006580003569CF0000F18BF4EF0010EA4F1FF04E2 +:10066800B6F5007F64F5407404D25FEA4E0E6D4122 +:1006780046EB060642EAC62141EA55514FEAC52033 +:1006880040EA5E504FEACE2EB4F1FD0C88BFBCF5AF +:10069800E06F1ED8BEF1004F08BF5FEA500E50F160 +:1006A800000041EB045170BD06F0004646EA010126 +:1006B80040EA020081EA0301B4EB5C04C2BFD4EB58 +:1006C8000C0541EA045170BD41F480114FF0000E51 +:1006D800013C00F3AB8014F1360FDEBF002001F0BF +:1006E800004170BDC4F10004203C35DA0C341BDC39 +:1006F80004F11404C4F1200500FA05F320FA04F00B +:1007080001FA05F240EA020001F0004221F000413E +:1007180010EBD37021FA04F642EB06015EEA430EB1 +:1007280008BF20EAD37070BDC4F10C04C4F12005E1 +:1007380000FA04F320FA05F001FA04F240EA020094 +:1007480001F0004110EBD37041F100015EEA430E65 +:1007580008BF20EAD37070BDC4F1200500FA05F285 +:100768004EEA020E20FA04F301FA05F243EA020304 +:1007780021FA04F001F0004121FA04F220EA020013 +:1007880000EBD3705EEA430E08BF20EAD37070BD59 +:1007980094F0000F0FD101F00046400041EB010139 +:1007A80011F4801F08BF013CF7D041EA060195F01B +:1007B800000F18BF704703F00046520043EB0303D5 +:1007C80013F4801F08BF013DF7D043EA06037047C2 +:1007D80094EA0C0F0CEA135518BF95EA0C0F0CD0CD +:1007E80050EA410618BF52EA4306D1D181EA030113 +:1007F80001F000414FF0000070BD50EA410606BF0D +:100808001046194652EA430619D094EA0C0F02D151 +:1008180050EA013613D195EA0C0F05D152EA033696 +:100828001CBF104619460AD181EA030101F00041B4 +:1008380041F0FE4141F470014FF0000070BD41F0FD +:10084800FE4141F4780170BD70B54FF0FF0C4CF4D7 +:10085800E06C1CEA11541DBF1CEA135594EA0C0FF6 +:1008680095EA0C0F00F0A7F8A4EB050481EA030E43 +:1008780052EA03354FEA013100F088804FEA03332A +:100888004FF0805545EA131343EA12634FEA0222F8 +:1008980045EA111545EA10654FEA00260EF00041B9 +:1008A8009D4208BF964244F1FD0404F5407402D20B +:1008B8005B084FEA3202B61A65EB03055B084FEA9C +:1008C80032024FF480104FF4002CB6EB020E75EB99 +:1008D800030E22BFB61A754640EA0C005B084FEAC1 +:1008E8003202B6EB020E75EB030E22BFB61A75463E +:1008F80040EA5C005B084FEA3202B6EB020E75EB89 +:10090800030E22BFB61A754640EA9C005B084FEA00 +:100918003202B6EB020E75EB030E22BFB61A75460D +:1009280040EADC0055EA060E18D04FEA051545EAFC +:1009380016754FEA06164FEAC30343EA52734FEAA5 +:10094800C2025FEA1C1CC0D111F4801F0BD141EA1E +:1009580000014FF000004FF0004CB6E711F4801F83 +:1009680004BF01430020B4F1FD0C88BFBCF5E06F63 +:100978003FF6AFAEB5EB030C04BFB6EB020C5FEA73 +:10098800500C50F1000041EB045170BD0EF0004EC8 +:100998004EEA113114EB5C04C2BFD4EB0C0541EAFA +:1009A800045170BD41F480114FF0000E013C90E6F7 +:1009B80045EA060E8DE60CEA135594EA0C0F08BFBB +:1009C80095EA0C0F3FF43BAF94EA0C0F0AD150EABA +:1009D80001347FF434AF95EA0C0F7FF425AF10464D +:1009E80019462CE795EA0C0F06D152EA03353FF475 +:1009F800FDAE1046194622E750EA410618BF52EAF2 +:100A080043067FF4C5AE50EA41047FF40DAF52EAC5 +:100A180043057FF4EBAE12E74FF0FF3C06E000BF62 +:100A28004FF0010C02E000BF4FF0010C4DF804CD6F +:100A38004FEA410C7FEA6C5C4FEA430C18BF7FEA2F +:100A48006C5C1BD001B050EA410C0CBF52EA430C5D +:100A580091EA030F02BF90EA020F0020704710F1DD +:100A6800000F91EA030F58BF994208BF90422CBF6C +:100A7800D8176FEAE37040F0010070474FEA410C65 +:100A88007FEA6C5C02D150EA013C07D14FEA430C83 +:100A98007FEA6C5CD6D152EA033CD3D05DF8040BF4 +:100AA800704700BF8446104662468C461946634626 +:100AB80000E000BF01B5FFF7B7FF002848BF10F1FD +:100AC800000F01BD4DF808EDFFF7F4FF0CBF012042 +:100AD80000205DF808FB00BF4DF808EDFFF7EAFFBE +:100AE80034BF012000205DF808FB00BF4DF808ED79 +:100AF800FFF7E0FF94BF012000205DF808FB00BF6E +:100B08004DF808EDFFF7CEFF94BF012000205DF8F7 +:100B180008FB00BF4DF808EDFFF7C4FF34BF012004 +:100B280000205DF808FB00BF82B0084B1B68084A2C +:100B3800A2FB03235B0A00FB03F0019000BF019BAB +:100B48005A1E0192002BF9D102B070470000002014 +:100B5800D34D621070B582B00446036813F0010FDC +:100B68006BD0A84B5B6803F00C03042B0AD0A54B91 +:100B78005B6803F00C03082B0DD1A24B5B6813F4E0 +:100B8800803F08D09F4B1B6813F4003F55D0636823 +:100B9800002B52D1B8E16368B3F5803F05D1994A7B +:100BA800136843F48033136026E063B903F180438C +:100BB80003F504331A6822F480321A601A6822F4A2 +:100BC80080221A6018E0B3F5A02F0CD103F18043FE +:100BD800A3F53C331A6842F480221A601A6842F47A +:100BE80080321A6008E0874B1A6822F480321A6053 +:100BF8001A6822F480221A6063687BB101F010F849 +:100C0800054605E001F00CF8401B642800F27E81DF +:100C18007C4B1B6813F4003FF4D00EE001F000F8A1 +:100C2800054605E000F0FCFF401B642800F27081D7 +:100C3800744B1B6813F4003FF4D1236813F0020FC0 +:100C480050D0704B5B6813F00C0F0AD06D4B5B688B +:100C580003F00C03082B16D16A4B5B6813F4803F32 +:100C680011D1684B1B6813F0020F03D02369012BC5 +:100C780040F05081634A136823F0F803616943EA3E +:100C8800C10313602EE02369D3B101225E4B1A60C1 +:100C980000F0C6FF054605E000F0C2FF401B022831 +:100CA80000F23A81574B1B6813F0020FF4D0554AF3 +:100CB800136823F0F803616943EAC103136011E084 +:100CC8000022514B1A6000F0ABFF054605E000F02A +:100CD800A7FF401B022800F221814A4B1B6813F032 +:100CE800020FF4D1236813F0080F29D0A369ABB120 +:100CF8000122464B1A6000F093FF054605E000F01C +:100D08008FFF401B022800F20B813E4B5B6A13F0F9 +:100D1800020FF4D00120FFF707FF11E000223B4B40 +:100D28001A6000F07DFF054605E000F079FF401BE2 +:100D3800022800F2F780334B5B6A13F0020FF4D1FC +:100D4800236813F0040F00F089802E4BDB6913F041 +:100D5800805F0BD12B4BDA6942F08052DA61DB6994 +:100D680003F080530193019B012500E00025284BE7 +:100D78001B6813F4807F13D1254A136843F48073EA +:100D8800136000F04DFF064605E000F049FF801BA8 +:100D9800642800F2C9801E4B1B6813F4807FF4D0CE +:100DA800E368012B05D1174A136A43F00103136264 +:100DB80022E063B903F1804303F504331A6A22F091 +:100DC80001021A621A6A22F004021A6214E0052B60 +:100DD80009D10C4B1A6A42F004021A621A6A42F0EC +:100DE80001021A6208E0074B1A6A22F001021A622D +:100DF8001A6A22F004021A62E368CBB100F010FF0D +:100E080006460FE0001002400000424280044242C1 +:100E18000070004000F004FF801B41F288339842C4 +:100E280000F28480494B1B6A13F0020FF2D00FE0E6 +:100E380000F0F6FE064606E000F0F2FE801B41F2E6 +:100E48008833984274D8414B1B6A13F0020FF3D1D0 +:100E580025B13E4AD36923F08053D361E369002B5F +:100E680068D03A4A526802F00C02082A64D0022B71 +:100E780037D10022364B1A6000F0D2FE054604E056 +:100E880000F0CEFE401B022858D8304B1B6813F0E8 +:100E9800007FF5D1236AB3F5803F06D12B494B6813 +:100EA80023F40032A36813434B602848436823F4B3 +:100EB8007411236A626A13430B4343600122244B73 +:100EC8001A6000F0ADFE044604E000F0A9FE001B25 +:100ED800022835D81D4B1B6813F0007FF5D0002081 +:100EE80031E000221A4B1A6000F09AFE044604E032 +:100EF80000F096FE001B022824D8144B1B6813F040 +:100F0800007FF5D100201EE001201CE003201AE03C +:100F1800032018E0012016E0032014E0032012E06B +:100F2800032010E003200EE003200CE003200AE079 +:100F3800032008E0002006E0012004E0032002E08E +:100F4800032000E0032002B070BD00BF0010024083 +:100F58006000424230B486B0164D02AC2868696819 +:100F6800AA68EB680FC42B8AADF80430124B5A6894 +:100F780002F00C03082B19D1C2F3834306A90B44D2 +:100F880013F8103C12F4803F0CD00B4A5268C2F39D +:100F980040420A4412F8140C084AB2FBF0F003FB72 +:100FA80000F004E0064800FB03F000E0034806B048 +:100FB80030BC70471C3000080010024000127A0054 +:100FC80000093D0070B55C4B1B6803F007038B42BA +:100FD8000BD2594A136823F007030B4313601368B5 +:100FE80003F007038B4240F09780036813F0020F69 +:100FF80006D0524C636823F0F002836813436360A1 +:101008000D460446036813F0010F4DD04268012ACB +:1010180005D14A4B1B6813F4003F0DD17EE0022A2C +:1010280005D1464B1B6813F0007F05D178E0434B90 +:101038001B6813F0020F75D040494B6823F0030377 +:1010480013434B6000F0ECFD06466368012B0ED19C +:1010580006E000F0E5FD801B41F28833984263D832 +:10106800364B5B6803F00C03042BF2D11CE0022B17 +:1010780015D106E000F0D4FD801B41F28833984278 +:1010880054D82E4B5B6803F00C03082BF2D10BE00D +:1010980000F0C6FD801B41F28833984248D8274BA0 +:1010A8005B6813F00C0FF3D1234B1B6803F00703A5 +:1010B800AB420AD9204A136823F007032B43136075 +:1010C800136803F00703AB4234D1236813F0040F0D +:1010D80006D01A494B6823F4E062E36813434B6077 +:1010E800236813F0080F07D0144A536823F4605399 +:1010F800216943EAC1035360FFF72CFF0F4B5B687C +:10110800C3F303130E4AD35CD8400E4B186000207B +:1011180000F056FD002070BD012070BD012070BD9B +:10112800012070BD012070BD032070BD032070BD7B +:10113800032070BD012070BD002002400010024055 +:101148003030000800000020014B1868704700BFCD +:101158000000002008B5FFF7F7FF044B5B68C3F3F6 +:101168000223034AD35CD84008BD00BF00100240E8 +:101178004030000808B5FFF7E7FF044B5B68C3F38E +:10118800C223034AD35CD84008BD00BF0010024008 +:101198004030000830B4036A23F001030362036A95 +:1011A8004468826922F073020D682A4323F002031F +:1011B8008D682B43104DA84203D005F50065A84261 +:1011C80005D123F00803CD682B4323F004030A4D0F +:1011D800A84203D005F50065A84205D124F440745F +:1011E8004D692C438D692C43446082614A6842638F +:1011F800036230BC704700BF002C014030B4036A62 +:1012080023F480730362036A4468C26922F073029C +:101218000D682A4323F400738D6843EA0523124DB1 +:10122800A84203D005F50065A84206D123F400635F +:10123800CD6843EA052323F480630B4DA84203D00D +:1012480005F50065A84207D124F440544D6944EAE5 +:1012580005148D6944EA05144460C2614A68C26392 +:10126800036230BC704700BF002C014030B4036AF1 +:1012780023F480530362036A4468C26922F4E64295 +:101288000D6842EA052223F400538D6843EA0533CA +:10129800094DA84203D005F50065A84204D124F4FD +:1012A80080444D6944EA85144460C2614A68026416 +:1012B800036230BC704700BF002C014010B4036AC1 +:1012C800046A24F001040462846924F0F00444EA06 +:1012D800021223F00A031943826101625DF8044B8C +:1012E800704700BF10B4036A23F0100303628469D7 +:1012F800036A24F4704444EA023223F0A00343EA68 +:101308000111826101625DF8044B704710B4846872 +:1013180024F47F4442EA032319430C4384605DF8B4 +:10132800044B704710B50C460268936823F07003AD +:1013380049680B4323F0070321680B4393606368F4 +:10134800502B1FD002D8402B0BD010BD602B1FD0C4 +:10135800702B22D10068E168A2682369FFF7D6FFE5 +:1013680010BD0368196A1A6A22F001021A6202683B +:10137800936923F0F003246943EA04139361036833 +:10138800196210BD0068A1682269FFF797FF10BDB8 +:101398000068A1682269FFF7A5FF10BD704700BF6C +:1013A80038B590F83C30012B18D00446012580F858 +:1013B8003C50022380F83D30FFF7B4FF2268D36821 +:1013C80023F04003D3602268D36823F48043D360BA +:1013D80084F83D50002084F83C0038BD022038BD18 +:1013E8000368244A904212D002F5006290420ED05F +:1013F800B0F1804F0BD0A2F59832904207D002F599 +:101408008062904203D002F58062904203D123F0BB +:1014180070034A681343174A904212D002F50062DB +:1014280090420ED0B0F1804F0BD0A2F59832904286 +:1014380007D002F58062904203D002F580629042A4 +:1014480003D123F44073CA68134323F080034A6925 +:10145800134303608B68C3620B688362054B984231 +:1014680003D003F50063984201D10B69036301239C +:1014780043617047002C0140C0B110B5044690F894 +:101488003D3013F0FF0F04D1002380F83C30FFF704 +:1014980085FF022384F83D30214651F8040BFFF7FD +:1014A8009FFF012384F83D30002010BD01207047C4 +:1014B80030B4036A23F010030362036A4468826944 +:1014C80022F4E6420D6842EA052223F020038D68E3 +:1014D80043EA0513114DA84203D005F50065A8425B +:1014E80006D123F08003CD6843EA051323F04003B7 +:1014F8000A4DA84203D005F50065A84207D124F497 +:1015080040644D6944EA85048D6944EA8504446071 +:1015180082614A688263036230BC7047002C0140D4 +:1015280038B590F83C30012B66D00D4604460123AF +:1015380080F83C30022380F83D300C2A55D8DFE88B +:1015480002F0075454541A5454542E54545441001D +:101558000068FFF71FFE2268936943F00803936150 +:101568002268936923F004039361226891692B69C7 +:101578000B43936139E00068FFF79AFF226893698B +:1015880043F4006393612268936923F48063936151 +:1015980022689369296943EA0123936125E0006879 +:1015A800FFF72CFE2268D36943F00803D361226851 +:1015B800D36923F00403D3612268D1692B690B43F3 +:1015C800D36112E00068FFF751FE2268D36943F443 +:1015D8000063D3612268D36923F48063D3612268EE +:1015E800D369296943EA0123D361012384F83D3093 +:1015F800002084F83C0038BD022038BD10B4012317 +:101608008B40046A24EA03030362036A8A401A438C +:1016180002625DF8044B704710B504460068012269 +:10162800FFF7ECFF23680C4A934205D002F50062ED +:10163800934203D1012202E0012200E000221AB104 +:101648005A6C42F400425A642268136843F001035A +:101658001360002010BD00BF002C014010B404230B +:101668008B40046A24EA03030362036A8A401A432C +:1016780002625DF8044B704710B504460068042206 +:10168800FFF7ECFF2268536C43F40043536422686D +:10169800136843F001031360002010BD90F83C303C +:1016A800012B22D0012380F83C30CB6823F4407210 +:1016B8008B68134323F480624B68134323F400625E +:1016C8000B68134323F480520B69134323F400522D +:1016D8004B6913438A6923F44043134302685364F4 +:1016E800002380F83C30184670470220704700BF3E +:1016F80090F83C30012B21D030B4012280F83C20F6 +:10170800022380F83D300468636823F07003636047 +:10171800046865680B682B4363600468A36823F05A +:101728008003A3600468A5684B682B43A36080F816 +:101738003D20002380F83C30184601E00220704725 +:1017480030BC704790F82430012B27D0012380F853 +:10175800243003689A6812F0010F10D1124A926877 +:1017680012F0010F0BD1114A934208D110B45A68F4 +:1017780022F470240A6822435A60002309E0836A2D +:1017880043F0200383620123002280F824201846B6 +:101798007047002280F82420184601E00220704794 +:1017A8005DF8044B704700BF002801400024014049 +:1017B80000F00700064AD36823F4E0631B041B0CFF +:1017C80043EA002040F0BF6040F40030D06070472A +:1017D80000ED00E030B4164BDC68C4F30224C4F119 +:1017E8000705042D28BF0425231D062B01D9033C1A +:1017F80000E00024012303FA05F5013D2940A1403A +:10180800A340013B1A400A43002806DA00F00F0003 +:101818001201D2B2074B1A5407E01201D2B200F1FA +:10182800604000F5614080F8002330BC704700BF7D +:1018380000ED00E014ED00E0410900F01F00012375 +:101848008340024A42F82130704700BF00E100E0BF +:101858000138B0F1807F0AD2064B5860F021064A61 +:1018680082F823100020986007221A607047012030 +:10187800704700BF10E000E000ED00E0042805D14B +:10188800054A136843F0040313607047024A13685B +:1018980023F004031360704710E000E0704700BFB6 +:1018A80008B5FFF7FBFF08BDF0B583B000273C463D +:1018B800E2E00122A2400B681340934240F0DB8033 +:1018C8004D68122D2DD00BD8022D27D003D85DB32B +:1018D800012D1ED035E0032D30D0112D1BD030E066 +:1018E800684EB54220D008D8A6F58016B5421BD060 +:1018F80006F58036B54224D116E0634EB54213D0C2 +:1019080006F58036B5420FD0A6F58016B54218D137 +:101918000AE0CF6815E0CF68043712E0CF680837CF +:101928000FE0CF680C370CE08D684DB1012D02D166 +:101938000261082705E04261082702E0002700E06D +:101948000427FF2B01D8844601E000F1040CFF2B8B +:1019580002D84FEA840E03E0A4F1080E4FEA8E0E77 +:10196800DCF800600F2202FA0EF226EA020507FAF6 +:101978000EF22A43CCF800204A6812F0805F7AD031 +:10198800424A956945F001059561926902F00102A4 +:101998000192019AA208961C3D4D55F8266004F064 +:1019A800030E4FEA8E0E0F2505FA0EF526EA0506F8 +:1019B800384DA8421FD005F58065A84219D005F515 +:1019C8008065A84213D005F58065A8420DD005F5BD +:1019D8008065A84207D005F58065A84201D1052594 +:1019E8000AE0062508E0042506E0032504E00225B0 +:1019F80002E0012500E0002505FA0EF53543023224 +:101A0800234E46F822504A6812F4803F04D0224DF3 +:101A18002A681A432A6004E01F4D2A6822EA030252 +:101A28002A604A6812F4003F04D01B4D6A681A43C2 +:101A38006A6004E0184D6A6822EA03026A604A682C +:101A480012F4801F04D0144DAA681A43AA6004E057 +:101A5800114DAA6822EA0302AA604A6812F4001F1C +:101A680004D00D4DEA681343EB6004E00A4DEA68C0 +:101A780022EA0303EB6001340F2C7FF61AAF03B0A0 +:101A8800F0BD00BF0000211000003110001002401E +:101A98000000014000080140000401400AB1016152 +:101AA800704709040161704770B582B00446036845 +:101AB80013F0010F5CD03E4BDB6913F0805F0BD154 +:101AC8003B4BDA6942F08052DA61DB6903F08053FC +:101AD8000193019B012600E00026364B1B6813F496 +:101AE800807F12D1334A136843F48073136000F087 +:101AF80097F8054604E000F093F8401B64284FD897 +:101B08002C4B1B6813F4807FF5D0294B1B6A13F408 +:101B1800407321D0626802F440729A421CD0244A71 +:101B2800136A23F44070244901250D6000250D60D7 +:101B3800106213F0010F0FD000F072F8054606E0AE +:101B480000F06EF8401B41F2883398422AD8184BAF +:101B58001B6A13F0020FF3D015490B6A23F4407285 +:101B6800636813430B621EB1CB6923F08053CB61CA +:101B7800236813F0020F06D00D494B6823F4404246 +:101B8800A36813434B60236813F0100F0CD0084967 +:101B98004B6823F48002636913434B60002004E020 +:101BA800032002E0032000E0002002B070BD00BF67 +:101BB800001002400070004040044242704700BFDD +:101BC80010B50446074B1B680748A0FB0330800983 +:101BD800FFF73EFE4FF0FF3021460022FFF7FAFDE7 +:101BE800002010BD00000020D34D621008B5074A40 +:101BF800136843F0100313600320FFF7D9FD00209A +:101C0800FFF7DEFFFFF7DAFF002008BD00200240E3 +:101C1800024A136801331360704700BF5400002064 +:101C2800014B1868704700BF5400002030B583B0DE +:101C38000190FFF7F5FF0546019CB4F1FF3F00D086 +:101C48000134FFF7EDFF401BA042FAD303B030BDCB +:101C5800704700BF70B483B00023019390F824301C +:101C6800012B00F08380012380F824304B68062B79 +:101C78000DD80668756B03EB8303053B1F229A405A +:101C880025EA02040A689A40224372631CE00C2B7E +:101C98000DD80668356B03EB8303233B1F229A405C +:101CA80025EA02040A689A40224332630CE0066877 +:101CB800F56A03EB8303413B1F229A4025EA02049D +:101CC8000A689A402243F2620B68092B0DD906680C +:101CD800F56803EB43031E3B07229A4025EA0204FA +:101CE8008A689A402243F2600BE00668356903EB84 +:101CF800430307229A4025EA02048A689A4022434D +:101D080032610B68103B012B26D80368194A9342AD +:101D18001CD19A6812F4000F20D19A6842F400028C +:101D28009A600B68102B1BD1134B1B68134AA2FB3C +:101D380003239B0C03EB83035B00019302E0019BED +:101D4800013B0193019B002BF9D10AE0836A43F020 +:101D580020038362012304E0002302E0002300E063 +:101D68000023002280F82420184600E0022003B057 +:101D780070BC7047002401400000002083DE1B4334 +:101D880030B583B00023019303689A6812F0010FFD +:101D98002FD19A6842F001029A60174B1B68174AC4 +:101DA800A2FB03239B0C019302E0019B013B0193DF +:101DB800019B002BF9D10446FFF732FF054611E0DD +:101DC800FFF72EFF401B02280CD9A36A43F010032B +:101DD800A362E36A43F00103E362002384F824303A +:101DE800012007E023689B6813F0010FE8D000206A +:101DF80000E0002003B030BD0000002083DE1B435C +:101E080090F82430012B70D010B50446012380F8D7 +:101E18002430FFF7B5FF0346002861D1A26A22F4F7 +:101E2800407222F0010242F48072A26222683049B4 +:101E38008A4205D1A1F58061496811F4702F0ED14D +:101E4800A16A21F48011A162516811F4806F1CD03D +:101E5800A16A21F4405141F48051A16215E0A16AC0 +:101E680041F48011A16223498A4203D001F58061BF +:101E78008A420AD11F49496811F4806F05D0A16AC6 +:101E880021F4405141F48051A162A16A11F4805FAC +:101E980004D0E16A21F00601E16201E00021E1627B +:101EA800002184F824106FF0020111602268916803 +:101EB80001F46021B1F5602F0DD10D498A4205D199 +:101EC800A1F58061496811F4702F04D1916841F43B +:101ED800A001916007E0916841F48011916002E0EF +:101EE800002284F82420184610BD0220704700BF45 +:101EF800002801400024014038B503689A6812F0B0 +:101F0800010F1ED004469A6822F001029A60FFF77A +:101F180087FE05460EE0FFF783FE401B022809D91D +:101F2800A36A43F01003A362E36A43F00103E36288 +:101F3800012038BD23689B6813F0010FEBD1002006 +:101F480038BD002038BD00BF002800F0888070B57B +:101F58000446836A23B9C36280F82430FFF778FE09 +:101F68002046FFF7C9FFA36A13F0100F71D10028AC +:101F78006FD1A36A23F4885323F0020343F00203CA +:101F8800A36262682168374B994206D1E369B3F5C9 +:101F9800402F03D14FF4002300E0E3691343E568C1 +:101FA80043EA4503A268B2F5807F04D0012A05D12F +:101FB8004FF4807203E04FF4807200E000226669FB +:101FC800012E0FD135B9A569013D42EA453242F4E7 +:101FD800006207E0A56A45F02005A562E56A45F0BC +:101FE8000105E5624D6825F469452A434A60216880 +:101FF8008D681D4A2A401A438A60A268B2F5807F1C +:1020080001D0012A03D12269013A110500E000211B +:102018002568EA6A22F470020A43EA622268916833 +:10202800124A0A40934208D10023E362A36A23F0CC +:10203800030343F00103A36270BDA36A23F01203F4 +:1020480043F01003A362E36A43F00103E362012053 +:1020580070BDA36A43F01003A362012070BD012084 +:10206800704700BF003C0140FDF7E1FFFE0E1FFF77 +:102078002DE9F843814601680B6923F44052C3688F +:1020880013430B6181680369194343691943006865 +:10209800C26822F4B05323F00C030B43C360D9F891 +:1020A80000104B6923F44072D9F8183013434B6180 +:1020B800D9F800505B4B9D4259D1FFF75BF800EB14 +:1020C800800000EB8000D9F80440A400B0FBF4F4D1 +:1020D800554EA6FB043464092401FFF74BF800EBC6 +:1020E800800000EB8000D9F804309B00B0FBF3F7C8 +:1020F800FFF740F800EB800000EB8000D9F80430CF +:102108009B00B0FBF3F3A6FB03235B094FF06408C5 +:1021180008FB13731B013233A6FB03235B0903F08F +:10212800F0031C44FFF726F800EB800000EB80006A +:10213800D9F804309B00B0FBF3F7FFF71BF800EB6E +:10214800800000EB8000D9F804309B00B0FBF3F36B +:10215800A6FB03235B0908FB13731B013233A6FBA1 +:102168000323C3F343131C44AC60BDE8F883FEF7B4 +:10217800F1FF00EB800000EB8000D9F80440A400D8 +:10218800B0FBF4F4284EA6FB043464092401FEF7DE +:10219800E1FF00EB800000EB8000D9F804309B00E1 +:1021A800B0FBF3F7FEF7D6FF00EB800000EB8000F2 +:1021B800D9F804309B00B0FBF3F3A6FB03235B09BB +:1021C8004FF0640808FB13731B013233A6FB03238B +:1021D8005B0903F0F0031C44FEF7BCFF00EB800032 +:1021E80000EB8000D9F804309B00B0FBF3F7FEF752 +:1021F800B1FF00EB800000EB8000D9F804309B00B1 +:10220800B0FBF3F3A6FB03235B0908FB13731B0165 +:102218003233A6FB0323C3F343131C44AC60BDE86D +:10222800F88300BF003801401F85EB51704700BF9D +:1022380068B310B5044690F8393013F0FF0F04D195 +:10224800002380F83830FFF7F1FF242384F8393071 +:102258002268D36823F40053D3602046FFF708FFB1 +:102268002268136923F4904313612268536923F0A9 +:102278002A0353612268D36843F40053D3600020D3 +:10228800E063202384F8393084F83A3010BD012007 +:10229800704700BF0F4B1A6842F001021A60596874 +:1022A8000D4A0A405A601A6822F0847222F4803279 +:1022B8001A601A6822F480221A605A6822F4FE0210 +:1022C8005A604FF41F029A604FF00062034B9A6005 +:1022D800704700BF001002400000FFF800ED00E06A +:1022E80030B597B01F4BDA6942F48022DA61DA69B7 +:1022F80002F480220092009A5A6942F001025A615F +:102308005B6903F001030193019B174D06954FF498 +:10231800E13307930024089409940A9408230B9343 +:102328000C940D9406A8FFF783FF6B6943F08003B4 +:102338006B614FF480630293012304930223039398 +:1023480003230593094802A9FFF7AEFA084B1C605E +:10235800084A9A605C6090221A6070221C3B5A609E +:1023680017B030BD0010024000480040000C01408A +:102378001C000240044800402DE9F04F89B0734B1F +:102388009A6942F004029A619A6902F00402019281 +:10239800019A9A6942F008029A619A6902F0080261 +:1023A8000292029A9A6942F010029A619B6903F0BC +:1023B80010030393039B0023059306934FF0020831 +:1023C800CDF81C804FF0200B0DEB0B0444F810BD2A +:1023D8005F482146FFF768FA402504955C48214686 +:1023E800FFF762FA4FF0800ACDF810A0584821464E +:1023F800FFF75AFA4FF48066049656482146FFF7CD +:1024080053FA4FF40063049352482146FFF74CFAFD +:102418004FF4805704974F482146FFF745FA049731 +:102428004D482146FFF740FA4FF00109CDF81490C6 +:102438000427049746482146FFF736FA10230493E9 +:1024480045482146FFF730FACDF810B042482146FA +:10245800FFF72AFA03230593CDF810903D4821464B +:10246800FFF722FACDF810903B482146FFF71CFAF7 +:102478000823049337482146FFF716FACDF8108051 +:1024880034482146FFF710FA1023049331482146B7 +:10249800FFF70AFACDF810B02E482146FFF704FAE4 +:1024A80004972C482146FFF7FFF9CDF814800495CE +:1024B80028482146FFF7F8F9CDF810A0254821460D +:1024C800FFF7F2F94FF4807BCDF810B02148214690 +:1024D800FFF7EAF9CDF810A01F482146FFF7E4F905 +:1024E800CDF810901A482146FFF7DEF9CDF8108094 +:1024F80017482146FFF7D8F9CDF810B016482146FD +:10250800FFF7D2F94FF40073049313482146FFF7FD +:10251800CBF9049610482146FFF7C6F94FF400534B +:1025280004930B482146FFF7BFF94FF48043049307 +:1025380007482146FFF7B8F94FF4004304930448CD +:102548002146FFF7B1F909B0BDE8F08F001002404D +:10255800000C014000100140000801402DE9F04F37 +:1025680099B0754B9A6942F400629A619A6902F4CB +:1025780000620192019A9A6942F400529A619B6939 +:1025880003F400530293029B6C4EDFF8B891C6F82F +:102598000090002474604FF02008C6F808804FF4BB +:1025A800FA6BC6F80CB034617461B4613046FEF75A +:1025B80063FF102316931794304616A9FFF798F86F +:1025C80060230F931094119408271297139414946E +:1025D8004FF40073159330460FA92246FEF7A0FF6B +:1025E80030460FA90422FEF79BFF30460FA93A4652 +:1025F800FEF796FF4FF4006308934FF48063099346 +:102608000A94CDF82C800C940D940E9430460DEB62 +:102618000801FFF743F84A4DDFF82CA1C5F800A0E0 +:102628006C60C5F80880C5F80CB02C616C61AC61B1 +:102638002846FEF721FFCDF85880802317932846B7 +:1026480016A9FFF755F8049418A9052341F8543D35 +:102658002846FEF7A5FE60230F9310941194129755 +:10266800139414944FF40073159328460FA9224627 +:10267800FEF756FF28460FA90422FEF751FF284609 +:102688000FA93A46FEF74CFF4FF4006308934FF446 +:10269800806309930A94CDF82C800C940D940E94C1 +:1026A80028460DEB0801FEF7F9FFDAF8443023F469 +:1026B8000043CAF84430D9F8443023F40043C9F839 +:1026C800443028462146FEF7A7FF28460421FEF796 +:1026D800A3FF28463946FEF79FFF28462146FEF706 +:1026E800CBFF28460421FEF7C7FF28463946FEF7E8 +:1026F800C3FF30462146FEF78FFF30460421FEF720 +:102708008BFF30463946FEF787FF30462146FEF7F5 +:10271800B3FF30460421FEF7AFFF30463946FEF7D7 +:10272800ABFF2B6801221A633268136843F0010378 +:10273800136019B0BDE8F08F001002408800002037 +:102748000C010020002C0140003401402DE9F04329 +:1027580087B0414EB36943F40073B361B36903F4BE +:1027680000730093009B3D4C3D4B23604FF48073F6 +:10277800A3600025E56065614FF44023E36165606F +:102788004FF00508C4F810802046FFF7DDFB354AF6 +:10279800536843F48023536006A94FF4C02341F8DB +:1027A800043D2046FEF7CEFF012304930E22029239 +:1027B8000393204602A9FFF74DFA029502270397D3 +:1027C800204602A9FFF746FA04970B27029703232E +:1027D8000393204602A9FFF73DFA4FF00C09CDF804 +:1027E800089004230393204602A9FFF733FACDF893 +:1027F8000890CDF80C80204602A9FFF72BFA236831 +:102808009A6842F480729A609A6842F001029A606B +:10281800736943F001037361736903F00103019362 +:10282800019B114B1D60C3F80480104A9A60104A3E +:10283800DA6040F6A2221A601A6842F001021A60B1 +:10284800384629462A46FEF7C5FF3846FEF7F4FF04 +:1028580007B0BDE8F08300BF00100240C8000020A8 +:102868000024014000000140080002404C240140BF +:10287800F8000020F0B585B0274B9A6942F48062D1 +:102888009A619B6903F480630093009B234C244B5B +:1028980023604FF48073A3600023E36063614FF407 +:1028A8006022E2616360052626612046FFF74CFB43 +:1028B800012303930F2201920293204601A9FFF7F7 +:1028C800C9F90D23019302250295204601A9FFF7B6 +:1028D800C1F903950A23019303270297204601A90A +:1028E800FFF7B8F901950423029320460DEB030185 +:1028F800FFF7B0F901970296204601A9FFF7AAF958 +:1029080023689A6842F480729A609A6842F00102D9 +:102918009A6005B0F0BD00BF0010024058000020CA +:1029280000280140704700BFFEE700BFFEE700BF78 +:10293800FEE700BFFEE700BF704700BF704700BF5B +:10294800704700BF08B5FFF763F9FEF7A9FF08BD98 +:1029580030B597B002250C950123109310231193DD +:102968001395002414944FF4601315930CA8FEF7E4 +:10297800F1F80F230793089509944FF480630A939D +:102988000B9407A82946FEF71DFB01954FF4404319 +:10299800039301A8FFF788F8FEF7D6FB084BA3FBC3 +:1029A80000308009FEF754FF0420FEF767FF4FF060 +:1029B800FF3021462246FEF70DFF17B030BD00BF9D +:1029C800D34D621010B582B0FFF710F92D4CA369F2 +:1029D80043F00103A361A36903F001030193019B81 +:1029E8000320FEF7E5FE6FF00B0000210A46FEF714 +:1029F800F1FE6FF00A0000210A46FEF7EBFE6FF0C9 +:102A0800090000210A46FEF7E5FE6FF004000021E8 +:102A18000A46FEF7DFFE6FF0030000210A46FEF7C4 +:102A2800D9FE6FF0010000210A46FEF7D3FE4FF0F1 +:102A3800FF3000210A46FEF7CDFEFFF789FF6369E4 +:102A480023F001036361FFF797FCFFF787FDFFF7AA +:102A58007DFEFFF70FFFFFF743FC0B482021012203 +:102A6800FFF71CF80948FFF7CBF90948FFF7C8F941 +:102A78000020FFF7DBF89623064A1360064A136026 +:102A8800F6E700BF0010024000080140C80000201F +:102A980058000020380000204000002000000000FE +:102AA8000222994B5A60994B1B68B3F57A7F3ADA40 +:102AB8000133964A1360964A938899B295480368F9 +:102AC8000B4403EBD3735B100360D38899B292482D +:102AD80003680B4403EBD3735B100360138899B24C +:102AE8008E4803680B4403EBD3735B100360538871 +:102AF80099B28B4803680B4403EBD3735B100360F4 +:102B0800538999B2874803680B4403EBD3735B106E +:102B1800036013899AB284490B68134403EBD37397 +:102B28005B100B60704770B584B0794B5B899BB2C2 +:102B38007C4A1068181AFDF7F7FC71A3D3E9002343 +:102B4800FDF758FD0022794BFDF7E4FF28B1784ADC +:102B5800536C23F40043536404E0754A536C43F404 +:102B6800004353646A4B1B899BB26F4A1068181A5A +:102B7800FDF7DAFC62A3D3E90023FDF73BFD002251 +:102B88006A4BFDF7C7FF28B16A4A536C23F4004328 +:102B9800536404E0674A536C43F400435364664A41 +:102BA800936813F0200F0CBF01210021936813F0E4 +:102BB800400F0CBF01230023926812F0800F0CBF56 +:102BC800012400245D4A906810F4806F0CBF012036 +:102BD8000020956815F4006F0CBF01260026926846 +:102BE80012F4805F03EB440301EB4303544DEB5CA9 +:102BF80054490B600B6803F102030B600C68524BDD +:102C080083FB04E2A2EBE47202EB42024FEA4202C7 +:102C1800A4EB02020A600CBF02220022324400EB3D +:102C28004202A85C494A10601068023010601068BF +:102C380083FB0043A3EBE07303EB43035B00C31A7E +:102C480013600968324883889BB2324A12689A1A1C +:102C5800C3889BB2304800681B1A052918D8DFE8DA +:102C680001F003070A0D1013D31A394A136012E052 +:102C7800374B1A600FE0364B1A600CE0344A136089 +:102C880009E0334A136006E09B1A314A136002E0F8 +:102C980000222F4B1A601E4B988880B21D4A11687B +:102CA800401ADB889BB2591A0246002800DAC21D76 +:102CB800D2100B46002900DACB1D002100910191AA +:102CC800029103910846DB1000F0D8F8214A1368F6 +:102CD80001331360204B1A681A4B1B68052B48D820 +:102CE800DFE803F003070B3C3F431446524200253C +:102CF80042E05542144600223EE0554200243BE0A3 +:102D08007B14AE47E17A943F000002403C0000206B +:102D1800F800002004000020080000201400002013 +:102D2800180000200C0000201000002000001440B3 +:102D380000340140002C0140000C0140001001400B +:102D48004830000844000020ABAAAA2A4800002006 +:102D58004C0000205000002038000020544200257C +:102D68000AE054421546002206E015465242002465 +:102D780002E00022144615463C4B1B683C49096892 +:102D880005291AD8DFE801F003070B0E11151946BB +:102D98005B42002014E058421946002310E05842D4 +:102DA80000210DE0594200200AE05942184600234C +:102DB80006E018465B42002102E000231946184647 +:102DC80005F57A7540F2C676B54203DC0A2DB8BF20 +:102DD8000A2501E040F2C675264E756304F57A743B +:102DE80040F2C675AC4203DC0A2CB8BF0A2401E0E5 +:102DF80040F2C6741F4DAC6302F57A7240F2C67495 +:102E0800A24203DC0A2AB8BF0A2201E040F2C672D5 +:102E1800184CE26300F57A7240F2C670824203DC15 +:102E28000A2AB8BF0A2201E040F2C6721248426379 +:102E380001F57A7240F2C6718A4203DC0A2AB8BFE9 +:102E48000A2201E040F2C6720B498A6303F57A73DD +:102E580040F2C672934203DC0A2BB8BF0A2301E092 +:102E680040F2C673044AD36304B070BD400000202A +:102E78004800002000340140002C014030B4FF25F8 +:102E8800364C25707F30A84203DC20EAE070C0B2DF +:102E980000E0FF20314C60707F31FF2903DC21EA1C +:102EA800E171C9B200E0FF212C4881707F32FF2A0E +:102EB80003DC22EAE272D2B200E0FF222749CA709C +:102EC8007F33FF2B03DC23EAE373DBB200E0FF234D +:102ED800224A1371BDF908307F33FF2B03DC23EA44 +:102EE800E373DBB200E0FF231C4A5371BDF90C30D9 +:102EF8007F33FF2B03DC23EAE373DBB200E0FF231D +:102F0800164A9371BDF910307F33FF2B03DC23EA97 +:102F1800E373DBB200E0FF23104AD371BDF914302C +:102F28007F33FF2B03DC23EAE373DBB200E0FF23EC +:102F38000A4A13720A235372094B5B6863B9084B38 +:102F48001A6822F001021A600A225A60034ADA60FB +:102F58001A6842F001021A6030BC70474C01002028 +:102F68001C000240002103E00B4B5B584350043126 +:102F78000A480B4B42189A42F6D30A4A02E0002349 +:102F880042F8043B084B9A42F9D3FFF783F900F063 +:102F98000FF8FFF717FD70475830000800000020B1 +:102FA8001C0000201C000020B8020020FEE70000E2 +:102FB8000E4B70B51E460E4C0025E41AA410A5420F +:102FC80004D056F8253098470135F8E700F016F890 +:102FD800084B094C1E46E41AA4100025A54204D04B +:102FE80056F8253098470135F8E770BD503000088D +:102FF800503000085030000854300008F8B500BFC1 +:10300800F8BC08BC9E467047F8B500BFF8BC08BCC1 +:043018009E46704719 +:10301C0002030405060708090A0B0C0D0E0F10100D +:10302C000102000000000000000000000102030487 +:10303C000607080900000000010203040000020159 +:04304C000405030074 +:04305000550200081D +:043054002D02000841 +:1030580000A24A04D0070000D0070000D0070000F3 +:0C306800D0070000D0070000D0070000D7 +:0400000508002F6D53 +:00000001FF