diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject
index af3ca006..2340603b 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.cproject
@@ -51,10 +51,12 @@
+
+
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject
index 250cbc2b..24117a89 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.mxproject
@@ -1,8 +1,8 @@
[PreviousLibFiles]
-LibFiles=Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f303xc.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\system_stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h;
+LibFiles=Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_spi.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_spi.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_system.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_can.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_bus.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_crs.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_utils.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_exti.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_def.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_rcc_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_gpio_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_dma.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_cortex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pwr_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_flash_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_i2c_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_exti.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_spi.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usart.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_hal_pcd_ex.h;Drivers\STM32F3xx_HAL_Driver\Inc\stm32f3xx_ll_usb.h;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f303xc.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Include\system_stm32f3xx.h;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h;
[PreviousUsedCubeIDEFiles]
-SourceFiles=Core\Src\main.c;Core\Src\stm32f3xx_it.c;Core\Src\stm32f3xx_hal_msp.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;;;
+SourceFiles=Core\Src\main.c;Core\Src\stm32f3xx_it.c;Core\Src\stm32f3xx_hal_msp.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_spi.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_utils.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usb.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_can.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_rcc_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_gpio.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_cortex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pwr_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_flash_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_i2c_ex.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_exti.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_spi.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_dma.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_ll_usart.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd.c;Drivers\STM32F3xx_HAL_Driver\Src\stm32f3xx_hal_pcd_ex.c;Drivers\CMSIS\Device\ST\STM32F3xx\Source\Templates\system_stm32f3xx.c;Core\Src\system_stm32f3xx.c;;;
HeaderPath=Drivers\STM32F3xx_HAL_Driver\Inc;Drivers\STM32F3xx_HAL_Driver\Inc\Legacy;Drivers\CMSIS\Device\ST\STM32F3xx\Include;Drivers\CMSIS\Include;Core\Inc;
CDefines=USE_FULL_LL_DRIVER;USE_HAL_DRIVER;STM32F303xC;USE_FULL_LL_DRIVER;USE_HAL_DRIVER;USE_HAL_DRIVER;
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project
index f2a80080..15c127f3 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.project
@@ -38,7 +38,7 @@
- 1686569576442
+ 1686649539105
Loader
9
@@ -46,6 +46,15 @@
1.0-name-matches-false-false-ARMCM4_STM32F3
+
+ 1686649539109
+ Loader
+ 9
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-third_party
+
+
1686569589593
Loader/ARMCM4_STM32F3
@@ -55,6 +64,33 @@
1.0-name-matches-false-false-GCC
+
+ 1686649554358
+ Loader/third_party
+ 9
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-fatfs
+
+
+
+ 1686649567497
+ Loader/third_party/fatfs
+ 9
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-src
+
+
+
+ 1686649590858
+ Loader/third_party/fatfs/src/option
+ 5
+
+ org.eclipse.ui.ide.multiFilter
+ 1.0-name-matches-false-false-unicode.c
+
+
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml
index d60e03c8..31e7eed5 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h
index d3314a56..f649d17e 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/blt_conf.h
@@ -117,6 +117,42 @@
#define BOOT_COM_USB_RX_MAX_DATA (63)
+/****************************************************************************************
+* F I L E S Y S T E M I N T E R F A C E C O N F I G U R A T I O N
+****************************************************************************************/
+/* The file system interface is selected by setting the BOOT_FILE_SYS_ENABLE configurable
+ * to 1. This enables support for firmware updates from a file stored on a locally
+ * attached file system such as an SD-card. Note that this interface can be enabled
+ * together with one of the remote communication interfaces such as UART, CAN or USB.
+ *
+ * Set BOOT_FILE_LOGGING_ENABLE to 1 if you would like log messages to be created during
+ * a firmware update. The hook function FileFirmwareUpdateLogHook() will be called each
+ * time a new string formatted log entry is available. This could be used during testing
+ * by outputting the string on UART or to create a log file on the file system itself.
+ *
+ * Set BOOT_FILE_ERROR_HOOK_ENABLE to 1 if you would like to be informed in case an error
+ * occurs during the firmware update. This could for example be used to turn on an error
+ * LED to inform the user that something went wrong. Inspecting the log messages provides
+ * additional information on the error cause.
+ *
+ * Set BOOT_FILE_STARTED_HOOK_ENABLE to 1 if you would like to be informed when a new
+ * firmware update is started by the bootloader.
+ *
+ * Set BOOT_FILE_COMPLETED_HOOK_ENABLE to 1 if you would like to be informed when a
+ * firmware update is completed by the bootloader.
+ */
+/** \brief Enable/disable support for firmware updates from a locally attached storage.*/
+#define BOOT_FILE_SYS_ENABLE (1)
+/** \brief Enable/disable logging messages during firmware updates. */
+#define BOOT_FILE_LOGGING_ENABLE (1)
+/** \brief Enable/disable a hook function that is called upon detection of an error. */
+#define BOOT_FILE_ERROR_HOOK_ENABLE (1)
+/** \brief Enable/disable a hook function that is called at the start of the update. */
+#define BOOT_FILE_STARTED_HOOK_ENABLE (1)
+/** \brief Enable/disable a hook function that is called at the end of the update. */
+#define BOOT_FILE_COMPLETED_HOOK_ENABLE (1)
+
+
/****************************************************************************************
* B A C K D O O R E N T R Y C O N F I G U R A T I O N
****************************************************************************************/
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c
index ca6cbf48..1a6aa7e7 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/flash_layout.c
@@ -53,7 +53,22 @@ static const tFlashSector flashLayout[] =
/* { 0x08006800, 0x00800 }, flash sector 13 - 2kb (reserved for bootloader)*/
/* { 0x08007000, 0x00800 }, flash sector 14 - 2kb (reserved for bootloader)*/
/* { 0x08007800, 0x00800 }, flash sector 15 - 2kb (reserved for bootloader)*/
- { 0x08008000, 0x08000 }, /* flash sectors 16 to 31 - 32kb */
+ /* { 0x08008000, 0x00800 }, flash sector 16 - 2kb (reserved for bootloader)*/
+ /* { 0x08008800, 0x00800 }, flash sector 17 - 2kb (reserved for bootloader)*/
+ /* { 0x08009000, 0x00800 }, flash sector 18 - 2kb (reserved for bootloader)*/
+ /* { 0x08009800, 0x00800 }, flash sector 19 - 2kb (reserved for bootloader)*/
+ { 0x0800A000, 0x00800 }, /* flash sector 20 - 2kb */
+ { 0x0800A800, 0x00800 }, /* flash sector 21 - 2kb */
+ { 0x0800B000, 0x00800 }, /* flash sector 22 - 2kb */
+ { 0x0800B800, 0x00800 }, /* flash sector 23 - 2kb */
+ { 0x0800C000, 0x00800 }, /* flash sector 24 - 2kb */
+ { 0x0800C800, 0x00800 }, /* flash sector 25 - 2kb */
+ { 0x0800D000, 0x00800 }, /* flash sector 26 - 2kb */
+ { 0x0800D800, 0x00800 }, /* flash sector 27 - 2kb */
+ { 0x0800E000, 0x00800 }, /* flash sector 28 - 2kb */
+ { 0x0800E800, 0x00800 }, /* flash sector 29 - 2kb */
+ { 0x0800F000, 0x00800 }, /* flash sector 30 - 2kb */
+ { 0x0800F800, 0x00800 }, /* flash sector 31 - 2kb */
{ 0x08010000, 0x08000 }, /* flash sectors 32 to 47 - 32kb */
{ 0x08018000, 0x08000 }, /* flash sectors 48 to 63 - 32kb */
{ 0x08020000, 0x08000 }, /* flash sectors 64 to 79 - 32kb */
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c
index bf19902e..b620c0eb 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/App/hooks.c
@@ -300,6 +300,168 @@ blt_bool NvmWriteChecksumHook(void)
#endif /* BOOT_NVM_CHECKSUM_HOOKS_ENABLE > 0 */
+/****************************************************************************************
+* F I L E S Y S T E M I N T E R F A C E H O O K F U N C T I O N S
+****************************************************************************************/
+
+#if (BOOT_FILE_SYS_ENABLE > 0)
+
+/****************************************************************************************
+* Constant data declarations
+****************************************************************************************/
+/** \brief Firmware filename. */
+static const blt_char firmwareFilename[] = "/demoprog_olimexino_stm32f3.srec";
+
+
+/****************************************************************************************
+* Local data declarations
+****************************************************************************************/
+#if (BOOT_FILE_LOGGING_ENABLE > 0)
+/** \brief Data structure for grouping log-file related information. */
+static struct
+{
+ FIL handle; /**< FatFS handle to the log-file. */
+ blt_bool canUse; /**< Flag to indicate if the log-file can be used. */
+} logfile;
+#endif
+
+
+/************************************************************************************//**
+** \brief Callback that gets called to check whether a firmware update from
+** local file storage should be started. This could for example be when
+** a switch is pressed, when a certain file is found on the local file
+** storage, etc.
+** \return BLT_TRUE if a firmware update is requested, BLT_FALSE otherwise.
+**
+****************************************************************************************/
+blt_bool FileIsFirmwareUpdateRequestedHook(void)
+{
+ FILINFO fileInfoObject = { 0 }; /* needs to be zeroed according to f_stat docs */;
+
+ /* Current example implementation looks for a predetermined firmware file on the
+ * SD-card. If the SD-card is accessible and the firmware file was found the firmware
+ * update is started. When successfully completed, the firmware file is deleted.
+ * During the firmware update, progress information is written to a file called
+ * bootlog.txt and additionally outputted on UART @57600 bps for debugging purposes.
+ */
+ /* check if firmware file is present and SD-card is accessible */
+ if (f_stat(firmwareFilename, &fileInfoObject) == FR_OK)
+ {
+ /* check if the filesize is valid and that it is not a directory */
+ if ( (fileInfoObject.fsize > 0) && (!(fileInfoObject.fattrib & AM_DIR)) )
+ {
+ /* all conditions are met to start a firmware update from local file storage */
+ return BLT_TRUE;
+ }
+ }
+ /* still here so no firmware update request is pending */
+ return BLT_FALSE;
+} /*** end of FileIsFirmwareUpdateRequestedHook ***/
+
+
+/************************************************************************************//**
+** \brief Callback to obtain the filename of the firmware file that should be
+** used during the firmware update from the local file storage. This
+** hook function is called at the beginning of the firmware update from
+** local storage sequence.
+** \return valid firmware filename with full path or BLT_NULL.
+**
+****************************************************************************************/
+const blt_char *FileGetFirmwareFilenameHook(void)
+{
+ return firmwareFilename;
+} /*** end of FileGetFirmwareFilenameHook ***/
+
+
+#if (BOOT_FILE_STARTED_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called to inform the application that a firmware
+** update from local storage just started.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateStartedHook(void)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* create/overwrite the logfile */
+ logfile.canUse = BLT_FALSE;
+ if (f_open(&logfile.handle, "/bootlog.txt", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK)
+ {
+ logfile.canUse = BLT_TRUE;
+ }
+ #endif
+} /*** end of FileFirmwareUpdateStartedHook ***/
+#endif /* BOOT_FILE_STARTED_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_COMPLETED_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called to inform the application that a firmware
+** update was successfully completed.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateCompletedHook(void)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* close the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ f_close(&logfile.handle);
+ }
+ /* now delete the firmware file from the disk since the update was successful */
+ f_unlink(firmwareFilename);
+ #endif
+} /*** end of FileFirmwareUpdateCompletedHook ***/
+#endif /* BOOT_FILE_COMPLETED_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_ERROR_HOOK_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called in case an error occurred during a firmware
+** update. Refer to for a list of available error codes.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateErrorHook(blt_int8u error_code)
+{
+ #if (BOOT_FILE_LOGGING_ENABLE > 0)
+ /* error detected which stops the firmware update, so close the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ f_close(&logfile.handle);
+ }
+ #endif
+} /*** end of FileFirmwareUpdateErrorHook ***/
+#endif /* BOOT_FILE_ERROR_HOOK_ENABLE > 0 */
+
+
+#if (BOOT_FILE_LOGGING_ENABLE > 0)
+/************************************************************************************//**
+** \brief Callback that gets called each time new log information becomes
+** available during a firmware update.
+** \param info_string Pointer to a character array with the log entry info.
+** \return none.
+**
+****************************************************************************************/
+void FileFirmwareUpdateLogHook(blt_char *info_string)
+{
+ /* write the string to the log file */
+ if (logfile.canUse == BLT_TRUE)
+ {
+ if (f_puts(info_string, &logfile.handle) < 0)
+ {
+ logfile.canUse = BLT_FALSE;
+ f_close(&logfile.handle);
+ }
+ }
+} /*** end of FileFirmwareUpdateLogHook ***/
+#endif /* BOOT_FILE_LOGGING_ENABLE > 0 */
+
+
+#endif /* BOOT_FILE_SYS_ENABLE > 0 */
+
+
/****************************************************************************************
* S E E D / K E Y S E C U R I T Y H O O K F U N C T I O N S
****************************************************************************************/
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc
index 908f55ea..13721592 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Boot.ioc
@@ -11,29 +11,35 @@ CAN.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,BS1,BS2
CAN.NART=ENABLE
CAN.Prescaler=8
File.Version=6
+GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
Mcu.CPN=STM32F303RCT6
Mcu.Family=STM32F3
Mcu.IP0=CAN
Mcu.IP1=NVIC
Mcu.IP2=RCC
-Mcu.IP3=USART3
-Mcu.IP4=USB
-Mcu.IPNb=5
+Mcu.IP3=SPI2
+Mcu.IP4=USART3
+Mcu.IP5=USB
+Mcu.IPNb=6
Mcu.Name=STM32F303R(B-C)Tx
Mcu.Package=LQFP64
Mcu.Pin0=PF0-OSC_IN
Mcu.Pin1=PF1-OSC_OUT
-Mcu.Pin10=PB9
+Mcu.Pin10=PA12
+Mcu.Pin11=PC12
+Mcu.Pin12=PD2
+Mcu.Pin13=PB8
+Mcu.Pin14=PB9
Mcu.Pin2=PA0
Mcu.Pin3=PA5
Mcu.Pin4=PB10
Mcu.Pin5=PB11
-Mcu.Pin6=PA11
-Mcu.Pin7=PA12
-Mcu.Pin8=PC12
-Mcu.Pin9=PB8
-Mcu.PinsNb=11
+Mcu.Pin6=PB13
+Mcu.Pin7=PB14
+Mcu.Pin8=PB15
+Mcu.Pin9=PA11
+Mcu.PinsNb=15
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F303RCTx
@@ -66,6 +72,15 @@ PB10.Signal=USART3_TX
PB11.Locked=true
PB11.Mode=Asynchronous
PB11.Signal=USART3_RX
+PB13.Locked=true
+PB13.Mode=Full_Duplex_Master
+PB13.Signal=SPI2_SCK
+PB14.Locked=true
+PB14.Mode=Full_Duplex_Master
+PB14.Signal=SPI2_MISO
+PB15.Locked=true
+PB15.Mode=Full_Duplex_Master
+PB15.Signal=SPI2_MOSI
PB8.Locked=true
PB8.Mode=CAN_Activate
PB8.Signal=CAN_RX
@@ -75,6 +90,10 @@ PC12.GPIOParameters=PinState
PC12.Locked=true
PC12.PinState=GPIO_PIN_SET
PC12.Signal=GPIO_Output
+PD2.GPIOParameters=GPIO_Speed
+PD2.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
+PD2.Locked=true
+PD2.Signal=GPIO_Output
PF0-OSC_IN.Mode=HSE-External-Oscillator
PF0-OSC_IN.Signal=RCC_OSC_IN
PF1-OSC_OUT.Mode=HSE-External-Oscillator
@@ -107,7 +126,7 @@ ProjectManager.StackSize=0x1000
ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_CAN_Init-CAN-true-HAL-false,4-MX_USART3_UART_Init-USART3-false-LL-true,5-MX_USB_PCD_Init-USB-true-HAL-false
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-LL-false,2-MX_GPIO_Init-GPIO-false-LL-true,3-MX_CAN_Init-CAN-true-HAL-false,4-MX_USART3_UART_Init-USART3-false-LL-true,5-MX_USB_PCD_Init-USB-true-HAL-false,6-MX_SPI2_Init-SPI2-true-LL-false
RCC.ADC12outputFreq_Value=72000000
RCC.ADC34outputFreq_Value=72000000
RCC.AHBFreq_Value=72000000
@@ -149,6 +168,14 @@ RCC.USART2Freq_Value=36000000
RCC.USART3Freq_Value=36000000
RCC.USBFreq_Value=48000000
RCC.VCOOutput2Freq_Value=8000000
+SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2
+SPI2.CalculateBaudRate=18.0 MBits/s
+SPI2.DataSize=SPI_DATASIZE_8BIT
+SPI2.Direction=SPI_DIRECTION_2LINES
+SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,NSSPMode,BaudRatePrescaler
+SPI2.Mode=SPI_MODE_MASTER
+SPI2.NSSPMode=SPI_NSS_PULSE_DISABLE
+SPI2.VirtualType=VM_MASTER
USART3.BaudRate=57600
USART3.IPParameters=VirtualMode-Asynchronous,BaudRate
USART3.VirtualMode-Asynchronous=VM_ASYNC
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h
index b07cca5a..21dac54d 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Inc/main.h
@@ -36,6 +36,7 @@ extern "C" {
#include "stm32f3xx_ll_utils.h"
#include "stm32f3xx_ll_pwr.h"
#include "stm32f3xx_ll_dma.h"
+#include "stm32f3xx_ll_spi.h"
#include "stm32f3xx_ll_usart.h"
#include "stm32f3xx_ll_gpio.h"
@@ -63,6 +64,7 @@ extern "C" {
void Error_Handler(void);
void MX_CAN_Init(void);
void MX_USB_PCD_Init(void);
+void MX_SPI2_Init(void);
/* USER CODE BEGIN EFP */
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c
index ce36861c..dc41fb44 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/main.c
@@ -192,6 +192,64 @@ void MX_CAN_Init(void)
}
+/**
+ * @brief SPI2 Initialization Function
+ * @param None
+ * @retval None
+ */
+void MX_SPI2_Init(void)
+{
+
+ /* USER CODE BEGIN SPI2_Init 0 */
+ /* Note that this function is generated but not actually used. The FatFS port handles
+ * the SPI initialization.
+ */
+ /* USER CODE END SPI2_Init 0 */
+
+ LL_SPI_InitTypeDef SPI_InitStruct = {0};
+
+ LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ /* Peripheral clock enable */
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
+
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
+ /**SPI2 GPIO Configuration
+ PB13 ------> SPI2_SCK
+ PB14 ------> SPI2_MISO
+ PB15 ------> SPI2_MOSI
+ */
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_13|LL_GPIO_PIN_14|LL_GPIO_PIN_15;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_5;
+ LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* USER CODE BEGIN SPI2_Init 1 */
+
+ /* USER CODE END SPI2_Init 1 */
+ /* SPI2 parameter configuration*/
+ SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
+ SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
+ SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
+ SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
+ SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
+ SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
+ SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
+ SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
+ SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
+ SPI_InitStruct.CRCPoly = 7;
+ LL_SPI_Init(SPI2, &SPI_InitStruct);
+ LL_SPI_SetStandard(SPI2, LL_SPI_PROTOCOL_MOTOROLA);
+ LL_SPI_DisableNSSPulseMgt(SPI2);
+ /* USER CODE BEGIN SPI2_Init 2 */
+
+ /* USER CODE END SPI2_Init 2 */
+
+}
+
/**
* @brief USART3 Initialization Function
* @param None
@@ -293,10 +351,14 @@ static void MX_GPIO_Init(void)
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOC);
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOD);
/**/
LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5);
+ /**/
+ LL_GPIO_ResetOutputPin(GPIOD, LL_GPIO_PIN_2);
+
/**/
LL_GPIO_SetOutputPin(GPIOC, LL_GPIO_PIN_12);
@@ -322,6 +384,14 @@ static void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ /**/
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_2;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ LL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+
}
/* USER CODE BEGIN 4 */
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c
index 3d59d38a..77909ba1 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Core/Src/stm32f3xx_hal_msp.c
@@ -235,13 +235,17 @@ void HAL_MspDeInit(void)
LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_5);
/* Deinit used GPIOs, except GPIOC to make sure USB DISC (PC12) stays high. */
+ LL_GPIO_DeInit(GPIOD);
LL_GPIO_DeInit(GPIOB);
LL_GPIO_DeInit(GPIOA);
/* UART clock disable. */
LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_USART3);
+ /* SPI clock disable. */
+ LL_APB1_GRP1_DisableClock(LL_APB1_GRP1_PERIPH_SPI2);
/* GPIO ports clock disable, except GPIOC to make sure USB DISC (PC12) stays high. */
+ LL_AHB1_GRP1_DisableClock(LL_AHB1_GRP1_PERIPH_GPIOD);
LL_AHB1_GRP1_DisableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
LL_AHB1_GRP1_DisableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec
index 78a33f3d..b446e661 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Debug/openblt_olimexino_stm32f3.srec
@@ -1,1463 +1,2358 @@
S02100006F70656E626C745F6F6C696D6578696E6F5F73746D333266332E737265632B
-S3150800000000A00020CD060008A1060008A3060008E7
-S31508000010A5060008A7060008A906000800000000B3
-S31508000020000000000000000000000000AB06000809
-S31508000030AD06000800000000AF060008B10600087B
-S315080000401D0700081D0700081D0700081D070008F2
-S315080000501D0700081D0700081D0700081D070008E2
-S315080000601D0700081D0700081D0700081D070008D2
-S315080000701D0700081D0700081D0700081D070008C2
-S315080000801D0700081D0700081D0700081D070008B2
-S315080000901D0700081D0700081D0700081D070008A2
-S315080000A01D0700081D0700081D0700081D07000892
-S315080000B01D0700081D0700081D0700081D07000882
-S315080000C01D0700081D0700081D0700081D07000872
-S315080000D01D0700081D0700081D0700081D07000862
-S315080000E01D0700081D0700081D0700081D07000852
-S315080000F01D0700081D0700081D0700081D07000842
-S315080001000000000000000000000000001D070008B5
-S315080001101D0700081D0700081D0700081D07000821
-S315080001201D0700081D0700081D0700081D07000811
-S315080001301D0700081D070008000000000000000059
-S315080001401D0700081D0700081D070008000000001D
+S3150800000000A00020F1070008C5070008C707000878
+S31508000010C9070008CB070008CD0700080000000044
+S31508000020000000000000000000000000CF070008E4
+S31508000030D107000800000000D3070008D50700080C
+S31508000040410800084108000841080008410800085E
+S31508000050410800084108000841080008410800084E
+S31508000060410800084108000841080008410800083E
+S31508000070410800084108000841080008410800082E
+S31508000080410800084108000841080008410800081E
+S31508000090410800084108000841080008410800080E
+S315080000A041080008410800084108000841080008FE
+S315080000B041080008410800084108000841080008EE
+S315080000C041080008410800084108000841080008DE
+S315080000D041080008410800084108000841080008CE
+S315080000E041080008410800084108000841080008BE
+S315080000F041080008410800084108000841080008AE
+S315080001000000000000000000000000004108000890
+S31508000110410800084108000841080008410800088D
+S31508000120410800084108000841080008410800087D
+S31508000130410800084108000800000000000000000F
+S3150800014041080008410800084108000800000000AE
S315080001500000000000000000000000000000000091
-S3150800016000000000000000001D0700081D07000829
-S315080001701D07000800000000000000000000000045
-S30D08000180000000001D0700083D
+S3150800016000000000000000004108000841080008DF
+S315080001704108000800000000000000000000000020
+S30D08000180000000004108000818
S3150800018810B5054C237833B9044B13B10448AFF3BB
S3150800019800800123237010BDC8000020000000005D
-S315080001A8D058000808B5034B1BB103490348AFF3F9
-S315080001B8008008BD00000000CC000020D0580008C8
-S315080001C808B504F027FE08BD08B504F031FE08BDD9
+S315080001A85C89000808B5034B1BB103490348AFF33C
+S315080001B8008008BD00000000CC0000205C8900080B
+S315080001C808B505F045FB08BD08B505F051FB08BD9F
S315080001D808B54FF090431B6913F0010F01D10020B1
-S315080001E808BD00F04BF80120FAE70000012804D002
+S315080001E808BD00F0B5F80120FAE70000012804D098
S315080001F8044B4FF480529A617047024B4FF4805271
S315080002089A627047000800487047704708B5642026
-S3150800021800F006F808BD08B500F008F808BD0000A3
-S31508000228014B1880704700BFE400002008B504F0A9
-S31508000238ADFB0F4B1B68984210D30E4B1B7873B94E
-S315080002480C4B01221A704FF0904320229A6104F051
-S315080002589DFB094B1B880344054A136008BD054BDB
-S3150800026800221A704FF0904320229A62EFE700BFE7
-S31508000278E8000020E6000020E40000204FF0904344
-S3150800028820229A62704700002DE9F0438BB00024BB
-S31508000298049405940694079408940994264B5A6975
-S315080002A842F480025A615A6902F480020392039A58
-S315080002B85A6942F400325A615A6902F400320292C3
-S315080002C8029A5A6942F480225A615A6902F48022CB
-S315080002D80192019A5A6942F400225A615B6903F449
-S315080002E800230093009B4FF090464FF02009C6F86C
-S315080002F82890124F4FF48058C7F81880012504959E
-S31508000308089504A9304602F077F8CDF810900595B7
-S3150800031806940794089404A9304602F06DF8CDF8B7
-S315080003281080059506940794089404A9384602F09F
-S3150800033863F80BB0BDE8F0830010024000080048D7
-S3150800034810B590B0002409940A940B940C940D9453
-S315080003580E940F94039404940594069407940894A9
-S31508000368224BDA6942F48022DA61DA6902F48022D9
-S315080003780292029A5A6942F480225A615B6903F426
-S3150800038880230193019B4FF440630393022304934C
-S31508000398032305930723089303A9154802F02CF8A5
-S315080003A84FF4614309930A940B940C940C230D9308
-S315080003B80E940F9409A90F4802F06CFA0E4A52E8EF
-S315080003C8003F23F4806342E800310029F6D1094B3F
-S315080003D85A6822F490425A609A6822F02A029A6069
-S315080003E81A6842F001021A6010B010BD00100240E7
-S315080003F800040048004800400848004072B6FEE776
-S3150800040808B52C4A136823F0070343F00203136060
-S31508000418284B1B6803F00703022BF9D1264A1368F1
-S3150800042843F480331360244B1B6813F4003FFAD057
-S31508000438214B5A6822F4741242F4E8125A60DA6AAE
-S3150800044822F00F02DA621A6842F080721A601A4BB2
-S315080004581B6813F0007FFAD0174B5A6822F0F0028F
-S315080004685A605A6822F4E06242F480625A605A680E
-S3150800047822F460525A605A6822F0030242F00202D5
-S315080004885A600D4B5B6803F00C03082BF9D10B482F
-S3150800049803F00EFA0F2000F051F948B9064B1A6B0B
-S315080004A822F440221A635A6822F480025A6008BD68
-S315080004B8FFF7A4FF002002400010024000A24A04E9
-S315080004C808B500F061F9FFF79BFFFFF7DDFEFFF7B8
-S315080004D837FFFFF775FEFFF777FEFCE782B00A4B92
-S315080004E89A6942F001029A619A6902F00102009239
-S315080004F8009ADA6942F08052DA61DB6903F08053C0
-S315080005080193019B02B070470010024000B589B0FC
-S315080005180023039304930593069307930268144BE1
-S315080005289A4202D009B05DF804FB03F5D633DA69B6
-S3150800053842F00072DA61DA6902F000720192019AF1
-S315080005485A6942F480225A615B6903F4802302934C
-S31508000558029B4FF4407303930223049303230693E1
-S315080005680923079303A9034800F064FDDAE700BFE7
-S31508000578006400400004004810B588B000230393BF
-S3150800058804930593069307930268134B9A4201D07E
-S3150800059808B010BD114C636943F40033636163699D
-S315080005A803F400330193019B4FF4C05303930223CA
-S315080005B80493032306930E23079303A94FF0904049
-S315080005C800F038FDE36943F40003E361E36903F4E3
-S315080005D800030293029BDBE7005C00400010024020
-S315080005E808B50268074B9A4200D008BD064AD3697F
-S315080005F823F40003D3614FF4C0514FF0904000F044
-S31508000608FDFDF2E7005C00400010024030B589B0F5
-S3150800061800230293039304930593069307931B4CAD
-S31508000628636943F400236361636903F40023019350
-S31508000638019B17484FF48053836102930123039360
-S3150800064802A901F0D9FE01F081FF4FF09045202359
-S31508000658AB62104801F05EFE284601F05BFEE369CE
-S3150800066823F48023E361636923F480236361636960
-S3150800067823F400336361E36923F08053E361A369D4
-S3150800068823F00103A36109B030BD00BF0010024082
-S315080006980008004800040048FEE7FEE7FEE7FEE714
-S315080006A8FEE770477047704708B500F07FF808BD41
-S315080006B8034AD2F8883043F47003C2F88830704782
-S315080006C800ED00E0DFF834D0FFF7F2FF0C480D49DB
-S315080006D80D4A002302E0D458C4500433C4188C4287
-S315080006E8F9D30A4A0A4C002301E013600432A242ED
-S315080006F8FBD305F0C5F8FFF7E3FEFEE700A00020E8
-S3150800070800000020C4000020545A0008C800002031
-S3150800071824100020FEE7000010B5074B4FF0FF3203
-S315080007281A6100241C61DA60DC609A629C62FFF731
-S315080007386DFF204610BD00BF0010024010B50446E4
-S315080007480E4B18784FF47A73B3FBF0F30C4A10681B
-S31508000758B0FBF3F000F014FB68B90F2C01D901209F
-S315080007680AE0002221464FF0FF3000F0D1FA054B87
-S315080007781C60002000E0012010BD00BF0400002016
-S31508000788000000200800002008B5074A136843F04F
-S3150800079810031360032000F0A9FA0F20FFF7CEFF15
-S315080007A8FFF79CFE002008BD00200240034A116896
-S315080007B8034B1B780B441360704700BFD80300200F
-S315080007C804000020002800F0A18038B5044690F8F7
-S315080007D82030D3B12268136843F00103136004F08C
-S315080007E8DDF8054623685A6812F0010F10D104F09F
-S315080007F8D5F8401B0A28F5D9636A43F400336362BF
-S31508000808052384F82030012038BDFFF77FFEE1E78D
-S315080008181A6822F002021A6004F0C0F8054623682E
-S315080008285A6812F0020F0DD004F0B8F8401B0A28CF
-S31508000838F5D9636A43F400336362052384F82030E4
-S315080008480120E1E7227E012A3DD01A6822F08002BB
-S315080008581A60637E012B3BD02268136823F0400395
-S315080008681360A37E012B39D02268136823F020036E
-S315080008781360E37E012B37D02268136843F0100310
-S315080008881360237F012B35D02268136823F00803E9
-S315080008981360637F012B33D02268136823F004039F
-S315080008A81360A368E2681343226913436269134312
-S315080008B86268013A21681343CB610020606201230C
-S315080008C884F82030A0E71A6842F080021A60C0E768
-S315080008D82268136843F040031360C2E72268136866
-S315080008E843F020031360C4E72268136823F0100353
-S315080008F81360C6E72268136843F008031360C8E75D
-S315080009082268136843F004031360CAE70120704796
-S31508000918026890F82030013BDBB2012B05D9436AFF
-S3150800092843F4802343620120704730B4D2F800327A
-S3150800093843F00103C2F800324B6903F01F03012094
-S3150800094800FA03F3D2F81C026FEA030C20EA030044
-S31508000958C2F81C02C869B0B9D2F80C020CEA000041
-S31508000968C2F80C028C884869CD6844EA05444830C0
-S3150800097842F830400C8848698D6844EA054448308E
-S3150800098802EBC0004460C86901281BD0886980BB8F
-S31508000998D2F804020CEA0000C2F80402086970BB1F
-S315080009A8D2F814020CEA0000C2F81402096A0129EE
-S315080009B82BD0D2F8003223F00103C2F80032002007
-S315080009C830BC7047D2F80C021843C2F80C028C885F
-S315080009D848690D6844EA0544483042F830408C892D
-S315080009E848698D6844EA0544483002EBC00044600B
-S315080009F8CCE7D2F804021843C2F80402CEE7D2F8C4
-S31508000A0814021843C2F81402D0E7D2F81C120B4392
-S31508000A18C2F81C32CDE770B5044690F82050EDB2FE
-S31508000A28012D06D0436A43F400234362012528466C
-S31508000A3870BD022380F820300268136823F001038A
-S31508000A48136003F0ABFF064623685B6813F0010FD3
-S31508000A580CD003F0A3FF831B0A2BF5D9636A43F46A
-S31508000A6800336362052384F82030E0E700256562D1
-S31508000A78DDE730B590F820C00468A4680CF1FF3C9F
-S31508000A885FFA8CFCBCF1010F62D814F0E05F59D00C
-S31508000A98C4F3016C012404FA0CF41C608B68002B5F
-S31508000AA83DD10D68CB68046843EA45550CF118032F
-S31508000AB81B01E55003680C690CF1180E03EB0E13BD
-S31508000AC85C600B7D012B35D0D17993791B0443EAF9
-S31508000AD80163517943EA012314790168234301EB39
-S31508000AE80C11C1F88C31D17893781B0443EA016359
-S31508000AF8517843EA0123117802680B4302EB0C127A
-S31508000B08C2F8883102680CF1180C4FEA0C1C52F826
-S31508000B180C3043F0010342F80C3000201DE04C6805
-S31508000B2843EAC403CC6823430CF118042401056876
-S31508000B382B51BFE7036803EB0E13596841F480711C
-S31508000B485960C1E7436A43F400134362012004E08D
-S31508000B58436A43F480234362012030BD90F820306D
-S31508000B68013BDBB2012B01D90020704703689B685B
-S31508000B7803EA8163B3EB816F01D001207047002037
-S31508000B88704790F820C00CF1FF3C5FFA8CFCBCF16A
-S31508000B98010F00F2A58030B451B90468E46814F06E
-S31508000BA8030F10D1436A43F40013436201207EE021
-S31508000BB80468246914F0030F05D1436A43F4001343
-S31508000BC84362012073E0056801F11B0424012C59CE
-S31508000BD804F004049460002C6BD1056801F11B0429
-S31508000BE824012C59640D1460046801F11B0C4FEAA2
-S31508000BF80C1C54F80C4004F00204D4600468A4449D
-S31508000C08DCF8045015F0080F5BD008241461056851
-S31508000C1801F11B0C05EB0C156D68C5F307259561E5
-S31508000C28046804EB0C146468240C5461026802EB2B
-S31508000C380112D2F8B8211A70026802EB0112D2F82A
-S31508000C48B821C2F307225A70026802EB0112D2F8D9
-S31508000C58B821C2F307429A70026802EB0112D2F869
-S31508000C68B821120EDA70026802EB0112D2F8BC211A
-S31508000C781A71026802EB0112D2F8BC21C2F30722E4
-S31508000C885A71026802EB0112D2F8BC21C2F3074274
-S31508000C989A71026802EB0112D2F8BC21120EDA71B7
-S31508000CA8C1B90268D36843F02003D360002030BC7A
-S31508000CB87047056801F11B0424012C59E40854609F
-S31508000CC892E701F11B0504EB0514646804F00F04A8
-S31508000CD814619CE70268136943F020031361E5E78A
-S31508000CE8436A43F48023436201207047074AD3685E
-S31508000CF823F4E0631B041B0C000200F4E0600343C2
-S31508000D0843F0BF6343F40033D360704700ED00E057
-S31508000D1800B5194BDB68C3F30223C3F1070CBCF112
-S31508000D28040F28BF4FF0040C03F1040EBEF1060F9A
-S31508000D3818D9033B4FF0FF3E0EFA0CFC21EA0C01CA
-S31508000D4899400EFA03F322EA0303194300280BDB3A
-S31508000D580901C9B200F1604000F5614080F8001346
-S31508000D685DF804FB0023E5E700F00F000901C9B2A6
-S31508000D78024B1954F4E700BF00ED00E014ED00E05B
-S31508000D880138B0F1807F0BD24FF0E0235861054A4D
-S31508000D98F02182F823100020986107221A6170470B
-S31508000DA80120704700ED00E0044B0022DA61044A8E
-S31508000DB8136943F00103136101807047E0030020BB
-S31508000DC8002002400C4BDB6813F0100305D00B4AD1
-S31508000DD8D36943F00203D3611023074AD26812F095
-S31508000DE8040F06D00549CA6942F00102CA6143F0F0
-S31508000DF80403014AD360704700200240E00300203C
-S31508000E080A4B1B6913F0800F0BD0084B084A5A6027
-S31508000E1802F188325A601B6913F0800F03D100204B
-S31508000E287047002070470120704700BF0020024025
-S31508000E3823016745034A136943F0800313610020B9
-S31508000E48704700BF0020024038B5044603F0A6FDE7
-S31508000E580546144BDB6813F0010F0AD0B4F1FF3FBF
-S31508000E68F7D024B103F09AFD401BA042F1D903201C
-S31508000E7812E00C4BDB6813F0200F02D0094B202236
-S31508000E88DA60084BDB6813F0100F06D1054BDB68F0
-S31508000E9813F0040F01D1002038BDFFF793FF012096
-S31508000EA8FAE700BF002002402DE9F8431E46244B06
-S31508000EB81B7E012B41D004460F469046204B012243
-S31508000EC81A764CF25030FFF7BFFF034678BB012C61
-S31508000ED808D0022C03D04FF004091C4607E04FF04F
-S31508000EE80209FAE74FF00109F7E70134E4B24C457D
-S31508000EF81DD22101C1F12002A1F1200328FA01F12E
-S31508000F0806FA02F2114326FA03F3194389B207EBE4
-S31508000F184400FFF749FF4CF25030FFF795FF094B9D
-S31508000F281D6925F001051D6103460028DDD0044A20
-S31508000F38002111761846BDE8F8830223FAE700BFB0
-S31508000F48E003002000200240064B0022DA61064B27
-S31508000F581A6942F004021A611A6942F040021A61D3
-S31508000F68704700BFE003002000200240064B00221D
-S31508000F78DA61064B1A6942F002021A6158611A695F
-S31508000F8842F040021A617047E00300200020024040
-S31508000F98264B1B7E012B45D070B505460E46234BBE
-S31508000FA801221A760368934220D04CF25030FFF794
-S31508000FB84BFF88BB4FF0FF3333606C680121AA6882
-S31508000FC86B6803EBC223A34227D92046FFF7CEFF57
-S31508000FD84CF25030FFF738FF154A136923F002031D
-S31508000FE813610146B0B904F50064E8E74CF25030DD
-S31508000FF8FFF72AFF08B101210FE0FFF7A5FF4CF21A
-S315080010085030FFF721FF0146094A136923F0040304
-S31508001018136102E0346000E00121044B00221A76CD
-S31508001028084670BD02210846704700BFE003002045
-S3150800103800200240F0B583B0002362E085685E00B0
-S315080010480324B44025EA0405CC68B4402C438460DC
-S31508001058446824EA0C0C4C68C4F300149C4044EA1F
-S315080010680C0444605EE0DD08083550F8256003F096
-S3150800107807044FEA840C0F2404FA0CF426EA040E33
-S315080010880C6904FA0CF444EA0E0440F8254060E0BA
-S31508001098042400E0002404FA0EF42C430CF1020C94
-S315080010A8524D45F82C40524CA568D44325EA020609
-S315080010B84F6817F4801F01D042EA05064C4DAE600A
-S315080010C8ED6804EA05064F6817F4001F01D042EADE
-S315080010D80506474DEE606D6804EA05064F6817F47D
-S315080010E8003F01D042EA0506414D6E602D682C4046
-S315080010F84E6816F4803F01D042EA05043C4A14605B
-S3150800110801330A6832FA03F46ED04FF0010C0CFA70
-S3150800111803FC1CEA0202F3D04C6804F00304013C01
-S31508001128012C8BD94C6804F00304032C0CD0C46832
-S315080011385D004FF0030C0CFA05FC24EA0C0C8C68CD
-S31508001148AC4044EA0C04C4604C6804F00304022C5E
-S3150800115889D004684FEA430E4FF0030C0CFA0EFCCC
-S3150800116824EA0C0C4C6804F0030404FA0EF444EA66
-S315080011780C0404604C6814F4403FC1D01D4CA569A2
-S3150800118845F00105A561A46904F001040194019CD0
-S315080011984FEA930C0CF10205144C54F8255003F049
-S315080011A803044FEA840E0F2404FA0EF425EA04050C
-S315080011B8B0F1904F3FF46EAF0F4CA0420ED004F535
-S315080011C88064A0420CD004F58064A0420AD004F5D5
-S315080011D88064A0423FF45CAF05245CE701245AE723
-S315080011E8022458E7032456E703B0F0BD000001407F
-S315080011F8000401400010024000040048002331FAA8
-S3150800120803F27AD0F0B52EE0042500E0002505FAA9
-S315080012180CFCA44555D004685D004FF0030C0CFA85
-S3150800122805FC24EA0C0404604FEAD30E0EF1080EF6
-S3150800123850F82E4003F00705AE000F25B54024EAFE
-S31508001248050440F82E40C46824EA0C04C4604468BF
-S3150800125824EA02024260826822EA0C0282600133AA
-S3150800126831FA03F248D001229A4012EA0107F6D069
-S315080012784FEA930E0EF10205204C54F8254003F068
-S31508001288030C4FEA8C0C0F2505FA0CF63440B0F11E
-S31508001298904FBBD01A4DA8420DD005F58065A842D7
-S315080012A80BD005F58065A84209D005F58065A842E2
-S315080012B8AAD00525ABE70125A9E70225A7E703254F
-S315080012C8A5E7104C256825EA07052560656825EA17
-S315080012D807056560E56825EA0705E560A56825EA5E
-S315080012E80707A760054F0EF1020457F8245025EAA8
-S315080012F8060547F824508EE7F0BD70470000014000
-S31508001308000400480004014038B512F4804F45D05F
-S315080013180468B4F8503091F800C04FEACC0E1EFAAB
-S3150800132883F3023304EB4303B3F80044C4F3090414
-S315080013388B69A34228D31B1B8B618B697BB905680C
-S3150800134835F82C309BB223F4804323F0700383F4DA
-S31508001358005343F4004343F0800325F82C3012F079
-S31508001368400F0ED002680D7832F825309BB223F468
-S31508001378E04323F0700343F4004343F0C00322F824
-S31508001388253024B9204638BD00238B61D5E7234686
-S315080013980A894969006802F072FAF3E70468B4F83A
-S315080013A8503091F800C04FEACC0E1EFA83F3063384
-S315080013B804EB4303B3F80044C4F309048B69A34256
-S315080013C82FD31B1B8B618B697BB9056835F82C30C5
-S315080013D89BB223F4804323F0700383F4005343F449
-S315080013E8004343F0800325F82C3012F0400F0FD144
-S315080013F8026891F800C032F82C309BB223F4E04317
-S3150800140823F0700343F4004343F0C00322F82C305A
-S31508001418002CB7D023464A894969006802F02FFA92
-S31508001428B0E700238B61CEE7002860D030B587B0D7
-S31508001438044690F8A9323BB1032384F8A9322068F8
-S3150800144801F0A5FA00231BE080F8A832FFF794F804
-S31508001458F2E75A1C02EB820104EBC101012048702D
-S3150800146802EB820104F8313004EBC1000021C17097
-S3150800147803EB830004EBC0008163C1630164D3B244
-S3150800148860688342E5D3002316E003EB830204EB86
-S31508001498C202002182F8691182F8683182F86B1154
-S315080014A8C2F87811C2F87C1103EB830204EBC20276
-S315080014B8C2F880110133DBB29842E6D8A4465CF834
-S315080014C8105BEE46BCE80F00AEE80F00DCF800300B
-S315080014D8CEF80030231D0ECB284601F062FA00200C
-S315080014E884F82400012384F8A93207B030BD012006
-S315080014F8704738B590B10446032380F8A9320068C6
-S3150800150801F0A8FD054610B10125284638BD204634
-S31508001518FFF766F8002384F8A932F6E70125F4E709
-S3150800152838B590F8A832012B11D00446012580F861
-S31508001538A852006801F022FA2946204604F094F9D0
-S31508001548206801F098FD002084F8A80238BD02201A
-S31508001558FCE790F8A832012B12D010B504460123EF
-S3150800156880F8A832006801F012FA0021204604F033
-S315080015787BF9206801F081FD002084F8A80210BDD7
-S315080015880220704770B505460C46164612F0400FFD
-S3150800159800F00E810268B2F850300978C80010FACF
-S315080015A883F3023302EB4303B3F80024C2F30902B8
-S315080015B8A36993424ED99B1AA361A369002B66D1E6
-S315080015C86378002B49D12A68B2F8503012FA83F3A7
-S315080015D803EB0111B1F80434C3F30903A1F8043481
-S315080015E8B1F804346FEA43436FEA53439BB2A1F850
-S315080015F8043429686278002A3CD1B1F8503011FAC7
-S3150800160883F3227803EB0213B3F80C24C2F3090216
-S31508001618A3F80C24B3F80C246FEA42426FEA524244
-S3150800162892B2A3F80C242178284604F023F816F475
-S31508001638804F41D02A68217832F821309BB223F4AA
-S31508001648E04323F0700343F4404343F0800322F851
-S31508001658213031E00023A361AFE7012BC9D12A68FD
-S31508001668B2F8503012FA83F303EB01110023A1F8FC
-S315080016780434BEE7012AD6D1B1F8503011FA83F3FB
-S31508001688217803EB01130022A3F80C24CBE716F400
-S31508001698804F0DD0286830F821309BB223F4E043F8
-S315080016A823F0700343F4404343F0800320F82130C5
-S315080016B894F82430012B12D02A68217832F8213080
-S315080016C89BB223F4E04323F0400383F0300343F44A
-S315080016D8004343F0800322F82130002070BD636977
-S315080016E813446361E3691344E361216A23699942F0
-S315080016F824D3C91A21626278002A44D12968B1F824
-S31508001708502011FA82F2217802EB0112B2F8041479
-S31508001718C1F30901A2F804143E2B1BD9580913F082
-S315080017281F0F00D10138B2F8041489B2800280B2BA
-S31508001738014341F40041A2F8041426E021B9002324
-S3150800174884F824301346D6E7002384F82430236225
-S315080017580B46D0E74BB9B2F804146FEA41416FEA71
-S31508001768514189B2A2F804140FE0590813F0010F81
-S3150800177800D00131B2F8040480B2890289B2014363
-S31508001788A2F8041401E0012A06D09BB222896169ED
-S31508001798286801F078FC8FE72968B1F8502011FA13
-S315080017A882F2217802EB011299B2A2F80414ECE746
-S315080017B80268B2F850300978C80010FA83F306337D
-S315080017C802EB4303B3F80024C2F30902A369934260
-S315080017D84FD39B1AA361A369002B67D16378002BA3
-S315080017E84AD12A68B2F8503012FA83F303EB01118A
-S315080017F8B1F80434C3F30903A1F80434B1F804347E
-S315080018086FEA43436FEA53439BB2A1F80434296845
-S315080018186278002A3DD1B1F8503011FA83F322785C
-S3150800182803EB0213B3F80C24C2F30902A3F80C2439
-S31508001838B3F80C246FEA42426FEA524292B2A3F80E
-S315080018480C242178284603F015FF16F4804F7FF4F8
-S3150800185833AF2A68217832F821309BB223F4E04363
-S3150800186823F0700343F4404343F0800322F8213001
-S3150800187822E70023A361AEE7012BC8D12A68B2F88C
-S31508001888503012FA83F303EB01110023A1F804344C
-S31508001898BDE7012AD5D1B1F8503011FA83F321787A
-S315080018A803EB01130022A3F80C24CAE716F4804FA9
-S315080018B80DD1286830F821309BB223F4E04323F091
-S315080018C8700343F4404343F0800320F8213094F82A
-S315080018D82430012B7FF4F0AE636913446361E3692E
-S315080018E81344E361216A2369994224D3C91A2162F8
-S315080018F829686278002A43D1B1F8502011FA82F291
-S31508001908217802EB0112B2F80C14C1F30901A2F806
-S315080019180C143E2B1BD9580913F01F0F00D1013898
-S31508001928B2F80C1489B2800280B2014341F400412E
-S31508001938A2F80C1426E021B9002384F824301346AB
-S31508001948D6E70023236284F824300B46D0E74BB940
-S31508001958B2F80C146FEA41416FEA514189B2A2F80C
-S315080019680C140FE0590813F0010F00D00131B2F832
-S315080019780C0480B2890289B20143A2F80C1401E06A
-S31508001988012A06D09BB262896169286801F07BFB47
-S3150800199892E6B1F8502011FA82F2217802EB011288
-S315080019A899B2A2F80C14EDE72DE9F0410546286826
-S315080019B8B0F8443013F4004F00F08E82B0F8444073
-S315080019C8A3B214F00F0440F0E28013F0100F6BD0A6
-S315080019D803889AB213F4006F40F09D8012F4004F02
-S315080019E8E5D0038823F070031B051B0D43F080031D
-S315080019F803802868B0F8503095F86821D20012FAA2
-S31508001A0883F3063300EB4303B3F80034C3F309033F
-S31508001A18C5F884318BB1D5F87C1171B1B5F86E214A
-S31508001A2801F02DFFD5F88421D5F87C311344C5F883
-S31508001A387C310021284603F011FE2A68138899B2DA
-S31508001A4813F4006FB3D101F44051B1F5405FAED03D
-S31508001A58B2F8503012FA83F2B2F80C34C3F3090319
-S31508001A68A2F80C34D5F878313E2B77D9590913F0F2
-S31508001A781F0F00D10139B2F80C349BB2890289B21A
-S31508001A880B4343F40043A2F80C342A6813889BB224
-S31508001A9823F4804323F0700383F4405343F400434C
-S31508001AA843F08003138082E703889BB223F4E1435B
-S31508001AB823F070036FEA43436FEA53439BB20380EC
-S31508001AC82A68B2F8503095F82810C90011FA83F335
-S31508001AD8023302EB4303B3F80034C3F309036B6418
-S31508001AE8EA6B1344EB630021284603F0C3FD95F817
-S31508001AF82430002B3FF45BAF2B6C002B7FF457AFD9
-S31508001B0895F824302A6843F08003A2F84C3000235D
-S31508001B1885F824304BE7B0F8503095F86821D2009C
-S31508001B2812FA83F3063300EB4303B3F80034C3F31E
-S31508001B380903C5F88431B5F86E2105F52C7101F04D
-S31508001B489EFE2A68138823F070031B051B0D43F0B5
-S31508001B5880031380284603F079FD28E74BB9B2F8C5
-S31508001B680C346FEA43436FEA53439BB2A2F80C342A
-S31508001B788BE7590813F0010F00D00131B2F80C347D
-S31508001B8898B28B029BB20343A2F80C347DE730F86F
-S31508001B9824309EB213F4004F4CD116F0800F3FF450
-S31508001BA806AF621C02EB820105EBC101286830F812
-S31508001BB824309BB223F4E14323F070036FEA4343CE
-S31508001BC86FEA53439BB220F82430CB78012B00F0F8
-S31508001BD8F28016F4807F40F07A812868B0F8503091
-S31508001BE8621C02EB820215F83260F20012FA83F3DD
-S31508001BF8023300EB4303B3F80034C3F3090304EBD9
-S31508001C08840205EBC202126C9A4240F24C8104EB3C
-S31508001C18840705EBC707D21A3A6404EB840205EB76
-S31508001C28C202126C002A40F045813146284603F064
-S31508001C3821FDBCE630F8243023F070031B051B0D84
-S31508001C4843F0800320F8243004EB8401C90001F529
-S31508001C58B47105EB010804EB840305EBC30393F899
-S31508001C687431002B42D12868B0F8503004EB84024E
-S31508001C7805EBC20292F86821D20012FA83F30633FA
-S31508001C8800EB4303B3F80074C7F3090717BB04EB63
-S31508001C98840305EBC303D3F884213A44C3F88421A3
-S31508001CA8D3F87C213A44C3F87C21D3F880313BB178
-S31508001CB804EB840305EBC303D3F878319F4275D246
-S31508001CC804EB840305EBC30393F86811284603F06D
-S31508001CD8C5FC62E704EB840105EBC1013B46B1F894
-S31508001CE86E21D1F87C1101F0CAFDD0E704EB840314
-S31508001CF805EBC30393F86B31022B35D0296804EB3F
-S31508001D08840205EBC20292F8680131F820309BB2CA
-S31508001D1823F4E04323F0700343F4004343F0C0037D
-S31508001D2821F82030286892F8683130F8232012F410
-S31508001D38804F20D0B0F85020DB0013FA82F3023324
-S31508001D4800EB4303B3F80074C7F30907002F9ED0C6
-S31508001D5804EB840105EBC1013B46B1F87021D1F8C3
-S31508001D687C1101F08CFD92E7324641462846FFF77A
-S31508001D78CBFA07468BE7B0F85020DB0013FA82F354
-S31508001D88063300EB4303B3F80074C7F30907002FBB
-S31508001D983FF47DAF04EB840105EBC1013B46B1F87E
-S31508001DA87221D1F87C1101F06AFD70E7414628686E
-S31508001DB801F07EF9F1E604EB840305EBC303002280
-S31508001DC81A6493F83430FBB116F0400F37D04B78C5
-S31508001DD81BBB2A68B2F8503012FA83F3621C02EB6E
-S31508001DE8820215F8322003EB0213B3F80424C2F36F
-S31508001DF80902A3F80424B3F804246FEA42426FEAF6
-S31508001E08524292B2A3F80424013404EB840415F868
-S31508001E183410284603F02EFCC9E5012BF4D12A68AC
-S31508001E28B2F8503012FA83F3621C02EB820215F8F4
-S31508001E38322003EB02130022A3F80424E4E72A68F5
-S31508001E48631C03EB830305EBC3035B78D3B9B2F8CA
-S31508001E58503012FA83F3621C02EB820215F832201C
-S31508001E6803EB0213B3F80C24C2F30902A3F80C24F3
-S31508001E78B3F80C246FEA42426FEA524292B2A3F8C8
-S31508001E880C24C1E7012BBFD1B2F8503012FA83F3FC
-S31508001E98621C02EB820215F8322003EB02130022B9
-S31508001EA8A3F80C24B0E704EB840205EBC20200276A
-S31508001EB81764B2E604EB840205EBC202D66B1E442D
-S31508001EC8D663546C2344536401F0F2F86FE532463E
-S31508001ED82846FFF757FB6AE50020BDE8F08190F829
-S31508001EE8A832012B0DD010B50446012180F8A81296
-S31508001EF803F0BAFC206801F0BEF8002084F8A802AE
-S31508001F0810BD0220704790F8A832012B0ED010B5E4
-S31508001F180446012380F8A832002103F0A5FC2068AE
-S31508001F2801F0ABF8002084F8A80210BD022070471B
-S31508001F3890F8A832012B0DD010B50446012380F875
-S31508001F48A83280F82410006801F08FF8002084F879
-S31508001F58A80210BD0220704710B50446006801F0B3
-S31508001F688EF810F4004F1ED110F4806F1FD110F4AC
-S31508001F78804F2DD110F4005F34D110F4805F3BD127
-S31508001F8810F4006F57D110F4007F71D110F4807FD8
-S31508001F9827D02268B2F844309BB223F480739BB2E8
-S31508001FA8A2F844301DE02046FFF7FEFC19E0226837
-S31508001FB8B2F844309BB223F480639BB2A2F844304B
-S31508001FC8204603F069FB00212046FFF7B1FF08E029
-S31508001FD82268B2F844309BB223F480439BB2A2F835
-S31508001FE8443010BD2268B2F844309BB223F400533B
-S31508001FF89BB2A2F84430F4E72268B2F840309BB2A4
-S3150800200823F004039BB2A2F840302268B2F84030A5
-S315080020189BB223F008039BB2A2F84030204603F08F
-S3150800202863FB2268B2F844309BB223F480539BB210
-S31508002038A2F84430D5E72268B2F840309BB243F09C
-S315080020480803A2F840302268B2F844309BB223F459
-S3150800205800639BB2A2F844302268B2F840309BB2BB
-S3150800206843F00403A2F84030204603F02BFBB8E7F8
-S315080020782268B2F844309BB223F400739BB2A2F8E4
-S315080020884430204603F001FBABE710B50446084682
-S3150800209811F0800F25D101F0070C0CEB8C01C90053
-S315080020A801F5B47E04EB0E010CEB8C0C04EBCC0C9E
-S315080020B84FF0000E8CF869E100F0070008700A6115
-S315080020C8CB70022B1AD094F8A832012B19D0012309
-S315080020D884F8A832206800F075FC002084F8A80265
-S315080020E810BD01F0070C0CF1010C0CEB8C0104EB8C
-S315080020F8C1014FF0010E81F801E0DDE700230B71FD
-S31508002108E1E70220ECE710B504460B4611F0800F0C
-S315080021181FD101F0070202EB8201C90001F5B4716B
-S31508002128014402EB820200EBC202002082F8690130
-S3150800213803F007030B7094F8A832012B13D0012378
-S3150800214884F8A832206800F024FE002084F8A80243
-S3150800215810BD01F00702013202EB820100EBC10152
-S3150800216801204870E4E70220F2E710B501F0070CF1
-S315080021780CEB8C01C90001F5B4710CEB8C0E00EB65
-S31508002188CE0ECEF87C21CEF880310024CEF88441D4
-S315080021988EF869418EF868C10144006800F088FF26
-S315080021A8204610BD01F0070101EB810100EBC101D2
-S315080021B8D1F88401704738B501F0070404F1010C19
-S315080021C80CEB8C0104EB840E00EBCE0ECEF83C200B
-S315080021D8CEF8403001228EF84C20CEF8483000253B
-S315080021E8CEF8445000EBC1035A7000F8314019463E
-S315080021F8006800F05DFF284638BD0B4601F0070267
-S3150800220841688A422AD810B5044613F0800F1DD1B2
-S3150800221803EB8301C90001F5B471014403EB830399
-S3150800222800EBC303002083F8690101238B700A7049
-S3150800223894F8A832012B13D0012384F8A832206811
-S3150800224800F092FE002084F8A80210BD531C03EB88
-S31508002258830100EBC10101204870E6E701207047B9
-S315080022680220F2E70B4601F00F014268914230D886
-S3150800227810B5044613F0800F21D103F0070202EBCC
-S315080022888201C90001F5B471014402EB820200EB30
-S31508002298C202002082F8690100228A7003F0070347
-S315080022A80B7094F8A832012B15D0012384F8A832AC
-S315080022B8206800F07EFE002084F8A80210BD03F00E
-S315080022C80702013202EB820100EBC10101204870C6
-S315080022D8E2E7012070470220F0E711F0800F0BD0E3
-S315080022E801F00701013101EB810100EBC10152B987
-S315080022F80A73CB800020704701EB8101C90001F5FC
-S31508002308B4710144F3E701220A730B811B0C4B8154
-S31508002318F0E70000B0F1904F10D0314B984218D032
-S31508002328304B984223D0304B98422ED02F4B9842A8
-S3150800233839D02F4B984244D0012070472D4B9A6AC2
-S3150800234842F400329A629A6A22F400329A620020AB
-S31508002358704703F1784303F503339A6A42F48022F7
-S315080023689A629A6A22F480229A620020704703F1D8
-S31508002378784303F502339A6A42F400229A629A6A03
-S3150800238822F400229A620020704703F1784303F585
-S3150800239801339A6A42F480129A629A6A22F480127F
-S315080023A89A620020704703F1784303F500339A6A66
-S315080023B842F400129A629A6A22F400129A6200207B
-S315080023C8704703F1784303F5FE339A6A42F48002AC
-S315080023D89A629A6A22F480029A620020704700BFBD
-S315080023E80004004800080048000C0048001000488F
-S315080023F800140048001002400B6893FAA3F3B3FAD6
-S3150800240883FC57E08D68826893FAA3F4B4FA84F4D7
-S3150800241864004FF0030E0EFA04F422EA040293FA53
-S31508002428A3F4B4FA84F4640005FA04F42243826037
-S315080024380C68CD68426822EA040205FB04F42243C4
-S31508002448426045E093FAA3F2B2FA82F2072A15D84F
-S315080024584D69026A93FAA3F4B4FA84F4A4000F2621
-S3150800246806FA04F422EA040293FAA3F4B4FA84F402
-S31508002478A40005FA04F42243026241E04C69456A5D
-S315080024881A0A92FAA2FEBEFA8EFE4FEA8E0E0F2698
-S3150800249806FA0EFE25EA0E0592FAA2F2B2FA82F2B8
-S315080024A8920004FA02F22A43426229E0002070BD2B
-S315080024B80CF1010C0B6833FA0CF244D0012202FA2B
-S315080024C80CF21340F4D070B54A68013A012A99D932
-S315080024D8C26893FAA3F4B4FA84F46400032505FAE7
-S315080024E804F422EA040293FAA3F4B4FA84F464001E
-S315080024F80D6905FA04F42243C2604A68022AA1D083
-S315080025084A68046893FAA3FEBEFA8EFE4FEA4E0E90
-S31508002518032505FA0EFE24EA0E0E93FAA3F3B3FA78
-S3150800252883F35B0002FA03F34EEA030303600CF134
-S31508002538010C0B6833FA0CF2B8D0012202FA0CF235
-S315080025481340F4D0C0E700207047000082B0224A42
-S31508002558136843F0010313601F4B1B6813F0020F3F
-S31508002568FAD01D4A136823F0F80343F08003136072
-S315080025784FF0FF3301930199184B0B400193019BC8
-S315080025885360154B5B6813F00C0FFAD1124A13689F
-S315080025980193019B23F0847323F480330193019BF1
-S315080025A813600D4B1B6813F0007FFAD10A4B1A68A3
-S315080025B822F480221A6000205860D86218634FF403
-S315080025C81F020192019A9A6098605A6A42F08072CC
-S315080025D85A6202B0704700BF001002400CC0FFF8EC
-S315080025E8034B5B68C3F30313024AD35CD8407047AE
-S315080025F800100240E8580008034B5B68C3F302233F
-S31508002608024AD35CD840704700100240F8580008C0
-S31508002618034B5B68C3F3C223024AD35CD8407047AE
-S3150800262800100240F85800080E4B5B6803F4803324
-S31508002638ABB90D4B0B4AD06A00F00F000130B3FB5B
-S31508002648F0F0536803F470134FF4701292FAA2F27A
-S31508002658B2FA82F2D340023303FB00F07047034B09
-S31508002668E8E700BF0010024000093D0000127A00A2
-S3150800267808B5054B5B6803F00C03082B01D0034823
-S3150800268808BDFFF7D1FFFBE70010024000127A00E9
-S3150800269810B50446FFF7ECFF2060FFF7A1FF60605E
-S315080026A8FFF7AAFFA0606068FFF7B2FFE06010BDF9
-S315080026B810B5044628BB414B1B6B032282401340C6
-S315080026C843EA0063022B14D0032B0BD0012B06D048
-S315080026D8FFF7CEFFFFF784FFFFF79AFF12E0FFF731
-S315080026E8C7FF0FE0354B186810F002000AD03448C7
-S315080026F808E0324B186A10F0020003D04FF4004085
-S3150800270800E00020102C02D0122C2BD010BD2B4B29
-S315080027181B6B0322A240134043EA0463294A9342E7
-S3150800272818D002F5803293420DD0A2F500329342B2
-S3150800273806D0FFF79DFFFFF753FFFFF75DFFE3E7B7
-S31508002748FFF796FFE0E71D4B1B6813F0020FDBD077
-S315080027581B48D9E7194B1B6A13F0020FD4D04FF45C
-S315080027680040D1E7154B1B6B0322A240134043EAEE
-S315080027780464154B9C4218D003F580239C420DD05F
-S31508002788A3F500239C4206D0FFF772FFFFF728FF40
-S31508002798FFF732FFBAE7FFF76BFFB7E7074B1B6888
-S315080027A813F0020FB2D00648B0E7044B1B6A13F0C1
-S315080027B8020FABD04FF40040A8E700BF0010024054
-S315080027C800127A00000002100000081210B504462C
-S315080027D8B0F5401F04D00020B4F5400F29D010BD2D
-S315080027E8284B1B6B034043EA1023274A934218D009
-S315080027F802F5801293420DD0A2F50012934206D034
-S31508002808FFF736FFFFF7ECFEFFF7F6FEE4E7FFF7FC
-S315080028182FFFE1E71B4B186810F00200DCD01B48B5
-S31508002828DAE7184B186A10F00200D5D04FF40040C2
-S31508002838D2E7144B1B6B234043EA1424144B9C42DF
-S3150800284818D003F580039C420DD0A3F500039C42DB
-S3150800285806D0FFF70DFFFFF7C3FEFFF7CDFEBEE76D
-S31508002868FFF706FFBBE7074B1B6813F0020FB6D046
-S315080028780648B4E7034B1B6A13F0020FAFD04FF4B0
-S315080028880040ACE7001002400030200000127A0031
-S3150800289800C0800038B5036813F0010F5FD10446FD
-S315080028A80D46036823F4164323F00C034A68C968DF
-S315080028B80A4329690A43A9690A4313430360AB68AB
-S315080028C8426822F44052134343606B69826822F4D3
-S315080028D8407213438360244B98420DD0234B984289
-S315080028E812D0234B984213D0224B984214D0224B2D
-S315080028F8984216D0012033E00020FFF7D9FE80B3AE
-S315080029082B689BB901202BE01020FFF7D1FEF6E7CC
-S315080029181220FFF7CDFEF2E74FF44010FFF756FFF7
-S31508002928EDE74FF44000FFF751FFE8E7AA69B2F56B
-S31508002938004F07D000EB5300B0FBF3F39BB2E360FC
-S3150800294800200DE05A0802EB4000B0FBF3F34FF6FF
-S31508002958F0721A40C3F342031343E360F0E7012019
-S3150800296838BD0120FCE700BF00380140004400409C
-S3150800297800480040004C0040005000400346002034
-S31508002988A3F844004FF43F42A3F840207047B0F834
-S31508002998403023F47C535B045B0CA0F840300020DD
-S315080029A8704784B0844601A880E80E000123ACF875
-S315080029B840300020ACF84000ACF84400ACF85000B1
-S315080029C804B0704710B503460A7830F822C01FFAD3
-S315080029D88CFC2CF4EC4C2CF0700C1FFA8CFCC87888
-S315080029E8032862D8DFE800F0565D0259002048F24D
-S315080029F8800E4CEA0E0C23F822C091F800C033F872
-S31508002A082C2012B222F4E04222F070024CEA0202AA
-S31508002A1892B242EA0E0223F82C200A7B002A40F0DA
-S31508002A28DC804A78002A51D0B3F8502013FA82F28B
-S31508002A380C7802EB0412B1F806C04FEA5C0C4FEAB0
-S31508002A484C0CA2F800C40C7833F8242012F0400F76
-S31508002A580CD033F8242092B222F4E04222F0700215
-S31508002A6842F4004242F0C00223F82420CA78012A18
-S31508002A781DD0097833F8212092B222F4E04222F0D8
-S31508002A88400282F0200242F4004242F0800223F813
-S31508002A98212017E14CF4007CA9E74CF4C06C00200F
-S31508002AA8A5E74CF4806C0020A1E701209FE7097888
-S31508002AB833F8212092B222F4E04222F0400242F48E
-S31508002AC8004242F0800223F82120FBE0B3F85020A8
-S31508002AD813FA82F20C7802EB0412B1F806C04FEA30
-S31508002AE85C0C4FEA4C0CA2F808C4B3F8502013FA49
-S31508002AF882F20C7802EB0412B2F80CC4CCF3090C77
-S31508002B08A2F80CC40C693E2C39D94FEA541E14F0A5
-S31508002B181F0F01D10EF1FF3EB2F80CC41FFA8CFC48
-S31508002B284FEA8E2E1FFA8EFE4CEA0E0C4CF4004C19
-S31508002B38A2F80CC40C7833F8242012F4804F0CD071
-S31508002B4833F8242092B222F4E04222F0700242F4CA
-S31508002B58404242F0800223F82420097869BB33F8FA
-S31508002B68212092B222F4804222F0700282F4405266
-S31508002B7842F4004242F0800223F82120A2E04CB930
-S31508002B88B2F80C446FEA44446FEA5444A4B2A2F873
-S31508002B980C44CFE74FEA540C14F0010F01D00CF19E
-S31508002BA8010CB2F80C44A4B24FEA8C2C1FFA8CFC20
-S31508002BB844EA0C0CA2F80CC4BCE733F8212092B2FC
-S31508002BC822F4804222F0700282F4005242F4004253
-S31508002BD842F0800223F8212074E0CA78022A72D0CB
-S31508002BE80C7833F8242092B222F4E24222F07002DA
-S31508002BF842F4004242F0800223F82420B3F8502019
-S31508002C0813FA82F291F800C002EB0C12B1F808C068
-S31508002C184FEA5C0C4FEA4C0CA2F800C4B3F85020F3
-S31508002C2813FA82F291F800C002EB0C12B1F80AC046
-S31508002C384FEA5C0C4FEA4C0CA2F808C44A78002AFA
-S31508002C4850D10C7833F8242012F4804F0CD033F87E
-S31508002C58242092B222F4E04222F0700242F4404262
-S31508002C6842F0800223F824200C7833F8242012F046
-S31508002C78400F0CD033F8242092B222F4E04222F016
-S31508002C88700242F4004242F0C00223F8242091F868
-S31508002C9800C033F82C2092B222F4804222F0700247
-S31508002CA882F4405248F28004224323F82C200978FB
-S31508002CB833F8212092B222F4E04222F0400222435D
-S31508002CC823F8212010BD0C7833F8242092B222F478
-S31508002CD8E04222F0700242F4014242F0800223F8F0
-S31508002CE824208BE70C7833F8242012F4804F0CD074
+S3150800021800F070F808BD08B500F072F808BD0000CF
+S3150800022800B5C7B04FF48C720021684608F08AFBFF
+S315080002386946084807F0E2FF40B9009B3BB19DF8BC
+S31508000248083013F0100F02D1012000E0002047B053
+S315080002585DF804FB8489000800487047848900080B
+S3150800026808B50748002380F828320A22054907F006
+S31508000278EDFB18B9024B012283F8282208BD00BFF6
+S31508000288E40000207489000808B5064B93F828325C
+S31508000298012B03D0044807F0DBFF08BD014807F027
+S315080002A8D7FEF7E7E40000208489000808B5054B5F
+S315080002B893F82832012B00D008BD024807F0C8FE7B
+S315080002C8FAE700BFE400002008B5094B93F828327E
+S315080002D8012B00D008BD064908F043F80028F9DACA
+S315080002E80348002380F8283207F0B2FEF2E700BF79
+S315080002F8E4000020014B1880704700BF1003002057
+S3150800030808B505F05BF80F4B1B68984210D30E4BDF
+S315080003181B7873B90C4B01221A704FF090432022B0
+S315080003289A6105F04BF8094B1B880344054A136084
+S3150800033808BD054B00221A704FF0904320229A6296
+S31508000348EFE700BF14030020120300201003002063
+S315080003584FF0904320229A62704700002DE9F04F2B
+S315080003688DB0002406940794089409940A940B946B
+S31508000378334B5A6942F480025A615A6902F4800278
+S315080003880592059A5A6942F400325A615A6902F482
+S3150800039800320492049A5A6942F480225A615A69C8
+S315080003A802F480220392039A5A6942F400225A6197
+S315080003B85A6902F400220292029A5A6942F4801291
+S315080003C85A615B6903F480130193019B4FF09046C9
+S315080003D84FF0200BC6F828B01A4F4FF00408C7F894
+S315080003E82880DFF864904FF4805AC9F818A00125C8
+S315080003F806950A9506A9304602F090F8CDF818B081
+S315080004080795089409940A9406A9304602F086F8CE
+S31508000418CDF818A00795089409940A9406A9484699
+S3150800042802F07CF8CDF818800795032308930994F9
+S315080004380A9406A9384602F071F80DB0BDE8F08F9F
+S3150800044800100240000C00480008004810B590B09B
+S31508000458002409940A940B940C940D940E940F9402
+S31508000468039404940594069407940894224BDA692D
+S3150800047842F48022DA61DA6902F480220292029A48
+S315080004885A6942F480225A615B6903F4802301930E
+S31508000498019B4FF4406303930223049303230593B4
+S315080004A80723089303A9154802F038F84FF461435F
+S315080004B809930A940B940C940C230D930E940F9499
+S315080004C809A90F4802F0BEFA0E4A52E8003F23F47B
+S315080004D8806342E800310029F6D1094B5A6822F4AC
+S315080004E890425A609A6822F02A029A601A6842F07C
+S315080004F801021A6010B010BD00100240000400483E
+S31508000508004800400848004072B6FEE708B52C4A7D
+S31508000518136823F0070343F002031360284B1B688C
+S3150800052803F00703022BF9D1264A136843F48033EC
+S315080005381360244B1B6813F4003FFAD0214B5A6802
+S3150800054822F4741242F4E8125A60DA6A22F00F02A8
+S31508000558DA621A6842F080721A601A4B1B6813F03E
+S31508000568007FFAD0174B5A6822F0F0025A605A6888
+S3150800057822F4E06242F480625A605A6822F46052B1
+S315080005885A605A6822F0030242F002025A600D4B7A
+S315080005985B6803F00C03082BF9D10B4803F060FAE3
+S315080005A80F2000F05DF948B9064B1A6B22F4402271
+S315080005B81A635A6822F480025A6008BDFFF7A4FF36
+S315080005C8002002400010024000A24A0408B500F0C4
+S315080005D86DF9FFF79BFFFFF7C1FEFFF737FFFFF738
+S315080005E8EFFDFFF7F1FDFCE782B00A4B9A6942F086
+S315080005F801029A619A6902F001020092009ADA6980
+S3150800060842F08052DA61DB6903F080530193019B5B
+S3150800061802B070470010024000B589B00023039362
+S3150800062804930593069307930268144B9A4202D0DB
+S3150800063809B05DF804FB03F5D633DA6942F00072AF
+S31508000648DA61DA6902F000720192019A5A6942F48B
+S3150800065880225A615B6903F480230293029B4FF454
+S3150800066840730393022304930323069309230793EA
+S3150800067803A9034800F070FDDAE700BF00640040EC
+S315080006880004004810B588B0002303930493059323
+S31508000698069307930268134B9A4201D008B010BD17
+S315080006A8114C636943F400336361636903F40033E7
+S315080006B80193019B4FF4C053039302230493032326
+S315080006C806930E23079303A94FF0904000F044FDC4
+S315080006D8E36943F40003E361E36903F4000302935F
+S315080006E8029BDBE7005C00400010024008B5026880
+S315080006F8074B9A4200D008BD064AD36923F400037B
+S31508000708D3614FF4C0514FF0904000F009FEF2E76C
+S31508000718005C00400010024030B589B000230293FF
+S3150800072803930493059306930793204C636943F44C
+S3150800073800236361636903F400230193019B1C4842
+S315080007484FF48053836102930123039302A901F0AE
+S31508000758E5FE01F08DFF4FF090452023AB62154862
+S3150800076801F06AFE144801F067FE284601F064FEA7
+S31508000778E36923F48023E361E36923F48043E361AF
+S31508000788636923F480136361636923F480236361CF
+S31508000798636923F400336361E36923F08053E361F3
+S315080007A8A36923F00103A36109B030BD0010024014
+S315080007B800080048000C004800040048FEE7FEE769
+S315080007C8FEE7FEE7FEE770477047704708B500F092
+S315080007D87FF808BD034AD2F8883043F47003C2F894
+S315080007E88830704700ED00E0DFF834D0FFF7F2FFF5
+S315080007F80C480D490D4A002302E0D458C450043366
+S31508000808C4188C42F9D30A4A0A4C002301E013603B
+S315080008180432A242FBD308F071F8FFF7D7FEFEE7C9
+S3150800082800A0002000000020C40000204492000810
+S31508000838C8000020801A0020FEE7000010B5074B04
+S315080008484FF0FF321A6100241C61DA60DC609A6294
+S315080008589C62FFF761FF204610BD00BF00100240EA
+S3150800086810B504460E4B18784FF47A73B3FBF0F3B9
+S315080008780C4A1068B0FBF3F000F014FB68B90F2CAB
+S3150800088801D901200AE0002221464FF0FF3000F086
+S31508000898D1FA054B1C60002000E0012010BD00BFFE
+S315080008A804000020000000200800002008B5074AB8
+S315080008B8136843F010031360032000F0A9FA0F2009
+S315080008C8FFF7CEFFFFF790FE002008BD0020024084
+S315080008D8034A1168034B1B780B441360704700BF23
+S315080008E80406002004000020002800F0A18038B57E
+S315080008F8044690F82030D3B12268136843F0010300
+S31508000908136004F063FD054623685A6812F0010F60
+S3150800091810D104F05BFD401B0A28F5D9636A43F435
+S3150800092800336362052384F82030012038BDFFF7B9
+S3150800093873FEE1E71A6822F002021A6004F046FD1F
+S31508000948054623685A6812F0020F0DD004F03EFDDA
+S31508000958401B0A28F5D9636A43F400336362052302
+S3150800096884F820300120E1E7227E012A3DD01A6862
+S3150800097822F080021A60637E012B3BD02268136836
+S3150800098823F040031360A37E012B39D0226813682D
+S3150800099823F020031360E37E012B37D022681368FF
+S315080009A843F010031360237F012B35D022681368A0
+S315080009B823F008031360637F012B33D0226813687A
+S315080009C823F004031360A368E268134322691343F8
+S315080009D8626913436268013A21681343CB610020B0
+S315080009E86062012384F82030A0E71A6842F0800282
+S315080009F81A60C0E72268136843F040031360C2E729
+S31508000A082268136843F020031360C4E72268136852
+S31508000A1823F010031360C6E72268136843F0080337
+S31508000A281360C8E72268136843F004031360CAE72B
+S31508000A3801207047026890F82030013BDBB2012B91
+S31508000A4805D9436A43F4802343620120704730B4CA
+S31508000A58D2F8003243F00103C2F800324B6903F0BA
+S31508000A681F03012000FA03F3D2F81C026FEA030CED
+S31508000A7820EA0300C2F81C02C869B0B9D2F80C0209
+S31508000A880CEA0000C2F80C028C884869CD6844EA6A
+S31508000A980544483042F830400C8848698D6844EA6D
+S31508000AA80544483002EBC0004460C86901281BD0D9
+S31508000AB8886980BBD2F804020CEA0000C2F804026E
+S31508000AC8086970BBD2F814020CEA0000C2F81402CE
+S31508000AD8096A01292BD0D2F8003223F00103C2F89B
+S31508000AE80032002030BC7047D2F80C021843C2F80E
+S31508000AF80C028C8848690D6844EA0544483042F86F
+S31508000B0830408C8948698D6844EA0544483002EBC8
+S31508000B18C0004460CCE7D2F804021843C2F80402BD
+S31508000B28CEE7D2F814021843C2F81402D0E7D2F86E
+S31508000B381C120B43C2F81C32CDE770B5044690F870
+S31508000B482050EDB2012D06D0436A43F400234362D0
+S31508000B580125284670BD022380F8203002681368EC
+S31508000B6823F00103136004F031FC064623685B682A
+S31508000B7813F0010F0CD004F029FC831B0A2BF5D9B6
+S31508000B88636A43F400336362052384F82030E0E798
+S31508000B9800256562DDE730B590F820C00468A468CA
+S31508000BA80CF1FF3C5FFA8CFCBCF1010F62D814F01B
+S31508000BB8E05F59D0C4F3016C012404FA0CF41C60F4
+S31508000BC88B68002B3DD10D68CB68046843EA455508
+S31508000BD80CF118031B01E55003680C690CF1180E93
+S31508000BE803EB0E135C600B7D012B35D0D179937915
+S31508000BF81B0443EA0163517943EA0123147901681E
+S31508000C08234301EB0C11C1F88C31D17893781B0476
+S31508000C1843EA0163517843EA0123117802680B43D2
+S31508000C2802EB0C12C2F8883102680CF1180C4FEA6C
+S31508000C380C1C52F80C3043F0010342F80C30002023
+S31508000C481DE04C6843EAC403CC6823430CF1180436
+S31508000C58240105682B51BFE7036803EB0E1359688F
+S31508000C6841F480715960C1E7436A43F4001343624B
+S31508000C78012004E0436A43F480234362012030BD1F
+S31508000C8890F82030013BDBB2012B01D900207047D0
+S31508000C9803689B6803EA8163B3EB816F01D001207F
+S31508000CA870470020704790F820C00CF1FF3C5FFAA7
+S31508000CB88CFCBCF1010F00F2A58030B451B9046868
+S31508000CC8E46814F0030F10D1436A43F4001343622F
+S31508000CD801207EE00468246914F0030F05D1436AED
+S31508000CE843F400134362012073E0056801F11B040D
+S31508000CF824012C5904F004049460002C6BD105686F
+S31508000D0801F11B0424012C59640D1460046801F1CF
+S31508000D181B0C4FEA0C1C54F80C4004F00204D4606F
+S31508000D280468A444DCF8045015F0080F5BD00824BE
+S31508000D381461056801F11B0C05EB0C156D68C5F304
+S31508000D4807259561046804EB0C146468240C54613F
+S31508000D58026802EB0112D2F8B8211A70026802EB8F
+S31508000D680112D2F8B821C2F307225A70026802EBB8
+S31508000D780112D2F8B821C2F307429A70026802EB48
+S31508000D880112D2F8B821120EDA70026802EB0112C3
+S31508000D98D2F8BC211A71026802EB0112D2F8BC21FA
+S31508000DA8C2F307225A71026802EB0112D2F8BC2173
+S31508000DB8C2F307429A71026802EB0112D2F8BC2103
+S31508000DC8120EDA71C1B90268D36843F02003D360FA
+S31508000DD8002030BC7047056801F11B0424012C5912
+S31508000DE8E408546092E701F11B0504EB05146468EE
+S31508000DF804F00F0414619CE70268136943F02003A2
+S31508000E081361E5E7436A43F4802343620120704788
+S31508000E18074AD36823F4E0631B041B0C000200F49A
+S31508000E28E060034343F0BF6343F40033D36070477D
+S31508000E3800ED00E000B5194BDB68C3F30223C3F1E4
+S31508000E48070CBCF1040F28BF4FF0040C03F1040E7D
+S31508000E58BEF1060F18D9033B4FF0FF3E0EFA0CFCFD
+S31508000E6821EA0C0199400EFA03F322EA030319430F
+S31508000E7800280BDB0901C9B200F1604000F56140A2
+S31508000E8880F800135DF804FB0023E5E700F00F007F
+S31508000E980901C9B2024B1954F4E700BF00ED00E096
+S31508000EA814ED00E00138B0F1807F0BD24FF0E02353
+S31508000EB85861054AF02182F8231000209861072214
+S31508000EC81A6170470120704700ED00E0044B0022C4
+S31508000ED8DA61044A136943F0010313610180704714
+S31508000EE808060020002002400C4BDB6813F01003AC
+S31508000EF805D00B4AD36943F00203D3611023074A86
+S31508000F08D26812F0040F06D00549CA6942F00102F0
+S31508000F18CA6143F00403014AD360704700200240BF
+S31508000F28080600200A4B1B6913F0800F0BD0084BE4
+S31508000F38084A5A6002F188325A601B6913F0800F12
+S31508000F4803D100207047002070470120704700BF72
+S31508000F580020024023016745034A136943F08003CA
+S31508000F6813610020704700BF0020024038B50446C8
+S31508000F7804F02CFA0546144BDB6813F0010F0AD067
+S31508000F88B4F1FF3FF7D024B104F020FA401BA04281
+S31508000F98F1D9032012E00C4BDB6813F0200F02D0BE
+S31508000FA8094B2022DA60084BDB6813F0100F06D1CC
+S31508000FB8054BDB6813F0040F01D1002038BDFFF795
+S31508000FC893FF0120FAE700BF002002402DE9F84305
+S31508000FD81E46244B1B7E012B41D004460F469046DD
+S31508000FE8204B01221A764CF25030FFF7BFFF034612
+S31508000FF878BB012C08D0022C03D04FF004091C46F4
+S3150800100807E04FF00209FAE74FF00109F7E701345C
+S31508001018E4B24C451DD22101C1F12002A1F12003F9
+S3150800102828FA01F106FA02F2114326FA03F31943DC
+S3150800103889B207EB4400FFF749FF4CF25030FFF737
+S3150800104895FF094B1D6925F001051D610346002812
+S31508001058DDD0044A002111761846BDE8F883022334
+S31508001068FAE700BF0806002000200240064B0022C7
+S31508001078DA61064B1A6942F004021A611A6942F0E3
+S3150800108840021A61704700BF080600200020024087
+S31508001098064B0022DA61064B1A6942F002021A6107
+S315080010A858611A6942F040021A617047080600201A
+S315080010B800200240264B1B7E012B45D070B50546FD
+S315080010C80E46234B01221A760368934220D04CF227
+S315080010D85030FFF74BFF88BB4FF0FF3333606C681F
+S315080010E80121AA686B6803EBC223A34227D92046C5
+S315080010F8FFF7CEFF4CF25030FFF738FF154A136951
+S3150800110823F0020313610146B0B904F50064E8E761
+S315080011184CF25030FFF72AFF08B101210FE0FFF71C
+S31508001128A5FF4CF25030FFF721FF0146094A13691B
+S3150800113823F00403136102E0346000E00121044B44
+S3150800114800221A76084670BD02210846704700BF75
+S315080011580806002000200240F0B583B0002362E0AC
+S3150800116885685E000324B44025EA0405CC68B440C3
+S315080011782C438460446824EA0C0C4C68C4F30014B5
+S315080011889C4044EA0C0444605EE0DD08083550F8E3
+S31508001198256003F007044FEA840C0F2404FA0CF4BC
+S315080011A826EA040E0C6904FA0CF444EA0E0440F81C
+S315080011B8254060E0042400E0002404FA0EF42C43D9
+S315080011C80CF1020C524D45F82C40524CA568D443F4
+S315080011D825EA02064F6817F4801F01D042EA050679
+S315080011E84C4DAE60ED6804EA05064F6817F4001F13
+S315080011F801D042EA0506474DEE606D6804EA050621
+S315080012084F6817F4003F01D042EA0506414D6E6063
+S315080012182D682C404E6816F4803F01D042EA050432
+S315080012283C4A146001330A6832FA03F46ED04FF068
+S31508001238010C0CFA03FC1CEA0202F3D04C6804F011
+S315080012480304013C012C8BD94C6804F00304032CD5
+S315080012580CD0C4685D004FF0030C0CFA05FC24EAB0
+S315080012680C0C8C68AC4044EA0C04C4604C6804F066
+S315080012780304022C89D004684FEA430E4FF0030C86
+S315080012880CFA0EFC24EA0C0C4C6804F0030404FA65
+S315080012980EF444EA0C0404604C6814F4403FC1D0C8
+S315080012A81D4CA56945F00105A561A46904F001046A
+S315080012B80194019C4FEA930C0CF10205144C54F85E
+S315080012C8255003F003044FEA840E0F2404FA0EF49B
+S315080012D825EA0405B0F1904F3FF46EAF0F4CA042D3
+S315080012E80ED004F58064A0420CD004F58064A042B0
+S315080012F80AD004F58064A0423FF45CAF05245CE795
+S3150800130801245AE7022458E7032456E703B0F0BD38
+S315080013180000014000040140001002400004004893
+S31508001328002331FA03F27AD0F0B52EE0042500E05E
+S31508001338002505FA0CFCA44555D004685D004FF055
+S31508001348030C0CFA05FC24EA0C0404604FEAD30ED5
+S315080013580EF1080E50F82E4003F00705AE000F25CB
+S31508001368B54024EA050440F82E40C46824EA0C046B
+S31508001378C460446824EA02024260826822EA0C02CF
+S315080013888260013331FA03F248D001229A4012EA00
+S315080013980107F6D04FEA930E0EF10205204C54F8D1
+S315080013A8254003F0030C4FEA8C0C0F2505FA0CF6BA
+S315080013B83440B0F1904FBBD01A4DA8420DD005F570
+S315080013C88065A8420BD005F58065A84209D005F5C1
+S315080013D88065A842AAD00525ABE70125A9E7022515
+S315080013E8A7E70325A5E7104C256825EA070525601C
+S315080013F8656825EA07056560E56825EA0705E5607D
+S31508001408A56825EA0707A760054F0EF1020457F8ED
+S31508001418245025EA060547F824508EE7F0BD70479C
+S3150800142800000140000400480004014038B512F4E1
+S31508001438804F45D00468B4F8503091F800C04FEA98
+S31508001448CC0E1EFA83F3023304EB4303B3F80044C5
+S31508001458C4F309048B69A34228D31B1B8B618B69C8
+S315080014687BB9056835F82C309BB223F4804323F002
+S31508001478700383F4005343F4004343F0800325F8CC
+S315080014882C3012F0400F0ED002680D7832F825304D
+S315080014989BB223F4E04323F0700343F4004343F07C
+S315080014A8C00322F8253024B9204638BD00238B61AD
+S315080014B8D5E723460A894969006802F0B8FAF3E7C6
+S315080014C80468B4F8503091F800C04FEACC0E1EFAFA
+S315080014D883F3063304EB4303B3F80044C4F309045F
+S315080014E88B69A3422FD31B1B8B618B697BB9056854
+S315080014F835F82C309BB223F4804323F0700383F429
+S31508001508005343F4004343F0800325F82C3012F0C7
+S31508001518400F0FD1026891F800C032F82C309BB200
+S3150800152823F4E04323F0700343F4004343F0C00375
+S3150800153822F82C30002CB7D023464A894969006816
+S3150800154802F075FAB0E700238B61CEE7002860D071
+S3150800155830B587B0044690F8A9323BB1032384F81E
+S31508001568A932206801F0EBFA00231BE080F8A832BC
+S31508001578FFF788F8F2E75A1C02EB820104EBC1016F
+S315080015880120487002EB820104F8313004EBC100EF
+S315080015980021C17003EB830004EBC0008163C163BB
+S315080015A80164D3B260688342E5D3002316E003EBEF
+S315080015B8830204EBC202002182F8691182F86831B5
+S315080015C882F86B11C2F87811C2F87C1103EB830212
+S315080015D804EBC202C2F880110133DBB29842E6D89E
+S315080015E8A4465CF8105BEE46BCE80F00AEE80F00B0
+S315080015F8DCF80030CEF80030231D0ECB284601F063
+S31508001608A8FA002084F82400012384F8A93207B030
+S3150800161830BD0120704738B590B10446032380F8D9
+S31508001628A932006801F0EEFD054610B101252846E5
+S3150800163838BD2046FFF75AF8002384F8A932F6E79A
+S315080016480125F4E738B590F8A832012B11D00446DD
+S31508001658012580F8A852006801F068FA294620464C
+S3150800166807F040F9206801F0DEFD002084F8A8029A
+S3150800167838BD0220FCE790F8A832012B12D010B525
+S315080016880446012380F8A832006801F058FA0021B8
+S31508001698204607F027F9206801F0C7FD002084F8DE
+S315080016A8A80210BD0220704770B505460C461646B6
+S315080016B812F0400F00F00E810268B2F8503009782F
+S315080016C8C80010FA83F3023302EB4303B3F8002485
+S315080016D8C2F30902A36993424ED99B1AA361A36967
+S315080016E8002B66D16378002B49D12A68B2F85030A6
+S315080016F812FA83F303EB0111B1F80434C3F30903AF
+S31508001708A1F80434B1F804346FEA43436FEA534343
+S315080017189BB2A1F8043429686278002A3CD1B1F84A
+S31508001728503011FA83F3227803EB0213B3F80C242A
+S31508001738C2F30902A3F80C24B3F80C246FEA424250
+S315080017486FEA524292B2A3F80C242178284606F08A
+S31508001758CFFF16F4804F41D02A68217832F8213015
+S315080017689BB223F4E04323F0700343F4404343F069
+S31508001778800322F8213031E00023A361AFE7012B6B
+S31508001788C9D12A68B2F8503012FA83F303EB01116B
+S315080017980023A1F80434BEE7012AD6D1B1F850309F
+S315080017A811FA83F3217803EB01130022A3F80C241A
+S315080017B8CBE716F4804F0DD0286830F821309BB255
+S315080017C823F4E04323F0700343F4404343F08003D3
+S315080017D820F8213094F82430012B12D02A68217871
+S315080017E832F821309BB223F4E04323F0400383F018
+S315080017F8300343F4004343F0800322F821300020E5
+S3150800180870BD636913446361E3691344E361216A3C
+S315080018182369994224D3C91A21626278002A44D1D5
+S315080018282968B1F8502011FA82F2217802EB0112E0
+S31508001838B2F80414C1F30901A2F804143E2B1BD903
+S31508001848580913F01F0F00D10138B2F8041489B2E9
+S31508001858800280B2014341F40041A2F8041426E04C
+S3150800186821B9002384F824301346D6E7002384F8E0
+S31508001878243023620B46D0E74BB9B2F804146FEA52
+S3150800188841416FEA514189B2A2F804140FE0590898
+S3150800189813F0010F00D00131B2F8040480B28902AE
+S315080018A889B20143A2F8041401E0012A06D09BB2C2
+S315080018B822896169286801F0BEFC8FE72968B1F8B2
+S315080018C8502011FA82F2217802EB011299B2A2F895
+S315080018D80414ECE70268B2F850300978C80010FA20
+S315080018E883F3063302EB4303B3F80024C2F3090271
+S315080018F8A36993424FD39B1AA361A369002B67D1A7
+S315080019086378002B4AD12A68B2F8503012FA83F362
+S3150800191803EB0111B1F80434C3F30903A1F804343D
+S31508001928B1F804346FEA43436FEA53439BB2A1F80C
+S31508001938043429686278002A3DD1B1F8503011FA82
+S3150800194883F3227803EB0213B3F80C24C2F30902D3
+S31508001958A3F80C24B3F80C246FEA42426FEA524201
+S3150800196892B2A3F80C242178284606F0C1FE16F48C
+S31508001978804F7FF433AF2A68217832F821309BB23A
+S3150800198823F4E04323F0700343F4404343F0800311
+S3150800199822F8213022E70023A361AEE7012BC8D13C
+S315080019A82A68B2F8503012FA83F303EB01110023C0
+S315080019B8A1F80434BDE7012AD5D1B1F8503011FA97
+S315080019C883F3217803EB01130022A3F80C24CAE752
+S315080019D816F4804F0DD1286830F821309BB223F4CD
+S315080019E8E04323F0700343F4404343F0800320F8B0
+S315080019F8213094F82430012B7FF4F0AE6369134440
+S31508001A086361E3691344E361216A2369994224D32C
+S31508001A18C91A216229686278002A43D1B1F8502088
+S31508001A2811FA82F2217802EB0112B2F80C14C1F30A
+S31508001A380901A2F80C143E2B1BD9580913F01F0FDD
+S31508001A4800D10138B2F80C1489B2800280B2014379
+S31508001A5841F40041A2F80C1426E021B9002384F8C1
+S31508001A6824301346D6E70023236284F824300B462D
+S31508001A78D0E74BB9B2F80C146FEA41416FEA514105
+S31508001A8889B2A2F80C140FE0590813F0010F00D018
+S31508001A980131B2F80C0480B2890289B20143A2F86E
+S31508001AA80C1401E0012A06D09BB26289616928688C
+S31508001AB801F0C1FB92E6B1F8502011FA82F22178BA
+S31508001AC802EB011299B2A2F80C14EDE72DE9F041E0
+S31508001AD805462868B0F8443013F4004F00F08E82A3
+S31508001AE8B0F84440A3B214F00F0440F0E28013F0B3
+S31508001AF8100F6BD003889AB213F4006F40F09D80DC
+S31508001B0812F4004FE5D0038823F070031B051B0D5C
+S31508001B1843F0800303802868B0F8503095F86821A8
+S31508001B28D20012FA83F3063300EB4303B3F8003402
+S31508001B38C3F30903C5F884318BB1D5F87C1171B1A3
+S31508001B48B5F86E2101F073FFD5F88421D5F87C31F4
+S31508001B581344C5F87C310021284606F0BDFD2A68DD
+S31508001B68138899B213F4006FB3D101F44051B1F553
+S31508001B78405FAED0B2F8503012FA83F2B2F80C349D
+S31508001B88C3F30903A2F80C34D5F878313E2B77D974
+S31508001B98590913F01F0F00D10139B2F80C349BB25A
+S31508001BA8890289B20B4343F40043A2F80C342A6825
+S31508001BB813889BB223F4804323F0700383F44053BD
+S31508001BC843F4004343F08003138082E703889BB2FB
+S31508001BD823F4E14323F070036FEA43436FEA534360
+S31508001BE89BB203802A68B2F8503095F82810C900C5
+S31508001BF811FA83F3023302EB4303B3F80034C3F351
+S31508001C0809036B64EA6B1344EB630021284606F064
+S31508001C186FFD95F82430002B3FF45BAF2B6C002B37
+S31508001C287FF457AF95F824302A6843F08003A2F862
+S31508001C384C30002385F824304BE7B0F8503095F837
+S31508001C486821D20012FA83F3063300EB4303B3F88C
+S31508001C580034C3F30903C5F88431B5F86E2105F5D0
+S31508001C682C7101F0E4FE2A68138823F070031B051B
+S31508001C781B0D43F080031380284606F025FD28E748
+S31508001C884BB9B2F80C346FEA43436FEA53439BB235
+S31508001C98A2F80C348BE7590813F0010F00D001316C
+S31508001CA8B2F80C3498B28B029BB20343A2F80C34F0
+S31508001CB87DE730F824309EB213F4004F4CD116F065
+S31508001CC8800F3FF406AF621C02EB820105EBC101E7
+S31508001CD8286830F824309BB223F4E14323F07003D4
+S31508001CE86FEA43436FEA53439BB220F82430CB7814
+S31508001CF8012B00F0F28016F4807F40F07A8128687C
+S31508001D08B0F85030621C02EB820215F83260F20015
+S31508001D1812FA83F3023300EB4303B3F80034C3F330
+S31508001D28090304EB840205EBC202126C9A4240F2DC
+S31508001D384C8104EB840705EBC707D21A3A6404EB0F
+S31508001D48840205EBC202126C002A40F0458131462E
+S31508001D58284606F0CDFCBCE630F8243023F070039C
+S31508001D681B051B0D43F0800320F8243004EB84017F
+S31508001D78C90001F5B47105EB010804EB840305EB0A
+S31508001D88C30393F87431002B42D12868B0F8503051
+S31508001D9804EB840205EBC20292F86821D20012FA13
+S31508001DA883F3063300EB4303B3F80074C7F3090754
+S31508001DB817BB04EB840305EBC303D3F884213A4421
+S31508001DC8C3F88421D3F87C213A44C3F87C21D3F894
+S31508001DD880313BB104EB840305EBC303D3F87831B0
+S31508001DE89F4275D204EB840305EBC30393F8681185
+S31508001DF8284606F071FC62E704EB840105EBC1018D
+S31508001E083B46B1F86E21D1F87C1101F010FED0E7F7
+S31508001E1804EB840305EBC30393F86B31022B35D027
+S31508001E28296804EB840205EBC20292F8680131F8C6
+S31508001E3820309BB223F4E04323F0700343F40043B5
+S31508001E4843F0C00321F82030286892F8683130F842
+S31508001E58232012F4804F20D0B0F85020DB0013FA64
+S31508001E6882F3023300EB4303B3F80074C7F3090798
+S31508001E78002F9ED004EB840105EBC1013B46B1F85F
+S31508001E887021D1F87C1101F0D2FD92E7324641461D
+S31508001E982846FFF7CBFA07468BE7B0F85020DB0051
+S31508001EA813FA82F3063300EB4303B3F80074C7F357
+S31508001EB80907002F3FF47DAF04EB840105EBC10148
+S31508001EC83B46B1F87221D1F87C1101F0B0FD70E7F4
+S31508001ED84146286801F0C4F9F1E604EB840305EBEA
+S31508001EE8C30300221A6493F83430FBB116F0400F86
+S31508001EF837D04B781BBB2A68B2F8503012FA83F3EE
+S31508001F08621C02EB820215F8322003EB0213B3F8BF
+S31508001F180424C2F30902A3F80424B3F804246FEAD4
+S31508001F2842426FEA524292B2A3F80424013404EBFF
+S31508001F38840415F83410284606F0DAFBC9E5012B9F
+S31508001F48F4D12A68B2F8503012FA83F3621C02EB0D
+S31508001F58820215F8322003EB02130022A3F80424A0
+S31508001F68E4E72A68631C03EB830305EBC3035B7882
+S31508001F78D3B9B2F8503012FA83F3621C02EB820224
+S31508001F8815F8322003EB0213B3F80C24C2F309023E
+S31508001F98A3F80C24B3F80C246FEA42426FEA5242BB
+S31508001FA892B2A3F80C24C1E7012BBFD1B2F850307E
+S31508001FB812FA83F3621C02EB820215F8322003EB4D
+S31508001FC802130022A3F80C24B0E704EB840205EBFD
+S31508001FD8C20200271764B2E604EB840205EBC202C4
+S31508001FE8D66B1E44D663546C2344536401F038F9FF
+S31508001FF86FE532462846FFF757FB6AE50020BDE835
+S31508002008F08190F8A832012B0DD010B504460121AD
+S3150800201880F8A81206F066FC206801F004F900208A
+S3150800202884F8A80210BD0220704790F8A832012B40
+S315080020380ED010B50446012380F8A832002106F010
+S3150800204851FC206801F0F1F8002084F8A80210BDB8
+S315080020580220704790F8A832012B0DD010B5044617
+S31508002068012380F8A83280F82410006801F0D5F812
+S31508002078002084F8A80210BD0220704710B504464F
+S31508002088006801F0D4F810F4004F1ED110F4806FE0
+S315080020981FD110F4804F2DD110F4005F34D110F4FD
+S315080020A8805F3BD110F4006F57D110F4007F71D1CF
+S315080020B810F4807F27D02268B2F844309BB223F404
+S315080020C880739BB2A2F844301DE02046FFF7FEFC59
+S315080020D819E02268B2F844309BB223F480639BB2B5
+S315080020E8A2F84430204606F015FB00212046FFF7E3
+S315080020F8B1FF08E02268B2F844309BB223F4804363
+S315080021089BB2A2F8443010BD2268B2F844309BB29C
+S3150800211823F400539BB2A2F84430F4E72268B2F8D5
+S3150800212840309BB223F004039BB2A2F840302268E1
+S31508002138B2F840309BB223F008039BB2A2F84030AD
+S31508002148204606F00FFB2268B2F844309BB223F407
+S3150800215880539BB2A2F84430D5E72268B2F84030DB
+S315080021689BB243F00803A2F840302268B2F844301C
+S315080021789BB223F400639BB2A2F844302268B2F8F3
+S3150800218840309BB243F00403A2F84030204606F0DC
+S31508002198D7FAB8E72268B2F844309BB223F400733A
+S315080021A89BB2A2F84430204606F0ADFAABE710B564
+S315080021B80446084611F0800F25D101F0070C0CEBF0
+S315080021C88C01C90001F5B47E04EB0E010CEB8C0CEE
+S315080021D804EBCC0C4FF0000E8CF869E100F0070010
+S315080021E808700A61CB70022B1AD094F8A832012B12
+S315080021F819D0012384F8A832206800F0BBFC002017
+S3150800220884F8A80210BD01F0070C0CF1010C0CEBC0
+S315080022188C0104EBC1014FF0010E81F801E0DDE7FE
+S3150800222800230B71E1E70220ECE710B504460B46DC
+S3150800223811F0800F1FD101F0070202EB8201C900D5
+S3150800224801F5B471014402EB820200EBC2020020D8
+S3150800225882F8690103F007030B7094F8A832012B7A
+S3150800226813D0012384F8A832206800F06AFE0020FB
+S3150800227884F8A80210BD01F00702013202EB8201B8
+S3150800228800EBC10101204870E4E70220F2E710B527
+S3150800229801F0070C0CEB8C01C90001F5B4710CEBC5
+S315080022A88C0E00EBCE0ECEF87C21CEF880310024B9
+S315080022B8CEF884418EF869418EF868C101440068F1
+S315080022C800F0CEFF204610BD01F0070101EB8101A1
+S315080022D800EBC101D1F88401704738B501F007044D
+S315080022E804F1010C0CEB8C0104EB840E00EBCE0E0A
+S315080022F8CEF83C20CEF8403001228EF84C20CEF895
+S3150800230848300025CEF8445000EBC1035A7000F84F
+S3150800231831401946006800F0A3FF284638BD0B4629
+S3150800232801F0070241688A422AD810B5044613F014
+S31508002338800F1DD103EB8301C90001F5B47101446F
+S3150800234803EB830300EBC303002083F86901012329
+S315080023588B700A7094F8A832012B13D0012384F8DD
+S31508002368A832206800F0D8FE002084F8A80210BD1C
+S31508002378531C03EB830100EBC10101204870E6E713
+S31508002388012070470220F2E70B4601F00F01426868
+S31508002398914230D810B5044613F0800F21D103F0C6
+S315080023A8070202EB8201C90001F5B471014402EB88
+S315080023B8820200EBC202002082F8690100228A70B4
+S315080023C803F007030B7094F8A832012B15D00123E4
+S315080023D884F8A832206800F0C4FE002084F8A80211
+S315080023E810BD03F00702013202EB820100EBC101BE
+S315080023F801204870E2E7012070470220F0E711F053
+S31508002408800F0BD001F00701013101EB810100EBC8
+S31508002418C10152B90A73CB800020704701EB8101CC
+S31508002428C90001F5B4710144F3E701220A730B8167
+S315080024381B0C4B81F0E70000B0F1904F10D0314BE0
+S31508002448984218D0304B984223D0304B98422ED019
+S315080024582F4B984239D02F4B984244D001207047C9
+S315080024682D4B9A6A42F400329A629A6A22F400322A
+S315080024789A620020704703F1784303F503339A6A92
+S3150800248842F480229A629A6A22F480229A6200208A
+S31508002498704703F1784303F502339A6A42F4002237
+S315080024A89A629A6A22F400229A620020704703F117
+S315080024B8784303F501339A6A42F480129A629A6A53
+S315080024C822F480129A620020704703F1784303F5D4
+S315080024D800339A6A42F400129A629A6A22F400123F
+S315080024E89A620020704703F1784303F5FE339A6A27
+S315080024F842F480029A629A6A22F480029A6200205A
+S31508002508704700BF0004004800080048000C00484F
+S315080025180010004800140048001002400B6893FA9F
+S31508002528A3F3B3FA83FC57E08D68826893FAA3F499
+S31508002538B4FA84F464004FF0030E0EFA04F422EA9F
+S31508002548040293FAA3F4B4FA84F4640005FA04F4CA
+S31508002558224382600C68CD68426822EA040205FBB9
+S3150800256804F42243426045E093FAA3F2B2FA82F2EF
+S31508002578072A15D84D69026A93FAA3F4B4FA84F4BB
+S31508002588A4000F2606FA04F422EA040293FAA3F42E
+S31508002598B4FA84F4A40005FA04F42243026241E07A
+S315080025A84C69456A1A0A92FAA2FEBEFA8EFE4FEAE4
+S315080025B88E0E0F2606FA0EFE25EA0E0592FAA2F2E6
+S315080025C8B2FA82F2920004FA02F22A43426229E037
+S315080025D8002070BD0CF1010C0B6833FA0CF244D0DC
+S315080025E8012202FA0CF21340F4D070B54A68013A8F
+S315080025F8012A99D9C26893FAA3F4B4FA84F4640050
+S31508002608032505FA04F422EA040293FAA3F4B4FAB1
+S3150800261884F464000D6905FA04F42243C2604A6822
+S31508002628022AA1D04A68046893FAA3FEBEFA8EFE67
+S315080026384FEA4E0E032505FA0EFE24EA0E0E93FA05
+S31508002648A3F3B3FA83F35B0002FA03F34EEA030330
+S3150800265803600CF1010C0B6833FA0CF2B8D00122AE
+S3150800266802FA0CF21340F4D0C0E7002070470000C5
+S3150800267882B0224A136843F0010313601F4B1B6894
+S3150800268813F0020FFAD01D4A136823F0F80343F033
+S31508002698800313604FF0FF3301930199184B0B40E1
+S315080026A80193019B5360154B5B6813F00C0FFAD125
+S315080026B8124A13680193019B23F0847323F4803329
+S315080026C80193019B13600D4B1B6813F0007FFAD129
+S315080026D80A4B1A6822F480221A6000205860D862C9
+S315080026E818634FF41F020192019A9A6098605A6A11
+S315080026F842F080725A6202B0704700BF001002406A
+S315080027080CC0FFF8034B5B68C3F30313024AD35C98
+S31508002718D840704700100240A8890008034B5B6838
+S31508002728C3F30223024AD35CD8407047001002401C
+S31508002738B8890008034B5B68C3F3C223024AD35C13
+S31508002748D840704700100240B88900080E4B5B68ED
+S3150800275803F48033ABB90D4B0B4AD06A00F00F006F
+S315080027680130B3FBF0F0536803F470134FF470129A
+S3150800277892FAA2F2B2FA82F2D340023303FB00F0CD
+S315080027887047034BE8E700BF0010024000093D0008
+S3150800279800127A0008B5054B5B6803F00C03082B92
+S315080027A801D0034808BDFFF7D1FFFBE70010024038
+S315080027B800127A0010B50446FFF7ECFF2060FFF711
+S315080027C8A1FF6060FFF7AAFFA0606068FFF7B2FF85
+S315080027D8E06010BD10B5044628BB414B1B6B0322AD
+S315080027E88240134043EA0063022B14D0032B0BD014
+S315080027F8012B06D0FFF7CEFFFFF784FFFFF79AFFF6
+S3150800280812E0FFF7C7FF0FE0354B186810F0020013
+S315080028180AD0344808E0324B186A10F0020003D090
+S315080028284FF4004000E00020102C02D0122C2BD0C8
+S3150800283810BD2B4B1B6B0322A240134043EA0463CB
+S31508002848294A934218D002F5803293420DD0A2F550
+S315080028580032934206D0FFF79DFFFFF753FFFFF7B5
+S315080028685DFFE3E7FFF796FFE0E71D4B1B6813F0EC
+S31508002878020FDBD01B48D9E7194B1B6A13F0020F66
+S31508002888D4D04FF40040D1E7154B1B6B0322A24066
+S31508002898134043EA0464154B9C4218D003F5802379
+S315080028A89C420DD0A3F500239C4206D0FFF772FF81
+S315080028B8FFF728FFFFF732FFBAE7FFF76BFFB7E71F
+S315080028C8074B1B6813F0020FB2D00648B0E7044B53
+S315080028D81B6A13F0020FABD04FF40040A8E700BFFD
+S315080028E80010024000127A000000021000000812C8
+S315080028F810B50446B0F5401F04D00020B4F5400FC3
+S3150800290829D010BD284B1B6B034043EA1023274ADE
+S31508002918934218D002F5801293420DD0A2F5001200
+S31508002928934206D0FFF736FFFFF7ECFEFFF7F6FEF1
+S31508002938E4E7FFF72FFFE1E71B4B186810F00200E2
+S31508002948DCD01B48DAE7184B186A10F00200D5D015
+S315080029584FF40040D2E7144B1B6B234043EA142478
+S31508002968144B9C4218D003F580039C420DD0A3F55E
+S3150800297800039C4206D0FFF70DFFFFF7C3FEFFF7DB
+S31508002988CDFEBEE7FFF706FFBBE7074B1B6813F04C
+S31508002998020FB6D00648B4E7034B1B6A13F0020FBA
+S315080029A8AFD04FF40040ACE70010024000302000DA
+S315080029B800127A0000C080000346026812F0400F31
+S315080029C83AD110B4006820F47F4020F0BF000A68A6
+S315080029D84C682243CC6822430C6922434C6922433B
+S315080029E88C692243CC6922430C6A224302431A6043
+S315080029F85A6822F4706222F004028868B1F816C090
+S31508002A0840EA0C0002435A608A68B2F5006F03D29E
+S31508002A185A6842F480525A600A6AB2F5005F07D0CB
+S31508002A280020DA6922F40062DA615DF8044B70471F
+S31508002A388A8C1A610020F4E70120DA6922F4006218
+S31508002A48DA61704738B5036813F0010F5FD1044699
+S31508002A580D46036823F4164323F00C034A68C9682D
+S31508002A680A4329690A43A9690A4313430360AB68F9
+S31508002A78426822F44052134343606B69826822F421
+S31508002A88407213438360244B98420DD0234B9842D7
+S31508002A9812D0234B984213D0224B984214D0224B7B
+S31508002AA8984216D0012033E00020FFF793FE80B342
+S31508002AB82B689BB901202BE01020FFF78BFEF6E761
+S31508002AC81220FFF787FEF2E74FF44010FFF710FFD2
+S31508002AD8EDE74FF44000FFF70BFFE8E7AA69B2F500
+S31508002AE8004F07D000EB5300B0FBF3F39BB2E3604B
+S31508002AF800200DE05A0802EB4000B0FBF3F34FF64E
+S31508002B08F0721A40C3F342031343E360F0E7012067
+S31508002B1838BD0120FCE700BF0038014000440040EA
+S31508002B2800480040004C0040005000400346002082
+S31508002B38A3F844004FF43F42A3F840207047B0F882
+S31508002B48403023F47C535B045B0CA0F8403000202B
+S31508002B58704784B0844601A880E80E000123ACF8C3
+S31508002B6840300020ACF84000ACF84400ACF85000FF
+S31508002B7804B0704710B503460A7830F822C01FFA21
+S31508002B888CFC2CF4EC4C2CF0700C1FFA8CFCC878D6
+S31508002B98032862D8DFE800F0565D0259002048F29B
+S31508002BA8800E4CEA0E0C23F822C091F800C033F8C0
+S31508002BB82C2012B222F4E04222F070024CEA0202F9
+S31508002BC892B242EA0E0223F82C200A7B002A40F029
+S31508002BD8DC804A78002A51D0B3F8502013FA82F2DA
+S31508002BE80C7802EB0412B1F806C04FEA5C0C4FEAFF
+S31508002BF84C0CA2F800C40C7833F8242012F0400FC5
+S31508002C080CD033F8242092B222F4E04222F0700263
+S31508002C1842F4004242F0C00223F82420CA78012A66
+S31508002C281DD0097833F8212092B222F4E04222F026
+S31508002C38400282F0200242F4004242F0800223F861
+S31508002C48212017E14CF4007CA9E74CF4C06C00205D
+S31508002C58A5E74CF4806C0020A1E701209FE70978D6
+S31508002C6833F8212092B222F4E04222F0400242F4DC
+S31508002C78004242F0800223F82120FBE0B3F85020F6
+S31508002C8813FA82F20C7802EB0412B1F806C04FEA7E
+S31508002C985C0C4FEA4C0CA2F808C4B3F8502013FA97
+S31508002CA882F20C7802EB0412B2F80CC4CCF3090CC5
+S31508002CB8A2F80CC40C693E2C39D94FEA541E14F0F4
+S31508002CC81F0F01D10EF1FF3EB2F80CC41FFA8CFC97
+S31508002CD84FEA8E2E1FFA8EFE4CEA0E0C4CF4004C68
+S31508002CE8A2F80CC40C7833F8242012F4804F0CD0C0
S31508002CF833F8242092B222F4E04222F0700242F419
-S31508002D08404242F0800223F824200C7833F8242025
-S31508002D1812F0400F0CD033F8242092B222F4E04285
-S31508002D2822F0700242F4004242F0C00223F824203E
-S31508002D38CA78012A1ED00C7833F8242092B222F4D5
-S31508002D48E04222F0400282F0200242F4004242F0B9
-S31508002D58800223F82420097833F8212092B222F435
-S31508002D68804222F0700242F4004242F0800223F8C0
-S31508002D782120A7E70C7833F8242092B222F4E042FF
-S31508002D8822F0400242F4004242F0800223F824204E
-S31508002D98E1E70B7B002B46D14B7813B30A7830F85A
-S31508002DA8223013F0400F0CD030F822309BB223F4AF
-S31508002DB8E04323F0700343F4004343F0C00320F8CC
-S31508002DC822300A7830F822309BB223F4E04323F005
-S31508002DD8400343F4004343F0800320F822300020E0
-S31508002DE870470A7830F8223013F4804F0CD030F840
-S31508002DF822309BB223F4E04323F0700343F44043A4
-S31508002E0843F0800320F822300A7830F822309BB243
-S31508002E1823F4804323F0700343F4004343F080030C
-S31508002E2820F82230DBE74B78002B4ED10A7830F8A9
-S31508002E38223013F4804F0CD030F822309BB223F49A
-S31508002E48E04323F0700343F4404343F0800320F83B
-S31508002E5822300A7830F8223013F0400F0CD030F8B8
-S31508002E6822309BB223F4E04323F0700343F4004373
-S31508002E7843F0C00320F822300A7830F822309BB293
-S31508002E8823F4E04323F0700343F4004343F0C003FC
-S31508002E9820F822300B7830F8232092B222F48042A8
-S31508002EA822F0700248F2800C42EA0C0220F823202D
-S31508002EB80A7830F822309BB223F4E04323F0400323
-S31508002EC843EA0C0320F8223089E70A7830F82230DA
-S31508002ED813F4804F0CD030F822309BB223F4E04329
-S31508002EE823F0700343F4404343F0800320F822306C
-S31508002EF80A7830F8223013F0400F0CD030F8223018
-S31508002F089BB223F4E04323F0700343F4004343F0F1
-S31508002F18C00320F822300A7830F822309BB223F40E
-S31508002F28E04323F0700343F4404343F0800320F85A
-S31508002F3822300B7830F8232092B222F4E04222F0AD
-S31508002F48400248F2800C42EA0C0220F823200A784C
-S31508002F5830F822309BB223F4804323F0700343EA07
-S31508002F680C0320F822303AE74B788BB10A7830F808
-S31508002F7822309BB223F4E04323F0400383F0100386
-S31508002F8843F4004343F0800320F8223000207047BA
-S31508002F980A7830F822309BB223F4804323F0700372
-S31508002FA883F4805343F4004343F0800320F8223027
-S31508002FB8ECE70B7B002B4BD14B7833B30A7830F808
-S31508002FC8223013F0400F0CD030F822309BB223F48D
-S31508002FD8E04323F0700343F4004343F0C00320F8AA
-S31508002FE82230CB78012B33D00A7830F822309BB2BE
-S31508002FF823F4E04323F0400383F0200343F400431B
-S3150800300843F0800320F8223022E00A7830F822308C
-S3150800301813F4804F0CD030F822309BB223F4E043E7
-S3150800302823F0700343F4404343F0800320F822302A
-S315080030380A7830F822309BB223F4804323F07003D1
-S3150800304883F4405343F4004343F0800320F82230C6
-S315080030580020704703460122A0F840200020A3F864
-S3150800306844000322A3F84020704711B98023A0F82A
-S315080030784C30002070470020704700207047B0F891
-S31508003088440080B2704710B45C1C640800EB420226
-S3150800309802F5806207E00B78487843EA002322F8AD
-S315080030A8043B0231013C002CF5D15DF8044B70470E
-S315080030B870B505460C464A78012A3BD00B7B002B8F
-S315080030C840F0A6828B690A69934240F284829B1A69
-S315080030D88B61B5F8503015FA83F3217803EB0113A1
-S315080030E8B3F80C14C1F30901A3F80C143E2A40F2EC
-S315080030F87682510912F01F0F00D10139B3F80C2452
-S3150800310892B2890289B20A4342F40042A3F80C240F
-S31508003118227835F822309BB223F4804323F07003D3
-S3150800312883F4405343F4004343F0800325F82230E0
-S31508003138002070BD8E6909698E4200D90E46237B28
-S3150800314873B3E378022B4DD0236A9B1B236223783B
-S3150800315835F8231011F0400F00F0F581002A40F0E9
-S31508003168E281B5F8502015FA82F202EB0313B3F898
-S315080031780C24C2F30902A3F80C243E2E40F2BA81A5
-S31508003188710916F01F0F00D10139B3F80C2492B251
-S31508003198890289B20A4342F40042A3F80C24CBE117
-S315080031A8B6B23346E28861692846FFF76CFFB5F878
-S315080031B8503015FA83F3227803EB0213A3F8046454
-S315080031C8227835F822309BB223F4E04323F04003F3
-S315080031D883F0300343F4004343F0800325F8223094
-S315080031E80020A6E7236A994280F06681227835F896
-S315080031F822309BB223F4E04323F0700343F40143DF
-S3150800320843F0800325F82230236A9B1B2362237820
-S3150800321835F8232012F0400F00F0A7806278B2BB79
-S31508003228B5F8502015FA82F202EB0313B3F80C240A
-S31508003238C2F30902A3F80C243E2E0FD9710916F019
-S315080032481F0F00D10139B3F80C2492B2890289B24A
-S315080032580A4342F40042A3F80C241AE04EB9B3F81C
-S315080032680C246FEA42426FEA524292B2A3F80C243F
-S315080032780FE0720816F0010F00D00132B3F80C14EB
-S3150800328889B2920292B20A43A3F80C2401E0012AF1
-S3150800329830D0B3B2628961692846FFF7F4FE6369DC
-S315080032A833446361236A226993422DD99B1B23629F
-S315080032B86378002B45D1B5F8503015FA83F3227890
-S315080032C803EB0213B3F80424C2F30902A3F804248F
-S315080032D83E2E1DD9710916F01F0F00D10139B3F812
-S315080032E8042492B2890289B20A4342F40042A3F836
-S315080032F8042428E0B5F8502015FA82F202EB0313E5
-S31508003308B2B2A3F80C24C4E7002222621E46CFE70D
-S315080033184EB9B3F804246FEA42426FEA524292B2AF
-S31508003328A3F804240FE0720816F0010F00D0013242
-S31508003338B3F8041489B2920292B20A43A3F8042491
-S3150800334801E0012B06D0B3B2228961692846FFF746
-S315080033589AFE35E7B5F8503015FA83F3227803EB69
-S315080033680213B2B2A3F80424EDE76278B2BBB5F843
-S31508003378502015FA82F202EB0313B3F80424C2F3B9
-S315080033880902A3F804243E2E0FD9710916F01F0F57
-S3150800339800D10139B3F8042492B2890289B20A43E2
-S315080033A842F40042A3F804241AE04EB9B3F80424F8
-S315080033B86FEA42426FEA524292B2A3F804240FE037
-S315080033C8720816F0010F00D00132B3F8041489B256
-S315080033D8920292B20A43A3F8042401E0012A30D0E3
-S315080033E8B3B2228961692846FFF74DFE63693344FB
-S315080033F86361236A226993422DD99B1B23626378EA
-S31508003408002B45D1B5F8503015FA83F3227803EB2B
-S315080034180213B3F80C24C2F30902A3F80C243E2EAF
-S315080034281DD9710916F01F0F00D10139B3F80C24FC
-S3150800343892B2890289B20A4342F40042A3F80C24DC
-S3150800344828E0B5F8502015FA82F202EB0313B2B257
-S31508003458A3F80424C4E7002222621E46CFE74EB921
-S31508003468B3F80C246FEA42426FEA524292B2A3F8C2
-S315080034780C240FE0720816F0010F00D00132B3F8D9
-S315080034880C1489B2920292B20A43A3F80C2401E0FA
-S31508003498012B06D0B3B2628961692846FFF7F3FDA6
-S315080034A88EE6B5F8503015FA83F3227803EB021343
-S315080034B8B2B2A3F80C24EDE7217835F8212092B2A8
-S315080034C822F4E24222F0700242F4004242F08002FC
-S315080034D825F82120B5F8502015FA82F2217802EB52
-S315080034E801129BB2A2F80434228961692846FFF7BB
-S315080034F8CAFD65E64EB9B3F80C246FEA42426FEA8C
-S31508003508524292B2A3F80C2416E0720816F0010F7C
-S3150800351800D00132B3F80C1489B2920292B20A4367
-S31508003528A3F80C2408E0B5F8502015FA82F202EB45
-S315080035380313B2B2A3F80C24B3B2628961692846A8
-S31508003548FFF7A1FD3CE6B2BBB5F8502015FA82F2A2
-S3150800355802EB0313B3F80424C2F30902A3F80424FC
-S315080035683E2E0FD9710916F01F0F00D10139B3F88D
-S31508003578042492B2890289B20A4342F40042A3F8A3
-S31508003588042421E04EB9B3F804246FEA42426FEAEC
-S31508003598524292B2A3F8042416E0720816F0010FF4
-S315080035A800D00132B3F8041489B2920292B20A43DF
-S315080035B8A3F8042408E0B5F8502015FA82F202EBBD
-S315080035C80313B2B2A3F80424B3B222896169284660
-S315080035D8FFF759FDF4E500228A611A4679E54AB9E2
-S315080035E8B3F80C246FEA42426FEA524292B2A3F841
-S315080035F80C248DE5510812F0010F00D00131B3F8FB
-S315080036080C2492B2890289B21143A3F80C147FE5F7
-S31508003618CB78022B4DD0012B40F02F81896923697D
-S31508003628994240F2E680C91AA161F2B9B5F8502064
-S3150800363815FA82F2217802EB0112B2F80414C1F3E2
-S315080036480901A2F804143E2B40F2D780580913F052
-S315080036581F0F00D10138B2F8041489B2800280B26B
-S31508003668014341F40041A2F804146278002A40F0A4
-S31508003678F680B5F8502015FA82F2217802EB011285
-S31508003688B2F80C14C1F30901A2F80C143E2B40F247
-S31508003698CD80590913F01F0F00D10139B2F80C343F
-S315080036A89BB2890289B20B4343F40043A2F80C344F
-S315080036B82EE5F2B9B0F8503010FA83F30A7803EB1E
-S315080036C80213B3F80424C2F30902A3F804240A6906
-S315080036D83E2A31D9510912F01F0F00D10139B3F822
-S315080036E8042492B2890289B20A4342F40042A3F832
-S315080036F804246378002B51D1B5F8503015FA83F3B2
-S31508003708227803EB0213B3F80C24C2F30902A3F8D0
-S315080037180C2422693E2A28D9510912F01F0F00D114
-S315080037280139B3F80C2492B2890289B20A4342F4E1
-S315080037380042A3F80C2433E04AB9B3F804246FEA24
-S3150800374842426FEA524292B2A3F80424D1E75108DA
-S3150800375812F0010F00D00131B3F8042490B28A029E
-S3150800376892B20243A3F80424C3E74AB9B3F80C246F
-S315080037786FEA42426FEA524292B2A3F80C240FE06B
-S31508003788510812F0010F00D00131B3F80C2490B299
-S315080037988A0292B20243A3F80C2401E0012B1DD039
-S315080037A8E369002B3FF4B4AC227835F8221044F2CA
-S315080037B8400303EA01008B4302D000287FF4A8AC33
-S315080037C835F822309BB223F4E04323F0700343F420
-S315080037D8004343F0C00325F8223099E4B5F8503081
-S315080037E815FA83F3227803EB0213228AA3F80C242A
-S315080037F8D6E70023A3610B4617E74BB9B2F80414BA
-S315080038086FEA41416FEA514189B2A2F804142CE7DC
-S31508003818590813F0010F00D00131B2F8040480B238
-S31508003828890289B20143A2F804141EE74BB9B2F813
-S315080038380C346FEA43436FEA53439BB2A2F80C343D
-S3150800384866E4590813F0010F00D00131B2F80C34B8
-S3150800385898B28B029BB20343A2F80C3458E4012AA7
-S315080038687FF456ACB5F8502015FA82F2217802EBA7
-S3150800387801129BB2A2F80C344AE4012059E410B4A8
-S315080038885C0800EB420000F5806007E030F8042B7E
-S315080038980A70C2F307224A700231013C002CF5D19E
-S315080038A813F0010F01D003880B705DF8044B7047BD
-S315080038B8014B1860704700BF0000002098B108B592
-S315080038C80346D0F8B40210B10020C3F8B40209B10F
-S315080038D8C3F8B012012183F89C121A70184601F031
-S315080038E80BFF002008BD0220704710B504460123C7
-S315080038F880F89C32D0F8B4325B680179984720463C
-S3150800390801F052FF204601F03FFF002010BD19B113
-S31508003918C0F8B412002070470220704708B501F0B5
-S315080039283BFF002008BD08B5D0F8B4322BB11B6898
-S31508003938984700B908BD0220FCE70220FAE708B54F
-S31508003948D0F8B4325B689847002008BD38B50446F5
-S3150800395800F52A75284600F035F90123C4F894328B
-S31508003968B4F8AE32C4F8983294F8A81201F01F03D6
-S31508003978012B0ED0022B11D02BB101F08001204665
-S3150800398801F02DFF03E02946204600F0C9FA002079
-S3150800399838BD2946204600F0F7FAF8E729462046B2
-S315080039A800F022FBF3E738B504460D4691BB1346EB
-S315080039B8D0F89422032A03D0052A24D0084633E0EF
-S315080039C8D0F86011D0F8642191420DD9891AC0F847
-S315080039D860118A4206D98AB21946204600F027FCA1
-S315080039E8284621E092B2F7E7D0F8B4321B691BB132
-S315080039F890F89C22032A04D0204600F020FC28468A
-S31508003A0812E09847F8E70021C0F8941201F0E7FE9B
-S31508003A18284609E0D0F8B4329B6933B190F89C225D
-S31508003A28032A04D19847002038BD0220FCE7022063
-S31508003A38FAE738B504460D46002953D11346D0F897
-S31508003A489422022A0CD0042A00D01AB980212046CA
-S31508003A5801F0C5FE94F8A032012B3ED0284638BDA1
-S31508003A68016A426A91421BD8C169B1FBF2F302FBAB
-S31508003A7813132BB98A4203D8D0F8983299421CD323
-S31508003A88D4F8B432DB681BB194F89C22032A21D0F7
-S31508003A988021204601F0A3FE204600F0DBFBD9E78B
-S31508003AA88A1A026292B2194600F0B9FB00231A462E
-S31508003AB81946204601F0CAFECCE70022114600F056
-S31508003AC8AEFB0021C4F898120B460A46204601F0B8
-S31508003AD8BDFEBFE720469847DAE7002384F8A032F8
-S31508003AE82846BCE7D0F8B4325B6933B190F89C2213
-S31508003AF8032A04D198470020B1E70220AFE702203D
-S31508003B08ADE770B5044640230022114601F054FE7D
-S31508003B180125C4F858514026C4F864613346002282
-S31508003B288021204601F048FEA561666284F89C5209
-S31508003B380023C4F894326360C4F8A432D4F8B832BF
-S31508003B482BB1D4F8B4325B68002120469847002088
-S31508003B5870BD01740020704790F89C3280F89D3239
-S31508003B68042380F89C320020704790F89C32042B76
-S31508003B7801D00020704790F89D3280F89C32F8E70B
-S31508003B8808B590F89C32032B01D0002008BDD0F860
-S31508003B98B432DB69002BF8D09847F6E703460020CD
-S31508003BA802E00130C0B201331A78002AF9D1704709
-S31508003BB808B54B88012B00D008BDC0F8A43200F020
-S31508003BC83EFBF9E70B7803704B7843708B78CA7815
-S31508003BD803EB022343800B794A7903EB022383809C
-S31508003BE88B79CA7903EB0223C380704710B504465C
-S31508003BF8802101F0F4FD0021204601F0F0FD10BDFA
-S31508003C0830B583B005460C460023ADF806304A8819
-S31508003C18130A013B062B00F2A480DFE803F0041818
-S31508003C282CA2A2869300D0F8B0321B680DF10601C3
-S31508003C38007C9847BDF806201AB1E388002B40F0A7
-S31508003C489480E388002B00F09A8003B030BD037C8B
-S31508003C5843B9D0F8B4329B6A0DF106009847022397
-S31508003C684370E7E7D0F8B432DB6A0DF106009847E7
-S31508003C7802234370DEE7D2B2052A52D8DFE802F0FB
-S31508003C8803101D2A3744D0F8B0325B6823B10DF10A
-S31508003C980601007C9847CDE72146FFF7A7FFD4E73A
-S31508003CA8D0F8B0329B6823B10DF10601007C98471D
-S31508003CB8C0E72146FFF79AFFC7E7D0F8B032DB68B6
-S31508003CC823B10DF10601007C9847B3E72146FFF7B3
-S31508003CD88DFFBAE7D0F8B0321B6923B10DF106019A
-S31508003CE8007C9847A6E72146FFF780FFADE7D0F89E
-S31508003CF8B0325B6923B10DF10601007C984799E754
-S31508003D082146FFF773FFA0E7D0F8B0329B6923B1C5
-S31508003D180DF10601007C98478CE72146FFF766FFF8
-S31508003D2893E72146FFF762FF8FE7037C33B9D0F89C
-S31508003D38B4325B6B0DF1060098477BE72146FFF71F
-S31508003D4855FF82E7037C43B9D0F8B4321B6B0DF1F3
-S31508003D5806009847072343706CE72146FFF746FF96
-S31508003D6873E72146FFF742FF6FE79A4228BF1A46CC
-S31508003D78ADF806200146284600F044FA61E72846C9
-S31508003D8800F05DFA61E738B504468B88F3B9CB8845
-S31508003D98E3B94B887F2B19D803F07F0590F89C3236
-S31508003DA8032B0CD080F89E52294601F03FFD204689
-S31508003DB800F045FA35B1022384F89C3209E0FFF78A
-S31508003DC815FF06E0012384F89C3202E02046FFF737
-S31508003DD80DFF38BD38B504460D468978284B197045
-S31508003DE801290ED890F89C32022B0ED0032B21D02D
-S31508003DF82946FFF7FBFE224B19782046FFF79FFD59
-S31508003E0802E02946FFF7F2FE38BD81B14160032377
-S31508003E1880F89C32FFF787FD022803D0204600F079
-S31508003E280EFAF1E729462046FFF7E0FEECE700F030
-S31508003E3806FAE9E789B1436899421DD0D9B2FFF76E
-S31508003E487EFD0F4B197861602046FFF76CFD022846
-S31508003E580DD0204600F0F3F9D6E7022380F89C3205
-S31508003E684160FFF76CFD204600F0E9F9CCE72946E2
-S31508003E782046FFF7BBFEC7E700F0E1F9C4E700BF35
-S31508003E880004002008B5CB88012B0AD190F89C328B
-S31508003E98022B09D9032B09D10122011D00F0B2F919
-S31508003EA801E0FFF7A3FE08BD5BB213B9FFF79EFE54
-S31508003EB8F9E70146002341F8083F012200F0A2F974
-S31508003EC8F1E708B590F89C32013B022B12D8CB884B
-S31508003ED8022B0CD10123C360D0F8A4320BB10323FB
-S31508003EE8C360022200F10C0100F08CF908BDFFF747
-S31508003EF87DFEFBE7FFF77AFEF8E708B590F89C32EF
-S31508003F08013B022B09D84B88012B00D008BD00239A
-S31508003F18C0F8A43200F093F9F8E7FFF767FEF5E76B
-S31508003F2808B50B7803F06003202B05D0402B03D087
-S31508003F3843B1FFF75BFE03E0D0F8B4329B689847B5
-S31508003F48002008BD4B78092B1BD8DFE803F01117AA
-S31508003F581A141A08051A0E0BFFF752FEF0E7FFF7B0
-S31508003F6812FFEDE7FFF736FFEAE7FFF78BFFE7E70C
-S31508003F78FFF7A7FFE4E7FFF71BFEE1E7FFF7BDFF3B
-S31508003F88DEE7FFF733FEDBE738B505460C460B7860
-S31508003F9803F06003202B06D0402B04D01BB1FFF793
-S31508003FA825FE002038BD95F89C32013B022B16D811
-S31508003FB82379012B0ED8D5F8B4329B6821462846B2
-S31508003FC89847E388002BECD10028EAD1284600F068
-S31508003FD836F9E6E721462846FFF708FEE1E72146CF
-S31508003FE82846FFF703FEDCE770B505468B880C788C
-S31508003FF804F06004202C07D0DAB2402C04D05CB157
-S31508004008FFF7F4FD002405E0D5F8B4329B68284686
-S3150800401898470024204670BD202C09D04E78012EDA
-S3150800402833D0032E0AD0002E55D0FFF7DFFDF1E76F
-S31508004038D0F8B4329B6898470446EBE790F89C3268
-S31508004048022B04D0032B11D0FFF7D0FDE2E70AB103
-S31508004058802A03D12846FFF7C9FDDBE7114601F098
-S31508004068BEFB8021284601F0BAFBD3E74B8823B963
-S315080040781AB1802A01D0CB881BB1284600F0DFF890
-S31508004088C8E7114601F0ABFBF7E790F89C32022B1C
-S3150800409804D0032B11D0FFF7A9FDBBE70AB1802A84
-S315080040A803D12846FFF7A2FDB4E7114601F097FBAE
-S315080040B88021284601F093FBACE74B88002BA9D151
-S315080040C812F07F0F03D1284600F0B9F8A2E7114687
-S315080040D801F08DFBF7E790F89C02022806D0032822
-S315080040E829D02846FFF782FD344693E70AB1802A85
-S315080040F813D113F0800F15D102F07F0202EB82026A
-S31508004108910001F5A8712944043100230B600222A5
-S31508004118284600F077F834467CE72846FFF766FD18
-S31508004128344677E702F07F0202EB820291001031EB
-S3150800413829440431E9E75BB2002B1FDB02F00F00C4
-S3150800414800EB800005EB8000D0F8580120B3002B5F
-S3150800415827DB02F07F0303EB83039C0004F5A874AE
-S315080041682C4404340AB1802A24D10023236002226D
-S315080041782146284600F046F834464BE702F00F0079
-S3150800418800EB800005EB800080690028DFD128460F
-S31508004198FFF72CFD34463DE72846FFF727FD34464A
-S315080041A838E702F07F0303EB83039C0010342C44A2
-S315080041B80434D7E71146284601F021FB10B101233C
-S315080041C82360D4E700232360D1E7D0B170B50D4644
-S315080041D816460446FFF7E2FC431C5B009BB2338095
-S315080041E82B7003236B70022307E001345A1CD2B2E2
-S315080041F8E8540233DBB20021A95420780028F4D108
-S3150800420870BD704708B513460222C0F89422C361E8
-S3150800421803620A46002101F011FB002008BD08B513
-S3150800422813460A46002101F009FB002008BD08B517
-S3150800423813460A46002101F009FB002008BD08B507
-S315080042480423C0F8943200231A46194601F0F6FAF0
-S31508004258002008BD08B50523C0F8943200231A467D
-S31508004268194601F0F3FA002008BD72B6704762B61F
-S31508004278704700002DE9F04184B004460D461746FC
-S3150800428898466846FEF704FA0299174BA3FB0131CC
-S315080042988909002301E00133DBB2112B1FD8134A21
-S315080042A812F8130002EB4302527800EB020C0CFBDF
-S315080042B8044CB1FBFCFE0CFB1E16002EEBD11FFAB4
-S315080042C88EFCA5F800C00CF1FF3C1FFA8CFCBCF567
-S315080042D8806FE0D2387088F80020012000E00020BE
-S315080042E804B0BDE8F08100BFD34D62103C59000800
-S315080042F870B58CB00023ADF82E308DF82D308DF8BA
-S315080043082C300BAB0DF12D020DF12E014FF4FA707E
-S31508004318FFF7B0FF002835D01D4C1E4B236000253B
-S3150800432825766576A5760126E67625776577A560E6
-S31508004338E5609DF82D30013B1B0423619DF82C3060
-S31508004348013B1B056361BDF82E3063602046FCF708
-S3150800435839FA0695079508964CF6E04301930295AF
-S315080043684FF6E073039304230493059509960E23E1
-S315080043780A9301A92046FCF7CBFA2046FCF74BFB23
-S315080043880CB070BDAF21044800F0F6FCC4E700BFC6
-S3150800439804040020006400400059000810B588B0DD
-S315080043A8024640F2E17302930023049305930691AB
-S315080043B801AB02A90B48FCF75CFB08B108B010BDB5
-S315080043C800F0E4FA00F1320401990648FCF7C6FB46
-S315080043D80028F3D000F0D8FD00F0D8FAA042F3D9A7
-S315080043E8ECE700BF0404002010B588B003460C4665
-S315080043F801AA00210848FCF7C4FB50B9019A40F203
-S3150800440867639A4206D1039B23B9059B237001204B
-S3150800441800E0002008B010BD0404002008B5FFF726
-S3150800442824FF08BD10B500F0C5F900B910BDFBF7A3
-S31508004438CFFE0028FAD000F053FDFCF76DF900F01E
-S315080044487DFA00F0BBF920F0604020F07F00044BAD
-S31508004458986000F0B3F94468FFF709FFA047E5E755
-S3150800446800ED00E070B50D46044606E015F8013B78
-S3150800447804F8013B00F088FD3246531E9EB2002A16
-S31508004488F4D170BD08B5C1F3080353B903688B4264
-S3150800449809D040F8041B4FF40072FFF7E3FF012028
-S315080044A808BD0020FCE70120FAE72DE9F041074698
-S315080044B8FCF7A6FC00247F2C15D83E6806EB840872
-S315080044C807EB84035D6800F05FFD2A460023414632
-S315080044D80220FCF7E9FC804640B956F82430AB427E
-S315080044E806D10134E7E74FF0010801E04FF000086C
-S315080044F8FCF7A0FC4046BDE8F081000038B50D463B
-S315080045080C4B984211D004460B4B994207D1094CDB
-S3150800451829462046FFF7B6FF48B1204638BDFFF7BB
-S31508004528C4FF0028F4D10024F7E7044CF0E7002478
-S31508004538F3E700BF30060020008000082C0400209E
-S315080045482DE9F04106460C4617461D4621F4FF7824
-S3150800455828F001080368B3F1FF3F07D033684345DD
-S315080045680AD13168641A3444043414E04146FFF722
-S3150800457889FF0028F2D11FE041463046FFF7BEFF03
-S3150800458806460028EDD1002016E017F8013B04F886
-S31508004598013B013D0FD000F0F7FC311D611AB1F55A
-S315080045A8007FF2D308F500713046FFF7A7FF0646E5
-S315080045B820B1041DE9E70120BDE8F0810020FBE7EA
-S315080045C84FF0FF33024A1360024A1360704700BF70
-S315080045D82C040020300600200B4601F1FF3C124946
-S315080045E8091A8C4519D81149884218D310B51918CB
-S315080045F801390D4CA14214D820F4FF7121F00101AC
-S315080046080A4CA14204D001460948FFF799FF10BD94
-S3150800461801460848FFF794FFF9E70020704700208D
-S3150800462870470020F3E700BFFFFF03080080000873
-S315080046382C0400203006002030B585B000230393EB
-S315080046484A1E1F4B1B1A9A4231D820F4FF6323F0DF
-S3150800465807031C4A93422ED30A18013A184CA24259
-S315080046682BD8C01A0844C0F3CF25C0F30A0008B1EE
-S315080046780135ADB200240094019301230293FCF797
-S31508004688BFFBA5420DD900F07FFC03A96846FCF7D5
-S315080046987FFC50B9019B03F5006301930134A4B26A
-S315080046A8EFE70124FCF7C6FB02E00024FAE700243A
-S315080046B8204605B030BD0024FAE70024F8E700BF15
-S315080046C8FFFF03080080000800B583B000230193A4
-S315080046D8134B1B68B3F1FF3F20D0114A5368019367
-S315080046E891680B440193D1680B44019311690B44F3
-S315080046F8019351690B44019391690B440193D2695B
-S3150800470813440193DB4301930133019301AA04215E
-S315080047180448FFF761FF03B05DF804FB0120FAE7D8
-S3150800472830060020888100080A4B1A68596811441F
-S315080047389A681144DA6811441A6911445A69114485
-S315080047489A690A44D3F88831D34201D000207047C1
-S31508004758012070470080000808B50C4B1B68B3F1A8
-S31508004768FF3F06D10A4B1B68B3F1FF3F07D101206B
-S3150800477808BD0648FFF799FE0028F3D1F8E704486C
-S31508004788FFF793FE0028F3D00120F1E73006002052
-S315080047982C040020004870470080000808B5FFF779
-S315080047A80FFF08BD08B5FFF717FF08BD08B5FFF7DF
-S315080047B843FF08BD08B5FFF7B7FF08BD08B5FFF7FB
-S315080047C8E9FF08BD08B5FFF77FFF00B908BDFFF781
-S315080047D8C3FFFBE7054BDB6913F0200F04D0034B37
-S315080047E89B8C0370012070470020704700480040E2
-S315080047F810B5094B188500F0C9F800F10A04064BEC
-S31508004808DB6913F0800F05D100F0BEFB00F0BEF897
-S31508004818A042F4D910BD00BF0048004010B588B0C2
-S315080048280C4C236823F0010323604FF4614301937A
-S3150800483800230293039304930C2205920693079385
-S3150800484801A92046FEF726F8236843F001032360EA
-S3150800485808B010BD0048004070B506460D468129C7
-S3150800486804D82846FFF7C4FF00240BE06F21074841
-S3150800487800F082FAF5E700F087FB305DFFF7B8FF2E
-S315080048880134A4B2ABB2A342F5D870BD605900088A
-S3150800489870B5254B1C78BCB92448FFF79BFF01283F
-S315080048A801D0204670BD214B1B78013BDBB2802B1B
-S315080048B8F7D800F06BF81E4B18601E4B00221A70CA
-S315080048C8194B01221A70ECE706460D46194B1B7858
-S315080048D8013316481844FFF77DFF0446012815D109
-S315080048E8144B1A780132D2B21A70104B1B789A42B6
-S315080048F801D00024D5E710493046FFF7B3FD0A4B27
-S3150800490800221A700B4B1B782B70CAE700F03EF88A
-S31508004918074B1B68C833984203D90024024B1C70FE
-S31508004928BFE70024BDE700BFB6080020340800200A
-S31508004938B8080020B7080020350800204FF0E02303
-S3150800494800221A615A619A617047000008B5FFF794
-S31508004958F5FF4FF0E023044A5A6100229A610521BF
-S315080049681961024B1A6008BD3F190100BC080020EE
-S315080049784FF0E0231B6913F4803F03D0024A1368FB
-S3150800498801331360704700BFBC08002008B5FFF75D
-S31508004998EFFF014B186808BDBC08002008B5FFF7EB
-S315080049A8F5FF08BD094B03F11801002232B19A74C4
-S315080049B800225A61064B054A1A6070479A7459616B
-S315080049C8183318310132D2B2F0E700BF00090020C7
-S315080049D8300900200A4B1B6883B110B4084A5C6981
-S315080049E8146019749860D86000225A7418600139DE
-S315080049F808445860987C5DF8044B7047FF20704758
-S31508004A083009002038B504460D46012824D804EB99
-S31508004A184403164A02EBC3035A7C1B7C9A4221D0EC
-S31508004A2804EB4403114A02EBC303DA6815705A7C8F
-S31508004A3801325A74DA680132DA605B689A4213D925
-S31508004A480A4B04EB440253F8322004EB440403EB04
-S31508004A58C404E260012008E04FF4DE71044800F05F
-S31508004A688BF9D4E7002000E0012038BD00090020B2
-S31508004A78A059000808B50146024B1878FFF7C2FF87
-S31508004A8808BD00BF3409002038B504460D4601287C
-S31508004A9822D804EB4403144A02EBC303587C10B328
-S31508004AA804EB440302EBC3039A6812782A705A7C0B
-S31508004AB8013A5A749A6801329A605B689A4211D91F
-S31508004AC8094B04EB440253F8322004EB440403EB85
-S31508004AD8C404A260012006E04FF4EF71034800F011
-S31508004AE84BF9D6E7012038BD00090020A05900086F
-S31508004AF808B50146024B1878FFF7C6FF08BD00BF80
-S31508004B087809002010B50446012806D804EB4404A1
-S31508004B18054800EBC404607C10BD4FF4FF710348D8
-S31508004B2800F02AF9F2E700BF00090020A05900089A
-S31508004B3838B5FFF737FF194C4021601CFFF74AFFC5
-S31508004B482070174D4021681CFFF744FF287023780A
-S31508004B58FF2B18D0FF2816D0124C002212492046DF
-S31508004B68FEF7ACFE11492046FEF7D1FE2046FEF7B1
-S31508004B78D5FED4F8C002FDF7B2F900F029F9B0F568
-S31508004B88FA6F05D338BD8421094800F0F5F8E3E73C
-S31508004B984FF4FA6000F016F9F4E700BF340900206C
-S31508004BA878090020BC0900207400002010000020A5
-S31508004BB8A059000810B5044CD4F8C002FDF7A3F9AB
-S31508004BC82046FEF792FE10BDBC09002070B50646C1
-S31508004BD80D463F2906D82846FFF74CFF012806D177
-S31508004BE800240BE0B5210D4800F0C6F8F3E7B92113
-S31508004BF80A4800F0C1F8F3E70134A4B2ABB2A342FD
-S31508004C080BD900F0C1F9305DFFF734FF0128F3D05E
-S31508004C18C221024800F0B0F8EEE770BDA0590008B6
-S31508004C2870B506460D461F4BD3F8C002FDF794F932
-S31508004C381D4B1C789CB91D48FFF75AFF012801D05F
-S31508004C48204670BD194B1B78013BDBB23E2BF7D8C3
-S31508004C58154B01221A70164B00221A70F0E7144BEE
-S31508004C681B78013311481844FFF742FF0446012808
-S31508004C7801D00024E4E70E4B1A780132D2B21A7032
-S31508004C880A4B1B789A4201D00024D9E709493046CD
-S31508004C98FFF7E8FB044B00221A70054B1B782B70AC
-S31508004CA8CEE700BFBC090020C00C0020800C0020FD
-S31508004CB8C10C0020810C002030B583B0144B18783D
-S31508004CC8FFF720FF08B30546402800D940250024E9
-S31508004CD805E09DF807200F4B1A550134E4B2A542A2
-S31508004CE80DD90DF107010A4B1878FFF7CDFE0128F3
-S31508004CF8EFD04FF4A171084800F03EF8E9E7ABB2E7
-S31508004D08044A8121054800F099FD03B030BD00BF6B
-S31508004D1834090020C0080020A0590008BC09002052
-S31508004D2870B5044600F0EAFB064621460F4800F02F
-S31508004D3895FD85B2002401E00134A4B2AC420CD238
-S31508004D48315D0B4B1878FFF75DFE0128F4D04FF458
-S31508004D58B271084800F010F8EEE700F0CFFB0246FB
-S31508004D6840230121014800F071FD70BDBC090020EF
-S31508004D7878090020A059000808B500F005F9FCE7ED
-S31508004D8808B500F0F7F8012803D00B4B1B78012B60
-S31508004D9800D008BDFFF7FAFD084B1B68084A1268D9
-S31508004DA8134403F5FA739842F3D3034B00221A7097
-S31508004DB8FFF738FBEDE700BFC80C0020C40C00203D
-S31508004DC8CC0C0020014B1860704700BFC40C0020AB
-S31508004DD8014B1868704700BFC40C002008B5054B7E
-S31508004DE81B78012B00D008BDFFF7D0FD024B1860D1
-S31508004DF8F9E700BFC80C0020CC0C002008B5044B06
-S31508004E0801221A70FFF7EAFFFFF7BAFF08BD00BFCD
-S31508004E18C80C002008B5FFF701FB00F0B1F8FFF74A
-S31508004E2895FDFFF7BBFC00F00DF8FFF7E7FF08BD97
-S31508004E3808B500F0A9F8FFF79BFD00F017F8FFF78B
-S31508004E489FFF08BD10B500F04FFAFFF751FA064C58
-S31508004E5801232370FFF7E2FC00232370FFF768FE9F
-S31508004E680223237010BD00BF0C00002000B583B0D4
-S31508004E780DF107011848FFF7B7FA012810D00DF108
-S31508004E8807011548FFF704FD012812D00DF107019F
-S31508004E981148FFF7C5FE012814D003B05DF804FBD6
-S31508004EA80E4B01221A709DF807100B4800F03EFABF
-S31508004EB8E5E70A4B00221A709DF80710064800F025
-S31508004EC835FAE3E7054B02221A709DF807100248DF
-S31508004ED800F02CFAE1E700BFD00C00200C000020F7
-S31508004EE808B5FFF767FE08BD38B504460D460E4BEC
-S31508004EF81B78012B09D00C4B1B7853B10A4B1B782E
-S31508004F08022B0BD000F00AFA38BDC9B2FFF746FAE9
-S31508004F18F1E7E9B22046FFF79FFCEFE7E9B220463A
-S31508004F28FFF754FEEEE700BF0C000020074B1B787E
-S31508004F38022B07D0032B07D0012B01D081207047FD
-S31508004F48082070473F207047002070470C00002053
-S31508004F58074B1B78022B07D0032B07D0012B01D050
-S31508004F6881207047082070473F2070470020704707
-S31508004F780C00002008B500F0C9F900B1012008BDE9
-S31508004F8808B5FBF743F908BD08B5FBF744F908BDAA
-S31508004F98024B002283F88220704700BF540D002078
-S31508004FA8034BFE221A7058700222A3F8862070470F
-S31508004FB8540D00200378427843EA0223827843EAAC
-S31508004FC80243C07843EA006070470870C0F30723B5
-S31508004FD84B70C0F307438B70000EC870704700000B
-S31508004FE810B5064C002384F88130FFF7D1FFFF235C
-S31508004FF823700123A4F8863010BD00BF540D002085
-S31508005008074BFF221A7000225A7093F8821099707B
-S31508005018DA701A715A710622A3F88620704700BFFB
-S31508005028540D002008B50020FFF7BAFF08BD000098
-S3150800503810B5094CFF232370084BC4F888300023A1
-S315080050486370A370E370211D0720FFF7BEFF0823CE
-S31508005058A4F8863010BD00BF540D0020DC5900089E
-S3150800506810B5064CFF2323700430FFF7A3FFC4F8D6
-S3150800507888000123A4F8863010BD00BF540D00200F
-S3150800508808B53120FFF78CFF08BD000038B5084C75
-S31508005098FF23237000256570A570FFF747FFE070AA
-S315080050A825716571A5710723A4F8863038BD00BF38
-S315080050B8540D002038B5FFF76BFF0F4C012584F80F
-S315080050C88150FF2323700023637010226270A37037
-S315080050D8FFF72CFFE070FFF73BFF2071FFF738FF5B
-S315080050E8C0F307206071A571E5710823A4F8863016
-S315080050F8FFF754FB38BD00BF540D002038B50446E9
-S31508005108FFF714FF6278904212D90B4DD5F888102C
-S31508005118681CFFF7A7F9FF232B706278D5F8883043
-S315080051281344C5F8883063780133A5F8863038BD46
-S315080051382220FFF735FFFAE7540D002038B5044654
-S31508005148FFF7F4FE6378984217D9201DFFF732FF58
-S3150800515801460C4DC5F888006278681CFFF782F985
-S31508005168FF232B706278D5F888301344C5F8883041
-S3150800517863780133A5F8863038BD2220FFF710FF7B
-S31508005188FAE700BF540D0020F8B50546174600246F
-S3150800519806E015F8013B1C44E4B2FFF7F5FE314674
-S315080051A84E1E0029F5D13C600120F8BD30B583B004
-S315080051B8002501950B4CFF2323700430FFF7FAFEF0
-S315080051C8014601AAD4F88800FFF7DEFF6070211DA2
-S315080051D80198FFF7FAFEA570E5700823A4F886304B
-S315080051E803B030BD540D002038B504460E4BD3F82D
-S315080051F88850FFF79BFE621C411E2846FFF7D2FA25
-S3150800520870B1094CFF232370FFF790FE0138D4F8D4
-S3150800521888300344C4F888300123A4F8863038BD9A
-S315080052283120FFF7BDFEFAE7540D002010B50446F5
-S31508005238FFF77CFE01386378984216DD134BFF2288
-S315080052481A700122A3F88620617891B1A21C0F4B27
-S31508005258D3F88800FFF7A6FA98B161780B4AD2F80E
-S3150800526888300B44C2F8883010BD2220FFF798FE14
-S31508005278FAE7FFF7A7FA0028F6D13120FFF790FEDC
-S31508005288F2E73120FFF78CFEEEE700BF540D002049
-S3150800529810B50B4BD3F888400430FFF78BFE014650
-S315080052A82046FFF783FA30B1054BFF221A70012210
-S315080052B8A3F8862010BD3120FFF772FEFAE700BF73
-S315080052C8540D002008B5FFF7ADF8034BFF221A70F6
-S315080052D80122A3F8862008BD540D002008B589B216
-S315080052E8FFF702FE08BD0000074B002283F881205D
-S315080052F8C3F8882083F88420A3F8862083F88320B7
-S3150800530883F88220704700BF540D0020024B93F89B
-S31508005318810000B101207047540D0020024B00227D
-S3150800532883F88420704700BF540D002008B5037819
-S31508005338FF2B24D0354A92F88120012A2BD1C93B64
-S31508005348352B53D8DFE803F04052524F52524C439C
-S31508005358494652525252525252525252525252522C
-S315080053685252525252525252525252525252525207
-S315080053785252312B282E5252523452373A3DFFF7A1
-S3150800538899FE224B93F88430012B33D01F4BB3F97F
-S315080053988610002932DC08BDFFF7B0FEF1E7FFF7F3
-S315080053A8CDFEEEE7FFF75CFEEBE7FFF7FFFEE8E763
-S315080053B8FFF73EFEE5E7FFF735FEE2E7FFF720FED3
-S315080053C8DFE7FFF70DFEDCE7FFF70EFFD9E7FFF784
-S315080053D82DFFD6E7FFF75AFED3E7FFF759FFD0E7C1
-S315080053E8FFF770FFCDE7FFF74BFECAE72020FFF768
-S315080053F8D7FDC6E71020FFF7D3FDC7E718460123F0
-S3150800540880F88430FFF76AFFC5E700BF540D00200F
-S315080054182023038000487047480000200A23038099
-S31508005428004870476800002008B590F89C32032B9E
-S3150800543801D0002008BDFFF73FFCFAE708B5FFF7DB
-S315080054483BFC002008BD08B50846FFF769FC0020A4
-S3150800545808BD000008B50B7813F0600F06D14B7825
-S315080054680A2B14D00B2B17D0062B01D0002008BD09
-S315080054784B881B0A212B04D00B491722FEF7C2FEBC
-S31508005488F4E7CA88172A28BF17220849F6E7012227
-S315080054980749FEF7B7FEE9E78B7813B9044A13609C
-S315080054A8E4E7FEF7A3FBE1E7510000205A000020D5
-S315080054B8200E002010B50446812100F088F9012144
-S315080054C8204600F084F9002010BD000010B50446F7
-S315080054D840230222812100F06FF94023022201218C
-S315080054E8204600F069F94023034A0121204600F0C6
-S315080054F8ADF9002010BD00BFE00D00200048704738
-S31508005508E00D002012230B80004870479000002009
-S3150800551804230B8000487047A40000200023934208
-S315080055281ED200B510E00CF1370C01F813C00001C3
-S315080055384FEA430C0CF1010C4FF0000E01F80CE091
-S315080055480133DBB2934209D24FEA107CB0F1204FFF
-S31508005558E9D20CF1300C01F813C0E8E75DF804FB52
-S315080055687047000038B50B4BD3F8AC07D3F8B047EB
-S31508005578D3F8B437C01800D138BD074D0822A91C7E
-S31508005588FFF7CCFF042205F112012046FFF7C6FFF4
-S31508005598F2E700BF00F0FF1FA800002008B51A238D
-S315080055A80B80FFF7DFFF014808BD00BFA8000020F1
-S315080055B808B50A4628B905490548FEF706FE034808
-S315080055C808BD02490248FEF700FEF8E7240E002047
-S315080055D8E459000810B50A46034C21460348FEF765
-S315080055E8F4FD204610BD00BF240E0020F859000817
-S315080055F808B50A4628B905490548FEF7E6FD0348E9
-S3150800560808BD02490248FEF7E0FDF8E7240E002027
-S31508005618085A000808B50A4628B905490548FEF78C
-S31508005628D4FD034808BD02490248FEF7CEFDF8E74F
-S31508005638240E0020105A0008022805D8DFE800F0D2
-S3150800564805040200012070470220704708B500F5D6
-S315080056582C71D0F8E802FEF779F908BD08B501EB10
-S31508005668810300EBC303D3F87C21D0F8E802FEF7E0
-S315080056789AF908BD08B501EB810300EBC303DA6B99
-S31508005688D0F8E802FEF7D5F908BD08B5D0F8E8025B
-S31508005698FEF776FA08BD000010B504468368022BA3
-S315080056A809D10121D4F8E802FEF753FAD4F8E8023A
-S315080056B8FEF727FA10BD8E210148FFF75DFBF0E7D4
-S315080056C8285A000810B50446FAF79EFDD4F8E802E9
-S315080056D8FEF742FAA36923B1024A136943F006039F
-S315080056E8136110BD00ED00E008B5D0F8E802FEF732
-S315080056F83CFAFAF78AFD08BD10B504461F48C0F8F3
-S31508005708E842C4F8C0021E4B03600823436002231C
-S3150800571883600361002383610362FBF785FE30BB60
-S31508005728182300221146D4F8C002FCF7D6FD5823E0
-S3150800573800228021D4F8C002FCF7CFFDC02300223E
-S315080057488121D4F8C002FCF7C8FD4FF488730022FB
-S315080057580121D4F8C002FCF7C0FD4FF4807300227B
-S315080057688221D4F8C002FCF7B8FD002010BD40F22B
-S315080057781B110448FFF700FBD2E700BFEC00002026
-S31508005788005C0040285A000808B5D0F8C002FBF7A4
-S31508005798B0FEFFF751FF08BD08B5D0F8C002FBF701
-S315080057A8BFFEFFF749FF08BD08B5D0F8C002FBF7EA
-S315080057B8D0FEFFF741FF08BD08B594461A4663466A
-S315080057C8D0F8C002FCF761FCFFF736FF08BD08B53C
-S315080057D8D0F8C002FCF797FCFFF72EFF08BD08B5FE
-S315080057E8D0F8C002FCF709FDFFF726FF08BD08B583
-S315080057F8D0F8C002FCF736FDFFF71EFF08BDD0F843
-S31508005808C03211F0800F08D101F07F0101EB810148
-S3150800581803EBC10191F86A01704701F07F01013174
-S3150800582801EB810103EBC1018878704708B5D0F808
-S31508005838C002FCF77DFBFFF7FFFE08BD08B5D0F8E8
-S31508005848C002FCF7B8FCFFF7F7FE08BD08B5D0F8A4
-S31508005858C002FCF78AFCFFF7EFFE08BD08B5D0F8CA
-S31508005868C002FCF79FFC08BD08B5012903D0002033
-S31508005878FAF7BCFC08BD0120FAF7B8FCFAE70000FD
-S3150800588870B50D4D0D4C641BA4100026A64209D10F
-S315080058980B4D0C4C00F018F8641BA4100026A64201
-S315080058A805D170BD55F8043B98470136EEE755F81B
-S315080058B8043B98470136F2E74C5A00084C5A000848
-S315080058C84C5A0008505A0008F8B500BFF8BC08BC7E
-S315080058D89E467047F8B500BFF8BC08BC9E46704798
-S315080058E8000000000000000001020304060708097A
-S315080058F80000000001020304433A2F576F726B2F0A
-S31508005908736F6674776172652F4F70656E424C5473
-S315080059182F5461726765742F536F757263652F41CB
-S31508005928524D434D345F53544D333246332F6361DA
-S315080059386E2E630005020602060307030803090319
-S3150800594809040A040B040C040C050D050E050F05BD
-S315080059580F06100610071008433A2F576F726B2F59
-S31508005968736F6674776172652F4F70656E424C5413
-S315080059782F5461726765742F536F757263652F416B
-S31508005988524D434D345F53544D333246332F727359
-S315080059983233322E63000000433A2F576F726B2F4B
-S315080059A8736F6674776172652F4F70656E424C54D3
-S315080059B82F5461726765742F536F757263652F412B
-S315080059C8524D434D345F53544D333246332F757316
-S315080059D8622E63004F70656E424C540057696E55C7
-S315080059E853422042756C6B204465766963650000EE
-S315080059F84F70656E424C542055736572000000005E
-S31508005A0844656661756C740057696E555342204241
-S31508005A18756C6B20496E7465726661636500000073
-S31508005A282E2E2F5553425F4445564943452F5461F8
-S31508005A38726765742F757362645F636F6E662E632B
-S30908005A48000000004C
-S30908005A4CAD01000892
-S30908005A5089010008B2
-S31508005A5400127A0001000000100000000400000093
-S31508005A64D5540008BD5400085D5400080000000021
-S31508005A7400000000455400084F540008315400083B
-S31508005A84000000000000000000000000195400088F
-S31508005A94000000002554000809022000010100C086
-S31508005AA4320904000002FF000000070581024000D5
-S31508005AB4FF070501024000FF0A0610010000004026
-S31508005AC4010000000D55000819550008DD550008A9
-S31508005AD4B9550008A5550008F95500081D560008CB
-S31508005AE41201100100000040501DAC6000010102C3
-S31508005AF403010000040309041A030000000000005F
-S31508005B040000000000000000000000000000000083
-S30908005B14000000007F
-S705080006CD1F
+S31508002D08404242F0800223F82420097869BB33F848
+S31508002D18212092B222F4804222F0700282F44052B4
+S31508002D2842F4004242F0800223F82120A2E04CB97E
+S31508002D38B2F80C446FEA44446FEA5444A4B2A2F8C1
+S31508002D480C44CFE74FEA540C14F0010F01D00CF1EC
+S31508002D58010CB2F80C44A4B24FEA8C2C1FFA8CFC6E
+S31508002D6844EA0C0CA2F80CC4BCE733F8212092B24A
+S31508002D7822F4804222F0700282F4005242F40042A1
+S31508002D8842F0800223F8212074E0CA78022A72D019
+S31508002D980C7833F8242092B222F4E24222F0700228
+S31508002DA842F4004242F0800223F82420B3F8502067
+S31508002DB813FA82F291F800C002EB0C12B1F808C0B7
+S31508002DC84FEA5C0C4FEA4C0CA2F800C4B3F8502042
+S31508002DD813FA82F291F800C002EB0C12B1F80AC095
+S31508002DE84FEA5C0C4FEA4C0CA2F808C44A78002A49
+S31508002DF850D10C7833F8242012F4804F0CD033F8CD
+S31508002E08242092B222F4E04222F0700242F44042B0
+S31508002E1842F0800223F824200C7833F8242012F094
+S31508002E28400F0CD033F8242092B222F4E04222F064
+S31508002E38700242F4004242F0C00223F8242091F8B6
+S31508002E4800C033F82C2092B222F4804222F0700295
+S31508002E5882F4405248F28004224323F82C20097849
+S31508002E6833F8212092B222F4E04222F040022243AB
+S31508002E7823F8212010BD0C7833F8242092B222F4C6
+S31508002E88E04222F0700242F4014242F0800223F83E
+S31508002E9824208BE70C7833F8242012F4804F0CD0C2
+S31508002EA833F8242092B222F4E04222F0700242F467
+S31508002EB8404242F0800223F824200C7833F8242074
+S31508002EC812F0400F0CD033F8242092B222F4E042D4
+S31508002ED822F0700242F4004242F0C00223F824208D
+S31508002EE8CA78012A1ED00C7833F8242092B222F424
+S31508002EF8E04222F0400282F0200242F4004242F008
+S31508002F08800223F82420097833F8212092B222F483
+S31508002F18804222F0700242F4004242F0800223F80E
+S31508002F282120A7E70C7833F8242092B222F4E0424D
+S31508002F3822F0400242F4004242F0800223F824209C
+S31508002F48E1E70B7B002B46D14B7813B30A7830F8A8
+S31508002F58223013F0400F0CD030F822309BB223F4FD
+S31508002F68E04323F0700343F4004343F0C00320F81A
+S31508002F7822300A7830F822309BB223F4E04323F053
+S31508002F88400343F4004343F0800320F8223000202E
+S31508002F9870470A7830F8223013F4804F0CD030F88E
+S31508002FA822309BB223F4E04323F0700343F44043F2
+S31508002FB843F0800320F822300A7830F822309BB292
+S31508002FC823F4804323F0700343F4004343F080035B
+S31508002FD820F82230DBE74B78002B4ED10A7830F8F8
+S31508002FE8223013F4804F0CD030F822309BB223F4E9
+S31508002FF8E04323F0700343F4404343F0800320F88A
+S3150800300822300A7830F8223013F0400F0CD030F806
+S3150800301822309BB223F4E04323F0700343F40043C1
+S3150800302843F0C00320F822300A7830F822309BB2E1
+S3150800303823F4E04323F0700343F4004343F0C0034A
+S3150800304820F822300B7830F8232092B222F48042F6
+S3150800305822F0700248F2800C42EA0C0220F823207B
+S315080030680A7830F822309BB223F4E04323F0400371
+S3150800307843EA0C0320F8223089E70A7830F8223028
+S3150800308813F4804F0CD030F822309BB223F4E04377
+S3150800309823F0700343F4404343F0800320F82230BA
+S315080030A80A7830F8223013F0400F0CD030F8223066
+S315080030B89BB223F4E04323F0700343F4004343F040
+S315080030C8C00320F822300A7830F822309BB223F45D
+S315080030D8E04323F0700343F4404343F0800320F8A9
+S315080030E822300B7830F8232092B222F4E04222F0FC
+S315080030F8400248F2800C42EA0C0220F823200A789B
+S3150800310830F822309BB223F4804323F0700343EA55
+S315080031180C0320F822303AE74B788BB10A7830F856
+S3150800312822309BB223F4E04323F0400383F01003D4
+S3150800313843F4004343F0800320F822300020704708
+S315080031480A7830F822309BB223F4804323F07003C0
+S3150800315883F4805343F4004343F0800320F8223075
+S31508003168ECE70B7B002B4BD14B7833B30A7830F856
+S31508003178223013F0400F0CD030F822309BB223F4DB
+S31508003188E04323F0700343F4004343F0C00320F8F8
+S315080031982230CB78012B33D00A7830F822309BB20C
+S315080031A823F4E04323F0400383F0200343F4004369
+S315080031B843F0800320F8223022E00A7830F82230DB
+S315080031C813F4804F0CD030F822309BB223F4E04336
+S315080031D823F0700343F4404343F0800320F8223079
+S315080031E80A7830F822309BB223F4804323F0700320
+S315080031F883F4405343F4004343F0800320F8223015
+S315080032080020704703460122A0F840200020A3F8B2
+S3150800321844000322A3F84020704711B98023A0F878
+S315080032284C30002070470020704700207047B0F8DF
+S31508003238440080B2704710B45C1C640800EB420274
+S3150800324802F5806207E00B78487843EA002322F8FB
+S31508003258043B0231013C002CF5D15DF8044B70475C
+S3150800326870B505460C464A78012A3BD00B7B002BDD
+S3150800327840F0A6828B690A69934240F284829B1AB7
+S315080032888B61B5F8503015FA83F3217803EB0113EF
+S31508003298B3F80C14C1F30901A3F80C143E2A40F23A
+S315080032A87682510912F01F0F00D10139B3F80C24A0
+S315080032B892B2890289B20A4342F40042A3F80C245E
+S315080032C8227835F822309BB223F4804323F0700322
+S315080032D883F4405343F4004343F0800325F822302F
+S315080032E8002070BD8E6909698E4200D90E46237B77
+S315080032F873B3E378022B4DD0236A9B1B236223788A
+S3150800330835F8231011F0400F00F0F581002A40F037
+S31508003318E281B5F8502015FA82F202EB0313B3F8E6
+S315080033280C24C2F30902A3F80C243E2E40F2BA81F3
+S31508003338710916F01F0F00D10139B3F80C2492B29F
+S31508003348890289B20A4342F40042A3F80C24CBE165
+S31508003358B6B23346E28861692846FFF76CFFB5F8C6
+S31508003368503015FA83F3227803EB0213A3F80464A2
+S31508003378227835F822309BB223F4E04323F0400341
+S3150800338883F0300343F4004343F0800325F82230E2
+S315080033980020A6E7236A994280F06681227835F8E4
+S315080033A822309BB223F4E04323F0700343F401432D
+S315080033B843F0800325F82230236A9B1B236223786F
+S315080033C835F8232012F0400F00F0A7806278B2BBC8
+S315080033D8B5F8502015FA82F202EB0313B3F80C2459
+S315080033E8C2F30902A3F80C243E2E0FD9710916F068
+S315080033F81F0F00D10139B3F80C2492B2890289B299
+S315080034080A4342F40042A3F80C241AE04EB9B3F86A
+S315080034180C246FEA42426FEA524292B2A3F80C248D
+S315080034280FE0720816F0010F00D00132B3F80C1439
+S3150800343889B2920292B20A43A3F80C2401E0012A3F
+S3150800344830D0B3B2628961692846FFF7F4FE63692A
+S3150800345833446361236A226993422DD99B1B2362ED
+S315080034686378002B45D1B5F8503015FA83F32278DE
+S3150800347803EB0213B3F80424C2F30902A3F80424DD
+S315080034883E2E1DD9710916F01F0F00D10139B3F860
+S31508003498042492B2890289B20A4342F40042A3F884
+S315080034A8042428E0B5F8502015FA82F202EB031333
+S315080034B8B2B2A3F80C24C4E7002222621E46CFE75C
+S315080034C84EB9B3F804246FEA42426FEA524292B2FE
+S315080034D8A3F804240FE0720816F0010F00D0013291
+S315080034E8B3F8041489B2920292B20A43A3F80424E0
+S315080034F801E0012B06D0B3B2228961692846FFF795
+S315080035089AFE35E7B5F8503015FA83F3227803EBB7
+S315080035180213B2B2A3F80424EDE76278B2BBB5F891
+S31508003528502015FA82F202EB0313B3F80424C2F307
+S315080035380902A3F804243E2E0FD9710916F01F0FA5
+S3150800354800D10139B3F8042492B2890289B20A4330
+S3150800355842F40042A3F804241AE04EB9B3F8042446
+S315080035686FEA42426FEA524292B2A3F804240FE085
+S31508003578720816F0010F00D00132B3F8041489B2A4
+S31508003588920292B20A43A3F8042401E0012A30D031
+S31508003598B3B2228961692846FFF74DFE6369334449
+S315080035A86361236A226993422DD99B1B2362637838
+S315080035B8002B45D1B5F8503015FA83F3227803EB7A
+S315080035C80213B3F80C24C2F30902A3F80C243E2EFE
+S315080035D81DD9710916F01F0F00D10139B3F80C244B
+S315080035E892B2890289B20A4342F40042A3F80C242B
+S315080035F828E0B5F8502015FA82F202EB0313B2B2A6
+S31508003608A3F80424C4E7002222621E46CFE74EB96F
+S31508003618B3F80C246FEA42426FEA524292B2A3F810
+S315080036280C240FE0720816F0010F00D00132B3F827
+S315080036380C1489B2920292B20A43A3F80C2401E048
+S31508003648012B06D0B3B2628961692846FFF7F3FDF4
+S315080036588EE6B5F8503015FA83F3227803EB021391
+S31508003668B2B2A3F80C24EDE7217835F8212092B2F6
+S3150800367822F4E24222F0700242F4004242F080024A
+S3150800368825F82120B5F8502015FA82F2217802EBA0
+S3150800369801129BB2A2F80434228961692846FFF709
+S315080036A8CAFD65E64EB9B3F80C246FEA42426FEADA
+S315080036B8524292B2A3F80C2416E0720816F0010FCB
+S315080036C800D00132B3F80C1489B2920292B20A43B6
+S315080036D8A3F80C2408E0B5F8502015FA82F202EB94
+S315080036E80313B2B2A3F80C24B3B2628961692846F7
+S315080036F8FFF7A1FD3CE6B2BBB5F8502015FA82F2F1
+S3150800370802EB0313B3F80424C2F30902A3F804244A
+S315080037183E2E0FD9710916F01F0F00D10139B3F8DB
+S31508003728042492B2890289B20A4342F40042A3F8F1
+S31508003738042421E04EB9B3F804246FEA42426FEA3A
+S31508003748524292B2A3F8042416E0720816F0010F42
+S3150800375800D00132B3F8041489B2920292B20A432D
+S31508003768A3F8042408E0B5F8502015FA82F202EB0B
+S315080037780313B2B2A3F80424B3B2228961692846AE
+S31508003788FFF759FDF4E500228A611A4679E54AB930
+S31508003798B3F80C246FEA42426FEA524292B2A3F88F
+S315080037A80C248DE5510812F0010F00D00131B3F849
+S315080037B80C2492B2890289B21143A3F80C147FE546
+S315080037C8CB78022B4DD0012B40F02F8189692369CC
+S315080037D8994240F2E680C91AA161F2B9B5F85020B3
+S315080037E815FA82F2217802EB0112B2F80414C1F331
+S315080037F80901A2F804143E2B40F2D780580913F0A1
+S315080038081F0F00D10138B2F8041489B2800280B2B9
+S31508003818014341F40041A2F804146278002A40F0F2
+S31508003828F680B5F8502015FA82F2217802EB0112D3
+S31508003838B2F80C14C1F30901A2F80C143E2B40F295
+S31508003848CD80590913F01F0F00D10139B2F80C348D
+S315080038589BB2890289B20B4343F40043A2F80C349D
+S315080038682EE5F2B9B0F8503010FA83F30A7803EB6C
+S315080038780213B3F80424C2F30902A3F804240A6954
+S315080038883E2A31D9510912F01F0F00D10139B3F870
+S31508003898042492B2890289B20A4342F40042A3F880
+S315080038A804246378002B51D1B5F8503015FA83F300
+S315080038B8227803EB0213B3F80C24C2F30902A3F81F
+S315080038C80C2422693E2A28D9510912F01F0F00D163
+S315080038D80139B3F80C2492B2890289B20A4342F430
+S315080038E80042A3F80C2433E04AB9B3F804246FEA73
+S315080038F842426FEA524292B2A3F80424D1E7510829
+S3150800390812F0010F00D00131B3F8042490B28A02EC
+S3150800391892B20243A3F80424C3E74AB9B3F80C24BD
+S315080039286FEA42426FEA524292B2A3F80C240FE0B9
+S31508003938510812F0010F00D00131B3F80C2490B2E7
+S315080039488A0292B20243A3F80C2401E0012B1DD087
+S31508003958E369002B3FF4B4AC227835F8221044F218
+S31508003968400303EA01008B4302D000287FF4A8AC81
+S3150800397835F822309BB223F4E04323F0700343F46E
+S31508003988004343F0C00325F8223099E4B5F85030CF
+S3150800399815FA83F3227803EB0213228AA3F80C2478
+S315080039A8D6E70023A3610B4617E74BB9B2F8041408
+S315080039B86FEA41416FEA514189B2A2F804142CE72B
+S315080039C8590813F0010F00D00131B2F8040480B287
+S315080039D8890289B20143A2F804141EE74BB9B2F862
+S315080039E80C346FEA43436FEA53439BB2A2F80C348C
+S315080039F866E4590813F0010F00D00131B2F80C3407
+S31508003A0898B28B029BB20343A2F80C3458E4012AF5
+S31508003A187FF456ACB5F8502015FA82F2217802EBF5
+S31508003A2801129BB2A2F80C344AE4012059E410B4F6
+S31508003A385C0800EB420000F5806007E030F8042BCC
+S31508003A480A70C2F307224A700231013C002CF5D1EC
+S31508003A5813F0010F01D003880B705DF8044B70470B
+S31508003A68014B1860704700BF00000020024A13780F
+S31508003A7843F00103137070470C00002010B50D4B76
+S31508003A88187301F09BFC00F132040A4B9B6813F08B
+S31508003A98010F07D101F09AFF01F090FCA042F4D972
+S31508003AA8012300E000231BB9024B187BC0B200E0D3
+S31508003AB8002010BD0038004008B5034B04229A615F
+S31508003AC8FF20FFF7DBFF08BD000C004810B50446C9
+S31508003AD8FF20FFF7D3FF207010BD38B501F06EFC44
+S31508003AE800F5FA75FF20FFF7C9FF044601F06EFFD7
+S31508003AF8FF2C03D001F062FCA842F3D3FF2C14BFB5
+S31508003B080020012038BD000010B5084B04229A622F
+S31508003B18FF20FFF7B3FFFFF7E0FF10B101242046A7
+S31508003B2810BD0446FFF7C8FFF9E700BF000C0048B8
+S31508003B3838B504460D46FFF7D0FF00B938BD284604
+S31508003B48FFF79CFFFD2D19D04FF400752078FFF775
+S31508003B5895FF60780234FFF791FF023DF6D1FF2002
+S31508003B68FFF78CFFFF20FFF789FFFF20FFF786FF87
+S31508003B7800F01F03052B03D10120DFE70120DDE74D
+S31508003B880020DBE738B504460D4610F0800F33D120
+S31508003B98FFF792FFFFF7B8FF002845D044F040002A
+S31508003BA8FFF76CFF280EFFF769FFC5F30740FFF715
+S31508003BB865FFC5F30720FFF761FFE8B2FFF75EFF69
+S31508003BC854B30120082C29D0FFF758FF0C2C27D00E
+S31508003BD80A24FF20FFF752FF144D287001F0F6FE5D
+S31508003BE82B7813F0800F03D0631E13F0FF04F0D16F
+S31508003BF80E4B1878C0B238BD00F07F040021372074
+S31508003C08FFF7C0FF094B18701B78DBB2012BBFD929
+S31508003C18064B1878C0B2EEE79520D3E78720D3E796
+S31508003C28FF20FFF72BFFD3E7FF20E4E72C06002049
+S31508003C38F8B505460E4601F0C1FB00F16407FF20FA
+S31508003C48FFF71CFF044601F0C1FEFF2C03D101F063
+S31508003C58B5FBB842F3D3FE2C13D16C1C2846FFF7E4
+S31508003C6835FF20460235FFF731FF01F0AFFE023E69
+S31508003C78F3D1FF20FFF702FFFF20FFF7FFFE012021
+S31508003C88F8BD0020FCE70000F0B595B02822002111
+S31508003C980DEB020004F056FE0024049405940694DD
+S31508003CA8079408940994344B5A6942F480225A6155
+S31508003CB85A6902F480220392039A5A6942F48012D6
+S31508003CC85A615A6902F480120292029ADA6942F42F
+S31508003CD88042DA61DB6903F480430193019B042778
+S31508003CE804970123059303250695244E04A930460F
+S31508003CF8FEF714FCB7614FF4604304930223059357
+S31508003D080695079408940523099304A91C48FEF701
+S31508003D1805FC0A944FF482730B934FF4E0630C93F3
+S31508003D280D940E944FF400730F9330231093119447
+S31508003D38129407231393134C0AA92046FEF73CFE50
+S31508003D48636823F010036360636823F008036360FD
+S31508003D58636843F480536360236843F04003236031
+S31508003D680A2404E0FF20FFF789FE013CE4B2002C90
+S31508003D78F8D115B0F0BD00BF00100240000C00488D
+S31508003D88000400480038004010B58AB0164C23686D
+S31508003D9823F040032360002300934FF482720192B4
+S31508003DA84FF4E0620292039304934FF4007205926B
+S31508003DB80693079308930723099369462046FEF74F
+S31508003DC8FBFD636823F010036360636823F0080348
+S31508003DD86360636843F480536360236843F0400371
+S31508003DE823600AB010BD00BF00380040002840F024
+S31508003DF89C80F0B583B04E4B1B7813F0020404D0B0
+S31508003E084B4B1878C0B203B0F0BDFFF73DFF494BDE
+S31508003E1804229A6200210846FFF7B4FE05460128DF
+S31508003E2810D0454B1C60FFF747FE002C7AD0404A55
+S31508003E38137803F0FE031370FFF7A6FF3C4B1878B8
+S31508003E48C0B2E0E701F0BAFA00F57A764FF4D57110
+S31508003E580820FFF797FE01283FD1254609E0FF20ED
+S31508003E68FFF70CFE05F108036B4403F8040C01354B
+S31508003E78EDB2032DF3D99DF80630012BD1D19DF863
+S31508003E880730AA2BCDD101F099FAB04206D24FF0E5
+S31508003E988041A920FFF776FE0028F4D101F08EFAB2
+S31508003EA8B042BED200213A20FFF76CFE054600282C
+S31508003EB8B7D1032D0AD8FF20FFF7E0FD05F108035F
+S31508003EC86B4403F8040C0135EDB2F2E79DF80430AB
+S31508003ED813F0400F24D00C24A3E70021A920FFF7EC
+S31508003EE851FE01280CD92F4601F068FAB0420AD2C9
+S31508003EF800212846FFF746FE28B101F067FDF3E7DB
+S31508003F080227A925F0E701F059FAB04289D24FF4F9
+S31508003F1800711020FFF736FE002882D13C4680E75C
+S31508003F2804247EE7FFF7A2FD88E70120704700BF53
+S31508003F380C000020000C00482806002018B9034B7E
+S31508003F481878C0B270470120704700BF0C000020DF
+S31508003F5800283BD138B50D461C46002B38D01E4BD9
+S31508003F681B7813F0010F35D11C4B1B6813F0080F8B
+S31508003F7800D15202012C1AD011461220FFF702FE70
+S31508003F8878B94FF400712846FFF752FE28B105F5AF
+S31508003F98007501F01BFD013CF3D100210C20FFF749
+S31508003FA8F1FDFFF789FD201E18BF012038BD11460F
+S31508003FB81120FFF7E7FD0028F3D14FF400712846D2
+S31508003FC8FFF736FE0028ECD00024EAE704207047FD
+S31508003FD80420EBE70320E9E70C0000202806002068
+S31508003FE800284AD170B50D4616461C46002B46D001
+S31508003FF8264B1B7813F0010F43D1244B1B7813F07B
+S31508004008040F40D1224B1B6813F0080F00D1560243
+S31508004018012C1DD013F0060F28D131461920FFF7B9
+S31508004028B1FD78B9FC212846FFF782FD28B105F5C8
+S31508004038007501F0CBFC013CF4D1FD210020FFF707
+S3150800404877FDC0B1FFF738FD201E18BF012070BDE7
+S3150800405831461820FFF796FD0028F3D1FE21284699
+S31508004068FFF766FD0028EDD00024EBE721469720E8
+S31508004078FFF788FDD1E70124E4E704207047042008
+S31508004088E5E70320E3E70220E1E700BF0C0000208C
+S315080040982806002070B584B0002840F01F810D4618
+S315080040A81646904B1C7814F0010440F019810E2925
+S315080040B800F20881DFE811F00F00160006015A0021
+S315080040C8060106010601060106010601B500B90042
+S315080040D8C900D800ED00FFF717FD002840F0F88062
+S315080040E80124F0E000210920FFF74CFD044608B139
+S315080040F82C46E8E010216846FFF79AFD002800F0EC
+S31508004108E9809DF800309B09012B1FD09DF80520F2
+S3150800411802F00F029DF80A3002EBD3129DF8093017
+S315080041285B0003F006031A449DF808109DF807304B
+S315080041389B0003EB91139DF80610890201F4406170
+S315080041480B440133073A93403360BCE09DF80930C5
+S315080041589DF8082003EB02239DF80720120402F4B1
+S315080041687C12134401339B023360ACE05E4B1B6838
+S3150800417813F0040F20D000218D20FFF703FD08B1A6
+S315080041880124A0E0FF20FFF779FC10216846FFF715
+S315080041984FFD78B9012496E0FF20FFF76FFC013C34
+S315080041A8E4B2002CF8D19DF80A301A091023934076
+S315080041B8336088E03024F4E700210920FFF7E2FCA1
+S315080041C8044608B101247EE010216846FFF730FD51
+S315080041D8002800F08180444B1B6813F0020F10D0AA
+S315080041E89DF80A305B0003F07E039DF80B2003EB6D
+S315080041F8D21301339DF80D209209013A9340336092
+S3150800420861E09DF80A30C3F384029DF80B10CB00D1
+S3150800421803F0180303EB5113013302FB033333602E
+S3150800422851E0314B1B6813704DE000210920FFF758
+S31508004238A9FC044608B1012445E010213046FFF7D9
+S31508004248F7FC00283FD101243DE000210A20FFF7AA
+S3150800425899FC044608B1012435E010213046FFF7D9
+S31508004268E7FC80BB01242EE000213A20FFF78AFCF0
+S31508004278044660B1012426E0FF20FFF7FFFB7055CE
+S3150800428801F0A4FB0135EDB2032DF5D91BE005466F
+S31508004298FAE7154B1B6813F0040F01D1012412E045
+S315080042A800218D20FFF76EFC044608B101240AE0B8
+S315080042B8FF20FFF7E3FB40213046FFF7B9FC10B9AA
+S315080042C8012400E00424FFF7F7FB204604B070BD7C
+S315080042D82C46F8E72C46F6E70124F4E70424F4E725
+S315080042E80324F2E70C0000202806002098B108B538
+S315080042F80346D0F8B40210B10020C3F8B40209B1D5
+S31508004308C3F8B012012183F89C121A70184604F0F3
+S3150800431831FA002008BD0220704710B5044601236B
+S3150800432880F89C32D0F8B4325B6801799847204601
+S3150800433804F078FA204604F065FA002010BD19B191
+S31508004348C0F8B412002070470220704708B504F078
+S3150800435861FA002008BD08B5D0F8B4322BB11B683D
+S31508004368984700B908BD0220FCE70220FAE708B515
+S31508004378D0F8B4325B689847002008BD38B50446BB
+S3150800438800F52A75284600F035F90123C4F8943251
+S31508004398B4F8AE32C4F8983294F8A81201F01F039C
+S315080043A8012B0ED0022B11D02BB101F0800120462B
+S315080043B804F053FA03E02946204600F0C9FA00201B
+S315080043C838BD2946204600F0F7FAF8E72946204678
+S315080043D800F022FBF3E738B504460D4691BB1346B1
+S315080043E8D0F89422032A03D0052A24D0084633E0B5
+S315080043F8D0F86011D0F8642191420DD9891AC0F80D
+S3150800440860118A4206D98AB21946204600F027FC66
+S31508004418284621E092B2F7E7D0F8B4321B691BB1F7
+S3150800442890F89C22032A04D0204600F020FC28464F
+S3150800443812E09847F8E70021C0F8941204F00DFA3C
+S31508004448284609E0D0F8B4329B6933B190F89C2223
+S31508004458032A04D19847002038BD0220FCE7022029
+S31508004468FAE738B504460D46002953D11346D0F85D
+S315080044789422022A0CD0042A00D01AB98021204690
+S3150800448804F0EBF994F8A032012B3ED0284638BD43
+S31508004498016A426A91421BD8C169B1FBF2F302FB71
+S315080044A813132BB98A4203D8D0F8983299421CD3E9
+S315080044B8D4F8B432DB681BB194F89C22032A21D0BD
+S315080044C88021204604F0C9F9204600F0DBFBD9E72D
+S315080044D88A1A026292B2194600F0B9FB00231A46F4
+S315080044E81946204604F0F0F9CCE70022114600F0F8
+S315080044F8AEFB0021C4F898120B460A46204604F07B
+S31508004508E3F9BFE720469847DAE7002384F8A0329C
+S315080045182846BCE7D0F8B4325B6933B190F89C22D8
+S31508004528032A04D198470020B1E70220AFE7022002
+S31508004538ADE770B5044640230022114604F07AF91F
+S315080045480125C4F858514026C4F864613346002248
+S315080045588021204604F06EF9A561666284F89C52AB
+S315080045680023C4F894326360C4F8A432D4F8B83285
+S315080045782BB1D4F8B4325B6800212046984700204E
+S3150800458870BD01740020704790F89C3280F89D32FF
+S31508004598042380F89C320020704790F89C32042B3C
+S315080045A801D00020704790F89D3280F89C32F8E7D1
+S315080045B808B590F89C32032B01D0002008BDD0F826
+S315080045C8B432DB69002BF8D09847F6E70346002093
+S315080045D802E00130C0B201331A78002AF9D17047CF
+S315080045E808B54B88012B00D008BDC0F8A43200F0E6
+S315080045F83EFBF9E70B7803704B7843708B78CA78DB
+S3150800460803EB022343800B794A7903EB0223838061
+S315080046188B79CA7903EB0223C380704710B5044621
+S31508004628802104F01AF90021204604F016F910BD75
+S3150800463830B583B005460C460023ADF806304A88DF
+S31508004648130A013B062B00F2A480DFE803F00418DE
+S315080046582CA2A2869300D0F8B0321B680DF1060189
+S31508004668007C9847BDF806201AB1E388002B40F06D
+S315080046789480E388002B00F09A8003B030BD037C51
+S3150800468843B9D0F8B4329B6A0DF10600984702235D
+S315080046984370E7E7D0F8B432DB6A0DF106009847AD
+S315080046A802234370DEE7D2B2052A52D8DFE802F0C1
+S315080046B803101D2A3744D0F8B0325B6823B10DF1D0
+S315080046C80601007C9847CDE72146FFF7A7FFD4E700
+S315080046D8D0F8B0329B6823B10DF10601007C9847E3
+S315080046E8C0E72146FFF79AFFC7E7D0F8B032DB687C
+S315080046F823B10DF10601007C9847B3E72146FFF779
+S315080047088DFFBAE7D0F8B0321B6923B10DF106015F
+S31508004718007C9847A6E72146FFF780FFADE7D0F863
+S31508004728B0325B6923B10DF10601007C984799E719
+S315080047382146FFF773FFA0E7D0F8B0329B6923B18B
+S315080047480DF10601007C98478CE72146FFF766FFBE
+S3150800475893E72146FFF762FF8FE7037C33B9D0F862
+S31508004768B4325B6B0DF1060098477BE72146FFF7E5
+S3150800477855FF82E7037C43B9D0F8B4321B6B0DF1B9
+S3150800478806009847072343706CE72146FFF746FF5C
+S3150800479873E72146FFF742FF6FE79A4228BF1A4692
+S315080047A8ADF806200146284600F044FA61E728468F
+S315080047B800F05DFA61E738B504468B88F3B9CB880B
+S315080047C8E3B94B887F2B19D803F07F0590F89C32FC
+S315080047D8032B0CD080F89E52294604F065F820462B
+S315080047E800F045FA35B1022384F89C3209E0FFF750
+S315080047F815FF06E0012384F89C3202E02046FFF7FD
+S315080048080DFF38BD38B504460D468978284B19700A
+S3150800481801290ED890F89C32022B0ED0032B21D0F2
+S315080048282946FFF7FBFE224B19782046FFF79FFD1E
+S3150800483802E02946FFF7F2FE38BD81B1416003233D
+S3150800484880F89C32FFF787FD022803D0204600F03F
+S315080048580EFAF1E729462046FFF7E0FEECE700F0F6
+S3150800486806FAE9E789B1436899421DD0D9B2FFF734
+S315080048787EFD0F4B197861602046FFF76CFD02280C
+S315080048880DD0204600F0F3F9D6E7022380F89C32CB
+S315080048984160FFF76CFD204600F0E9F9CCE72946A8
+S315080048A82046FFF7BBFEC7E700F0E1F9C4E700BFFB
+S315080048B82D06002008B5CB88012B0AD190F89C3222
+S315080048C8022B09D9032B09D10122011D00F0B2F9DF
+S315080048D801E0FFF7A3FE08BD5BB213B9FFF79EFE1A
+S315080048E8F9E70146002341F8083F012200F0A2F93A
+S315080048F8F1E708B590F89C32013B022B12D8CB8811
+S31508004908022B0CD10123C360D0F8A4320BB10323C0
+S31508004918C360022200F10C0100F08CF908BDFFF70C
+S315080049287DFEFBE7FFF77AFEF8E708B590F89C32B4
+S31508004938013B022B09D84B88012B00D008BD002360
+S31508004948C0F8A43200F093F9F8E7FFF767FEF5E731
+S3150800495808B50B7803F06003202B05D0402B03D04D
+S3150800496843B1FFF75BFE03E0D0F8B4329B6898477B
+S31508004978002008BD4B78092B1BD8DFE803F0111770
+S315080049881A141A08051A0E0BFFF752FEF0E7FFF776
+S3150800499812FFEDE7FFF736FFEAE7FFF78BFFE7E7D2
+S315080049A8FFF7A7FFE4E7FFF71BFEE1E7FFF7BDFF01
+S315080049B8DEE7FFF733FEDBE738B505460C460B7826
+S315080049C803F06003202B06D0402B04D01BB1FFF759
+S315080049D825FE002038BD95F89C32013B022B16D8D7
+S315080049E82379012B0ED8D5F8B4329B682146284678
+S315080049F89847E388002BECD10028EAD1284600F02E
+S31508004A0836F9E6E721462846FFF708FEE1E7214694
+S31508004A182846FFF703FEDCE770B505468B880C7851
+S31508004A2804F06004202C07D0DAB2402C04D05CB11C
+S31508004A38FFF7F4FD002405E0D5F8B4329B6828464C
+S31508004A4898470024204670BD202C09D04E78012EA0
+S31508004A5833D0032E0AD0002E55D0FFF7DFFDF1E735
+S31508004A68D0F8B4329B6898470446EBE790F89C322E
+S31508004A78022B04D0032B11D0FFF7D0FDE2E70AB1C9
+S31508004A88802A03D12846FFF7C9FDDBE7114603F05C
+S31508004A98E4FE8021284603F0E0FED3E74B8823B9D5
+S31508004AA81AB1802A01D0CB881BB1284600F0DFF856
+S31508004AB8C8E7114603F0D1FEF7E790F89C32022BB7
+S31508004AC804D0032B11D0FFF7A9FDBBE70AB1802A4A
+S31508004AD803D12846FFF7A2FDB4E7114603F0BDFE49
+S31508004AE88021284603F0B9FEACE74B88002BA9D1EC
+S31508004AF812F07F0F03D1284600F0B9F8A2E711464D
+S31508004B0803F0B3FEF7E790F89C02022806D00328BC
+S31508004B1829D02846FFF782FD344693E70AB1802A4A
+S31508004B2813D113F0800F15D102F07F0202EB82022F
+S31508004B38910001F5A8712944043100230B6002226B
+S31508004B48284600F077F834467CE72846FFF766FDDE
+S31508004B58344677E702F07F0202EB820291001031B1
+S31508004B6829440431E9E75BB2002B1FDB02F00F008A
+S31508004B7800EB800005EB8000D0F8580120B3002B25
+S31508004B8827DB02F07F0303EB83039C0004F5A87474
+S31508004B982C4404340AB1802A24D100232360022233
+S31508004BA82146284600F046F834464BE702F00F003F
+S31508004BB800EB800005EB800080690028DFD12846D5
+S31508004BC8FFF72CFD34463DE72846FFF727FD344610
+S31508004BD838E702F07F0303EB83039C0010342C4468
+S31508004BE80434D7E71146284603F047FE10B10123D7
+S31508004BF82360D4E700232360D1E7D0B170B50D460A
+S31508004C0816460446FFF7E2FC431C5B009BB233805A
+S31508004C182B7003236B70022307E001345A1CD2B2A7
+S31508004C28E8540233DBB20021A95420780028F4D1CD
+S31508004C3870BD704708B513460222C0F89422C361AE
+S31508004C4803620A46002103F037FE002008BD08B5AE
+S31508004C5813460A46002103F02FFE002008BD08B5B2
+S31508004C6813460A46002103F02FFE002008BD08B5A2
+S31508004C780423C0F8943200231A46194603F01CFE8A
+S31508004C88002008BD08B50523C0F8943200231A4643
+S31508004C98194603F019FE002008BD72B6704762B6B9
+S31508004CA8704700002DE9F04184B004460D461746C2
+S31508004CB898466846FDF77EFD0299174BA3FB013116
+S31508004CC88909002301E00133DBB2112B1FD8134AE7
+S31508004CD812F8130002EB4302527800EB020C0CFBA5
+S31508004CE8044CB1FBFCFE0CFB1E16002EEBD11FFA7A
+S31508004CF88EFCA5F800C00CF1FF3C1FFA8CFCBCF52D
+S31508004D08806FE0D2387088F80020012000E0002083
+S31508004D1804B0BDE8F08100BFD34D6210FC890008D5
+S31508004D2870B58CB00023ADF82E308DF82D308DF87F
+S31508004D382C300BAB0DF12D020DF12E014FF4FA7044
+S31508004D48FFF7B0FF002835D01D4C1E4B2360002501
+S31508004D5825766576A5760126E67625776577A560AC
+S31508004D68E5609DF82D30013B1B0423619DF82C3026
+S31508004D78013B1B056361BDF82E3063602046FBF7CF
+S31508004D88B3FD0695079508964CF6E04301930295F8
+S31508004D984FF6E073039304230493059509960E23A7
+S31508004DA80A9301A92046FBF745FE2046FBF7C5FEF0
+S31508004DB80CB070BDAF21044800F0F6FCC4E700BF8C
+S31508004DC83006002000640040C089000810B588B085
+S31508004DD8024640F2E1730293002304930593069171
+S31508004DE801AB02A90B48FBF7D6FE08B108B010BDFF
+S31508004DF800F0E4FA00F1320401990648FBF740FF8F
+S31508004E080028F3D000F0E2FD00F0D8FAA042F3D962
+S31508004E18ECE700BF3006002010B588B003460C46FC
+S31508004E2801AA00210848FBF73EFF50B9019A40F24B
+S31508004E3867639A4206D1039B23B9059B2370012011
+S31508004E4800E0002008B010BD3006002008B5FFF7BE
+S31508004E5824FF08BD10B500F0C5F900B910BDFBF769
+S31508004E68B7F90028FAD000F05DFDFBF7E7FC00F07B
+S31508004E787DFA00F0BBF920F0604020F07F00044B73
+S31508004E88986000F0B3F94468FFF709FFA047E5E71B
+S31508004E9800ED00E070B50D46044606E015F8013B3E
+S31508004EA804F8013B00F092FD3246531E9EB2002AD2
+S31508004EB8F4D170BD08B5C1F3080353B903688B422A
+S31508004EC809D040F8041B4FF40072FFF7E3FF0120EE
+S31508004ED808BD0020FCE70120FAE72DE9F04107465E
+S31508004EE8FCF720F800247F2C15D83E6806EB8408C2
+S31508004EF807EB84035D6800F069FD2A4600234146EE
+S31508004F080220FCF763F8804640B956F82430AB42CD
+S31508004F1806D10134E7E74FF0010801E04FF0000831
+S31508004F28FCF71AF84046BDE8F081000038B50D468A
+S31508004F380C4B984211D004460B4B994207D1094CA1
+S31508004F4829462046FFF7B6FF48B1204638BDFFF781
+S31508004F58C4FF0028F4D10024F7E7044CF0E700243E
+S31508004F68F3E700BF5C08002000A0000858060020E8
+S31508004F782DE9F04106460C4617461D4621F4FF78EA
+S31508004F8828F001080368B3F1FF3F07D033684345A3
+S31508004F980AD13168641A3444043414E04146FFF7E8
+S31508004FA889FF0028F2D11FE041463046FFF7BEFFC9
+S31508004FB806460028EDD1002016E017F8013B04F84C
+S31508004FC8013B013D0FD000F001FD311D611AB1F515
+S31508004FD8007FF2D308F500713046FFF7A7FF0646AB
+S31508004FE820B1041DE9E70120BDE8F0810020FBE7B0
+S31508004FF84FF0FF33024A1360024A1360704700BF36
+S31508005008580600205C0800200B4601F1FF3C1249AF
+S31508005018091A8C4519D81149884218D310B5191890
+S3150800502801390D4CA14214D820F4FF7121F0010171
+S315080050380A4CA14204D001460948FFF799FF10BD5A
+S3150800504801460848FFF794FFF9E700207047002053
+S3150800505870470020F3E700BFFFFF030800A0000819
+S31508005068580600205C08002030B585B00023039355
+S315080050784A1E1F4B1B1A9A4231D820F4FF6323F0A5
+S3150800508807031C4A93422ED30A18013A184CA2421F
+S315080050982BD8C01A0844C0F3CF25C0F30A0008B1B4
+S315080050A80135ADB200240094019301230293FBF75E
+S315080050B839FFA5420DD900F089FC03A96846FBF714
+S315080050C8F9FF50B9019B03F5006301930134A4B2B3
+S315080050D8EFE70124FBF740FF02E00024FAE7002483
+S315080050E8204605B030BD0024FAE70024F8E700BFDB
+S315080050F8FFFF030800A0000800B583B0002301934A
+S31508005108134B1B68B3F1FF3F20D0114A536801932C
+S3150800511891680B440193D1680B44019311690B44B8
+S31508005128019351690B44019391690B440193D26920
+S3150800513813440193DB4301930133019301AA042124
+S315080051480448FFF761FF03B05DF804FB0120FAE79E
+S315080051585C08002088A100080A4B1A685968114497
+S315080051689A681144DA6811441A6911445A6911444B
+S315080051789A690A44D3F88831D34201D00020704787
+S315080051880120704700A0000808B50C4B1B68B3F14E
+S31508005198FF3F06D10A4B1B68B3F1FF3F07D1012031
+S315080051A808BD0648FFF799FE0028F3D1F8E7044832
+S315080051B8FFF793FE0028F3D00120F1E75C080020EA
+S315080051C8580600200048704700A0000808B5FFF7F1
+S315080051D80FFF08BD08B5FFF717FF08BD08B5FFF7A5
+S315080051E843FF08BD08B5FFF7B7FF08BD08B5FFF7C1
+S315080051F8E9FF08BD08B5FFF77FFF00B908BDFFF747
+S31508005208C3FFFBE7054BDB6913F0200F04D0034BFC
+S315080052189B8C0370012070470020704700480040A7
+S3150800522810B5094B188500F0C9F800F10A04064BB1
+S31508005238DB6913F0800F05D100F0C8FB00F0BEF853
+S31508005248A042F4D910BD00BF0048004010B588B088
+S315080052580C4C236823F0010323604FF46143019340
+S3150800526800230293039304930C220592069307934B
+S3150800527801A92046FDF7E6FB236843F001032360EE
+S3150800528808B010BD0048004070B506460D4681298D
+S3150800529804D82846FFF7C4FF00240BE06F21074807
+S315080052A800F082FAF5E700F091FB305DFFF7B8FFEA
+S315080052B80134A4B2ABB2A342F5D870BD208A00085F
+S315080052C870B5254B1C78BCB92448FFF79BFF012805
+S315080052D801D0204670BD214B1B78013BDBB2802BE1
+S315080052E8F7D800F06BF81E4B18601E4B00221A7090
+S315080052F8194B01221A70ECE706460D46194B1B781E
+S31508005308013316481844FFF77DFF0446012815D1CE
+S31508005318144B1A780132D2B21A70104B1B789A427B
+S3150800532801D00024D5E710493046FFF7B3FD0A4BEC
+S3150800533800221A700B4B1B782B70CAE700F03EF850
+S31508005348074B1B68C833984203D90024024B1C70C4
+S31508005358BFE70024BDE700BFE20A0020600A002074
+S31508005368E40A0020E30A0020610A00204FF0E0233F
+S3150800537800221A615A619A617047000008B5FFF75A
+S31508005388F5FF4FF0E023044A5A6100229A61052185
+S315080053981961024B1A6008BD3F190100E80A002086
+S315080053A84FF0E0231B6913F4803F03D0024A1368C1
+S315080053B801331360704700BFE80A002008B5FFF7F5
+S315080053C8EFFF014B186808BDE80A002008B5FFF783
+S315080053D8F5FF08BD094B03F11801002232B19A748A
+S315080053E800225A61064B054A1A6070479A74596131
+S315080053F8183318310132D2B2F0E700BF2C0B00205F
+S315080054085C0B00200A4B1B6883B110B4084A5C6918
+S31508005418146019749860D86000225A7418600139A3
+S3150800542808445860987C5DF8044B7047FF2070471D
+S315080054385C0B002038B504460D46012824D804EB31
+S315080054484403164A02EBC3035A7C1B7C9A4221D0B2
+S3150800545804EB4403114A02EBC303DA6815705A7C55
+S3150800546801325A74DA680132DA605B689A4213D9EB
+S315080054780A4B04EB440253F8322004EB440403EBCA
+S31508005488C404E260012008E04FF4DE71044800F025
+S315080054988BF9D4E7002000E0012038BD2C0B00204A
+S315080054A8608A000808B50146024B1878FFF7C2FF5C
+S315080054B808BD00BF600B002038B504460D46012814
+S315080054C822D804EB4403144A02EBC303587C10B3EE
+S315080054D804EB440302EBC3039A6812782A705A7CD1
+S315080054E8013A5A749A6801329A605B689A4211D9E5
+S315080054F8094B04EB440253F8322004EB440403EB4B
+S31508005508C404A260012006E04FF4EF71034800F0D6
+S315080055184BF9D6E7012038BD2C0B0020608A000815
+S3150800552808B50146024B1878FFF7C6FF08BD00BF45
+S31508005538A40B002010B50446012806D804EB440439
+S31508005548054800EBC404607C10BD4FF4FF7103489E
+S3150800555800F02AF9F2E700BF2C0B0020608A000841
+S3150800556838B5FFF737FF194C4021601CFFF74AFF8B
+S315080055782070174D4021681CFFF744FF28702378D0
+S31508005588FF2B18D0FF2816D0124C002212492046A5
+S31508005598FEF7ACFE11492046FEF7D1FE2046FEF777
+S315080055A8D5FED4F8C002FCF72CFD00F02FF9B0F5AB
+S315080055B8FA6F05D338BD8421094800F0F5F8E3E702
+S315080055C84FF4FA6000F01CF9F4E700BF600B0020FE
+S315080055D8A40B0020E80B002074000020100000200F
+S315080055E8608A000810B5044CD4F8C002FCF71DFD03
+S315080055F82046FEF792FE10BDE80B002070B5064659
+S315080056080D463F2906D82846FFF74CFF012806D13C
+S3150800561800240BE0B5210D4800F0C6F8F3E7B921D8
+S315080056280A4800F0C1F8F3E70134A4B2ABB2A342C2
+S315080056380BD900F0CBF9305DFFF734FF0128F3D01A
+S31508005648C221024800F0B0F8EEE770BD608A00088B
+S3150800565870B506460D461F4BD3F8C002FCF70EFD7B
+S315080056681D4B1C789CB91D48FFF75AFF012801D025
+S31508005678204670BD194B1B78013BDBB23E2BF7D889
+S31508005688154B01221A70164B00221A70F0E7144BB4
+S315080056981B78013311481844FFF742FF04460128CE
+S315080056A801D00024E4E70E4B1A780132D2B21A70F8
+S315080056B80A4B1B789A4201D00024D9E70949304693
+S315080056C8FFF7E8FB044B00221A70054B1B782B7072
+S315080056D8CEE700BFE80B0020EC0E0020AC0E002039
+S315080056E8ED0E0020AD0E002030B583B0144B1878A7
+S315080056F8FFF720FF08B30546402800D940250024AF
+S3150800570805E09DF807200F4B1A550134E4B2A54267
+S315080057180DD90DF107010A4B1878FFF7CDFE0128B8
+S31508005728EFD04FF4A171084800F03EF8E9E7ABB2AC
+S31508005738044A8121054803F0BFF803B030BD00BF0D
+S31508005748600B0020EC0A0020608A0008E80B00209D
+S3150800575870B5044602F010FF064621460F4803F0C6
+S31508005768BBF885B2002401E00134A4B2AC420CD2DD
+S31508005778315D0B4B1878FFF75DFE0128F4D04FF41E
+S31508005788B271084800F010F8EEE702F0F5FE024696
+S3150800579840230121014803F097F870BDE80B002063
+S315080057A8A40B0020608A000808B500F00FF9FCE78A
+S315080057B808B500F001F9012806D000F0A1F918B1DA
+S315080057C80C4B1B78012B00D008BDFFF7F7FD0A4BD9
+S315080057D81B680A4A1268134403F5FA739842F3D306
+S315080057E8044B00221A7000F095F90028ECD1FFF74F
+S315080057F831FBE9E7F40E0020F00E0020F80E002031
+S31508005808014B1860704700BFF00E0020014B18685E
+S31508005818704700BFF00E002008B5054B1B78012B12
+S3150800582800D008BDFFF7CAFD024B1860F9E700BFAC
+S31508005838F40E0020F80E002008B5044B01221A7051
+S31508005848FFF7EAFFFFF7B4FF08BD00BFF40E002014
+S3150800585808B5FFF7FBFA00F0B5F8FFF78FFDFFF775
+S31508005868B5FC00F035F900F00FF8FFF7E5FF08BDBD
+S3150800587808B500F0ABF8FFF793FD00F049FA00F019
+S3150800588817F8FFF795FF08BD10B500F005FEFFF7F6
+S3150800589847FA064C01232370FFF7D8FC0023237028
+S315080058A8FFF75EFE0223237010BD00BF0D0000201F
+S315080058B800B583B00DF107011848FFF7ADFA0128BE
+S315080058C810D00DF107011548FFF7FAFC012812D088
+S315080058D80DF107011148FFF7BBFE012814D003B0E4
+S315080058E85DF804FB0E4B01221A709DF807100B4849
+S315080058F800F0F4FDE5E70A4B00221A709DF8071038
+S31508005908064800F0EBFDE3E7054B02221A709DF8FE
+S315080059180710024800F0E2FDE1E700BFFC0E002090
+S315080059280D00002008B5FFF75DFE08BD38B504462A
+S315080059380D460E4B1B78012B09D00C4B1B7853B11F
+S315080059480A4B1B78022B0BD000F0C0FD38BDC9B234
+S31508005958FFF73CFAF1E7E9B22046FFF795FCEFE7CF
+S31508005968E9B22046FFF74AFEEEE700BF0D00002021
+S31508005978074B1B78022B07D0032B07D0012B01D026
+S3150800598881207047082070473F20704700207047DD
+S315080059980D000020074B1B78022B07D0032B07D0D6
+S315080059A8012B01D081207047082070473F20704797
+S315080059B8002070470D00002008B500F07FFD00B1F3
+S315080059C8012008BD08B5FAF721FC08BD08B5FAF79D
+S315080059D822FC08BD00F00F0202F13003092802D99B
+S315080059E802F137007047054A9A5C02F00302022A58
+S315080059F801D0D8B27047203BFBE700BF3A910008B0
+S31508005A0838B505460C460009FFF7E4FF207005F08F
+S31508005A180F00FFF7DFFF60700023A370204638BD2C
+S31508005A2810B4024608461346013019460D4CA4FB25
+S31508005A380343DB080929F7D800230370094BA3FB9E
+S31508005A480213DB08194603EB8303A2EB430330333F
+S31508005A5800F8013D13460A46092BEFD85DF8044BB2
+S31508005A68704700BFCDCCCCCC844600210846012916
+S31508005A782AD800B509E0203B0FE00301DBB213443E
+S31508005A88D8B20131C9B201291AD81CF801300F4A0F
+S31508005A989A5C02F00302022AEDD0DBB2A3F13002C7
+S31508005AA8D2B2162A0BD8A3F13A0E5FFA8EFEBEF1C9
+S31508005AB8060F07D9092AE0D9373BDAB2DDE700200D
+S31508005AC85DF804FB0020FBE7704700BF3A91000821
+S31508005AD808B50022064B1A700649074801F08AFFDE
+S31508005AE800B908BD77210548FFF75EFEF9E700BF4C
+S31508005AF8E01300209C8A0008880F0020A08A000866
+S31508005B08034B1B780BB1002070470120704700BF74
+S31508005B18E013002010B5FFF74FFF01280ED0084BF9
+S31508005B281C7814B10024204610BDFAF779FB012821
+S31508005B38F9D1034B01221A700446F4E70024F2E768
+S31508005B48E01300200378114A9A5C02F00302022A3D
+S31508005B580FD0532B0FD143780C4A9A5C12F0040FD6
+S31508005B680BD0312B0BD0322B0BD0332B0BD0032079
+S31508005B787047203BEDE70320704703207047002055
+S31508005B887047012070470220704700BF3A91000805
+S31508005B9870B506460230FFF767FF054684B2043635
+S31508005BA83046FFF761FF0544EDB2013CA4B2023660
+S31508005BB8012CF5D8ED43EDB23046FFF755FFA8425C
+S31508005BC801D1012070BD0020FCE700002DE9F04155
+S31508005BD8044617460E46B1B1A8B12046FFF7B2FFEC
+S31508005BE80546032800F08D802046FFF7D1FF0028D8
+S31508005BF800F08980012D2DD0022D53D04DB10025F6
+S31508005C082846BDE8F08140F263214048FFF7CCFDFD
+S31508005C18E3E7A01CFFF728FF1FFA80F8201DFFF707
+S31508005C2823FF05023560A01DFFF71EFF05443560F2
+S31508005C380834A8F103052DB2002FE1D0002606E0A6
+S31508005C482046FFF711FFB85502340136B6B2AE4200
+S31508005C58F6DBD5E7A01CFFF707FF1FFA80F8201D1B
+S31508005C68FFF702FF05043560A01DFFF7FDFE05EBEB
+S31508005C780025356004F10800FFF7F6FE054435608F
+S31508005C880A34A8F104052DB2002FB9D0002606E07B
+S31508005C982046FFF7E9FEB85502340136B6B2AE42D9
+S31508005CA8F6DBADE7A01CFFF7DFFE1FFA80F8201D1C
+S31508005CB8FFF7DAFE05063560A01DFFF7D5FE05EBEA
+S31508005CC80045356004F10800FFF7CEFE05EB002510
+S31508005CD8356004F10A00FFF7C7FE054435600C3441
+S31508005CE8A8F105052DB2002F8AD0002606E0204621
+S31508005CF8FFF7BAFEB85502340136B6B2AE42F6DB3D
+S31508005D087EE700257CE74FF0FF3579E7A08A00088B
+S31508005D18B54B1B78002B00F0F58170B5012B05D023
+S31508005D28022B30D0032B00F0208170BDFFF74EFA06
+S31508005D38FAF796FAAD48FAF7C7FAAD48FAF7C4FA81
+S31508005D48FAF78AFA01460122AA4801F07FFE80B9C5
+S31508005D58A948FAF7B9FAA948FAF7B6FAA848FAF725
+S31508005D68B3FAA84B00221A605A609F4B02221A708F
+S31508005D78DBE79D4B00221A70A348FAF7A5FA01201B
+S31508005D88FAF794FAD1E7A14C04F50C724FF480712E
+S31508005D989F4802F0BBFA94F84132002B5DD1A8B1AE
+S31508005DA89B48002200F5C071FFF710FF0446B0F1C2
+S31508005DB8FF3F60D0002809DD924B5B68002B67D14E
+S31508005DC8934BD3F880218F4B1A6058608F4BD3F8C2
+S31508005DD84422D3F83C329A42A7D10021854802F0DA
+S31508005DE847F9002840F0A780864B5B6873B382485A
+S31508005DF8FAF76AFA8748FAF767FA874D814C294607
+S31508005E086068FFF70DFE2846FAF75EFA8348FAF740
+S31508005E185BFA2946E078FFF7F3FDA91CA078FFF797
+S31508005E28EFFD291D6078FFF7EBFDA91D2078FFF720
+S31508005E38E7FD2846FAF748FA7948FAF745FA61680D
+S31508005E482068FFF7CBF9002800F082806A48FAF73D
+S31508005E583BFA654B03221A7067E7634B00221A70F0
+S31508005E686948FAF731FA0220FAF720FA04F50C70AD
+S31508005E7802F0EEF859E75C4B00221A706248FAF706
+S31508005E8823FA0320FAF712FA5A4802F0E1F84CE71F
+S31508005E985F4AD2F880115B4A12681A44914203D1C4
+S31508005EA80344584A536091E75348FAF70DFA594894
+S31508005EB8FAF70AFA584E534D31466868FFF7B0FDA7
+S31508005EC83046FAF701FA5548FAF7FEF93146E878FE
+S31508005ED8FFF796FDB11CA878FFF792FD311D687883
+S31508005EE8FFF78EFDB11D2878FFF78AFD3046FAF7C9
+S31508005EF8EBF94B48FAF7E8F969682868FFF76EF985
+S31508005F0860B13D48FAF7E0F93D48FAF7DDF9404B44
+S31508005F18D3F880213B4B1A605C6057E7324B002266
+S31508005F281A703948FAF7D0F90520FAF7BFF931484F
+S31508005F3802F08EF8F9E62C4B00221A703248FAF766
+S31508005F48C3F90420FAF7B2F92A4802F081F8ECE610
+S31508005F58254B00221A702C48FAF7B6F90520FAF7E5
+S31508005F68A5F9244802F074F8DFE6284C04F50C7203
+S31508005F784FF48071264802F0C9F994F84132002B8B
+S31508005F8856D160B1224800F5807200F5C071FFF756
+S31508005F981DFE0446B0F1FF3F58D0002863DC1B4BB2
+S31508005FA8D3F84422D3F83C329A427FF4BEAE1D4851
+S31508005FB8FAF78AF9FFF71EF9002800F096800E48C6
+S31508005FC8FAF782F91848FAF77FF90A4802F040F80A
+S31508005FD81648FAF779F9044B00221A70FAF754F9B1
+S31508005FE8FEF738FFA1E600BFE0130020D08A0008B4
+S31508005FF8F48A0008B8110020248B00082C8B0008A6
+S31508006008508B0008800F00201C8B0008880F002082
+S31508006018E4130020808B0008681500208C8B000884
+S31508006028308C0008188C0008348C00084C8C000842
+S31508006038354B00221A703548FAF746F90220FAF75E
+S3150800604835F904F50C7002F003F86EE62E4B0022BB
+S315080060581A702F48FAF738F90320FAF727F92D485E
+S3150800606801F0F6FF61E62C48FAF72EF92B4D29467A
+S315080060782046FFF7D5FC2846FAF726F92848FAF7FE
+S3150800608823F9284E294696F88301FFF7B9FCA91C77
+S3150800609896F88201FFF7B4FC291D96F88101FFF7E7
+S315080060A8AFFCA91D96F88001FFF7AAFC2846FAF75F
+S315080060B80BF91D48FAF708F906F580722146D6F84D
+S315080060C88001FFF787F818B11848FAF7FDF866E768
+S315080060D80D4B00221A701648FAF7F6F80620FAF752
+S315080060E8E5F80C4801F0B4FF1FE6074B00221A70C2
+S315080060F80F48FAF7E9F80720FAF7D8F8054801F03B
+S31508006108A7FF12E6704700BFE0130020A88B000817
+S31508006118CC8B0008B8110020F08B00086815002001
+S31508006128008C0008E4130020308C0008248B000833
+S315080061381C8B0008024B002283F88220704700BF98
+S31508006148A8150020034BFE221A7058700222A3F8DD
+S3150800615886207047A81500200378427843EA022368
+S31508006168827843EA0243C07843EA006070470870B9
+S31508006178C0F307234B70C0F307438B70000EC87033
+S315080061887047000010B5064C002384F88130FFF7E5
+S31508006198D1FFFF2323700123A4F8863010BD00BF62
+S315080061A8A8150020074BFF221A7000225A7093F888
+S315080061B882109970DA701A715A710622A3F8862025
+S315080061C8704700BFA815002008B50020FFF7BAFFDA
+S315080061D808BD000010B5094CFF232370084BC4F806
+S315080061E8883000236370A370E370211D0720FFF72A
+S315080061F8BEFF0823A4F8863010BD00BFA8150020E6
+S31508006208788C000810B5064CFF2323700430FFF776
+S31508006218A3FFC4F888000123A4F8863010BD00BF80
+S31508006228A815002008B53120FFF78CFF08BD000027
+S3150800623838B5084CFF23237000256570A570FFF74D
+S3150800624897FBE07025716571A5710723A4F8863058
+S3150800625838BD00BFA815002038B5FFF751FCF8B1BE
+S31508006268FFF768FF104C012584F88150FF23237037
+S315080062780023637010226270A370FFF779FBE07041
+S31508006288FFF788FB2071FFF785FBC0F307206071CD
+S31508006298A571E5710823A4F88630FEF797FF38BD7F
+S315080062A81020FFF74FFFFAE7A815002038B504466F
+S315080062B8FFF75EFB6278904212D90B4DD5F8881025
+S315080062C8681CFEF7E7FDFF232B706278D5F888303F
+S315080062D81344C5F8883063780133A5F8863038BD85
+S315080062E82220FFF72FFFFAE7A815002038B504463D
+S315080062F8FFF73EFB6378984217D9201DFFF72CFF56
+S3150800630801460C4DC5F888006278681CFEF7C2FD80
+S31508006318FF232B706278D5F888301344C5F888307F
+S3150800632863780133A5F8863038BD2220FFF70AFFBF
+S31508006338FAE700BFA8150020F8B505461746002451
+S3150800634806E015F8013B1C44E4B2FFF73FFB31466B
+S315080063584E1E0029F5D13C600120F8BD30B583B042
+S31508006368002501950B4CFF2323700430FFF7F4FE34
+S31508006378014601AAD4F88800FFF7DEFF6070211DE0
+S315080063880198FFF7F4FEA570E5700823A4F886308F
+S3150800639803B030BDA815002038B504460E4BD3F80F
+S315080063A88850FFF7E5FA621C411E2846FEF712FFD9
+S315080063B870B1094CFF232370FFF7DAFA0138D4F8CD
+S315080063C888300344C4F888300123A4F8863038BDD9
+S315080063D83120FFF7B7FEFAE7A815002010B50446DE
+S315080063E8FFF7C6FA01386378984216DD134BFF2281
+S315080063F81A700122A3F88620617891B1A21C0F4B66
+S31508006408D3F88800FEF7E6FE98B161780B4AD2F809
+S3150800641888300B44C2F8883010BD2220FFF792FE58
+S31508006428FAE7FEF7E7FE0028F6D13120FFF78AFEDD
+S31508006438F2E73120FFF786FEEEE700BFA815002031
+S3150800644810B50B4BD3F888400430FFF785FE014694
+S315080064582046FEF7C3FE30B1054BFF221A7001220B
+S31508006468A3F8862010BD3120FFF76CFEFAE700BFB7
+S31508006478A815002008B5FEF7EDFC034BFF221A7095
+S315080064880122A3F8862008BDA815002008B589B2F8
+S31508006498FFF74CFA08BD0000074B002283F8812055
+S315080064A8C3F8882083F88420A3F8862083F88320F5
+S315080064B883F88220704700BFA8150020024B93F87E
+S315080064C8810000B101207047A8150020024B002260
+S315080064D883F88420704700BFA815002008B50378FC
+S315080064E8FF2B24D0354A92F88120012A2BD1C93BA3
+S315080064F8352B53D8DFE803F04052524F52524C43DB
+S31508006508494652525252525252525252525252526A
+S315080065185252525252525252525252525252525245
+S315080065285252312B282E5252523452373A3DFFF7DF
+S3150800653893FE224B93F88430012B33D01F4BB3F9C3
+S315080065488610002932DC08BDFFF7B0FEF1E7FFF731
+S31508006558CDFEEEE7FFF756FEEBE7FFF7FFFEE8E7A7
+S31508006568FFF738FEE5E7FFF72FFEE2E7FFF71AFE23
+S31508006578DFE7FFF707FEDCE7FFF70EFFD9E7FFF7C8
+S315080065882DFFD6E7FFF754FED3E7FFF759FFD0E705
+S31508006598FFF770FFCDE7FFF745FECAE72020FFF7AC
+S315080065A8D1FDC6E71020FFF7CDFDC7E7184601233A
+S315080065B880F88430FFF76AFFC5E700BFA8150020F2
+S315080065C84278007840EA02207047C278837843EA1E
+S315080065D80222437843EA0223007840EA03207047F8
+S315080065E80170090A417070470170C1F307234370A7
+S315080065F8C1F307438370090EC1707047944632B1D8
+S315080066080A78013102700130BCF1010CF8D17047E3
+S3150800661801700130013AFBD1704784469CF80000A6
+S315080066280CF1010C0B780131C01A013A01D0002887
+S31508006638F4D07047034600E00133187808B1884259
+S31508006648FAD1704702394369023B8B4204D9438918
+S31508006658806A01FB030070470020704770B506463C
+S315080066680D4601F11A00FFF7ABFF3378032B00D06C
+S3150800667870BD044605F11400FFF7A2FF44EA00407E
+S31508006688F6E770B506460C46154691B204F11A00A7
+S31508006698FFF7A6FF3378032B00D070BD290C04F149
+S315080066A81400FFF79DFFF8E72DE9F04180460E46EE
+S315080066B801F11A00FFF784FF50BB357805F03F054E
+S315080066C8013D05EB450305EB83050127002404E096
+S315080066D84FF6FF73984220D101340C2C0DD8124B73
+S315080066E8185D3044FFF76CFF002FF1D0FE2D12D845
+S315080066F828F8150007460135EEE7337813F0400FFA
+S315080067080DD0FE2D0DD8002328F81530012000E0FD
+S315080067180020BDE8F0810020FBE70020F9E701200A
+S31508006728F7E70020F5E700BF148D00082DE9F843C0
+S3150800673880460F4691464B730F23CB7200240C7381
+S31508006748214607F11A00FFF74BFF09F1FF3606EB5A
+S31508006758460306EB8306254602E001340C2C11D8BD
+S315080067684FF6FF739D4202D038F8165001360C4B87
+S31508006778185D29463844FFF733FF002DEDD14FF64B
+S31508006788FF75EAE74FF6FF739D4202D038F81630D0
+S315080067980BB949F0400987F80090BDE8F88300BFAF
+S315080067A8148D000870B582B0054616461C460B229D
+S315080067B8FFF724FF052C11D807231FE001310F29FD
+S315080067C80CD803F0010C0CEB44045B0814F4803F66
+S315080067D8F4D084F4883484F02104EFE73388002B56
+S315080067E8EAD002360021EAE75A1E08336B4403F852
+S315080067F8081C21090F2C0AD913460C4604F00F0267
+S3150800680802F130013929EFD902F13701ECE77E2187
+S3150800681802F108036B4403F8081C002300E001335F
+S31508006828934209D2E95C2029F9D105E02020591CB0
+S31508006838E854072909D80B46072AF7D802F10801A8
+S31508006848694411F8080C0132F1E702B070BD014637
+S315080068584FF00B0C0020C30143EA500308780131B6
+S3150800686850FA83F3D8B2BCF1010CF4D1704701464B
+S31508006878006838B1024613781F2B06D93A2B04D07C
+S315080068880132F8E74FF0FF3070473A2B01D0002065
+S31508006898704710B4034613F8010B3038092808D88E
+S315080068A89A4202D04FF0FF3005E038B901320A6043
+S315080068B801E04FF0FF305DF8044B70474FF0FF30AA
+S315080068C8F9E738B50D4640B1044603682BB11A787E
+S315080068D81AB1D9888288914203D000232B600920EF
+S315080068E838BD5878FDF72AFB10F00100F5D1236862
+S315080068F82B60F5E72DE9F041C57815B92846BDE8B6
+S31508006908F0810446C76A00F1300801233A46414631
+S315080069184078FDF765FB0546A0B90023E370236AAE
+S31508006928FB1AA2699342E9D2A67808E0A3691F442C
+S3150800693801233A4641466078FDF752FB013E012E8F
+S31508006948F4D8DBE70125D9E770B5C36A8B4202D1CB
+S315080069580026304670BD04460D46FFF7CBFF0646AF
+S315080069680028F6D101232A4604F130016078FDF79C
+S31508006978EFFA10B101264FF0FF35E562E9E70000A6
+S3150800698838B504460023C3704FF0FF33C362FFF7D8
+S31508006998DBFFE0B9054604F22E20FFF711FE4AF69A
+S315080069A85523984215D104F16600FFF70EFE20F02C
+S315080069B87F40094B98420DD004F18200FFF705FE87
+S315080069C820F07F40044B984204D0022502E00425B3
+S315080069D800E00325284638BD464154002DE9F04F06
+S315080069E885B00D46164600230B60FFF740FF071EC5
+S315080069F8C0F24181B34B53F82740002C00F0408180
+S31508006A082C6006F0FE06237873B16078FDF796FACF
+S31508006A1810F0010508D1002E00F02E8110F0040FA1
+S31508006A2800F02A810A2527E100232370F8B260704E
+S31508006A38FDF7DCF910F0010540F024811EB110F0CD
+S31508006A48040F40F0218100212046FFF799FF02280C
+S31508006A5800F0B3800027042800F01881012800F206
+S31508006A68178104F13B00FFF7ABFDB0F5007F40F056
+S31508006A78118104F14600FFF7A3FD064620B904F183
+S31508006A885400FFF7A2FD0646A66194F84020A270B6
+S31508006A98531EDBB2012B00F2FF8006FB02F894F8BE
+S31508006AA83D90A4F80A90B9F1000F00F0F78009F1B3
+S31508006AB8FF3319EA030F40F0F38004F14100FFF7AA
+S31508006AC87FFD8246208110F00F0F40F0EB8004F11D
+S31508006AD84300FFF775FD834620B904F15000FFF718
+S31508006AE874FD834604F13E00FFF76AFD0246002856
+S31508006AF800F0DA8000EB080303EB1A139B45C0F095
+S31508006B08D580ABEB030BBBFBF9F1CB45C0F0D080C6
+S31508006B1840F6F570814268D84FF0010B4FF6F570CC
+S31508006B28814201D94FF0030B01F10209C4F8149008
+S31508006B38E7613A4422623B44A362BBF1030F57D08C
+S31508006B48BAF1000F00F0BA8042446262BBF1020F44
+S31508006B585FD009EB490309F0010909EB530909F262
+S31508006B68FF19B6EB592FC0F0AB804FF0FF332361FE
+S31508006B78E36080232371BBF1030F4DD084F800B07E
+S31508006B88514A138801339BB21380E38074E00020CE
+S31508006B9804AB03EB860343F8100C0136032E0ED814
+S31508006BA804F13000330103F5DF7318440379002B29
+S31508006BB8EDD00830FFF709FDEAE70026EEE70026DC
+S31508006BC80AE039462046FFF7DBFE01287FF643AF81
+S31508006BD80136032E3FF63FAF04AB03EB860353F8A3
+S31508006BE8107C002FEDD10320F2E74FF0020B95E752
+S31508006BF804F15A00FFF7E4FC00285BD1BAF1000F4C
+S31508006C085AD104F15C00FFF7E0FC60624FEA890993
+S31508006C18A5E74FEA4909A2E704F16000FFF7D0FCA7
+S31508006C280128ABD1791C2046FFF78EFE0028A5D18E
+S31508006C380023237104F22E20FFF7C2FC4AF65523D7
+S31508006C4898429BD104F13000FFF7BFFC1F4B9842CE
+S31508006C5894D104F50570FFF7B8FC1D4B98428DD101
+S31508006C6804F50670FFF7B1FC206104F50770FFF715
+S31508006C78ACFCE06082E70B25284605B0BDE8F08F36
+S31508006C880C25F9E70325F7E70A25F5E70125F3E7CC
+S31508006C980D25F1E70D25EFE70D25EDE70D25EBE7C2
+S31508006CA80D25E9E70D25E7E70D25E5E70D25E3E7D2
+S31508006CB80D25E1E70D25DFE70D25DDE70D25DBE7E2
+S31508006CC80D25D9E73416002038160020525261419E
+S31508006CD872724161F8B50668012954D90C46736978
+S31508006CE88B4252D93378022B2DD0032B3AD0012B5D
+S31508006CF801D0012048E001EB5105316A01EB552125
+S31508006D083046FFF721FE10B14FF0FF303CE06F1C0C
+S31508006D18C5F30805354495F83050316A01EB572113
+S31508006D283046FFF711FE90BBC7F308073E4496F8AE
+S31508006D38300045EA002014F0010F01D0000923E0CD
+S31508006D48C0F30B0020E0316A01EB14213046FFF747
+S31508006D58FBFDF8B9600000F4FF7030303044FFF7E7
+S31508006D682FFC11E0316A01EBD4113046FFF7ECFD30
+S31508006D7898B9A00000F4FE7030303044FFF725FCBF
+S31508006D8820F0704000E00120F8BD0120FCE74FF034
+S31508006D98FF30F9E74FF0FF30F6E74FF0FF30F3E73B
+S31508006DA82DE9F041D0F80080B1F5001F40D206461B
+S31508006DB80F4611F01F0F3DD1016184682CB998F868
+S31508006DC80030022B01D9D8F82440B4B9B8F80830ED
+S31508006DD8B3EB571F30D9D8F82430B3617461B36957
+S31508006DE893B303EB5723B36108F13003C7F30801DC
+S31508006DF81944F1610020BDE8F081B8F80A506D021F
+S31508006E08AF420FD321463046FFF764FF0446B0F178
+S31508006E18FF3F13D0012813D9D8F81430834211D963
+S31508006E287F1BEDE721464046FFF70CFCB061D5E726
+S31508006E380220E0E70220DEE70220DCE70120DAE7A5
+S31508006E480220D8E70220D6E70220D4E72DE9F8433E
+S31508006E58012940F2818005460C46164643698B424D
+S31508006E687CD90378022B49D0032B5AD0012B03D09F
+S31508006E7802273846BDE8F88301EB5108016A01EB99
+S31508006E885821FFF761FD07460028F2D108F10109E4
+S31508006E98C8F3080814F0010423D005EB080393F98E
+S31508006EA8303003F00F03320102F47F621343DBB27A
+S31508006EB8A84488F830300123EB70296A01EB592178
+S31508006EC82846FFF741FD07460028D2D1C9F3080925
+S31508006ED84CB1C6F30712A94489F830200123EB7090
+S31508006EE8C7E7F3B2E4E705EB090393F9302022F084
+S31508006EF80F02C6F303263243D2B2ECE7016A01EB66
+S31508006F081421FFF721FD07460028B2D1600000F4D6
+S31508006F18FF703030B1B22844FFF762FB0123EB70EB
+S31508006F28A7E7016A01EBD411FFF70EFD074600280B
+S31508006F389FD126F07046A40004F4FE7430342C441D
+S31508006F482046FFF742FB00F0704131432046FFF721
+S31508006F584BFB0123EB708CE702278AE7022788E7B1
+S31508006F682DE9F041054606680F4651B9D6F80C8052
+S31508006F78B8F1000F12D07369434511D84FF00108CC
+S31508006F880EE0FFF7A7FE0346012847D9B0F1FF3FF1
+S31508006F9849D07269824246D8B84601E04FF00108DE
+S31508006FA844460CE021462846FFF794FE034678B186
+S31508006FB8012838D0B0F1FF3F35D0444532D00134E6
+S31508006FC87369A342EED8B8F1010F29D90224E9E773
+S31508006FD84FF0FF3221463046FFF738FF034600B91F
+S31508006FE877B9A3B9F46032697369023B9A4201D248
+S31508006FF8013A3261337943F001033371234612E0CB
+S31508007008224639463046FFF721FF0346E9E7012BB2
+S3150800701801D0012307E04FF0FF3304E0012302E023
+S31508007028002300E000231846BDE8F081F8B50C46B1
+S31508007038056801292ED9064611466B69A3422BD93C
+S3150800704882B14FF0FF322846FFF700FF024648B1E3
+S3150800705823E001332B612B7943F001032B716B690C
+S31508007068A3421AD9274621463046FFF733FE044677
+S31508007078A8B1012815D0B0F1FF3F14D0002239462F
+S315080070882846FFF7E3FE024638B92B69B3F1FF3FF6
+S31508007098DFD1E4E7022200E002221046F8BD00220A
+S315080070A8FBE70222F9E70122F7E72DE9F047076827
+S315080070B805698369002B6CD0044688462035B5F5E2
+S315080070C8001F68D2C5F308063EB9013383614169D2
+S315080070D879B93B89B3EB551F07D9256106F1300302
+S315080070E83B44E3610020BDE8F08700238361042060
+S315080070F8F9E77B89013B13EA5529EED1FFF7EAFD43
+S315080071088246012849D9B0F1FF3F48D07B698342B6
+S3150800711837D8B8F1000F11D061692046FFF720FF6C
+S31508007128824600283DD001283DD0B0F1FF3F3CD02B
+S315080071383846FFF7DFFB28B10120D4E70023A3610F
+S315080071480420D0E74FF40072002107F13000FFF75A
+S315080071585FFA51463846FFF775FAF8627B8999450A
+S315080071680BD20123FB703846FFF7C4FBF8B909F1BF
+S315080071780109FB6A0133FB62F0E7FB6AA3EB090323
+S31508007188FB62C4F814A051463846FFF75BFAA061BB
+S31508007198A3E70420A7E70420A5E70220A3E7012020
+S315080071A8A1E707209FE702209DE701209BE701202A
+S315080071B899E7F8B504460E4607680021FFF7F0FD7B
+S315080071C80246C0B9002508E00135B54213D00121A9
+S315080071D82046FFF76AFF024668B9A1693846FFF7ED
+S315080071E8B3FB024638B9E3691B78E52BECD0002BCC
+S315080071F8EAD00025EBE7042A01D01046F8BD072295
+S31508007208FBE72DE9F8430446884607684FF0FF0967
+S315080072184E4604252EE00F2B19D112F0400F06D042
+S3150800722891F80D9002F0BF02236963621646B242CE
+S3150800723801D0FF2618E04B7B4B4501D0FF2613E00B
+S31508007248A06AFFF731FA88B3013EF6B20CE026B910
+S315080072580846FFF7FCFA48452BD04FF0FF33636220
+S3150800726827E0FF2600E0FF2600212046FFF71DFF3E
+S315080072780546F0B9A169E1B13846FFF765FB054649
+S31508007288B8B9E1690A789AB1CB7A03F03F03A371D2
+S31508007298E52AE6D02E2AE6D023F02000082814BFCF
+S315080072A8002001204045B6D0FF26DDE7FF26DBE7AC
+S315080072B804250DB10023A3612846BDE8F88370B5F7
+S315080072C8044605680669416AB1F1FF3F18D1A16904
+S315080072D82846FFF739FB034670B9E269E5211170BC
+S315080072E80122EA702269B24206D200212046FFF737
+S315080072F8DCFE03460028EAD0042B07D0184670BDE2
+S31508007308FFF74EFD03460028F8D1E0E70223F5E724
+S315080073182DE9F04F83B007468A46D1F80090856A6A
+S315080073280024234613E0013609EB060219F806304D
+S315080073382F2BF8D05C2BF6D0CAF800201F2823D8A4
+S315080073484FF0040824E025F81480013433465E1CFF
+S3150800735819F803001F28E7D92F28E5D05C28E3D0B9
+S31508007368FE2C00F2DD80012101F024F88046002871
+S3150800737800F0D8807F28E6D801466C48FFF75AF906
+S315080073880028E0D0062084E04FF0000800E0013C21
+S3150800739844B104F10043013B35F81330202BF6D0ED
+S315080073A82E2BF4D0002325F81430002C00F0BC80CE
+S315080073B80B222021386AFFF72BF9002300E0013356
+S315080073C835F81320202AFAD02E2AF8D01BB148F00F
+S315080073D8030800E0013C6CB104F10042013A35F8B3
+S315080073E812202E2AF6D14FF0080B4FF0000ACDF8D6
+S315080073F804A00AE0A2464FF0080B0022019204E016
+S315080074084C450BD048F003084B4603F1010935F8FB
+S315080074181360F6B1202EF5D02E2EF1D0DA450FD20C
+S315080074284C450DD07F2E44D8002E4FD148F003087E
+S315080074385F263B6A03F80A604B460AF1010AE4E745
+S31508007448BBF10B0F28D04C4501D048F003084C4532
+S3150800745825D23B6A1A78E52A54D0BBF1080F54D0CE
+S31508007468019B03F00C020C2A03D003F00303032B39
+S3150800747801D148F0020818F0020F06D1019B03F063
+S315080074880303012B46D0042A47D03B6A83F80B80AE
+S31508007498002003B0BDE8F08F48F00308D9E7019B40
+S315080074A89B00DBB2019323464FF00B0B4FF0080AFB
+S315080074B8ABE70021304600F07DFF064618B1A0F17B
+S315080074C880061B4B9E5D48F00208ADE73146194811
+S315080074D8FFF7B0F80028A9D1A6F141039BB2192BEA
+S315080074E804D8019B43F002030193A2E7A6F16103BE
+S315080074F89BB2192B9DD8019B43F001030193203EAB
+S31508007508B6B296E705221A70A7E7019B9B00DBB27D
+S315080075180193A5E748F01008B5E748F00808B4E766
+S315080075280620B6E70620B4E70620B2E7808C0008EE
+S31508007538948C00088C8C0008F8B500238B75836931
+S31508007548002B6AD006460D46436AB3F1FF3F12D0B0
+S31508007558846A002734F8020B50B1002100F02AFF8C
+S3150800756828B1FE2F0BD8EA1990750137F2E70027DC
+S315080075782F440023BB75AC7D0022134612E0002772
+S31508007588F6E7E52317E014B9A8182E278775A8186B
+S315080075982E274772013210E010201CE0A8188375C0
+S315080075A801320B460A2B1BD8F069591CC35C202BE1
+S315080075B8F7D0052BE5D00929E5D0A8184372002C81
+S315080075C8EED1A3F14100C0B21928E7D8F069077BC4
+S315080075D80829E1D808200742E0D02033DBB2DDE7E6
+S315080075E834B9AB1800219975F3691B7B03B90A46A8
+S315080075F82A4400235372F369DB7A2B72F0691C302C
+S31508007608FEF7E3FF2860F0691830FEF7D9FFA8806F
+S31508007618F0691630FEF7D4FFE880F8BD2DE9F04783
+S3150800762881460F4601F11A00FEF7CAFFC8BB3E7825
+S3150800763806F03F06013E06EB460306EB83064FF0C7
+S315080076480108002506E000202CE04FF6FF73984253
+S315080076582AD101350C2D18D8174B585D3844FEF732
+S31508007668AFFF0446B8F1000FEFD0FE2EEBD800F0B6
+S31508007678BFFE804606F1010A39F8160000F0B8FE82
+S315080076888045E0D1A0465646E3E73B7813F0400F1D
+S315080076980CD0B8F1000F0BD039F8163053B90120C1
+S315080076A800E00020BDE8F0870020FBE70120F9E7A5
+S315080076B80120F7E70020F5E7148D00082DE9F843BF
+S315080076C80446D0F800800021FFF76AFB0646002822
+S315080076D85ED14FF0FF3363624FF0FF094F460AE069
+S315080076E84FF0FF336362FF2700212046FFF7DDFCD2
+S315080076F8064600284CD1A1694046FFF725F90646F3
+S31508007708002845D1E5692B78002B40D0E97A01F0A5
+S315080077183F02A271E52BE3D011F0080F01D00F2A1A
+S31508007728DED10F2A14D027B92846FFF790F848451E
+S315080077382ED0216ACB7A13F0010F04D10B222846E2
+S31508007748FEF76BFF20B34FF0FF336362FF27CBE7E3
+S31508007758A06A0028C8D013F0400F06D095F80D90F7
+S3150800776803F0BF03226962621F46BB4201D0FF27A6
+S31508007778BAE76B7B4B4501D0FF27B5E72946FFF7E4
+S315080077884DFF10B1013FFFB2AEE7FF27ACE704266D
+S315080077983046BDE8F88330B583B0044601910568DC
+S315080077A801E001330193019B1A782F2AF9D05C2A44
+S315080077B8F7D00022A2601B781F2B1DD901A92046E5
+S315080077C8FFF7A6FD0346F8B92046FFF777FF236AB1
+S315080077D8DA7A0346D8B912F0040F15D1A37913F04B
+S315080077E8100F1BD02169C1F30801303129442846F6
+S315080077F8FEF734FFA060E1E7236A8022DA720021E7
+S315080078082046FFF7CDFA0346184603B030BD0428CC
+S31508007818FAD112F0040FF7D10523F5E70523F3E7A4
+S315080078282DE9F04784B00768D0F820A0D0F828904A
+S315080078389AF80B3013F0A00F40F08E800646002405
+S3150800784800E0013439F81430002BFAD10C225146DD
+S3150800785801A8FEF7D3FE9DF80F3013F0010F1FD0CD
+S3150800786800238AF80B30B362012500E00135632D41
+S315080078780BD82B464A4601A95046FEF793FF3046D1
+S31508007888FFF71CFF80460028F0D0642D67D0B8F1B2
+S31508007898040F1DD19DF80F308AF80B30C6F82890CA
+S315080078A89DF80F3013F0020F06D00C342D4BA3FBAE
+S315080078B80434A408013400E0012421463046FFF7C1
+S315080078C878FC804608B9013C06D1B8F1000F29D0E2
+S315080078D8404604B0BDE8F0873169A1EB441130464B
+S315080078E8FFF75EFA80460028EFD1306AFEF7AFFF49
+S315080078F80546B1693846FFF727F880460028E4D1D7
+S315080079082B46E2B2F169B06AFEF710FF0123FB7055
+S3150800791800213046FFF7C9FB80460028D5D1013C2F
+S31508007928E7D1D2E7B1693846FFF70EF8804600284E
+S31508007938CED120220021F069FEF76AFE0B22316AB1
+S31508007948F069FEF75BFE336ADB7AF26903F018031F
+S3150800795813730123FB70BBE74FF00608B8E74FF02F
+S315080079680708B5E74FECC44E70B50446FEF7C2FFE4
+S31508007978054648B92378032B08D0002211466078B3
+S31508007988FCF788FB00B10125284670BD2379012B31
+S31508007998F3D104F130064FF4007200213046FEF7A1
+S315080079A837FE4AF6552104F22E20FEF719FE0F492E
+S315080079B83046FEF719FE0E4904F50570FEF714FE63
+S315080079C8216904F50670FEF70FFEE16804F50770ED
+S315080079D8FEF70AFEE2690132E2620123314660785F
+S315080079E8FCF7FEFA00232371C7E700BF525261412C
+S315080079F87272416110B584B00190009114460391E2
+S31508007A0803A8FEF734FF002819DB0F4B53F820307C
+S31508007A180BB100221A70019B0BB100221A70019B48
+S31508007A28094A42F8203063B1012C02D0002004B07C
+S31508007A3810BD002201A96846FEF7D0FFF7E70B201C
+S31508007A48F5E70020F3E700BF341600202DE9F043D8
+S31508007A5893B00191002800F0AE801446064600232C
+S31508007A68036002F01F073A4606A901A8FEF7B6FF03
+S31508007A78054618B1284613B0BDE8F083069B079358
+S31508007A8803AB0F934D4B1193019907A8FFF783FE94
+S31508007A98054620B90F9B93F90B30002B45DB14F0EC
+S31508007AA81C0F53D0002D47D0042D40D047F00807A7
+S31508007AB8002D5AD117F0080F57D0414C21460E9879
+S31508007AC80E30FEF791FD21460E981630FEF78CFD0E
+S31508007AD80E9B2022DA72DDF81880DDF838904946C0
+S31508007AE84046FEF7BBFD0446002249464046FEF7D7
+S31508007AF8C8FD00210E981C30FEF776FD069B01226C
+S31508007B08DA7094B3069BD3F82C800022214607A87E
+S31508007B18FFF78CFA054640BB41460698FEF714FF60
+S31508007B280546013C069BDC601FE00625B7E707A863
+S31508007B38FFF776FE0546B9E79DF8223013F0110FD0
+S31508007B4812D114F0040FB3D008250EE06DB99DF8CC
+S31508007B58223013F0100F2CD114F0020F05D013F0B1
+S31508007B68010F02D007250BE007254DB917F0080FB6
+S31508007B7801D047F02007069BDB6A33620E9B7362C7
+S31508007B88002D7FF477AF069CDDF8388041462046FD
+S31508007B98FEF764FDB06008F11C00FEF716FDF060FC
+S31508007BA8002373747361F36137743460E388B380B0
+S31508007BB860E70425E4E709255CE700BF3C160020D2
+S31508007BC8000061482DE9F04F85B004460E46174671
+S31508007BD898460023C8F8003003A9FEF772FE0190FC
+S31508007BE8002840F0B580637C0193002B40F0B080F4
+S31508007BF8237C13F0010F00F0BD80E5686369ED1A70
+S31508007C08BD4268D33D4666E0A1692046FFF762F89B
+S31508007C1871E04FF0020A84F811A0CDF804A097E0A5
+S31508007C284FF0010A84F811A0CDF804A090E04FF0AF
+S31508007C38020A84F811A0CDF804A089E0237C13F081
+S31508007C48400F04D0E069A0EB0900504502D34FEA7B
+S31508007C584A2736E04FF4007204F1280106EB402063
+S31508007C68FEF7CCFCF3E7E2694A451AD0237C13F001
+S31508007C78400F0CD0012304F128019BF80100FCF7FA
+S31508007C88AFF9002868D1237C23F040032374012325
+S31508007C984A4604F1280103984078FCF759F9002860
+S31508007CA861D1C4F81C906169C1F30801C1F5007770
+S31508007CB8BD4200D22F4628313A4621443046FEF7BF
+S31508007CC89DFC3E4463693B446361D8F800303B44F5
+S31508007CD8C8F80030ED1B002D3AD06369C3F30802D3
+S31508007CE8002AE0D1039A5789013F17EA532708D192
+S31508007CF8002B89D1A06801288BD9B0F1FF3F8FD016
+S31508007D08A061DDF80CB0A1695846FEF79BFC8146D0
+S31508007D1800288CD0B9444FEA552AB5F5007FA2D376
+S31508007D2807EB0A03BBF80A20934201D9A2EB070A14
+S31508007D3853464A4631469BF80100FCF709F90028DC
+S31508007D483FF47CAF4FF0010A84F811A0CDF804A0DF
+S31508007D58019805B0BDE8F08F4FF0010A84F811A024
+S31508007D68CDF804A0F4E74FF0010A84F811A0CDF87D
+S31508007D7804A0EDE707230193EAE72DE9F04F85B05C
+S31508007D8804460E46154698460023C8F8003003A947
+S31508007D98FEF797FD0190002840F0CC80637C01939C
+S31508007DA8002B40F0C780237C13F0020F00F0DC801C
+S31508007DB86369EB4274D3DD4372E000212046FFF77E
+S31508007DC8CFF880E0A1692046FFF7CAF87BE04FF0B4
+S31508007DD8020A84F811A0CDF804A0ABE04FF0010A16
+S31508007DE884F811A0CDF804A0A4E00123E26904F1FF
+S31508007DF8280103984078FCF7F3F820B9237C23F088
+S31508007E08400323746FE04FF0010A84F811A0CDF8F7
+S31508007E1804A08FE04FF0020A84F811A0CDF804A058
+S31508007E2888E0E169A1EB0901514502D34FEA4A27DF
+S31508007E3827E04FF4007206EB412104F12800FEF70B
+S31508007E48DDFB237C23F040032374EFE7E3694B4506
+S31508007E5803D06269E3689A4270D3C4F81C906069D3
+S31508007E68C0F30800C0F50077BD4200D22F46283077
+S31508007E783A4631462044FEF7C1FB237C43F04003CB
+S31508007E8823743E4463693B446361E268934238BF9E
+S31508007E981346E360D8F800303B44C8F80030ED1BB9
+S31508007EA8002D5CD06369C3F30802002AD7D1039A68
+S31508007EB85789013F17EA532711D1002B82D1A068A9
+S31508007EC800283FF47AAF002849D001283FF47FAF4D
+S31508007ED8B0F1FF3F82D0A061A36803B9A060237CF4
+S31508007EE813F0400F81D1DDF80CB0A1695846FEF7AA
+S31508007EF8A9FB814600288DD0B9444FEA552AB5F51D
+S31508007F08007FA3D307EB0A03BBF80A20934201D9DB
+S31508007F18A2EB070A53464A4631469BF80100FCF786
+S31508007F285FF800283FF47DAF4FF0010A84F811A0E6
+S31508007F38CDF804A0019805B0BDE8F08F01234A469C
+S31508007F4804F128019BF80100FCF702F8002884D000
+S31508007F584FF0010A84F811A0CDF804A0EAE7237CBB
+S31508007F6843F020032374E5E707230193E2E770B596
+S31508007F7882B004460D460A290DD06368002B08DB33
+S31508007F885E1C23441D733C2E09DC6660A368013316
+S31508007F98A36002B070BD0D21FFF7E9FFEDE72146A2
+S31508007FA851F80C0B01AB3246FFF7E7FE019B9E42E0
+S31508007FB802D04FF0FF36E8E70026E6E730B583B08B
+S31508007FC8044601A9FEF77DFCC0B9237C13F0200FEF
+S31508007FD814D013F0400F0CD00123E26904F12801EC
+S31508007FE801984078FBF7FCFF70BB237C23F040031D
+S31508007FF82374216A0198FEF7A7FC08B103B030BDBF
+S31508008008656AEB7A43F02003EB72A2682946206872
+S31508008018FEF737FBE16805F11C00FEF7E5FA0B49A0
+S3150800802805F11600FEF7E0FA002105F11200FEF741
+S31508008038D7FA019B0122DA700198FFF795FC237C91
+S3150800804823F020032374D9E70120D7E70000614805
+S3150800805810B582B00446FFF7B1FF08B102B010BDEB
+S3150800806801A92046FEF72DFC0028F7D12060F5E780
+S315080080782DE9F04182B004460D4601A9FEF721FC18
+S315080080888046002856D194F81180B8F1000F51D1CE
+S31508008098E368AB4204D2227C12F0020F00D11D46D7
+S315080080A8666900236361CDB1019B5F897F026EB162
+S315080080B86B1EB3FBF7F3013EB6FBF7F2934205D303
+S315080080C87B421E406661AE1BA56905E0A0680028CC
+S315080080D834D0A0612E460546002D57D16369C3F3EF
+S315080080E80803F3B1E269AA421BD0237C13F0400FB8
+S315080080F80CD0012304F1280101984078FBF770FF9A
+S31508008108002870D1237C23F04003237401232A46D0
+S3150800811804F1280101984078FBF71AFF002867D16F
+S31508008128E5616369E268934204D9E360237C43F016
+S3150800813820032374404602B0BDE8F081002120469A
+S31508008148FEF70EFF012804D0B0F1FF3F06D0A06065
+S31508008158BFE74FF0020884F81180EBE74FF00108F3
+S3150800816884F81180E6E729462046FEF7B3FD05465A
+S31508008178B5F1FF3F26D0012D29D9019B5B69AB4292
+S3150800818825D9A56163693B446361F61BBE420BD9D1
+S31508008198237C13F0020FE6D029462046FEF7E0FEB8
+S315080081A805460028E4D13E46636933446361C6F34D
+S315080081B80803B3B129460198FEF744FA60B100EB03
+S315080081C856258BE74FF0010884F81180B2E74FF07F
+S315080081D8020884F81180ADE74FF0020884F8118088
+S315080081E8A8E71D467AE74FF0010884F81180A1E749
+S315080081F84FF0010884F811809CE7000030B591B06B
+S3150800820801900C46002205A901A8FEF7E7FB0546DA
+S3150800821810B1284611B030BD02AB0D930B4B0F9326
+S31508008228019905A8FFF7B7FA05460028F1D10D9B6D
+S3150800823893F90B30002B06DB002CEAD0214605A85B
+S31508008248FFF77AF9E5E70625E3E700BF3C160020BD
+S31508008258F0B59DB00190022205A901A8FEF7BEFB5C
+S31508008268059B1193044610B120461DB0F0BD02AB1C
+S315080082781993254B1B93019911A8FFF78CFA044605
+S315080082880028F1D1199B93F90B30002B1EDB9DF8BA
+S315080082984A6016F0010F2AD1059F18993846FEF745
+S315080082A8DDF9054616F0100F12D00697089000213A
+S315080082B806A8FEF775FD044650B9002106A8FEF77C
+S315080082C8A0FF0446B0B1042802D103E0002506241D
+S315080082D8002CC9D111A8FEF7F2FF044600B95DB90A
+S315080082E8002CC1D10598FFF73FFB0446BCE70025DB
+S315080082F80724EDE70724EBE70022294611A8FEF72D
+S3150800830895FE0446ECE700BF3C1600202DE9F0412F
+S3150800831882B080460E4617460446002501E0A44664
+S315080083286446731EAB4213DD6B46012201A9384623
+S31508008338FFF748FC009B012B0AD19DF804300D2B4A
+S31508008348EDD0A4460CF8013B01350A2BE8D1644662
+S31508008358002323701DB1404602B0BDE8F081002015
+S31508008368FAE710B594B004460191002302930393E3
+S3150800837803E0013401A8FFF7FAFD21780029F8D1AE
+S31508008388029A002A0CDB6B4604A90198FFF7F5FC4C
+S3150800839848B9029A009B9A4208D1039814B010BDAE
+S315080083A84FF0FF30FAE74FF0FF30F7E74FF0FF30AE
+S315080083B8F4E700007F2817D931B1FF2813D8803889
+S315080083C80A4B33F81000704700237F2B07D8074A53
+S315080083D832F81320824202D001339BB2F5E703F143
+S315080083E88000C0B270470020704700BF248D00087F
+S315080083F8B0F5805F07D2234B1A88002A41D09042ED
+S315080084083FD310B506E0204BF6E773461A88DAB16B
+S31508008418904219D303F1040E5B88190ADBB203EB01
+S31508008428020C604504DB0029EFD10EEB4303EDE7A8
+S31508008438082909D8DFE801F005090F1215181B1EC7
+S315080084482100821A3EF8120010BD831A03F00103B0
+S31508008458C01A80B2F8E7103880B2F5E7203880B23B
+S31508008468F2E7303880B2EFE71A3880B2ECE708301E
+S3150800847880B2E9E7503880B2E6E7A0F5E35080B263
+S31508008488E2E77047248E0008189000082023038026
+S3150800849800487047480000200A23038000487047B0
+S315080084A86800002008B590F89C32032B01D00020FC
+S315080084B808BDFDF719F9FAE708B5FDF715F900201B
+S315080084C808BD08B50846FDF743F9002008BD0000B1
+S315080084D808B50B7813F0600F06D14B780A2B14D021
+S315080084E80B2B17D0062B01D0002008BD4B881B0A7A
+S315080084F8212B04D00B491722FCF79CFBF4E7CA8802
+S31508008508172A28BF17220849F6E701220749FCF760
+S3150800851891FBE9E78B7813B9044A1360E4E7FCF79B
+S315080085287DF8E1E7510000205A0000207C18002059
+S3150800853810B50446812100F088F90121204600F08B
+S3150800854884F9002010BD000010B504464023022215
+S31508008558812100F06FF9402302220121204600F00C
+S3150800856869F94023034A0121204600F0ADF90020A5
+S3150800857810BD00BF3C180020004870473C18002072
+S3150800858812230B80004870479000002004230B80B4
+S3150800859800487047A4000020002393421ED200B565
+S315080085A810E00CF1370C01F813C000014FEA430C30
+S315080085B80CF1010C4FF0000E01F80CE00133DBB2A8
+S315080085C8934209D24FEA107CB0F1204FE9D20CF158
+S315080085D8300C01F813C0E8E75DF804FB70470000A3
+S315080085E838B50B4BD3F8AC07D3F8B047D3F8B4373C
+S315080085F8C01800D138BD074D0822A91CFFF7CCFFC3
+S31508008608042205F112012046FFF7C6FFF2E700BF6C
+S3150800861800F0FF1FA800002008B51A230B80FFF7F3
+S31508008628DFFF014808BD00BFA800002008B50A46B4
+S3150800863828B905490548FCF7E0FA034808BD024980
+S315080086480248FCF7DAFAF8E780180020D490000800
+S3150800865810B50A46034C21460348FCF7CEFA2046CD
+S3150800866810BD00BF80180020E890000808B50A4623
+S3150800867828B905490548FCF7C0FA034808BD024960
+S315080086880248FCF7BAFAF8E780180020F8900008BC
+S3150800869808B50A4628B905490548FCF7AEFA034855
+S315080086A808BD02490248FCF7A8FAF8E7801800202E
+S315080086B800910008022805D8DFE800F00504020042
+S315080086C8012070470220704708B500F52C71D0F8CC
+S315080086D8E802FBF753FE08BD08B501EB810300EB7A
+S315080086E8C303D3F87C21D0F8E802FBF774FE08BD6B
+S315080086F808B501EB810300EBC303DA6BD0F8E8028F
+S31508008708FBF7AFFE08BD08B5D0F8E802FBF750FF3F
+S3150800871808BD000010B504468368022B09D101215B
+S31508008728D4F8E802FBF72DFFD4F8E802FBF701FFB7
+S3150800873810BD8E210148FDF737F8F0E718910008B3
+S3150800874810B50446F7F760FDD4F8E802FBF71CFFF6
+S31508008758A36923B1024A136943F00603136110BDDE
+S3150800876800ED00E008B5D0F8E802FBF716FFF7F7C2
+S315080087784CFD08BD10B504461F48C0F8E842C4F8C1
+S31508008788C0021E4B0360082343600223836003610B
+S31508008798002383610362F8F7D9FE30BB1823002249
+S315080087A81146D4F8C002F9F72AFE58230022802178
+S315080087B8D4F8C002F9F723FEC02300228121D4F891
+S315080087C8C002F9F71CFE4FF4887300220121D4F879
+S315080087D8C002F9F714FE4FF4807300228221D4F8F8
+S315080087E8C002F9F70CFE002010BD40F21B11044820
+S315080087F8FCF7DAFFD2E700BF18030020005C004048
+S315080088081891000808B5D0F8C002F8F704FFFFF772
+S3150800881851FF08BD08B5D0F8C002F8F713FFFFF7EF
+S3150800882849FF08BD08B5D0F8C002F8F724FFFFF7D6
+S3150800883841FF08BD08B594461A466346D0F8C002F3
+S31508008848F9F7B5FCFFF736FF08BD08B5D0F8C0023A
+S31508008858F9F7EBFCFFF72EFF08BD08B5D0F8C002FC
+S31508008868F9F75DFDFFF726FF08BD08B5D0F8C00281
+S31508008878F9F78AFDFFF71EFF08BDD0F8C03211F0D8
+S31508008888800F08D101F07F0101EB810103EBC101DB
+S3150800889891F86A01704701F07F01013101EB810106
+S315080088A803EBC1018878704708B5D0F8C002F9F714
+S315080088B8D1FBFFF7FFFE08BD08B5D0F8C002F9F7E7
+S315080088C80CFDFFF7F7FE08BD08B5D0F8C002F9F7A2
+S315080088D8DEFCFFF7EFFE08BD08B5D0F8C002F9F7C9
+S315080088E8F3FC08BD08B5012903D00020F7F77EFC7C
+S315080088F808BD0120F7F77AFCFAE7000070B50D4DB8
+S315080089080D4C641BA4100026A64209D10B4D0C4C2D
+S3150800891800F020F8641BA4100026A64205D170BDF5
+S3150800892855F8043B98470136EEE755F8043B98474F
+S315080089380136F2E73C9200083C9200083C9200088F
+S315080089484092000802440346934200D1704703F850
+S31508008958011BF9E7F8B500BFF8BC08BC9E46704786
+S31108008968F8B500BFF8BC08BC9E46704776
+S315080089742F626F6F746C6F672E7478740000000032
+S315080089842F64656D6F70726F675F6F6C696D65785C
+S31508008994696E6F5F73746D333266332E73726563F3
+S315080089A400000000000000000000000001020304AB
+S315080089B4060708090000000001020304433A2F577A
+S315080089C46F726B2F736F6674776172652F4F70655C
+S315080089D46E424C542F5461726765742F536F7572C7
+S315080089E463652F41524D434D345F53544D333246DC
+S315080089F4332F63616E2E630005020602060307031E
+S31508008A040803090309040A040B040C040C050D05E0
+S31508008A140E050F050F06100610071008433A2F57C0
+S31508008A246F726B2F736F6674776172652F4F7065FB
+S31508008A346E424C542F5461726765742F536F757266
+S31508008A4463652F41524D434D345F53544D3332467B
+S31508008A54332F72733233322E63000000433A2F5792
+S31508008A646F726B2F736F6674776172652F4F7065BB
+S31508008A746E424C542F5461726765742F536F757226
+S31508008A8463652F41524D434D345F53544D3332463B
+S31508008A94332F7573622E6300303A0000433A2F571A
+S31508008AA46F726B2F736F6674776172652F4F70657B
+S31508008AB46E424C542F5461726765742F536F7572E6
+S31508008AC463652F66696C652E630000004669726DDE
+S31508008AD47761726520757064617465207265717555
+S31508008AE46573742064657465637465640A0D0000AF
+S31508008AF44F70656E696E67206669726D7761726517
+S31508008B042066696C6520666F722072656164696E99
+S31508008B14672E2E2E000000004552524F520A0D00B1
+S31508008B244F4B0A0D000000005374617274696E6736
+S31508008B34207468652070726F6772616D6D696E67FF
+S31508008B442073657175656E63650A0D0050617273ED
+S31508008B54696E67206669726D776172652066696CED
+S31508008B646520746F20646574656374206572617327
+S31508008B746520626C6F636B732E2E2E0045726173CB
+S31508008B84696E6720000000002062797465732066A8
+S31508008B94726F6D206D656D6F7279206174203078FF
+S31508008BA40000000052656164696E67206C696E6531
+S31508008BB42066726F6D2066696C652E2E2E4552529C
+S31508008BC44F520A0D00000000496E76616C696420F4
+S31508008BD4636865636B73756D20666F756E642E2E98
+S31508008BE42E4552524F520A0D0000000050726F670C
+S31508008BF472616D6D696E67200000000020627974E9
+S31508008C04657320746F206D656D6F727920617420A9
+S31508008C143078000057726974696E672070726F67DE
+S31508008C2472616D20636865636B73756D2E2E2E00F5
+S31508008C34436C6F73696E67206669726D77617265D6
+S31508008C442066696C650A0D004669726D77617265FE
+S31508008C5420757064617465207375636365737366E0
+S31508008C64756C6C7920636F6D706C657465640A0D38
+S31508008C74000000004F70656E424C5400222A3A3CAC
+S31508008C843E3F7C7F000000002B2C3B3D5B5D0000D3
+S31508008C94809A45418E418F804545454949498E8F7D
+S31508008CA49092924F994F555559999A9B9C9D9E9F80
+S31508008CB441494F55A5A5A6A7A8A9AAABACADAEAF81
+S31508008CC4B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF1A
+S31508008CD4C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF0A
+S31508008CE4D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDFFA
+S31508008CF4E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFEA
+S31508008D04F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFD9
+S31508008D1401030507090E10121416181C1E0000007C
+S31508008D24C700FC00E900E200E400E000E500E70013
+S31508008D34EA00EB00E800EF00EE00EC00C400C50012
+S31508008D44C900E600C600F400F600F200FB00F900CC
+S31508008D54FF00D600DC00A200A300A500A72092010C
+S31508008D64E100ED00F300FA00F100D100AA00BA0010
+S31508008D74BF001023AC00BD00BC00A100AB00BB00C3
+S31508008D8491259225932502252425612562255625B4
+S31508008D9455256325512557255D255C255B25102515
+S31508008DA4142534252C251C2500253C255E255F2500
+S31508008DB45A25542569256625602550256C25672579
+S31508008DC468256425652559255825522553256B2577
+S31508008DD46A2518250C25882584258C259025802523
+S31508008DE4B103DF009303C003A303C303B500C4039D
+S31508008DF4A6039803A903B4031E22C603B5032922AE
+S31508008E046122B1006522642220232123F700482227
+S31508008E14B0001922B7001A227F20B200A025A000AC
+S31508008E2461001A03E0001703F8000703FF000100B6
+S31508008E3478010001300132010601390110014A01A5
+S31508008E442E017901060180014D0043028101820148
+S31508008E5482018401840186018701870189018A01C7
+S31508008E648B018B018D018E018F0190019101910176
+S31508008E7493019401F60196019701980198013D0220
+S31508008E849B019C019D0120029F01A001A001A20152
+S31508008E94A201A401A401A601A701A701A901AA0187
+S31508008EA4AB01AC01AC01AE01AF01AF01B101B20136
+S31508008EB4B301B301B501B501B701B801B801BA01E7
+S31508008EC4BB01BC01BC01BE01F701C001C101C2015D
+S31508008ED4C301C401C501C401C701C801C701CA0148
+S31508008EE4CB01CA01CD011001DD0101008E01DE01AD
+S31508008EF41201F3010300F101F401F401F801280158
+S31508008F04220212013A020900652C3B023B023D0289
+S31508008F14662C3F0240024102410246020A015302FC
+S31508008F24400081018601550289018A0158028F0190
+S31508008F345A0290015C025D025E025F0293016102BD
+S31508008F446202940164026502660267029701960149
+S31508008F546A02622C6C026D026E029C017002710236
+S31508008F649D01730274029F017602770278027902E0
+S31508008F747A027B027C02642C7E027F02A6018102AD
+S31508008F848202A9018402850286028702AE0144028E
+S31508008F94B101B20145028D028E028F02900291023E
+S31508008FA4B7017B030300FD03FE03FF03AC030400C0
+S31508008FB48603880389038A03B1031103C2030200E3
+S31508008FC4A303A303C4030803CC0303008C038E037F
+S31508008FD48F03D8031801F2030A00F903F303F40311
+S31508008FE4F503F603F703F703F903FA03FA03300460
+S31508008FF4200350041007600422018A043601C104C0
+S315080090040E01CF040100C004D004440161052604FE
+S31508009014000000007D1D0100632C001E9601A01EA1
+S315080090245A01001F0806101F0606201F0806301FCF
+S315080090340806401F0606511F0700591F521F5B1FCB
+S31508009044541F5D1F561F5F1F601F0806701F0E0002
+S31508009054BA1FBB1FC81FC91FCA1FCB1FDA1FDB1FB6
+S31508009064F81FF91FEA1FEB1FFA1FFB1F801F0806CC
+S31508009074901F0806A01F0806B01F0400B81FB91FD2
+S31508009084B21FBC1FCC1F0100C31FD01F0206E01F5E
+S315080090940206E51F0100EC1FF21F0100FC1F4E210A
+S315080090A40100322170211002842101008321D02479
+S315080090B41A05302C2F04602C0201672C0601752C26
+S315080090C40201802C6401002D260841FF1A030000C2
+S315080090D457696E5553422042756C6B204465766910
+S315080090E4636500004F70656E424C54205573657273
+S315080090F40000000044656661756C740057696E5516
+S3150800910453422042756C6B20496E746572666163BE
+S31508009114650000002E2E2F5553425F444556494399
+S31508009124452F5461726765742F757362645F636F44
+S315080091346E662E6300002020202020202020202870
+S3150800914428282828202020202020202020202020ED
+S315080091542020202020208810101010101010101025
+S315080091641010101010100404040404040404040465
+S3150800917410101010101010414141414141010101E4
+S3150800918401010101010101010101010101010101BD
+S3150800919401101010101010424242424242020202CA
+S315080091A4020202020202020202020202020202028D
+S315080091B4021010101020000000000000000000003B
+S315080091C4000000000000000000000000000000008D
+S315080091D4000000000000000000000000000000007D
+S315080091E4000000000000000000000000000000006D
+S315080091F4000000000000000000000000000000005D
+S31508009204000000000000000000000000000000004C
+S31508009214000000000000000000000000000000003C
+S31508009224000000000000000000000000000000002C
+S30D08009234000000000000000024
+S3090800923CAD0100086A
+S30908009240890100088A
+S3150800924400127A000100000010000000010400006A
+S315080092545185000839850008D984000800000000F3
+S3150800926400000000C1840008CB840008AD8400080F
+S3150800927400000000000000000000000095840008BB
+S3150800928400000000A184000809022000010100C0B2
+S31508009294320904000002FF000000070581024000AD
+S315080092A4FF070501024000FF0A06100100000040FE
+S315080092B4010000008985000895850008598600087C
+S315080092C435860008218600087586000899860008F0
+S315080092D41201100100000040501DAC60000101029B
+S315080092E403010000040309041A0300000000000037
+S315080092F4000000000000000000000000000000005C
+S309080093040000000057
+S705080007F1FA
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_ll_spi.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_ll_spi.h
new file mode 100644
index 00000000..244963f3
--- /dev/null
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Inc/stm32f3xx_ll_spi.h
@@ -0,0 +1,2252 @@
+/**
+ ******************************************************************************
+ * @file stm32f3xx_ll_spi.h
+ * @author MCD Application Team
+ * @brief Header file of SPI LL module.
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef STM32F3xx_LL_SPI_H
+#define STM32F3xx_LL_SPI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f3xx.h"
+
+/** @addtogroup STM32F3xx_LL_Driver
+ * @{
+ */
+
+#if defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4)
+
+/** @defgroup SPI_LL SPI
+ * @{
+ */
+
+/* Private types -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private macros ------------------------------------------------------------*/
+
+/* Exported types ------------------------------------------------------------*/
+#if defined(USE_FULL_LL_DRIVER)
+/** @defgroup SPI_LL_ES_INIT SPI Exported Init structure
+ * @{
+ */
+
+/**
+ * @brief SPI Init structures definition
+ */
+typedef struct
+{
+ uint32_t TransferDirection; /*!< Specifies the SPI unidirectional or bidirectional data mode.
+ This parameter can be a value of @ref SPI_LL_EC_TRANSFER_MODE.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferDirection().*/
+
+ uint32_t Mode; /*!< Specifies the SPI mode (Master/Slave).
+ This parameter can be a value of @ref SPI_LL_EC_MODE.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetMode().*/
+
+ uint32_t DataWidth; /*!< Specifies the SPI data width.
+ This parameter can be a value of @ref SPI_LL_EC_DATAWIDTH.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetDataWidth().*/
+
+ uint32_t ClockPolarity; /*!< Specifies the serial clock steady state.
+ This parameter can be a value of @ref SPI_LL_EC_POLARITY.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPolarity().*/
+
+ uint32_t ClockPhase; /*!< Specifies the clock active edge for the bit capture.
+ This parameter can be a value of @ref SPI_LL_EC_PHASE.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetClockPhase().*/
+
+ uint32_t NSS; /*!< Specifies whether the NSS signal is managed by hardware (NSS pin) or by software using the SSI bit.
+ This parameter can be a value of @ref SPI_LL_EC_NSS_MODE.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetNSSMode().*/
+
+ uint32_t BaudRate; /*!< Specifies the BaudRate prescaler value which will be used to configure the transmit and receive SCK clock.
+ This parameter can be a value of @ref SPI_LL_EC_BAUDRATEPRESCALER.
+ @note The communication clock is derived from the master clock. The slave clock does not need to be set.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetBaudRatePrescaler().*/
+
+ uint32_t BitOrder; /*!< Specifies whether data transfers start from MSB or LSB bit.
+ This parameter can be a value of @ref SPI_LL_EC_BIT_ORDER.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetTransferBitOrder().*/
+
+ uint32_t CRCCalculation; /*!< Specifies if the CRC calculation is enabled or not.
+ This parameter can be a value of @ref SPI_LL_EC_CRC_CALCULATION.
+
+ This feature can be modified afterwards using unitary functions @ref LL_SPI_EnableCRC() and @ref LL_SPI_DisableCRC().*/
+
+ uint32_t CRCPoly; /*!< Specifies the polynomial used for the CRC calculation.
+ This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF.
+
+ This feature can be modified afterwards using unitary function @ref LL_SPI_SetCRCPolynomial().*/
+
+} LL_SPI_InitTypeDef;
+
+/**
+ * @}
+ */
+#endif /* USE_FULL_LL_DRIVER */
+
+/* Exported constants --------------------------------------------------------*/
+/** @defgroup SPI_LL_Exported_Constants SPI Exported Constants
+ * @{
+ */
+
+/** @defgroup SPI_LL_EC_GET_FLAG Get Flags Defines
+ * @brief Flags defines which can be used with LL_SPI_ReadReg function
+ * @{
+ */
+#define LL_SPI_SR_RXNE SPI_SR_RXNE /*!< Rx buffer not empty flag */
+#define LL_SPI_SR_TXE SPI_SR_TXE /*!< Tx buffer empty flag */
+#define LL_SPI_SR_BSY SPI_SR_BSY /*!< Busy flag */
+#define LL_SPI_SR_CRCERR SPI_SR_CRCERR /*!< CRC error flag */
+#define LL_SPI_SR_MODF SPI_SR_MODF /*!< Mode fault flag */
+#define LL_SPI_SR_OVR SPI_SR_OVR /*!< Overrun flag */
+#define LL_SPI_SR_FRE SPI_SR_FRE /*!< TI mode frame format error flag */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_IT IT Defines
+ * @brief IT defines which can be used with LL_SPI_ReadReg and LL_SPI_WriteReg functions
+ * @{
+ */
+#define LL_SPI_CR2_RXNEIE SPI_CR2_RXNEIE /*!< Rx buffer not empty interrupt enable */
+#define LL_SPI_CR2_TXEIE SPI_CR2_TXEIE /*!< Tx buffer empty interrupt enable */
+#define LL_SPI_CR2_ERRIE SPI_CR2_ERRIE /*!< Error interrupt enable */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_MODE Operation Mode
+ * @{
+ */
+#define LL_SPI_MODE_MASTER (SPI_CR1_MSTR | SPI_CR1_SSI) /*!< Master configuration */
+#define LL_SPI_MODE_SLAVE 0x00000000U /*!< Slave configuration */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_PROTOCOL Serial Protocol
+ * @{
+ */
+#define LL_SPI_PROTOCOL_MOTOROLA 0x00000000U /*!< Motorola mode. Used as default value */
+#define LL_SPI_PROTOCOL_TI (SPI_CR2_FRF) /*!< TI mode */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_PHASE Clock Phase
+ * @{
+ */
+#define LL_SPI_PHASE_1EDGE 0x00000000U /*!< First clock transition is the first data capture edge */
+#define LL_SPI_PHASE_2EDGE (SPI_CR1_CPHA) /*!< Second clock transition is the first data capture edge */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_POLARITY Clock Polarity
+ * @{
+ */
+#define LL_SPI_POLARITY_LOW 0x00000000U /*!< Clock to 0 when idle */
+#define LL_SPI_POLARITY_HIGH (SPI_CR1_CPOL) /*!< Clock to 1 when idle */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_BAUDRATEPRESCALER Baud Rate Prescaler
+ * @{
+ */
+#define LL_SPI_BAUDRATEPRESCALER_DIV2 0x00000000U /*!< BaudRate control equal to fPCLK/2 */
+#define LL_SPI_BAUDRATEPRESCALER_DIV4 (SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/4 */
+#define LL_SPI_BAUDRATEPRESCALER_DIV8 (SPI_CR1_BR_1) /*!< BaudRate control equal to fPCLK/8 */
+#define LL_SPI_BAUDRATEPRESCALER_DIV16 (SPI_CR1_BR_1 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/16 */
+#define LL_SPI_BAUDRATEPRESCALER_DIV32 (SPI_CR1_BR_2) /*!< BaudRate control equal to fPCLK/32 */
+#define LL_SPI_BAUDRATEPRESCALER_DIV64 (SPI_CR1_BR_2 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/64 */
+#define LL_SPI_BAUDRATEPRESCALER_DIV128 (SPI_CR1_BR_2 | SPI_CR1_BR_1) /*!< BaudRate control equal to fPCLK/128 */
+#define LL_SPI_BAUDRATEPRESCALER_DIV256 (SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0) /*!< BaudRate control equal to fPCLK/256 */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_BIT_ORDER Transmission Bit Order
+ * @{
+ */
+#define LL_SPI_LSB_FIRST (SPI_CR1_LSBFIRST) /*!< Data is transmitted/received with the LSB first */
+#define LL_SPI_MSB_FIRST 0x00000000U /*!< Data is transmitted/received with the MSB first */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_TRANSFER_MODE Transfer Mode
+ * @{
+ */
+#define LL_SPI_FULL_DUPLEX 0x00000000U /*!< Full-Duplex mode. Rx and Tx transfer on 2 lines */
+#define LL_SPI_SIMPLEX_RX (SPI_CR1_RXONLY) /*!< Simplex Rx mode. Rx transfer only on 1 line */
+#define LL_SPI_HALF_DUPLEX_RX (SPI_CR1_BIDIMODE) /*!< Half-Duplex Rx mode. Rx transfer on 1 line */
+#define LL_SPI_HALF_DUPLEX_TX (SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE) /*!< Half-Duplex Tx mode. Tx transfer on 1 line */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_NSS_MODE Slave Select Pin Mode
+ * @{
+ */
+#define LL_SPI_NSS_SOFT (SPI_CR1_SSM) /*!< NSS managed internally. NSS pin not used and free */
+#define LL_SPI_NSS_HARD_INPUT 0x00000000U /*!< NSS pin used in Input. Only used in Master mode */
+#define LL_SPI_NSS_HARD_OUTPUT (((uint32_t)SPI_CR2_SSOE << 16U)) /*!< NSS pin used in Output. Only used in Slave mode as chip select */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_DATAWIDTH Datawidth
+ * @{
+ */
+#define LL_SPI_DATAWIDTH_4BIT (SPI_CR2_DS_0 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 4 bits */
+#define LL_SPI_DATAWIDTH_5BIT (SPI_CR2_DS_2) /*!< Data length for SPI transfer: 5 bits */
+#define LL_SPI_DATAWIDTH_6BIT (SPI_CR2_DS_2 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 6 bits */
+#define LL_SPI_DATAWIDTH_7BIT (SPI_CR2_DS_2 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 7 bits */
+#define LL_SPI_DATAWIDTH_8BIT (SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 8 bits */
+#define LL_SPI_DATAWIDTH_9BIT (SPI_CR2_DS_3) /*!< Data length for SPI transfer: 9 bits */
+#define LL_SPI_DATAWIDTH_10BIT (SPI_CR2_DS_3 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 10 bits */
+#define LL_SPI_DATAWIDTH_11BIT (SPI_CR2_DS_3 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 11 bits */
+#define LL_SPI_DATAWIDTH_12BIT (SPI_CR2_DS_3 | SPI_CR2_DS_1 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 12 bits */
+#define LL_SPI_DATAWIDTH_13BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2) /*!< Data length for SPI transfer: 13 bits */
+#define LL_SPI_DATAWIDTH_14BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 14 bits */
+#define LL_SPI_DATAWIDTH_15BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1) /*!< Data length for SPI transfer: 15 bits */
+#define LL_SPI_DATAWIDTH_16BIT (SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0) /*!< Data length for SPI transfer: 16 bits */
+/**
+ * @}
+ */
+#if defined(USE_FULL_LL_DRIVER)
+
+/** @defgroup SPI_LL_EC_CRC_CALCULATION CRC Calculation
+ * @{
+ */
+#define LL_SPI_CRCCALCULATION_DISABLE 0x00000000U /*!< CRC calculation disabled */
+#define LL_SPI_CRCCALCULATION_ENABLE (SPI_CR1_CRCEN) /*!< CRC calculation enabled */
+/**
+ * @}
+ */
+#endif /* USE_FULL_LL_DRIVER */
+
+/** @defgroup SPI_LL_EC_CRC_LENGTH CRC Length
+ * @{
+ */
+#define LL_SPI_CRC_8BIT 0x00000000U /*!< 8-bit CRC length */
+#define LL_SPI_CRC_16BIT (SPI_CR1_CRCL) /*!< 16-bit CRC length */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_RX_FIFO_TH RX FIFO Threshold
+ * @{
+ */
+#define LL_SPI_RX_FIFO_TH_HALF 0x00000000U /*!< RXNE event is generated if FIFO level is greater than or equal to 1/2 (16-bit) */
+#define LL_SPI_RX_FIFO_TH_QUARTER (SPI_CR2_FRXTH) /*!< RXNE event is generated if FIFO level is greater than or equal to 1/4 (8-bit) */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_RX_FIFO RX FIFO Level
+ * @{
+ */
+#define LL_SPI_RX_FIFO_EMPTY 0x00000000U /*!< FIFO reception empty */
+#define LL_SPI_RX_FIFO_QUARTER_FULL (SPI_SR_FRLVL_0) /*!< FIFO reception 1/4 */
+#define LL_SPI_RX_FIFO_HALF_FULL (SPI_SR_FRLVL_1) /*!< FIFO reception 1/2 */
+#define LL_SPI_RX_FIFO_FULL (SPI_SR_FRLVL_1 | SPI_SR_FRLVL_0) /*!< FIFO reception full */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_TX_FIFO TX FIFO Level
+ * @{
+ */
+#define LL_SPI_TX_FIFO_EMPTY 0x00000000U /*!< FIFO transmission empty */
+#define LL_SPI_TX_FIFO_QUARTER_FULL (SPI_SR_FTLVL_0) /*!< FIFO transmission 1/4 */
+#define LL_SPI_TX_FIFO_HALF_FULL (SPI_SR_FTLVL_1) /*!< FIFO transmission 1/2 */
+#define LL_SPI_TX_FIFO_FULL (SPI_SR_FTLVL_1 | SPI_SR_FTLVL_0) /*!< FIFO transmission full */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_DMA_PARITY DMA Parity
+ * @{
+ */
+#define LL_SPI_DMA_PARITY_EVEN 0x00000000U /*!< Select DMA parity Even */
+#define LL_SPI_DMA_PARITY_ODD 0x00000001U /*!< Select DMA parity Odd */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/* Exported macro ------------------------------------------------------------*/
+/** @defgroup SPI_LL_Exported_Macros SPI Exported Macros
+ * @{
+ */
+
+/** @defgroup SPI_LL_EM_WRITE_READ Common Write and read registers Macros
+ * @{
+ */
+
+/**
+ * @brief Write a value in SPI register
+ * @param __INSTANCE__ SPI Instance
+ * @param __REG__ Register to be written
+ * @param __VALUE__ Value to be written in the register
+ * @retval None
+ */
+#define LL_SPI_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
+
+/**
+ * @brief Read a value in SPI register
+ * @param __INSTANCE__ SPI Instance
+ * @param __REG__ Register to be read
+ * @retval Register value
+ */
+#define LL_SPI_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/* Exported functions --------------------------------------------------------*/
+/** @defgroup SPI_LL_Exported_Functions SPI Exported Functions
+ * @{
+ */
+
+/** @defgroup SPI_LL_EF_Configuration Configuration
+ * @{
+ */
+
+/**
+ * @brief Enable SPI peripheral
+ * @rmtoll CR1 SPE LL_SPI_Enable
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_Enable(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR1, SPI_CR1_SPE);
+}
+
+/**
+ * @brief Disable SPI peripheral
+ * @note When disabling the SPI, follow the procedure described in the Reference Manual.
+ * @rmtoll CR1 SPE LL_SPI_Disable
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_Disable(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
+}
+
+/**
+ * @brief Check if SPI peripheral is enabled
+ * @rmtoll CR1 SPE LL_SPI_IsEnabled
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabled(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR1, SPI_CR1_SPE) == (SPI_CR1_SPE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Set SPI operation mode to Master or Slave
+ * @note This bit should not be changed when communication is ongoing.
+ * @rmtoll CR1 MSTR LL_SPI_SetMode\n
+ * CR1 SSI LL_SPI_SetMode
+ * @param SPIx SPI Instance
+ * @param Mode This parameter can be one of the following values:
+ * @arg @ref LL_SPI_MODE_MASTER
+ * @arg @ref LL_SPI_MODE_SLAVE
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetMode(SPI_TypeDef *SPIx, uint32_t Mode)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI, Mode);
+}
+
+/**
+ * @brief Get SPI operation mode (Master or Slave)
+ * @rmtoll CR1 MSTR LL_SPI_GetMode\n
+ * CR1 SSI LL_SPI_GetMode
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_MODE_MASTER
+ * @arg @ref LL_SPI_MODE_SLAVE
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetMode(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MSTR | SPI_CR1_SSI));
+}
+
+/**
+ * @brief Set serial protocol used
+ * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
+ * @rmtoll CR2 FRF LL_SPI_SetStandard
+ * @param SPIx SPI Instance
+ * @param Standard This parameter can be one of the following values:
+ * @arg @ref LL_SPI_PROTOCOL_MOTOROLA
+ * @arg @ref LL_SPI_PROTOCOL_TI
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard)
+{
+ MODIFY_REG(SPIx->CR2, SPI_CR2_FRF, Standard);
+}
+
+/**
+ * @brief Get serial protocol used
+ * @rmtoll CR2 FRF LL_SPI_GetStandard
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_PROTOCOL_MOTOROLA
+ * @arg @ref LL_SPI_PROTOCOL_TI
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetStandard(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRF));
+}
+
+/**
+ * @brief Set clock phase
+ * @note This bit should not be changed when communication is ongoing.
+ * This bit is not used in SPI TI mode.
+ * @rmtoll CR1 CPHA LL_SPI_SetClockPhase
+ * @param SPIx SPI Instance
+ * @param ClockPhase This parameter can be one of the following values:
+ * @arg @ref LL_SPI_PHASE_1EDGE
+ * @arg @ref LL_SPI_PHASE_2EDGE
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetClockPhase(SPI_TypeDef *SPIx, uint32_t ClockPhase)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_CPHA, ClockPhase);
+}
+
+/**
+ * @brief Get clock phase
+ * @rmtoll CR1 CPHA LL_SPI_GetClockPhase
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_PHASE_1EDGE
+ * @arg @ref LL_SPI_PHASE_2EDGE
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetClockPhase(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPHA));
+}
+
+/**
+ * @brief Set clock polarity
+ * @note This bit should not be changed when communication is ongoing.
+ * This bit is not used in SPI TI mode.
+ * @rmtoll CR1 CPOL LL_SPI_SetClockPolarity
+ * @param SPIx SPI Instance
+ * @param ClockPolarity This parameter can be one of the following values:
+ * @arg @ref LL_SPI_POLARITY_LOW
+ * @arg @ref LL_SPI_POLARITY_HIGH
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_CPOL, ClockPolarity);
+}
+
+/**
+ * @brief Get clock polarity
+ * @rmtoll CR1 CPOL LL_SPI_GetClockPolarity
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_POLARITY_LOW
+ * @arg @ref LL_SPI_POLARITY_HIGH
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetClockPolarity(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPOL));
+}
+
+/**
+ * @brief Set baud rate prescaler
+ * @note These bits should not be changed when communication is ongoing. SPI BaudRate = fPCLK/Prescaler.
+ * @rmtoll CR1 BR LL_SPI_SetBaudRatePrescaler
+ * @param SPIx SPI Instance
+ * @param BaudRate This parameter can be one of the following values:
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetBaudRatePrescaler(SPI_TypeDef *SPIx, uint32_t BaudRate)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_BR, BaudRate);
+}
+
+/**
+ * @brief Get baud rate prescaler
+ * @rmtoll CR1 BR LL_SPI_GetBaudRatePrescaler
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV2
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV4
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV8
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV16
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV32
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV64
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV128
+ * @arg @ref LL_SPI_BAUDRATEPRESCALER_DIV256
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetBaudRatePrescaler(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BR));
+}
+
+/**
+ * @brief Set transfer bit order
+ * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
+ * @rmtoll CR1 LSBFIRST LL_SPI_SetTransferBitOrder
+ * @param SPIx SPI Instance
+ * @param BitOrder This parameter can be one of the following values:
+ * @arg @ref LL_SPI_LSB_FIRST
+ * @arg @ref LL_SPI_MSB_FIRST
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetTransferBitOrder(SPI_TypeDef *SPIx, uint32_t BitOrder)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_LSBFIRST, BitOrder);
+}
+
+/**
+ * @brief Get transfer bit order
+ * @rmtoll CR1 LSBFIRST LL_SPI_GetTransferBitOrder
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_LSB_FIRST
+ * @arg @ref LL_SPI_MSB_FIRST
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetTransferBitOrder(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_LSBFIRST));
+}
+
+/**
+ * @brief Set transfer direction mode
+ * @note For Half-Duplex mode, Rx Direction is set by default.
+ * In master mode, the MOSI pin is used and in slave mode, the MISO pin is used for Half-Duplex.
+ * @rmtoll CR1 RXONLY LL_SPI_SetTransferDirection\n
+ * CR1 BIDIMODE LL_SPI_SetTransferDirection\n
+ * CR1 BIDIOE LL_SPI_SetTransferDirection
+ * @param SPIx SPI Instance
+ * @param TransferDirection This parameter can be one of the following values:
+ * @arg @ref LL_SPI_FULL_DUPLEX
+ * @arg @ref LL_SPI_SIMPLEX_RX
+ * @arg @ref LL_SPI_HALF_DUPLEX_RX
+ * @arg @ref LL_SPI_HALF_DUPLEX_TX
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetTransferDirection(SPI_TypeDef *SPIx, uint32_t TransferDirection)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE, TransferDirection);
+}
+
+/**
+ * @brief Get transfer direction mode
+ * @rmtoll CR1 RXONLY LL_SPI_GetTransferDirection\n
+ * CR1 BIDIMODE LL_SPI_GetTransferDirection\n
+ * CR1 BIDIOE LL_SPI_GetTransferDirection
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_FULL_DUPLEX
+ * @arg @ref LL_SPI_SIMPLEX_RX
+ * @arg @ref LL_SPI_HALF_DUPLEX_RX
+ * @arg @ref LL_SPI_HALF_DUPLEX_TX
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetTransferDirection(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_RXONLY | SPI_CR1_BIDIMODE | SPI_CR1_BIDIOE));
+}
+
+/**
+ * @brief Set frame data width
+ * @rmtoll CR2 DS LL_SPI_SetDataWidth
+ * @param SPIx SPI Instance
+ * @param DataWidth This parameter can be one of the following values:
+ * @arg @ref LL_SPI_DATAWIDTH_4BIT
+ * @arg @ref LL_SPI_DATAWIDTH_5BIT
+ * @arg @ref LL_SPI_DATAWIDTH_6BIT
+ * @arg @ref LL_SPI_DATAWIDTH_7BIT
+ * @arg @ref LL_SPI_DATAWIDTH_8BIT
+ * @arg @ref LL_SPI_DATAWIDTH_9BIT
+ * @arg @ref LL_SPI_DATAWIDTH_10BIT
+ * @arg @ref LL_SPI_DATAWIDTH_11BIT
+ * @arg @ref LL_SPI_DATAWIDTH_12BIT
+ * @arg @ref LL_SPI_DATAWIDTH_13BIT
+ * @arg @ref LL_SPI_DATAWIDTH_14BIT
+ * @arg @ref LL_SPI_DATAWIDTH_15BIT
+ * @arg @ref LL_SPI_DATAWIDTH_16BIT
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetDataWidth(SPI_TypeDef *SPIx, uint32_t DataWidth)
+{
+ MODIFY_REG(SPIx->CR2, SPI_CR2_DS, DataWidth);
+}
+
+/**
+ * @brief Get frame data width
+ * @rmtoll CR2 DS LL_SPI_GetDataWidth
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_DATAWIDTH_4BIT
+ * @arg @ref LL_SPI_DATAWIDTH_5BIT
+ * @arg @ref LL_SPI_DATAWIDTH_6BIT
+ * @arg @ref LL_SPI_DATAWIDTH_7BIT
+ * @arg @ref LL_SPI_DATAWIDTH_8BIT
+ * @arg @ref LL_SPI_DATAWIDTH_9BIT
+ * @arg @ref LL_SPI_DATAWIDTH_10BIT
+ * @arg @ref LL_SPI_DATAWIDTH_11BIT
+ * @arg @ref LL_SPI_DATAWIDTH_12BIT
+ * @arg @ref LL_SPI_DATAWIDTH_13BIT
+ * @arg @ref LL_SPI_DATAWIDTH_14BIT
+ * @arg @ref LL_SPI_DATAWIDTH_15BIT
+ * @arg @ref LL_SPI_DATAWIDTH_16BIT
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetDataWidth(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_DS));
+}
+
+/**
+ * @brief Set threshold of RXFIFO that triggers an RXNE event
+ * @rmtoll CR2 FRXTH LL_SPI_SetRxFIFOThreshold
+ * @param SPIx SPI Instance
+ * @param Threshold This parameter can be one of the following values:
+ * @arg @ref LL_SPI_RX_FIFO_TH_HALF
+ * @arg @ref LL_SPI_RX_FIFO_TH_QUARTER
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetRxFIFOThreshold(SPI_TypeDef *SPIx, uint32_t Threshold)
+{
+ MODIFY_REG(SPIx->CR2, SPI_CR2_FRXTH, Threshold);
+}
+
+/**
+ * @brief Get threshold of RXFIFO that triggers an RXNE event
+ * @rmtoll CR2 FRXTH LL_SPI_GetRxFIFOThreshold
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_RX_FIFO_TH_HALF
+ * @arg @ref LL_SPI_RX_FIFO_TH_QUARTER
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetRxFIFOThreshold(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_FRXTH));
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EF_CRC_Management CRC Management
+ * @{
+ */
+
+/**
+ * @brief Enable CRC
+ * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
+ * @rmtoll CR1 CRCEN LL_SPI_EnableCRC
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_EnableCRC(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR1, SPI_CR1_CRCEN);
+}
+
+/**
+ * @brief Disable CRC
+ * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
+ * @rmtoll CR1 CRCEN LL_SPI_DisableCRC
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_DisableCRC(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR1, SPI_CR1_CRCEN);
+}
+
+/**
+ * @brief Check if CRC is enabled
+ * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
+ * @rmtoll CR1 CRCEN LL_SPI_IsEnabledCRC
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabledCRC(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR1, SPI_CR1_CRCEN) == (SPI_CR1_CRCEN)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Set CRC Length
+ * @note This bit should be written only when SPI is disabled (SPE = 0) for correct operation.
+ * @rmtoll CR1 CRCL LL_SPI_SetCRCWidth
+ * @param SPIx SPI Instance
+ * @param CRCLength This parameter can be one of the following values:
+ * @arg @ref LL_SPI_CRC_8BIT
+ * @arg @ref LL_SPI_CRC_16BIT
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetCRCWidth(SPI_TypeDef *SPIx, uint32_t CRCLength)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_CRCL, CRCLength);
+}
+
+/**
+ * @brief Get CRC Length
+ * @rmtoll CR1 CRCL LL_SPI_GetCRCWidth
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_CRC_8BIT
+ * @arg @ref LL_SPI_CRC_16BIT
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetCRCWidth(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CRCL));
+}
+
+/**
+ * @brief Set CRCNext to transfer CRC on the line
+ * @note This bit has to be written as soon as the last data is written in the SPIx_DR register.
+ * @rmtoll CR1 CRCNEXT LL_SPI_SetCRCNext
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR1, SPI_CR1_CRCNEXT);
+}
+
+/**
+ * @brief Set polynomial for CRC calculation
+ * @rmtoll CRCPR CRCPOLY LL_SPI_SetCRCPolynomial
+ * @param SPIx SPI Instance
+ * @param CRCPoly This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFFFF
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetCRCPolynomial(SPI_TypeDef *SPIx, uint32_t CRCPoly)
+{
+ WRITE_REG(SPIx->CRCPR, (uint16_t)CRCPoly);
+}
+
+/**
+ * @brief Get polynomial for CRC calculation
+ * @rmtoll CRCPR CRCPOLY LL_SPI_GetCRCPolynomial
+ * @param SPIx SPI Instance
+ * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetCRCPolynomial(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_REG(SPIx->CRCPR));
+}
+
+/**
+ * @brief Get Rx CRC
+ * @rmtoll RXCRCR RXCRC LL_SPI_GetRxCRC
+ * @param SPIx SPI Instance
+ * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetRxCRC(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_REG(SPIx->RXCRCR));
+}
+
+/**
+ * @brief Get Tx CRC
+ * @rmtoll TXCRCR TXCRC LL_SPI_GetTxCRC
+ * @param SPIx SPI Instance
+ * @retval Returned value is a number between Min_Data = 0x00 and Max_Data = 0xFFFF
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetTxCRC(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_REG(SPIx->TXCRCR));
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EF_NSS_Management Slave Select Pin Management
+ * @{
+ */
+
+/**
+ * @brief Set NSS mode
+ * @note LL_SPI_NSS_SOFT Mode is not used in SPI TI mode.
+ * @rmtoll CR1 SSM LL_SPI_SetNSSMode\n
+ * @rmtoll CR2 SSOE LL_SPI_SetNSSMode
+ * @param SPIx SPI Instance
+ * @param NSS This parameter can be one of the following values:
+ * @arg @ref LL_SPI_NSS_SOFT
+ * @arg @ref LL_SPI_NSS_HARD_INPUT
+ * @arg @ref LL_SPI_NSS_HARD_OUTPUT
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetNSSMode(SPI_TypeDef *SPIx, uint32_t NSS)
+{
+ MODIFY_REG(SPIx->CR1, SPI_CR1_SSM, NSS);
+ MODIFY_REG(SPIx->CR2, SPI_CR2_SSOE, ((uint32_t)(NSS >> 16U)));
+}
+
+/**
+ * @brief Get NSS mode
+ * @rmtoll CR1 SSM LL_SPI_GetNSSMode\n
+ * @rmtoll CR2 SSOE LL_SPI_GetNSSMode
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_NSS_SOFT
+ * @arg @ref LL_SPI_NSS_HARD_INPUT
+ * @arg @ref LL_SPI_NSS_HARD_OUTPUT
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetNSSMode(SPI_TypeDef *SPIx)
+{
+ uint32_t Ssm = (READ_BIT(SPIx->CR1, SPI_CR1_SSM));
+ uint32_t Ssoe = (READ_BIT(SPIx->CR2, SPI_CR2_SSOE) << 16U);
+ return (Ssm | Ssoe);
+}
+
+/**
+ * @brief Enable NSS pulse management
+ * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
+ * @rmtoll CR2 NSSP LL_SPI_EnableNSSPulseMgt
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_EnableNSSPulseMgt(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR2, SPI_CR2_NSSP);
+}
+
+/**
+ * @brief Disable NSS pulse management
+ * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
+ * @rmtoll CR2 NSSP LL_SPI_DisableNSSPulseMgt
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_DisableNSSPulseMgt(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR2, SPI_CR2_NSSP);
+}
+
+/**
+ * @brief Check if NSS pulse is enabled
+ * @note This bit should not be changed when communication is ongoing. This bit is not used in SPI TI mode.
+ * @rmtoll CR2 NSSP LL_SPI_IsEnabledNSSPulse
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabledNSSPulse(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR2, SPI_CR2_NSSP) == (SPI_CR2_NSSP)) ? 1UL : 0UL);
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EF_FLAG_Management FLAG Management
+ * @{
+ */
+
+/**
+ * @brief Check if Rx buffer is not empty
+ * @rmtoll SR RXNE LL_SPI_IsActiveFlag_RXNE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_RXNE(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_RXNE) == (SPI_SR_RXNE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Check if Tx buffer is empty
+ * @rmtoll SR TXE LL_SPI_IsActiveFlag_TXE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_TXE(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_TXE) == (SPI_SR_TXE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Get CRC error flag
+ * @rmtoll SR CRCERR LL_SPI_IsActiveFlag_CRCERR
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_CRCERR(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_CRCERR) == (SPI_SR_CRCERR)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Get mode fault error flag
+ * @rmtoll SR MODF LL_SPI_IsActiveFlag_MODF
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_MODF(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_MODF) == (SPI_SR_MODF)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Get overrun error flag
+ * @rmtoll SR OVR LL_SPI_IsActiveFlag_OVR
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_OVR(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_OVR) == (SPI_SR_OVR)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Get busy flag
+ * @note The BSY flag is cleared under any one of the following conditions:
+ * -When the SPI is correctly disabled
+ * -When a fault is detected in Master mode (MODF bit set to 1)
+ * -In Master mode, when it finishes a data transmission and no new data is ready to be
+ * sent
+ * -In Slave mode, when the BSY flag is set to '0' for at least one SPI clock cycle between
+ * each data transfer.
+ * @rmtoll SR BSY LL_SPI_IsActiveFlag_BSY
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_BSY(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_BSY) == (SPI_SR_BSY)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Get frame format error flag
+ * @rmtoll SR FRE LL_SPI_IsActiveFlag_FRE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsActiveFlag_FRE(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_FRE) == (SPI_SR_FRE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Get FIFO reception Level
+ * @rmtoll SR FRLVL LL_SPI_GetRxFIFOLevel
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_RX_FIFO_EMPTY
+ * @arg @ref LL_SPI_RX_FIFO_QUARTER_FULL
+ * @arg @ref LL_SPI_RX_FIFO_HALF_FULL
+ * @arg @ref LL_SPI_RX_FIFO_FULL
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetRxFIFOLevel(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FRLVL));
+}
+
+/**
+ * @brief Get FIFO Transmission Level
+ * @rmtoll SR FTLVL LL_SPI_GetTxFIFOLevel
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_TX_FIFO_EMPTY
+ * @arg @ref LL_SPI_TX_FIFO_QUARTER_FULL
+ * @arg @ref LL_SPI_TX_FIFO_HALF_FULL
+ * @arg @ref LL_SPI_TX_FIFO_FULL
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetTxFIFOLevel(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->SR, SPI_SR_FTLVL));
+}
+
+/**
+ * @brief Clear CRC error flag
+ * @rmtoll SR CRCERR LL_SPI_ClearFlag_CRCERR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_ClearFlag_CRCERR(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->SR, SPI_SR_CRCERR);
+}
+
+/**
+ * @brief Clear mode fault error flag
+ * @note Clearing this flag is done by a read access to the SPIx_SR
+ * register followed by a write access to the SPIx_CR1 register
+ * @rmtoll SR MODF LL_SPI_ClearFlag_MODF
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_ClearFlag_MODF(SPI_TypeDef *SPIx)
+{
+ __IO uint32_t tmpreg_sr;
+ tmpreg_sr = SPIx->SR;
+ (void) tmpreg_sr;
+ CLEAR_BIT(SPIx->CR1, SPI_CR1_SPE);
+}
+
+/**
+ * @brief Clear overrun error flag
+ * @note Clearing this flag is done by a read access to the SPIx_DR
+ * register followed by a read access to the SPIx_SR register
+ * @rmtoll SR OVR LL_SPI_ClearFlag_OVR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_ClearFlag_OVR(SPI_TypeDef *SPIx)
+{
+ __IO uint32_t tmpreg;
+ tmpreg = SPIx->DR;
+ (void) tmpreg;
+ tmpreg = SPIx->SR;
+ (void) tmpreg;
+}
+
+/**
+ * @brief Clear frame format error flag
+ * @note Clearing this flag is done by reading SPIx_SR register
+ * @rmtoll SR FRE LL_SPI_ClearFlag_FRE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_ClearFlag_FRE(SPI_TypeDef *SPIx)
+{
+ __IO uint32_t tmpreg;
+ tmpreg = SPIx->SR;
+ (void) tmpreg;
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EF_IT_Management Interrupt Management
+ * @{
+ */
+
+/**
+ * @brief Enable error interrupt
+ * @note This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode).
+ * @rmtoll CR2 ERRIE LL_SPI_EnableIT_ERR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_EnableIT_ERR(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR2, SPI_CR2_ERRIE);
+}
+
+/**
+ * @brief Enable Rx buffer not empty interrupt
+ * @rmtoll CR2 RXNEIE LL_SPI_EnableIT_RXNE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_EnableIT_RXNE(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
+}
+
+/**
+ * @brief Enable Tx buffer empty interrupt
+ * @rmtoll CR2 TXEIE LL_SPI_EnableIT_TXE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_EnableIT_TXE(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR2, SPI_CR2_TXEIE);
+}
+
+/**
+ * @brief Disable error interrupt
+ * @note This bit controls the generation of an interrupt when an error condition occurs (CRCERR, OVR, MODF in SPI mode, FRE at TI mode).
+ * @rmtoll CR2 ERRIE LL_SPI_DisableIT_ERR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_DisableIT_ERR(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR2, SPI_CR2_ERRIE);
+}
+
+/**
+ * @brief Disable Rx buffer not empty interrupt
+ * @rmtoll CR2 RXNEIE LL_SPI_DisableIT_RXNE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_DisableIT_RXNE(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR2, SPI_CR2_RXNEIE);
+}
+
+/**
+ * @brief Disable Tx buffer empty interrupt
+ * @rmtoll CR2 TXEIE LL_SPI_DisableIT_TXE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_DisableIT_TXE(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR2, SPI_CR2_TXEIE);
+}
+
+/**
+ * @brief Check if error interrupt is enabled
+ * @rmtoll CR2 ERRIE LL_SPI_IsEnabledIT_ERR
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_ERR(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR2, SPI_CR2_ERRIE) == (SPI_CR2_ERRIE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Check if Rx buffer not empty interrupt is enabled
+ * @rmtoll CR2 RXNEIE LL_SPI_IsEnabledIT_RXNE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_RXNE(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR2, SPI_CR2_RXNEIE) == (SPI_CR2_RXNEIE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Check if Tx buffer empty interrupt
+ * @rmtoll CR2 TXEIE LL_SPI_IsEnabledIT_TXE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabledIT_TXE(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR2, SPI_CR2_TXEIE) == (SPI_CR2_TXEIE)) ? 1UL : 0UL);
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EF_DMA_Management DMA Management
+ * @{
+ */
+
+/**
+ * @brief Enable DMA Rx
+ * @rmtoll CR2 RXDMAEN LL_SPI_EnableDMAReq_RX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_EnableDMAReq_RX(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
+}
+
+/**
+ * @brief Disable DMA Rx
+ * @rmtoll CR2 RXDMAEN LL_SPI_DisableDMAReq_RX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_DisableDMAReq_RX(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR2, SPI_CR2_RXDMAEN);
+}
+
+/**
+ * @brief Check if DMA Rx is enabled
+ * @rmtoll CR2 RXDMAEN LL_SPI_IsEnabledDMAReq_RX
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR2, SPI_CR2_RXDMAEN) == (SPI_CR2_RXDMAEN)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Enable DMA Tx
+ * @rmtoll CR2 TXDMAEN LL_SPI_EnableDMAReq_TX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_EnableDMAReq_TX(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
+}
+
+/**
+ * @brief Disable DMA Tx
+ * @rmtoll CR2 TXDMAEN LL_SPI_DisableDMAReq_TX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_DisableDMAReq_TX(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->CR2, SPI_CR2_TXDMAEN);
+}
+
+/**
+ * @brief Check if DMA Tx is enabled
+ * @rmtoll CR2 TXDMAEN LL_SPI_IsEnabledDMAReq_TX
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_SPI_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->CR2, SPI_CR2_TXDMAEN) == (SPI_CR2_TXDMAEN)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Set parity of Last DMA reception
+ * @rmtoll CR2 LDMARX LL_SPI_SetDMAParity_RX
+ * @param SPIx SPI Instance
+ * @param Parity This parameter can be one of the following values:
+ * @arg @ref LL_SPI_DMA_PARITY_ODD
+ * @arg @ref LL_SPI_DMA_PARITY_EVEN
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetDMAParity_RX(SPI_TypeDef *SPIx, uint32_t Parity)
+{
+ MODIFY_REG(SPIx->CR2, SPI_CR2_LDMARX, (Parity << SPI_CR2_LDMARX_Pos));
+}
+
+/**
+ * @brief Get parity configuration for Last DMA reception
+ * @rmtoll CR2 LDMARX LL_SPI_GetDMAParity_RX
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_DMA_PARITY_ODD
+ * @arg @ref LL_SPI_DMA_PARITY_EVEN
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetDMAParity_RX(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMARX) >> SPI_CR2_LDMARX_Pos);
+}
+
+/**
+ * @brief Set parity of Last DMA transmission
+ * @rmtoll CR2 LDMATX LL_SPI_SetDMAParity_TX
+ * @param SPIx SPI Instance
+ * @param Parity This parameter can be one of the following values:
+ * @arg @ref LL_SPI_DMA_PARITY_ODD
+ * @arg @ref LL_SPI_DMA_PARITY_EVEN
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_SetDMAParity_TX(SPI_TypeDef *SPIx, uint32_t Parity)
+{
+ MODIFY_REG(SPIx->CR2, SPI_CR2_LDMATX, (Parity << SPI_CR2_LDMATX_Pos));
+}
+
+/**
+ * @brief Get parity configuration for Last DMA transmission
+ * @rmtoll CR2 LDMATX LL_SPI_GetDMAParity_TX
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_SPI_DMA_PARITY_ODD
+ * @arg @ref LL_SPI_DMA_PARITY_EVEN
+ */
+__STATIC_INLINE uint32_t LL_SPI_GetDMAParity_TX(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_LDMATX) >> SPI_CR2_LDMATX_Pos);
+}
+
+/**
+ * @brief Get the data register address used for DMA transfer
+ * @rmtoll DR DR LL_SPI_DMA_GetRegAddr
+ * @param SPIx SPI Instance
+ * @retval Address of data register
+ */
+__STATIC_INLINE uint32_t LL_SPI_DMA_GetRegAddr(SPI_TypeDef *SPIx)
+{
+ return (uint32_t) &(SPIx->DR);
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EF_DATA_Management DATA Management
+ * @{
+ */
+
+/**
+ * @brief Read 8-Bits in the data register
+ * @rmtoll DR DR LL_SPI_ReceiveData8
+ * @param SPIx SPI Instance
+ * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFF
+ */
+__STATIC_INLINE uint8_t LL_SPI_ReceiveData8(SPI_TypeDef *SPIx)
+{
+ return (*((__IO uint8_t *)&SPIx->DR));
+}
+
+/**
+ * @brief Read 16-Bits in the data register
+ * @rmtoll DR DR LL_SPI_ReceiveData16
+ * @param SPIx SPI Instance
+ * @retval RxData Value between Min_Data=0x00 and Max_Data=0xFFFF
+ */
+__STATIC_INLINE uint16_t LL_SPI_ReceiveData16(SPI_TypeDef *SPIx)
+{
+ return (uint16_t)(READ_REG(SPIx->DR));
+}
+
+/**
+ * @brief Write 8-Bits in the data register
+ * @rmtoll DR DR LL_SPI_TransmitData8
+ * @param SPIx SPI Instance
+ * @param TxData Value between Min_Data=0x00 and Max_Data=0xFF
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_TransmitData8(SPI_TypeDef *SPIx, uint8_t TxData)
+{
+#if defined (__GNUC__)
+ __IO uint8_t *spidr = ((__IO uint8_t *)&SPIx->DR);
+ *spidr = TxData;
+#else
+ *((__IO uint8_t *)&SPIx->DR) = TxData;
+#endif /* __GNUC__ */
+}
+
+/**
+ * @brief Write 16-Bits in the data register
+ * @rmtoll DR DR LL_SPI_TransmitData16
+ * @param SPIx SPI Instance
+ * @param TxData Value between Min_Data=0x00 and Max_Data=0xFFFF
+ * @retval None
+ */
+__STATIC_INLINE void LL_SPI_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
+{
+#if defined (__GNUC__)
+ __IO uint16_t *spidr = ((__IO uint16_t *)&SPIx->DR);
+ *spidr = TxData;
+#else
+ SPIx->DR = TxData;
+#endif /* __GNUC__ */
+}
+
+/**
+ * @}
+ */
+#if defined(USE_FULL_LL_DRIVER)
+/** @defgroup SPI_LL_EF_Init Initialization and de-initialization functions
+ * @{
+ */
+
+ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx);
+ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct);
+void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct);
+
+/**
+ * @}
+ */
+#endif /* USE_FULL_LL_DRIVER */
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#if defined(SPI_I2S_SUPPORT)
+/** @defgroup I2S_LL I2S
+ * @{
+ */
+
+/* Private variables ---------------------------------------------------------*/
+/* Private constants ---------------------------------------------------------*/
+/* Private macros ------------------------------------------------------------*/
+
+/* Exported types ------------------------------------------------------------*/
+#if defined(USE_FULL_LL_DRIVER)
+/** @defgroup I2S_LL_ES_INIT I2S Exported Init structure
+ * @{
+ */
+
+/**
+ * @brief I2S Init structure definition
+ */
+
+typedef struct
+{
+ uint32_t Mode; /*!< Specifies the I2S operating mode.
+ This parameter can be a value of @ref I2S_LL_EC_MODE
+
+ This feature can be modified afterwards using unitary function @ref LL_I2S_SetTransferMode().*/
+
+ uint32_t Standard; /*!< Specifies the standard used for the I2S communication.
+ This parameter can be a value of @ref I2S_LL_EC_STANDARD
+
+ This feature can be modified afterwards using unitary function @ref LL_I2S_SetStandard().*/
+
+
+ uint32_t DataFormat; /*!< Specifies the data format for the I2S communication.
+ This parameter can be a value of @ref I2S_LL_EC_DATA_FORMAT
+
+ This feature can be modified afterwards using unitary function @ref LL_I2S_SetDataFormat().*/
+
+
+ uint32_t MCLKOutput; /*!< Specifies whether the I2S MCLK output is enabled or not.
+ This parameter can be a value of @ref I2S_LL_EC_MCLK_OUTPUT
+
+ This feature can be modified afterwards using unitary functions @ref LL_I2S_EnableMasterClock() or @ref LL_I2S_DisableMasterClock.*/
+
+
+ uint32_t AudioFreq; /*!< Specifies the frequency selected for the I2S communication.
+ This parameter can be a value of @ref I2S_LL_EC_AUDIO_FREQ
+
+ Audio Frequency can be modified afterwards using Reference manual formulas to calculate Prescaler Linear, Parity
+ and unitary functions @ref LL_I2S_SetPrescalerLinear() and @ref LL_I2S_SetPrescalerParity() to set it.*/
+
+
+ uint32_t ClockPolarity; /*!< Specifies the idle state of the I2S clock.
+ This parameter can be a value of @ref I2S_LL_EC_POLARITY
+
+ This feature can be modified afterwards using unitary function @ref LL_I2S_SetClockPolarity().*/
+
+} LL_I2S_InitTypeDef;
+
+/**
+ * @}
+ */
+#endif /*USE_FULL_LL_DRIVER*/
+
+/* Exported constants --------------------------------------------------------*/
+/** @defgroup I2S_LL_Exported_Constants I2S Exported Constants
+ * @{
+ */
+
+/** @defgroup I2S_LL_EC_GET_FLAG Get Flags Defines
+ * @brief Flags defines which can be used with LL_I2S_ReadReg function
+ * @{
+ */
+#define LL_I2S_SR_RXNE LL_SPI_SR_RXNE /*!< Rx buffer not empty flag */
+#define LL_I2S_SR_TXE LL_SPI_SR_TXE /*!< Tx buffer empty flag */
+#define LL_I2S_SR_BSY LL_SPI_SR_BSY /*!< Busy flag */
+#define LL_I2S_SR_UDR SPI_SR_UDR /*!< Underrun flag */
+#define LL_I2S_SR_OVR LL_SPI_SR_OVR /*!< Overrun flag */
+#define LL_I2S_SR_FRE LL_SPI_SR_FRE /*!< TI mode frame format error flag */
+/**
+ * @}
+ */
+
+/** @defgroup SPI_LL_EC_IT IT Defines
+ * @brief IT defines which can be used with LL_SPI_ReadReg and LL_SPI_WriteReg functions
+ * @{
+ */
+#define LL_I2S_CR2_RXNEIE LL_SPI_CR2_RXNEIE /*!< Rx buffer not empty interrupt enable */
+#define LL_I2S_CR2_TXEIE LL_SPI_CR2_TXEIE /*!< Tx buffer empty interrupt enable */
+#define LL_I2S_CR2_ERRIE LL_SPI_CR2_ERRIE /*!< Error interrupt enable */
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EC_DATA_FORMAT Data format
+ * @{
+ */
+#define LL_I2S_DATAFORMAT_16B 0x00000000U /*!< Data length 16 bits, Channel length 16bit */
+#define LL_I2S_DATAFORMAT_16B_EXTENDED (SPI_I2SCFGR_CHLEN) /*!< Data length 16 bits, Channel length 32bit */
+#define LL_I2S_DATAFORMAT_24B (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_0) /*!< Data length 24 bits, Channel length 32bit */
+#define LL_I2S_DATAFORMAT_32B (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN_1) /*!< Data length 16 bits, Channel length 32bit */
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EC_POLARITY Clock Polarity
+ * @{
+ */
+#define LL_I2S_POLARITY_LOW 0x00000000U /*!< Clock steady state is low level */
+#define LL_I2S_POLARITY_HIGH (SPI_I2SCFGR_CKPOL) /*!< Clock steady state is high level */
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EC_STANDARD I2s Standard
+ * @{
+ */
+#define LL_I2S_STANDARD_PHILIPS 0x00000000U /*!< I2S standard philips */
+#define LL_I2S_STANDARD_MSB (SPI_I2SCFGR_I2SSTD_0) /*!< MSB justified standard (left justified) */
+#define LL_I2S_STANDARD_LSB (SPI_I2SCFGR_I2SSTD_1) /*!< LSB justified standard (right justified) */
+#define LL_I2S_STANDARD_PCM_SHORT (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1) /*!< PCM standard, short frame synchronization */
+#define LL_I2S_STANDARD_PCM_LONG (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1 | SPI_I2SCFGR_PCMSYNC) /*!< PCM standard, long frame synchronization */
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EC_MODE Operation Mode
+ * @{
+ */
+#define LL_I2S_MODE_SLAVE_TX 0x00000000U /*!< Slave Tx configuration */
+#define LL_I2S_MODE_SLAVE_RX (SPI_I2SCFGR_I2SCFG_0) /*!< Slave Rx configuration */
+#define LL_I2S_MODE_MASTER_TX (SPI_I2SCFGR_I2SCFG_1) /*!< Master Tx configuration */
+#define LL_I2S_MODE_MASTER_RX (SPI_I2SCFGR_I2SCFG_0 | SPI_I2SCFGR_I2SCFG_1) /*!< Master Rx configuration */
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EC_PRESCALER_FACTOR Prescaler Factor
+ * @{
+ */
+#define LL_I2S_PRESCALER_PARITY_EVEN 0x00000000U /*!< Odd factor: Real divider value is = I2SDIV * 2 */
+#define LL_I2S_PRESCALER_PARITY_ODD (SPI_I2SPR_ODD >> 8U) /*!< Odd factor: Real divider value is = (I2SDIV * 2)+1 */
+/**
+ * @}
+ */
+
+#if defined(USE_FULL_LL_DRIVER)
+
+/** @defgroup I2S_LL_EC_MCLK_OUTPUT MCLK Output
+ * @{
+ */
+#define LL_I2S_MCLK_OUTPUT_DISABLE 0x00000000U /*!< Master clock output is disabled */
+#define LL_I2S_MCLK_OUTPUT_ENABLE (SPI_I2SPR_MCKOE) /*!< Master clock output is enabled */
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EC_AUDIO_FREQ Audio Frequency
+ * @{
+ */
+
+#define LL_I2S_AUDIOFREQ_192K 192000U /*!< Audio Frequency configuration 192000 Hz */
+#define LL_I2S_AUDIOFREQ_96K 96000U /*!< Audio Frequency configuration 96000 Hz */
+#define LL_I2S_AUDIOFREQ_48K 48000U /*!< Audio Frequency configuration 48000 Hz */
+#define LL_I2S_AUDIOFREQ_44K 44100U /*!< Audio Frequency configuration 44100 Hz */
+#define LL_I2S_AUDIOFREQ_32K 32000U /*!< Audio Frequency configuration 32000 Hz */
+#define LL_I2S_AUDIOFREQ_22K 22050U /*!< Audio Frequency configuration 22050 Hz */
+#define LL_I2S_AUDIOFREQ_16K 16000U /*!< Audio Frequency configuration 16000 Hz */
+#define LL_I2S_AUDIOFREQ_11K 11025U /*!< Audio Frequency configuration 11025 Hz */
+#define LL_I2S_AUDIOFREQ_8K 8000U /*!< Audio Frequency configuration 8000 Hz */
+#define LL_I2S_AUDIOFREQ_DEFAULT 2U /*!< Audio Freq not specified. Register I2SDIV = 2 */
+/**
+ * @}
+ */
+#endif /* USE_FULL_LL_DRIVER */
+
+/**
+ * @}
+ */
+
+/* Exported macro ------------------------------------------------------------*/
+/** @defgroup I2S_LL_Exported_Macros I2S Exported Macros
+ * @{
+ */
+
+/** @defgroup I2S_LL_EM_WRITE_READ Common Write and read registers Macros
+ * @{
+ */
+
+/**
+ * @brief Write a value in I2S register
+ * @param __INSTANCE__ I2S Instance
+ * @param __REG__ Register to be written
+ * @param __VALUE__ Value to be written in the register
+ * @retval None
+ */
+#define LL_I2S_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
+
+/**
+ * @brief Read a value in I2S register
+ * @param __INSTANCE__ I2S Instance
+ * @param __REG__ Register to be read
+ * @retval Register value
+ */
+#define LL_I2S_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+
+/* Exported functions --------------------------------------------------------*/
+
+/** @defgroup I2S_LL_Exported_Functions I2S Exported Functions
+ * @{
+ */
+
+/** @defgroup I2S_LL_EF_Configuration Configuration
+ * @{
+ */
+
+/**
+ * @brief Select I2S mode and Enable I2S peripheral
+ * @rmtoll I2SCFGR I2SMOD LL_I2S_Enable\n
+ * I2SCFGR I2SE LL_I2S_Enable
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_Enable(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE);
+}
+
+/**
+ * @brief Disable I2S peripheral
+ * @rmtoll I2SCFGR I2SE LL_I2S_Disable
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_Disable(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SE);
+}
+
+/**
+ * @brief Check if I2S peripheral is enabled
+ * @rmtoll I2SCFGR I2SE LL_I2S_IsEnabled
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsEnabled(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SE) == (SPI_I2SCFGR_I2SE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Set I2S data frame length
+ * @rmtoll I2SCFGR DATLEN LL_I2S_SetDataFormat\n
+ * I2SCFGR CHLEN LL_I2S_SetDataFormat
+ * @param SPIx SPI Instance
+ * @param DataFormat This parameter can be one of the following values:
+ * @arg @ref LL_I2S_DATAFORMAT_16B
+ * @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED
+ * @arg @ref LL_I2S_DATAFORMAT_24B
+ * @arg @ref LL_I2S_DATAFORMAT_32B
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_SetDataFormat(SPI_TypeDef *SPIx, uint32_t DataFormat)
+{
+ MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN, DataFormat);
+}
+
+/**
+ * @brief Get I2S data frame length
+ * @rmtoll I2SCFGR DATLEN LL_I2S_GetDataFormat\n
+ * I2SCFGR CHLEN LL_I2S_GetDataFormat
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_I2S_DATAFORMAT_16B
+ * @arg @ref LL_I2S_DATAFORMAT_16B_EXTENDED
+ * @arg @ref LL_I2S_DATAFORMAT_24B
+ * @arg @ref LL_I2S_DATAFORMAT_32B
+ */
+__STATIC_INLINE uint32_t LL_I2S_GetDataFormat(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN));
+}
+
+/**
+ * @brief Set I2S clock polarity
+ * @rmtoll I2SCFGR CKPOL LL_I2S_SetClockPolarity
+ * @param SPIx SPI Instance
+ * @param ClockPolarity This parameter can be one of the following values:
+ * @arg @ref LL_I2S_POLARITY_LOW
+ * @arg @ref LL_I2S_POLARITY_HIGH
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_SetClockPolarity(SPI_TypeDef *SPIx, uint32_t ClockPolarity)
+{
+ SET_BIT(SPIx->I2SCFGR, ClockPolarity);
+}
+
+/**
+ * @brief Get I2S clock polarity
+ * @rmtoll I2SCFGR CKPOL LL_I2S_GetClockPolarity
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_I2S_POLARITY_LOW
+ * @arg @ref LL_I2S_POLARITY_HIGH
+ */
+__STATIC_INLINE uint32_t LL_I2S_GetClockPolarity(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_CKPOL));
+}
+
+/**
+ * @brief Set I2S standard protocol
+ * @rmtoll I2SCFGR I2SSTD LL_I2S_SetStandard\n
+ * I2SCFGR PCMSYNC LL_I2S_SetStandard
+ * @param SPIx SPI Instance
+ * @param Standard This parameter can be one of the following values:
+ * @arg @ref LL_I2S_STANDARD_PHILIPS
+ * @arg @ref LL_I2S_STANDARD_MSB
+ * @arg @ref LL_I2S_STANDARD_LSB
+ * @arg @ref LL_I2S_STANDARD_PCM_SHORT
+ * @arg @ref LL_I2S_STANDARD_PCM_LONG
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_SetStandard(SPI_TypeDef *SPIx, uint32_t Standard)
+{
+ MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC, Standard);
+}
+
+/**
+ * @brief Get I2S standard protocol
+ * @rmtoll I2SCFGR I2SSTD LL_I2S_GetStandard\n
+ * I2SCFGR PCMSYNC LL_I2S_GetStandard
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_I2S_STANDARD_PHILIPS
+ * @arg @ref LL_I2S_STANDARD_MSB
+ * @arg @ref LL_I2S_STANDARD_LSB
+ * @arg @ref LL_I2S_STANDARD_PCM_SHORT
+ * @arg @ref LL_I2S_STANDARD_PCM_LONG
+ */
+__STATIC_INLINE uint32_t LL_I2S_GetStandard(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC));
+}
+
+/**
+ * @brief Set I2S transfer mode
+ * @rmtoll I2SCFGR I2SCFG LL_I2S_SetTransferMode
+ * @param SPIx SPI Instance
+ * @param Mode This parameter can be one of the following values:
+ * @arg @ref LL_I2S_MODE_SLAVE_TX
+ * @arg @ref LL_I2S_MODE_SLAVE_RX
+ * @arg @ref LL_I2S_MODE_MASTER_TX
+ * @arg @ref LL_I2S_MODE_MASTER_RX
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_SetTransferMode(SPI_TypeDef *SPIx, uint32_t Mode)
+{
+ MODIFY_REG(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG, Mode);
+}
+
+/**
+ * @brief Get I2S transfer mode
+ * @rmtoll I2SCFGR I2SCFG LL_I2S_GetTransferMode
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_I2S_MODE_SLAVE_TX
+ * @arg @ref LL_I2S_MODE_SLAVE_RX
+ * @arg @ref LL_I2S_MODE_MASTER_TX
+ * @arg @ref LL_I2S_MODE_MASTER_RX
+ */
+__STATIC_INLINE uint32_t LL_I2S_GetTransferMode(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SCFG));
+}
+
+/**
+ * @brief Set I2S linear prescaler
+ * @rmtoll I2SPR I2SDIV LL_I2S_SetPrescalerLinear
+ * @param SPIx SPI Instance
+ * @param PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_SetPrescalerLinear(SPI_TypeDef *SPIx, uint8_t PrescalerLinear)
+{
+ MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV, PrescalerLinear);
+}
+
+/**
+ * @brief Get I2S linear prescaler
+ * @rmtoll I2SPR I2SDIV LL_I2S_GetPrescalerLinear
+ * @param SPIx SPI Instance
+ * @retval PrescalerLinear Value between Min_Data=0x02 and Max_Data=0xFF
+ */
+__STATIC_INLINE uint32_t LL_I2S_GetPrescalerLinear(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_I2SDIV));
+}
+
+/**
+ * @brief Set I2S parity prescaler
+ * @rmtoll I2SPR ODD LL_I2S_SetPrescalerParity
+ * @param SPIx SPI Instance
+ * @param PrescalerParity This parameter can be one of the following values:
+ * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN
+ * @arg @ref LL_I2S_PRESCALER_PARITY_ODD
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_SetPrescalerParity(SPI_TypeDef *SPIx, uint32_t PrescalerParity)
+{
+ MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_ODD, PrescalerParity << 8U);
+}
+
+/**
+ * @brief Get I2S parity prescaler
+ * @rmtoll I2SPR ODD LL_I2S_GetPrescalerParity
+ * @param SPIx SPI Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN
+ * @arg @ref LL_I2S_PRESCALER_PARITY_ODD
+ */
+__STATIC_INLINE uint32_t LL_I2S_GetPrescalerParity(SPI_TypeDef *SPIx)
+{
+ return (uint32_t)(READ_BIT(SPIx->I2SPR, SPI_I2SPR_ODD) >> 8U);
+}
+
+/**
+ * @brief Enable the master clock output (Pin MCK)
+ * @rmtoll I2SPR MCKOE LL_I2S_EnableMasterClock
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_EnableMasterClock(SPI_TypeDef *SPIx)
+{
+ SET_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE);
+}
+
+/**
+ * @brief Disable the master clock output (Pin MCK)
+ * @rmtoll I2SPR MCKOE LL_I2S_DisableMasterClock
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_DisableMasterClock(SPI_TypeDef *SPIx)
+{
+ CLEAR_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE);
+}
+
+/**
+ * @brief Check if the master clock output (Pin MCK) is enabled
+ * @rmtoll I2SPR MCKOE LL_I2S_IsEnabledMasterClock
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsEnabledMasterClock(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->I2SPR, SPI_I2SPR_MCKOE) == (SPI_I2SPR_MCKOE)) ? 1UL : 0UL);
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EF_FLAG FLAG Management
+ * @{
+ */
+
+/**
+ * @brief Check if Rx buffer is not empty
+ * @rmtoll SR RXNE LL_I2S_IsActiveFlag_RXNE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_RXNE(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsActiveFlag_RXNE(SPIx);
+}
+
+/**
+ * @brief Check if Tx buffer is empty
+ * @rmtoll SR TXE LL_I2S_IsActiveFlag_TXE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_TXE(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsActiveFlag_TXE(SPIx);
+}
+
+/**
+ * @brief Get busy flag
+ * @rmtoll SR BSY LL_I2S_IsActiveFlag_BSY
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_BSY(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsActiveFlag_BSY(SPIx);
+}
+
+/**
+ * @brief Get overrun error flag
+ * @rmtoll SR OVR LL_I2S_IsActiveFlag_OVR
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_OVR(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsActiveFlag_OVR(SPIx);
+}
+
+/**
+ * @brief Get underrun error flag
+ * @rmtoll SR UDR LL_I2S_IsActiveFlag_UDR
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_UDR(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_UDR) == (SPI_SR_UDR)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Get frame format error flag
+ * @rmtoll SR FRE LL_I2S_IsActiveFlag_FRE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_FRE(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsActiveFlag_FRE(SPIx);
+}
+
+/**
+ * @brief Get channel side flag.
+ * @note 0: Channel Left has to be transmitted or has been received\n
+ * 1: Channel Right has to be transmitted or has been received\n
+ * It has no significance in PCM mode.
+ * @rmtoll SR CHSIDE LL_I2S_IsActiveFlag_CHSIDE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsActiveFlag_CHSIDE(SPI_TypeDef *SPIx)
+{
+ return ((READ_BIT(SPIx->SR, SPI_SR_CHSIDE) == (SPI_SR_CHSIDE)) ? 1UL : 0UL);
+}
+
+/**
+ * @brief Clear overrun error flag
+ * @rmtoll SR OVR LL_I2S_ClearFlag_OVR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_ClearFlag_OVR(SPI_TypeDef *SPIx)
+{
+ LL_SPI_ClearFlag_OVR(SPIx);
+}
+
+/**
+ * @brief Clear underrun error flag
+ * @rmtoll SR UDR LL_I2S_ClearFlag_UDR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_ClearFlag_UDR(SPI_TypeDef *SPIx)
+{
+ __IO uint32_t tmpreg;
+ tmpreg = SPIx->SR;
+ (void)tmpreg;
+}
+
+/**
+ * @brief Clear frame format error flag
+ * @rmtoll SR FRE LL_I2S_ClearFlag_FRE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_ClearFlag_FRE(SPI_TypeDef *SPIx)
+{
+ LL_SPI_ClearFlag_FRE(SPIx);
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EF_IT Interrupt Management
+ * @{
+ */
+
+/**
+ * @brief Enable error IT
+ * @note This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode).
+ * @rmtoll CR2 ERRIE LL_I2S_EnableIT_ERR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_EnableIT_ERR(SPI_TypeDef *SPIx)
+{
+ LL_SPI_EnableIT_ERR(SPIx);
+}
+
+/**
+ * @brief Enable Rx buffer not empty IT
+ * @rmtoll CR2 RXNEIE LL_I2S_EnableIT_RXNE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_EnableIT_RXNE(SPI_TypeDef *SPIx)
+{
+ LL_SPI_EnableIT_RXNE(SPIx);
+}
+
+/**
+ * @brief Enable Tx buffer empty IT
+ * @rmtoll CR2 TXEIE LL_I2S_EnableIT_TXE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_EnableIT_TXE(SPI_TypeDef *SPIx)
+{
+ LL_SPI_EnableIT_TXE(SPIx);
+}
+
+/**
+ * @brief Disable error IT
+ * @note This bit controls the generation of an interrupt when an error condition occurs (OVR, UDR and FRE in I2S mode).
+ * @rmtoll CR2 ERRIE LL_I2S_DisableIT_ERR
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_DisableIT_ERR(SPI_TypeDef *SPIx)
+{
+ LL_SPI_DisableIT_ERR(SPIx);
+}
+
+/**
+ * @brief Disable Rx buffer not empty IT
+ * @rmtoll CR2 RXNEIE LL_I2S_DisableIT_RXNE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_DisableIT_RXNE(SPI_TypeDef *SPIx)
+{
+ LL_SPI_DisableIT_RXNE(SPIx);
+}
+
+/**
+ * @brief Disable Tx buffer empty IT
+ * @rmtoll CR2 TXEIE LL_I2S_DisableIT_TXE
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_DisableIT_TXE(SPI_TypeDef *SPIx)
+{
+ LL_SPI_DisableIT_TXE(SPIx);
+}
+
+/**
+ * @brief Check if ERR IT is enabled
+ * @rmtoll CR2 ERRIE LL_I2S_IsEnabledIT_ERR
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_ERR(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsEnabledIT_ERR(SPIx);
+}
+
+/**
+ * @brief Check if RXNE IT is enabled
+ * @rmtoll CR2 RXNEIE LL_I2S_IsEnabledIT_RXNE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_RXNE(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsEnabledIT_RXNE(SPIx);
+}
+
+/**
+ * @brief Check if TXE IT is enabled
+ * @rmtoll CR2 TXEIE LL_I2S_IsEnabledIT_TXE
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsEnabledIT_TXE(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsEnabledIT_TXE(SPIx);
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EF_DMA DMA Management
+ * @{
+ */
+
+/**
+ * @brief Enable DMA Rx
+ * @rmtoll CR2 RXDMAEN LL_I2S_EnableDMAReq_RX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_EnableDMAReq_RX(SPI_TypeDef *SPIx)
+{
+ LL_SPI_EnableDMAReq_RX(SPIx);
+}
+
+/**
+ * @brief Disable DMA Rx
+ * @rmtoll CR2 RXDMAEN LL_I2S_DisableDMAReq_RX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_DisableDMAReq_RX(SPI_TypeDef *SPIx)
+{
+ LL_SPI_DisableDMAReq_RX(SPIx);
+}
+
+/**
+ * @brief Check if DMA Rx is enabled
+ * @rmtoll CR2 RXDMAEN LL_I2S_IsEnabledDMAReq_RX
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_RX(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsEnabledDMAReq_RX(SPIx);
+}
+
+/**
+ * @brief Enable DMA Tx
+ * @rmtoll CR2 TXDMAEN LL_I2S_EnableDMAReq_TX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_EnableDMAReq_TX(SPI_TypeDef *SPIx)
+{
+ LL_SPI_EnableDMAReq_TX(SPIx);
+}
+
+/**
+ * @brief Disable DMA Tx
+ * @rmtoll CR2 TXDMAEN LL_I2S_DisableDMAReq_TX
+ * @param SPIx SPI Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_DisableDMAReq_TX(SPI_TypeDef *SPIx)
+{
+ LL_SPI_DisableDMAReq_TX(SPIx);
+}
+
+/**
+ * @brief Check if DMA Tx is enabled
+ * @rmtoll CR2 TXDMAEN LL_I2S_IsEnabledDMAReq_TX
+ * @param SPIx SPI Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_I2S_IsEnabledDMAReq_TX(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_IsEnabledDMAReq_TX(SPIx);
+}
+
+/**
+ * @}
+ */
+
+/** @defgroup I2S_LL_EF_DATA DATA Management
+ * @{
+ */
+
+/**
+ * @brief Read 16-Bits in data register
+ * @rmtoll DR DR LL_I2S_ReceiveData16
+ * @param SPIx SPI Instance
+ * @retval RxData Value between Min_Data=0x0000 and Max_Data=0xFFFF
+ */
+__STATIC_INLINE uint16_t LL_I2S_ReceiveData16(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_ReceiveData16(SPIx);
+}
+
+/**
+ * @brief Write 16-Bits in data register
+ * @rmtoll DR DR LL_I2S_TransmitData16
+ * @param SPIx SPI Instance
+ * @param TxData Value between Min_Data=0x0000 and Max_Data=0xFFFF
+ * @retval None
+ */
+__STATIC_INLINE void LL_I2S_TransmitData16(SPI_TypeDef *SPIx, uint16_t TxData)
+{
+ LL_SPI_TransmitData16(SPIx, TxData);
+}
+
+/**
+ * @}
+ */
+
+#if defined(USE_FULL_LL_DRIVER)
+/** @defgroup I2S_LL_EF_Init Initialization and de-initialization functions
+ * @{
+ */
+
+ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx);
+ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct);
+void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct);
+void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity);
+#if defined (SPI_I2S_FULLDUPLEX_SUPPORT)
+ErrorStatus LL_I2S_InitFullDuplex(SPI_TypeDef *I2Sxext, LL_I2S_InitTypeDef *I2S_InitStruct);
+#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */
+
+/**
+ * @}
+ */
+#endif /* USE_FULL_LL_DRIVER */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+#endif /* SPI_I2S_SUPPORT */
+
+#endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4) */
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* STM32F3xx_LL_SPI_H */
+
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_ll_spi.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_ll_spi.c
new file mode 100644
index 00000000..a3dcf239
--- /dev/null
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Drivers/STM32F3xx_HAL_Driver/Src/stm32f3xx_ll_spi.c
@@ -0,0 +1,640 @@
+/**
+ ******************************************************************************
+ * @file stm32f3xx_ll_spi.c
+ * @author MCD Application Team
+ * @brief SPI LL module driver.
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+#if defined(USE_FULL_LL_DRIVER)
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f3xx_ll_spi.h"
+#include "stm32f3xx_ll_bus.h"
+#include "stm32f3xx_ll_rcc.h"
+
+#ifdef USE_FULL_ASSERT
+#include "stm32_assert.h"
+#else
+#define assert_param(expr) ((void)0U)
+#endif /* USE_FULL_ASSERT */
+
+/** @addtogroup STM32F3xx_LL_Driver
+ * @{
+ */
+
+#if defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4)
+
+/** @addtogroup SPI_LL
+ * @{
+ */
+
+/* Private types -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+
+/* Private constants ---------------------------------------------------------*/
+/** @defgroup SPI_LL_Private_Constants SPI Private Constants
+ * @{
+ */
+/* SPI registers Masks */
+#define SPI_CR1_CLEAR_MASK (SPI_CR1_CPHA | SPI_CR1_CPOL | SPI_CR1_MSTR | \
+ SPI_CR1_BR | SPI_CR1_LSBFIRST | SPI_CR1_SSI | \
+ SPI_CR1_SSM | SPI_CR1_RXONLY | SPI_CR1_CRCL | \
+ SPI_CR1_CRCNEXT | SPI_CR1_CRCEN | SPI_CR1_BIDIOE | \
+ SPI_CR1_BIDIMODE)
+/**
+ * @}
+ */
+
+/* Private macros ------------------------------------------------------------*/
+/** @defgroup SPI_LL_Private_Macros SPI Private Macros
+ * @{
+ */
+#define IS_LL_SPI_TRANSFER_DIRECTION(__VALUE__) (((__VALUE__) == LL_SPI_FULL_DUPLEX) \
+ || ((__VALUE__) == LL_SPI_SIMPLEX_RX) \
+ || ((__VALUE__) == LL_SPI_HALF_DUPLEX_RX) \
+ || ((__VALUE__) == LL_SPI_HALF_DUPLEX_TX))
+
+#define IS_LL_SPI_MODE(__VALUE__) (((__VALUE__) == LL_SPI_MODE_MASTER) \
+ || ((__VALUE__) == LL_SPI_MODE_SLAVE))
+
+#define IS_LL_SPI_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_SPI_DATAWIDTH_4BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_5BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_6BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_7BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_8BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_9BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_10BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_11BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_12BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_13BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_14BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_15BIT) \
+ || ((__VALUE__) == LL_SPI_DATAWIDTH_16BIT))
+
+#define IS_LL_SPI_POLARITY(__VALUE__) (((__VALUE__) == LL_SPI_POLARITY_LOW) \
+ || ((__VALUE__) == LL_SPI_POLARITY_HIGH))
+
+#define IS_LL_SPI_PHASE(__VALUE__) (((__VALUE__) == LL_SPI_PHASE_1EDGE) \
+ || ((__VALUE__) == LL_SPI_PHASE_2EDGE))
+
+#define IS_LL_SPI_NSS(__VALUE__) (((__VALUE__) == LL_SPI_NSS_SOFT) \
+ || ((__VALUE__) == LL_SPI_NSS_HARD_INPUT) \
+ || ((__VALUE__) == LL_SPI_NSS_HARD_OUTPUT))
+
+#define IS_LL_SPI_BAUDRATE(__VALUE__) (((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV2) \
+ || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV4) \
+ || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV8) \
+ || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV16) \
+ || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV32) \
+ || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV64) \
+ || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV128) \
+ || ((__VALUE__) == LL_SPI_BAUDRATEPRESCALER_DIV256))
+
+#define IS_LL_SPI_BITORDER(__VALUE__) (((__VALUE__) == LL_SPI_LSB_FIRST) \
+ || ((__VALUE__) == LL_SPI_MSB_FIRST))
+
+#define IS_LL_SPI_CRCCALCULATION(__VALUE__) (((__VALUE__) == LL_SPI_CRCCALCULATION_ENABLE) \
+ || ((__VALUE__) == LL_SPI_CRCCALCULATION_DISABLE))
+
+#define IS_LL_SPI_CRC_POLYNOMIAL(__VALUE__) ((__VALUE__) >= 0x1U)
+
+/**
+ * @}
+ */
+
+/* Private function prototypes -----------------------------------------------*/
+
+/* Exported functions --------------------------------------------------------*/
+/** @addtogroup SPI_LL_Exported_Functions
+ * @{
+ */
+
+/** @addtogroup SPI_LL_EF_Init
+ * @{
+ */
+
+/**
+ * @brief De-initialize the SPI registers to their default reset values.
+ * @param SPIx SPI Instance
+ * @retval An ErrorStatus enumeration value:
+ * - SUCCESS: SPI registers are de-initialized
+ * - ERROR: SPI registers are not de-initialized
+ */
+ErrorStatus LL_SPI_DeInit(SPI_TypeDef *SPIx)
+{
+ ErrorStatus status = ERROR;
+
+ /* Check the parameters */
+ assert_param(IS_SPI_ALL_INSTANCE(SPIx));
+
+#if defined(SPI1)
+ if (SPIx == SPI1)
+ {
+ /* Force reset of SPI clock */
+ LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI1);
+
+ /* Release reset of SPI clock */
+ LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI1);
+
+ status = SUCCESS;
+ }
+#endif /* SPI1 */
+#if defined(SPI2)
+ if (SPIx == SPI2)
+ {
+ /* Force reset of SPI clock */
+ LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI2);
+
+ /* Release reset of SPI clock */
+ LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI2);
+
+ status = SUCCESS;
+ }
+#endif /* SPI2 */
+#if defined(SPI3)
+ if (SPIx == SPI3)
+ {
+ /* Force reset of SPI clock */
+ LL_APB1_GRP1_ForceReset(LL_APB1_GRP1_PERIPH_SPI3);
+
+ /* Release reset of SPI clock */
+ LL_APB1_GRP1_ReleaseReset(LL_APB1_GRP1_PERIPH_SPI3);
+
+ status = SUCCESS;
+ }
+#endif /* SPI3 */
+#if defined(SPI4)
+ if (SPIx == SPI4)
+ {
+ /* Force reset of SPI clock */
+ LL_APB2_GRP1_ForceReset(LL_APB2_GRP1_PERIPH_SPI4);
+
+ /* Release reset of SPI clock */
+ LL_APB2_GRP1_ReleaseReset(LL_APB2_GRP1_PERIPH_SPI4);
+
+ status = SUCCESS;
+ }
+#endif /* SPI4 */
+
+ return status;
+}
+
+/**
+ * @brief Initialize the SPI registers according to the specified parameters in SPI_InitStruct.
+ * @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0),
+ * SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
+ * @param SPIx SPI Instance
+ * @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure
+ * @retval An ErrorStatus enumeration value. (Return always SUCCESS)
+ */
+ErrorStatus LL_SPI_Init(SPI_TypeDef *SPIx, LL_SPI_InitTypeDef *SPI_InitStruct)
+{
+ ErrorStatus status = ERROR;
+
+ /* Check the SPI Instance SPIx*/
+ assert_param(IS_SPI_ALL_INSTANCE(SPIx));
+
+ /* Check the SPI parameters from SPI_InitStruct*/
+ assert_param(IS_LL_SPI_TRANSFER_DIRECTION(SPI_InitStruct->TransferDirection));
+ assert_param(IS_LL_SPI_MODE(SPI_InitStruct->Mode));
+ assert_param(IS_LL_SPI_DATAWIDTH(SPI_InitStruct->DataWidth));
+ assert_param(IS_LL_SPI_POLARITY(SPI_InitStruct->ClockPolarity));
+ assert_param(IS_LL_SPI_PHASE(SPI_InitStruct->ClockPhase));
+ assert_param(IS_LL_SPI_NSS(SPI_InitStruct->NSS));
+ assert_param(IS_LL_SPI_BAUDRATE(SPI_InitStruct->BaudRate));
+ assert_param(IS_LL_SPI_BITORDER(SPI_InitStruct->BitOrder));
+ assert_param(IS_LL_SPI_CRCCALCULATION(SPI_InitStruct->CRCCalculation));
+
+ if (LL_SPI_IsEnabled(SPIx) == 0x00000000U)
+ {
+ /*---------------------------- SPIx CR1 Configuration ------------------------
+ * Configure SPIx CR1 with parameters:
+ * - TransferDirection: SPI_CR1_BIDIMODE, SPI_CR1_BIDIOE and SPI_CR1_RXONLY bits
+ * - Master/Slave Mode: SPI_CR1_MSTR bit
+ * - ClockPolarity: SPI_CR1_CPOL bit
+ * - ClockPhase: SPI_CR1_CPHA bit
+ * - NSS management: SPI_CR1_SSM bit
+ * - BaudRate prescaler: SPI_CR1_BR[2:0] bits
+ * - BitOrder: SPI_CR1_LSBFIRST bit
+ * - CRCCalculation: SPI_CR1_CRCEN bit
+ */
+ MODIFY_REG(SPIx->CR1,
+ SPI_CR1_CLEAR_MASK,
+ SPI_InitStruct->TransferDirection | SPI_InitStruct->Mode |
+ SPI_InitStruct->ClockPolarity | SPI_InitStruct->ClockPhase |
+ SPI_InitStruct->NSS | SPI_InitStruct->BaudRate |
+ SPI_InitStruct->BitOrder | SPI_InitStruct->CRCCalculation);
+
+ /*---------------------------- SPIx CR2 Configuration ------------------------
+ * Configure SPIx CR2 with parameters:
+ * - DataWidth: DS[3:0] bits
+ * - NSS management: SSOE bit
+ */
+ MODIFY_REG(SPIx->CR2,
+ SPI_CR2_DS | SPI_CR2_SSOE,
+ SPI_InitStruct->DataWidth | (SPI_InitStruct->NSS >> 16U));
+
+ /* Set Rx FIFO to Quarter (1 Byte) in case of 8 Bits mode. No DataPacking by default */
+ if (SPI_InitStruct->DataWidth < LL_SPI_DATAWIDTH_9BIT)
+ {
+ LL_SPI_SetRxFIFOThreshold(SPIx, LL_SPI_RX_FIFO_TH_QUARTER);
+ }
+
+ /*---------------------------- SPIx CRCPR Configuration ----------------------
+ * Configure SPIx CRCPR with parameters:
+ * - CRCPoly: CRCPOLY[15:0] bits
+ */
+ if (SPI_InitStruct->CRCCalculation == LL_SPI_CRCCALCULATION_ENABLE)
+ {
+ assert_param(IS_LL_SPI_CRC_POLYNOMIAL(SPI_InitStruct->CRCPoly));
+ LL_SPI_SetCRCPolynomial(SPIx, SPI_InitStruct->CRCPoly);
+ }
+ status = SUCCESS;
+ }
+
+#if defined (SPI_I2S_SUPPORT)
+ /* Activate the SPI mode (Reset I2SMOD bit in I2SCFGR register) */
+ CLEAR_BIT(SPIx->I2SCFGR, SPI_I2SCFGR_I2SMOD);
+#endif /* SPI_I2S_SUPPORT */
+ return status;
+}
+
+/**
+ * @brief Set each @ref LL_SPI_InitTypeDef field to default value.
+ * @param SPI_InitStruct pointer to a @ref LL_SPI_InitTypeDef structure
+ * whose fields will be set to default values.
+ * @retval None
+ */
+void LL_SPI_StructInit(LL_SPI_InitTypeDef *SPI_InitStruct)
+{
+ /* Set SPI_InitStruct fields to default values */
+ SPI_InitStruct->TransferDirection = LL_SPI_FULL_DUPLEX;
+ SPI_InitStruct->Mode = LL_SPI_MODE_SLAVE;
+ SPI_InitStruct->DataWidth = LL_SPI_DATAWIDTH_8BIT;
+ SPI_InitStruct->ClockPolarity = LL_SPI_POLARITY_LOW;
+ SPI_InitStruct->ClockPhase = LL_SPI_PHASE_1EDGE;
+ SPI_InitStruct->NSS = LL_SPI_NSS_HARD_INPUT;
+ SPI_InitStruct->BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2;
+ SPI_InitStruct->BitOrder = LL_SPI_MSB_FIRST;
+ SPI_InitStruct->CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
+ SPI_InitStruct->CRCPoly = 7U;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+#if defined(SPI_I2S_SUPPORT)
+/** @addtogroup I2S_LL
+ * @{
+ */
+
+/* Private types -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private constants ---------------------------------------------------------*/
+/** @defgroup I2S_LL_Private_Constants I2S Private Constants
+ * @{
+ */
+/* I2S registers Masks */
+#define I2S_I2SCFGR_CLEAR_MASK (SPI_I2SCFGR_CHLEN | SPI_I2SCFGR_DATLEN | \
+ SPI_I2SCFGR_CKPOL | SPI_I2SCFGR_I2SSTD | \
+ SPI_I2SCFGR_I2SCFG | SPI_I2SCFGR_I2SMOD )
+
+#define I2S_I2SPR_CLEAR_MASK 0x0002U
+/**
+ * @}
+ */
+/* Private macros ------------------------------------------------------------*/
+/** @defgroup I2S_LL_Private_Macros I2S Private Macros
+ * @{
+ */
+
+#define IS_LL_I2S_DATAFORMAT(__VALUE__) (((__VALUE__) == LL_I2S_DATAFORMAT_16B) \
+ || ((__VALUE__) == LL_I2S_DATAFORMAT_16B_EXTENDED) \
+ || ((__VALUE__) == LL_I2S_DATAFORMAT_24B) \
+ || ((__VALUE__) == LL_I2S_DATAFORMAT_32B))
+
+#define IS_LL_I2S_CPOL(__VALUE__) (((__VALUE__) == LL_I2S_POLARITY_LOW) \
+ || ((__VALUE__) == LL_I2S_POLARITY_HIGH))
+
+#define IS_LL_I2S_STANDARD(__VALUE__) (((__VALUE__) == LL_I2S_STANDARD_PHILIPS) \
+ || ((__VALUE__) == LL_I2S_STANDARD_MSB) \
+ || ((__VALUE__) == LL_I2S_STANDARD_LSB) \
+ || ((__VALUE__) == LL_I2S_STANDARD_PCM_SHORT) \
+ || ((__VALUE__) == LL_I2S_STANDARD_PCM_LONG))
+
+#define IS_LL_I2S_MODE(__VALUE__) (((__VALUE__) == LL_I2S_MODE_SLAVE_TX) \
+ || ((__VALUE__) == LL_I2S_MODE_SLAVE_RX) \
+ || ((__VALUE__) == LL_I2S_MODE_MASTER_TX) \
+ || ((__VALUE__) == LL_I2S_MODE_MASTER_RX))
+
+#define IS_LL_I2S_MCLK_OUTPUT(__VALUE__) (((__VALUE__) == LL_I2S_MCLK_OUTPUT_ENABLE) \
+ || ((__VALUE__) == LL_I2S_MCLK_OUTPUT_DISABLE))
+
+#define IS_LL_I2S_AUDIO_FREQ(__VALUE__) ((((__VALUE__) >= LL_I2S_AUDIOFREQ_8K) \
+ && ((__VALUE__) <= LL_I2S_AUDIOFREQ_192K)) \
+ || ((__VALUE__) == LL_I2S_AUDIOFREQ_DEFAULT))
+
+#define IS_LL_I2S_PRESCALER_LINEAR(__VALUE__) ((__VALUE__) >= 0x2U)
+
+#define IS_LL_I2S_PRESCALER_PARITY(__VALUE__) (((__VALUE__) == LL_I2S_PRESCALER_PARITY_EVEN) \
+ || ((__VALUE__) == LL_I2S_PRESCALER_PARITY_ODD))
+/**
+ * @}
+ */
+
+/* Private function prototypes -----------------------------------------------*/
+
+/* Exported functions --------------------------------------------------------*/
+/** @addtogroup I2S_LL_Exported_Functions
+ * @{
+ */
+
+/** @addtogroup I2S_LL_EF_Init
+ * @{
+ */
+
+/**
+ * @brief De-initialize the SPI/I2S registers to their default reset values.
+ * @param SPIx SPI Instance
+ * @retval An ErrorStatus enumeration value:
+ * - SUCCESS: SPI registers are de-initialized
+ * - ERROR: SPI registers are not de-initialized
+ */
+ErrorStatus LL_I2S_DeInit(SPI_TypeDef *SPIx)
+{
+ return LL_SPI_DeInit(SPIx);
+}
+
+/**
+ * @brief Initializes the SPI/I2S registers according to the specified parameters in I2S_InitStruct.
+ * @note As some bits in SPI configuration registers can only be written when the SPI is disabled (SPI_CR1_SPE bit =0),
+ * SPI peripheral should be in disabled state prior calling this function. Otherwise, ERROR result will be returned.
+ * @param SPIx SPI Instance
+ * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure
+ * @retval An ErrorStatus enumeration value:
+ * - SUCCESS: SPI registers are Initialized
+ * - ERROR: SPI registers are not Initialized
+ */
+ErrorStatus LL_I2S_Init(SPI_TypeDef *SPIx, LL_I2S_InitTypeDef *I2S_InitStruct)
+{
+ uint32_t i2sdiv = 2U;
+ uint32_t i2sodd = 0U;
+ uint32_t packetlength = 1U;
+ uint32_t tmp;
+#if !defined (SPI_I2S_FULLDUPLEX_SUPPORT)
+ LL_RCC_ClocksTypeDef rcc_clocks;
+#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */
+ uint32_t sourceclock;
+ ErrorStatus status = ERROR;
+
+ /* Check the I2S parameters */
+ assert_param(IS_I2S_ALL_INSTANCE(SPIx));
+ assert_param(IS_LL_I2S_MODE(I2S_InitStruct->Mode));
+ assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->Standard));
+ assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->DataFormat));
+ assert_param(IS_LL_I2S_MCLK_OUTPUT(I2S_InitStruct->MCLKOutput));
+ assert_param(IS_LL_I2S_AUDIO_FREQ(I2S_InitStruct->AudioFreq));
+ assert_param(IS_LL_I2S_CPOL(I2S_InitStruct->ClockPolarity));
+
+ if (LL_I2S_IsEnabled(SPIx) == 0x00000000U)
+ {
+ /*---------------------------- SPIx I2SCFGR Configuration --------------------
+ * Configure SPIx I2SCFGR with parameters:
+ * - Mode: SPI_I2SCFGR_I2SCFG[1:0] bit
+ * - Standard: SPI_I2SCFGR_I2SSTD[1:0] and SPI_I2SCFGR_PCMSYNC bits
+ * - DataFormat: SPI_I2SCFGR_CHLEN and SPI_I2SCFGR_DATLEN bits
+ * - ClockPolarity: SPI_I2SCFGR_CKPOL bit
+ */
+
+ /* Write to SPIx I2SCFGR */
+ MODIFY_REG(SPIx->I2SCFGR,
+ I2S_I2SCFGR_CLEAR_MASK,
+ I2S_InitStruct->Mode | I2S_InitStruct->Standard |
+ I2S_InitStruct->DataFormat | I2S_InitStruct->ClockPolarity |
+ SPI_I2SCFGR_I2SMOD);
+
+ /*---------------------------- SPIx I2SPR Configuration ----------------------
+ * Configure SPIx I2SPR with parameters:
+ * - MCLKOutput: SPI_I2SPR_MCKOE bit
+ * - AudioFreq: SPI_I2SPR_I2SDIV[7:0] and SPI_I2SPR_ODD bits
+ */
+
+ /* If the requested audio frequency is not the default, compute the prescaler (i2sodd, i2sdiv)
+ * else, default values are used: i2sodd = 0U, i2sdiv = 2U.
+ */
+ if (I2S_InitStruct->AudioFreq != LL_I2S_AUDIOFREQ_DEFAULT)
+ {
+ /* Check the frame length (For the Prescaler computing)
+ * Default value: LL_I2S_DATAFORMAT_16B (packetlength = 1U).
+ */
+ if (I2S_InitStruct->DataFormat != LL_I2S_DATAFORMAT_16B)
+ {
+ /* Packet length is 32 bits */
+ packetlength = 2U;
+ }
+
+#if defined (SPI_I2S_FULLDUPLEX_SUPPORT)
+ /* If an external I2S clock has to be used, the specific define should be set
+ in the project configuration or in the stm32f3xx_ll_rcc.h file */
+ /* Get the I2S source clock value */
+ sourceclock = LL_RCC_GetI2SClockFreq(LL_RCC_I2S_CLKSOURCE);
+#else /* Case for STM32F373xC and STM32F378xx series */
+ /* I2S Clock source is System clock: Get System Clock frequency */
+ LL_RCC_GetSystemClocksFreq(&rcc_clocks);
+ if (SPIx == SPI1)
+ {
+ sourceclock = rcc_clocks.PCLK2_Frequency;
+ }
+ else /* SPI2 or SPI3 */
+ {
+ sourceclock = rcc_clocks.PCLK1_Frequency;
+ }
+
+#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */
+
+ /* Compute the Real divider depending on the MCLK output state with a floating point */
+ if (I2S_InitStruct->MCLKOutput == LL_I2S_MCLK_OUTPUT_ENABLE)
+ {
+ /* MCLK output is enabled */
+ tmp = (((((sourceclock / 256U) * 10U) / I2S_InitStruct->AudioFreq)) + 5U);
+ }
+ else
+ {
+ /* MCLK output is disabled */
+ tmp = (((((sourceclock / (32U * packetlength)) * 10U) / I2S_InitStruct->AudioFreq)) + 5U);
+ }
+
+ /* Remove the floating point */
+ tmp = tmp / 10U;
+
+ /* Check the parity of the divider */
+ i2sodd = (tmp & (uint16_t)0x0001U);
+
+ /* Compute the i2sdiv prescaler */
+ i2sdiv = ((tmp - i2sodd) / 2U);
+
+ /* Get the Mask for the Odd bit (SPI_I2SPR[8]) register */
+ i2sodd = (i2sodd << 8U);
+ }
+
+ /* Test if the divider is 1 or 0 or greater than 0xFF */
+ if ((i2sdiv < 2U) || (i2sdiv > 0xFFU))
+ {
+ /* Set the default values */
+ i2sdiv = 2U;
+ i2sodd = 0U;
+ }
+
+ /* Write to SPIx I2SPR register the computed value */
+ WRITE_REG(SPIx->I2SPR, i2sdiv | i2sodd | I2S_InitStruct->MCLKOutput);
+
+ status = SUCCESS;
+ }
+ return status;
+}
+
+/**
+ * @brief Set each @ref LL_I2S_InitTypeDef field to default value.
+ * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure
+ * whose fields will be set to default values.
+ * @retval None
+ */
+void LL_I2S_StructInit(LL_I2S_InitTypeDef *I2S_InitStruct)
+{
+ /*--------------- Reset I2S init structure parameters values -----------------*/
+ I2S_InitStruct->Mode = LL_I2S_MODE_SLAVE_TX;
+ I2S_InitStruct->Standard = LL_I2S_STANDARD_PHILIPS;
+ I2S_InitStruct->DataFormat = LL_I2S_DATAFORMAT_16B;
+ I2S_InitStruct->MCLKOutput = LL_I2S_MCLK_OUTPUT_DISABLE;
+ I2S_InitStruct->AudioFreq = LL_I2S_AUDIOFREQ_DEFAULT;
+ I2S_InitStruct->ClockPolarity = LL_I2S_POLARITY_LOW;
+}
+
+/**
+ * @brief Set linear and parity prescaler.
+ * @note To calculate value of PrescalerLinear(I2SDIV[7:0] bits) and PrescalerParity(ODD bit)\n
+ * Check Audio frequency table and formulas inside Reference Manual (SPI/I2S).
+ * @param SPIx SPI Instance
+ * @param PrescalerLinear value Min_Data=0x02 and Max_Data=0xFF.
+ * @param PrescalerParity This parameter can be one of the following values:
+ * @arg @ref LL_I2S_PRESCALER_PARITY_EVEN
+ * @arg @ref LL_I2S_PRESCALER_PARITY_ODD
+ * @retval None
+ */
+void LL_I2S_ConfigPrescaler(SPI_TypeDef *SPIx, uint32_t PrescalerLinear, uint32_t PrescalerParity)
+{
+ /* Check the I2S parameters */
+ assert_param(IS_I2S_ALL_INSTANCE(SPIx));
+ assert_param(IS_LL_I2S_PRESCALER_LINEAR(PrescalerLinear));
+ assert_param(IS_LL_I2S_PRESCALER_PARITY(PrescalerParity));
+
+ /* Write to SPIx I2SPR */
+ MODIFY_REG(SPIx->I2SPR, SPI_I2SPR_I2SDIV | SPI_I2SPR_ODD, PrescalerLinear | (PrescalerParity << 8U));
+}
+
+#if defined (SPI_I2S_FULLDUPLEX_SUPPORT)
+/**
+ * @brief Configures the full duplex mode for the I2Sx peripheral using its extension
+ * I2Sxext according to the specified parameters in the I2S_InitStruct.
+ * @note The structure pointed by I2S_InitStruct parameter should be the same
+ * used for the master I2S peripheral. In this case, if the master is
+ * configured as transmitter, the slave will be receiver and vice versa.
+ * Or you can force a different mode by modifying the field I2S_Mode to the
+ * value I2S_SlaveRx or I2S_SlaveTx independently of the master configuration.
+ * @param I2Sxext SPI Instance
+ * @param I2S_InitStruct pointer to a @ref LL_I2S_InitTypeDef structure
+ * @retval An ErrorStatus enumeration value:
+ * - SUCCESS: I2Sxext registers are Initialized
+ * - ERROR: I2Sxext registers are not Initialized
+ */
+ErrorStatus LL_I2S_InitFullDuplex(SPI_TypeDef *I2Sxext, LL_I2S_InitTypeDef *I2S_InitStruct)
+{
+ uint32_t mode = 0U;
+ ErrorStatus status = ERROR;
+
+ /* Check the I2S parameters */
+ assert_param(IS_I2S_EXT_ALL_INSTANCE(I2Sxext));
+ assert_param(IS_LL_I2S_MODE(I2S_InitStruct->Mode));
+ assert_param(IS_LL_I2S_STANDARD(I2S_InitStruct->Standard));
+ assert_param(IS_LL_I2S_DATAFORMAT(I2S_InitStruct->DataFormat));
+ assert_param(IS_LL_I2S_CPOL(I2S_InitStruct->ClockPolarity));
+
+ if (LL_I2S_IsEnabled(I2Sxext) == 0x00000000U)
+ {
+ /*---------------------------- SPIx I2SCFGR Configuration --------------------
+ * Configure SPIx I2SCFGR with parameters:
+ * - Mode: SPI_I2SCFGR_I2SCFG[1:0] bit
+ * - Standard: SPI_I2SCFGR_I2SSTD[1:0] and SPI_I2SCFGR_PCMSYNC bits
+ * - DataFormat: SPI_I2SCFGR_CHLEN and SPI_I2SCFGR_DATLEN bits
+ * - ClockPolarity: SPI_I2SCFGR_CKPOL bit
+ */
+
+ /* Reset I2SPR registers */
+ WRITE_REG(I2Sxext->I2SPR, I2S_I2SPR_CLEAR_MASK);
+
+ /* Get the mode to be configured for the extended I2S */
+ if ((I2S_InitStruct->Mode == LL_I2S_MODE_MASTER_TX) || (I2S_InitStruct->Mode == LL_I2S_MODE_SLAVE_TX))
+ {
+ mode = LL_I2S_MODE_SLAVE_RX;
+ }
+ else
+ {
+ if ((I2S_InitStruct->Mode == LL_I2S_MODE_MASTER_RX) || (I2S_InitStruct->Mode == LL_I2S_MODE_SLAVE_RX))
+ {
+ mode = LL_I2S_MODE_SLAVE_TX;
+ }
+ }
+
+ /* Write to SPIx I2SCFGR */
+ MODIFY_REG(I2Sxext->I2SCFGR,
+ I2S_I2SCFGR_CLEAR_MASK,
+ I2S_InitStruct->Standard |
+ I2S_InitStruct->DataFormat | I2S_InitStruct->ClockPolarity |
+ SPI_I2SCFGR_I2SMOD | mode);
+
+ status = SUCCESS;
+ }
+ return status;
+}
+#endif /* SPI_I2S_FULLDUPLEX_SUPPORT */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+#endif /* SPI_I2S_SUPPORT */
+
+#endif /* defined (SPI1) || defined (SPI2) || defined (SPI3) || defined (SPI4) */
+
+/**
+ * @}
+ */
+
+#endif /* USE_FULL_LL_DRIVER */
+
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/ffconf.h b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/ffconf.h
new file mode 100644
index 00000000..c51b9383
--- /dev/null
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/ffconf.h
@@ -0,0 +1,266 @@
+/*---------------------------------------------------------------------------/
+/ FatFs - FAT file system module configuration file R0.12 (C)ChaN, 2016
+/---------------------------------------------------------------------------*/
+
+#define _FFCONF 88100 /* Revision ID */
+
+/*---------------------------------------------------------------------------/
+/ Function Configurations
+/---------------------------------------------------------------------------*/
+
+#define _FS_READONLY 0
+/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
+/ Read-only configuration removes writing API functions, f_write(), f_sync(),
+/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
+/ and optional writing functions as well. */
+
+
+#define _FS_MINIMIZE 0
+/* This option defines minimization level to remove some basic API functions.
+/
+/ 0: All basic functions are enabled.
+/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
+/ are removed.
+/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
+/ 3: f_lseek() function is removed in addition to 2. */
+
+
+#define _USE_STRFUNC 2 /* 0:Disable or 1-2:Enable */
+/* This option switches string functions, f_gets(), f_putc(), f_puts() and
+/ f_printf().
+/
+/ 0: Disable string functions.
+/ 1: Enable without LF-CRLF conversion.
+/ 2: Enable with LF-CRLF conversion. */
+
+
+#define _USE_FIND 0
+/* This option switches filtered directory read functions, f_findfirst() and
+/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
+
+
+#define _USE_MKFS 0
+/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
+
+
+#define _USE_FASTSEEK 0
+/* This option switches fast seek function. (0:Disable or 1:Enable) */
+
+
+#define _USE_EXPAND 0
+/* This option switches f_expand function. (0:Disable or 1:Enable) */
+
+
+#define _USE_CHMOD 0
+/* This option switches attribute manipulation functions, f_chmod() and f_utime().
+/ (0:Disable or 1:Enable) Also _FS_READONLY needs to be 0 to enable this option. */
+
+
+#define _USE_LABEL 0
+/* This option switches volume label functions, f_getlabel() and f_setlabel().
+/ (0:Disable or 1:Enable) */
+
+
+#define _USE_FORWARD 0
+/* This option switches f_forward() function. (0:Disable or 1:Enable)
+/ To enable it, also _FS_TINY need to be 1. */
+
+
+/*---------------------------------------------------------------------------/
+/ Locale and Namespace Configurations
+/---------------------------------------------------------------------------*/
+
+#define _CODE_PAGE 437
+/* This option specifies the OEM code page to be used on the target system.
+/ Incorrect setting of the code page can cause a file open failure.
+/
+/ 1 - ASCII (No extended character. Non-LFN cfg. only)
+/ 437 - U.S.
+/ 720 - Arabic
+/ 737 - Greek
+/ 771 - KBL
+/ 775 - Baltic
+/ 850 - Latin 1
+/ 852 - Latin 2
+/ 855 - Cyrillic
+/ 857 - Turkish
+/ 860 - Portuguese
+/ 861 - Icelandic
+/ 862 - Hebrew
+/ 863 - Canadian French
+/ 864 - Arabic
+/ 865 - Nordic
+/ 866 - Russian
+/ 869 - Greek 2
+/ 932 - Japanese (DBCS)
+/ 936 - Simplified Chinese (DBCS)
+/ 949 - Korean (DBCS)
+/ 950 - Traditional Chinese (DBCS)
+*/
+
+
+#define _USE_LFN 1 /* 0 to 3 */
+#define _MAX_LFN 255
+/* The _USE_LFN switches the support of long file name (LFN).
+/
+/ 0: Disable support of LFN. _MAX_LFN has no effect.
+/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
+/ 2: Enable LFN with dynamic working buffer on the STACK.
+/ 3: Enable LFN with dynamic working buffer on the HEAP.
+/
+/ To enable the LFN, Unicode handling functions (option/unicode.c) must be added
+/ to the project. The working buffer occupies (_MAX_LFN + 1) * 2 bytes and
+/ additional 608 bytes at exFAT enabled. _MAX_LFN can be in range from 12 to 255.
+/ It should be set 255 to support full featured LFN operations.
+/ When use stack for the working buffer, take care on stack overflow. When use heap
+/ memory for the working buffer, memory management functions, ff_memalloc() and
+/ ff_memfree(), must be added to the project. */
+
+
+#define _LFN_UNICODE 0
+/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode)
+/ To use Unicode string for the path name, enable LFN and set _LFN_UNICODE = 1.
+/ This option also affects behavior of string I/O functions. */
+
+
+#define _STRF_ENCODE 3
+/* When _LFN_UNICODE == 1, this option selects the character encoding on the file to
+/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
+/
+/ 0: ANSI/OEM
+/ 1: UTF-16LE
+/ 2: UTF-16BE
+/ 3: UTF-8
+/
+/ This option has no effect when _LFN_UNICODE == 0. */
+
+
+#define _FS_RPATH 0
+/* This option configures support of relative path.
+/
+/ 0: Disable relative path and remove related functions.
+/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
+/ 2: f_getcwd() function is available in addition to 1.
+*/
+
+
+/*---------------------------------------------------------------------------/
+/ Drive/Volume Configurations
+/---------------------------------------------------------------------------*/
+
+#define _VOLUMES 1
+/* Number of volumes (logical drives) to be used. */
+
+
+#define _STR_VOLUME_ID 0
+#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
+/* _STR_VOLUME_ID switches string support of volume ID.
+/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
+/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
+/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
+/ the drive ID strings are: A-Z and 0-9. */
+
+
+#define _MULTI_PARTITION 0
+/* This option switches support of multi-partition on a physical drive.
+/ By default (0), each logical drive number is bound to the same physical drive
+/ number and only an FAT volume found on the physical drive will be mounted.
+/ When multi-partition is enabled (1), each logical drive number can be bound to
+/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
+/ funciton will be available. */
+
+
+#define _MIN_SS 512
+#define _MAX_SS 512
+/* These options configure the range of sector size to be supported. (512, 1024,
+/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
+/ harddisk. But a larger value may be required for on-board flash memory and some
+/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured
+/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
+/ disk_ioctl() function. */
+
+
+#define _USE_TRIM 0
+/* This option switches support of ATA-TRIM. (0:Disable or 1:Enable)
+/ To enable Trim function, also CTRL_TRIM command should be implemented to the
+/ disk_ioctl() function. */
+
+
+#define _FS_NOFSINFO 0
+/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
+/ option, and f_getfree() function at first time after volume mount will force
+/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
+/
+/ bit0=0: Use free cluster count in the FSINFO if available.
+/ bit0=1: Do not trust free cluster count in the FSINFO.
+/ bit1=0: Use last allocated cluster number in the FSINFO if available.
+/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
+*/
+
+
+
+/*---------------------------------------------------------------------------/
+/ System Configurations
+/---------------------------------------------------------------------------*/
+
+#define _FS_TINY 0
+/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
+/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS bytes.
+/ Instead of private sector buffer eliminated from the file object, common sector
+/ buffer in the file system object (FATFS) is used for the file data transfer. */
+
+
+#define _FS_EXFAT 0
+/* This option switches support of exFAT file system in addition to the traditional
+/ FAT file system. (0:Disable or 1:Enable) To enable exFAT, also LFN must be enabled.
+/ Note that enabling exFAT discards C89 compatibility. */
+
+
+#define _FS_NORTC 1
+#define _NORTC_MON 3
+#define _NORTC_MDAY 1
+#define _NORTC_YEAR 2016
+/* The option _FS_NORTC switches timestamp functiton. If the system does not have
+/ any RTC function or valid timestamp is not needed, set _FS_NORTC = 1 to disable
+/ the timestamp function. All objects modified by FatFs will have a fixed timestamp
+/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR in local time.
+/ To enable timestamp function (_FS_NORTC = 0), get_fattime() function need to be
+/ added to the project to get current time form real-time clock. _NORTC_MON,
+/ _NORTC_MDAY and _NORTC_YEAR have no effect.
+/ These options have no effect at read-only configuration (_FS_READONLY = 1). */
+
+
+#define _FS_LOCK 0
+/* The option _FS_LOCK switches file lock function to control duplicated file open
+/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
+/ is 1.
+/
+/ 0: Disable file lock function. To avoid volume corruption, application program
+/ should avoid illegal open, remove and rename to the open objects.
+/ >0: Enable file lock function. The value defines how many files/sub-directories
+/ can be opened simultaneously under file lock control. Note that the file
+/ lock control is independent of re-entrancy. */
+
+
+#define _FS_REENTRANT 0
+#define _FS_TIMEOUT 1000
+#define _SYNC_t HANDLE
+/* The option _FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
+/ module itself. Note that regardless of this option, file access to different
+/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
+/ and f_fdisk() function, are always not re-entrant. Only file/directory access
+/ to the same volume is under control of this function.
+/
+/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect.
+/ 1: Enable re-entrancy. Also user provided synchronization handlers,
+/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
+/ function, must be added to the project. Samples are available in
+/ option/syscall.c.
+/
+/ The _FS_TIMEOUT defines timeout period in unit of time tick.
+/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
+/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
+/ included somewhere in the scope of ff.c. */
+
+
+/*--- End of configuration options ---*/
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/mmc.c b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/mmc.c
new file mode 100644
index 00000000..15594a56
--- /dev/null
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/Library/FatFS/mmc.c
@@ -0,0 +1,680 @@
+/*------------------------------------------------------------------------/
+/ MMCv3/SDv1/SDv2 (in SPI mode) control module
+/-------------------------------------------------------------------------/
+/
+/ Copyright (C) 2013, ChaN, all right reserved.
+/
+/ * This software is a free software and there is NO WARRANTY.
+/ * No restriction on use. You can use, modify and redistribute it for
+/ personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY.
+/ * Redistributions of source code must retain the above copyright notice.
+/
+/-------------------------------------------------------------------------*/
+
+
+/*
+ * This file was modified from a sample available from the FatFs
+ * web site. It was modified to work with a Olimexino-STM32F3
+ * evaluation board.
+ *
+ */
+#include "diskio.h"
+#include "stm32f3xx.h" /* STM32 registers and drivers */
+#include "stm32f3xx_ll_bus.h" /* STM32 LL BUS header */
+#include "stm32f3xx_ll_gpio.h" /* STM32 LL GPIO header */
+#include "stm32f3xx_ll_spi.h" /* STM32 LL SPI header */
+#include "boot.h"
+
+
+/*--------------------------------------------------------------------------
+
+ Macro Definitions
+
+---------------------------------------------------------------------------*/
+/* MMC card type flags (MMC_GET_TYPE) */
+#define CT_MMC 0x01 /* MMC ver 3 */
+#define CT_SD1 0x02 /* SD ver 1 */
+#define CT_SD2 0x04 /* SD ver 2 */
+#define CT_SDC (CT_SD1|CT_SD2) /* SD */
+#define CT_BLOCK 0x08 /* Block addressing */
+
+
+/*--------------------------------------------------------------------------
+
+ Module Private Functions
+
+---------------------------------------------------------------------------*/
+
+/* Definitions for MMC/SDC command */
+#define CMD0 (0) /* GO_IDLE_STATE */
+#define CMD1 (1) /* SEND_OP_COND */
+#define ACMD41 (41|0x80) /* SEND_OP_COND (SDC) */
+#define CMD8 (8) /* SEND_IF_COND */
+#define CMD9 (9) /* SEND_CSD */
+#define CMD10 (10) /* SEND_CID */
+#define CMD12 (12) /* STOP_TRANSMISSION */
+#define ACMD13 (13|0x80) /* SD_STATUS (SDC) */
+#define CMD16 (16) /* SET_BLOCKLEN */
+#define CMD17 (17) /* READ_SINGLE_BLOCK */
+#define CMD18 (18) /* READ_MULTIPLE_BLOCK */
+#define CMD23 (23) /* SET_BLOCK_COUNT */
+#define ACMD23 (23|0x80) /* SET_WR_BLK_ERASE_COUNT (SDC) */
+#define CMD24 (24) /* WRITE_BLOCK */
+#define CMD25 (25) /* WRITE_MULTIPLE_BLOCK */
+#define CMD41 (41) /* SEND_OP_COND (ACMD) */
+#define CMD55 (55) /* APP_CMD */
+#define CMD58 (58) /* READ_OCR */
+
+
+/* Control signals (Platform dependent) */
+#define CS_LOW() LL_GPIO_ResetOutputPin(GPIOD, LL_GPIO_PIN_2) /* MMC CS = L */
+#define CS_HIGH() LL_GPIO_SetOutputPin(GPIOD, LL_GPIO_PIN_2) /* MMC CS = H */
+
+
+#define FCLK_SLOW() /* Set slow clock (100k-400k) */
+#define FCLK_FAST() set_max_speed() /* Set fast clock (depends on the CSD) */
+
+static volatile
+DSTATUS Stat = STA_NOINIT; /* Disk status */
+
+static
+UINT CardType;
+
+/*-----------------------------------------------------------------------*/
+/* Transmit/Receive data to/from MMC via SPI (Platform dependent) */
+/*-----------------------------------------------------------------------*/
+
+static
+BYTE xchg_spi (BYTE dat)
+{
+ BYTE result = 0;
+ DWORD timeOutTime;
+ BYTE timeoutDetected = 0;
+
+ /* Send byte through the SPI peripheral */
+ LL_SPI_TransmitData8(SPI2, dat);
+
+ /* Set timeout for 50 ms from now */
+ timeOutTime = TimerGet() + 50;
+
+ /* Wait to receive a byte with timeout */
+ while (LL_SPI_IsActiveFlag_RXNE(SPI2) == 0)
+ {
+ /* Service the watchdog */
+ CopService();
+
+ /* Check for timeout */
+ if (TimerGet() > timeOutTime)
+ {
+ /* Set flag to remember that a timeout occurred and nothing was received */
+ timeoutDetected = 1;
+ /* Stop waiting */
+ break;
+ }
+ }
+
+ /* Read the value of the received byte */
+ if (timeoutDetected == 0)
+ {
+ result = LL_SPI_ReceiveData8(SPI2);
+ }
+
+ /* Give the result back to the caller */
+ return result;
+}
+
+static
+void rcvr_spi_m (BYTE *dst)
+{
+ *dst = xchg_spi(0xFF);
+}
+
+
+/*-----------------------------------------------------------------------*/
+/* Power Control (Platform dependent) */
+/*-----------------------------------------------------------------------*/
+/* When the target system does not support socket power control, there */
+/* is nothing to do in these functions. */
+static
+void power_on (void)
+{
+ LL_SPI_InitTypeDef SPI_InitStruct = { 0 };
+ LL_GPIO_InitTypeDef GPIO_InitStruct = { 0 };
+ BYTE n;
+
+ /*
+ * This doesn't really turn the power on, but initializes the
+ * SSI port and pins needed to talk to the card.
+ */
+ /* Enable SPI and GPIO peripheral clocks. */
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOB);
+ LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOD);
+ LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_SPI2);
+
+ /* Configure I/O for Chip select (PD2) */
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_2;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ LL_GPIO_Init(GPIOD, &GPIO_InitStruct);
+ /* De-select the Card: Chip Select high */
+ LL_GPIO_SetOutputPin(GPIOD, LL_GPIO_PIN_2);
+
+ /* Configure SPI pins: SCK (PB13), MOSI (PB15) and MISO (PB14) */
+ GPIO_InitStruct.Pin = LL_GPIO_PIN_13 | LL_GPIO_PIN_14 | LL_GPIO_PIN_15;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
+ GPIO_InitStruct.Alternate = LL_GPIO_AF_5;
+ LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
+ /* SPI2 parameter configuration */
+ SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
+ SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
+ SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
+ SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
+ SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
+ SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
+ SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV128; // 36000kHz/128=281kHz < 400kHz
+ SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
+ SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
+ SPI_InitStruct.CRCPoly = 7;
+ LL_SPI_Init(SPI2, &SPI_InitStruct);
+ LL_SPI_SetStandard(SPI2, LL_SPI_PROTOCOL_MOTOROLA);
+ LL_SPI_DisableNSSPulseMgt(SPI2);
+ LL_SPI_SetRxFIFOThreshold(SPI2, LL_SPI_RX_FIFO_TH_QUARTER);
+ LL_SPI_Enable(SPI2);
+
+ /* Apply more than 74 pulses to SCLK, with DI and CS high, for the card to be able to
+ * accept a native command at SCLK < 400 kHz.
+ */
+ for (n = 10; n; n--)
+ {
+ xchg_spi(0xFF); /* Send 80 dummy clocks */
+ }
+}
+
+// set the SSI speed to the max setting
+static
+void set_max_speed(void)
+{
+ LL_SPI_InitTypeDef SPI_InitStruct;
+
+ /* Disable the SPI system */
+ LL_SPI_Disable(SPI2);
+
+ /* MMC/SDC can work at the clock frequency up to 20/25MHz so pick a speed close to
+ * this but not higher
+ */
+ SPI_InitStruct.TransferDirection = LL_SPI_FULL_DUPLEX;
+ SPI_InitStruct.Mode = LL_SPI_MODE_MASTER;
+ SPI_InitStruct.DataWidth = LL_SPI_DATAWIDTH_8BIT;
+ SPI_InitStruct.ClockPolarity = LL_SPI_POLARITY_LOW;
+ SPI_InitStruct.ClockPhase = LL_SPI_PHASE_1EDGE;
+ SPI_InitStruct.NSS = LL_SPI_NSS_SOFT;
+ SPI_InitStruct.BaudRate = LL_SPI_BAUDRATEPRESCALER_DIV2; // 36MHz/2=18MHz < 20MHz
+ SPI_InitStruct.BitOrder = LL_SPI_MSB_FIRST;
+ SPI_InitStruct.CRCCalculation = LL_SPI_CRCCALCULATION_DISABLE;
+ SPI_InitStruct.CRCPoly = 7;
+ LL_SPI_Init(SPI2, &SPI_InitStruct);
+ LL_SPI_SetStandard(SPI2, LL_SPI_PROTOCOL_MOTOROLA);
+ LL_SPI_DisableNSSPulseMgt(SPI2);
+ LL_SPI_SetRxFIFOThreshold(SPI2, LL_SPI_RX_FIFO_TH_QUARTER);
+ LL_SPI_Enable(SPI2);
+}
+
+static
+void power_off (void)
+{
+ Stat |= STA_NOINIT; /* Force uninitialized */
+}
+
+
+/*-----------------------------------------------------------------------*/
+/* Wait for card ready */
+/*-----------------------------------------------------------------------*/
+
+static
+int wait_ready (void)
+{
+ BYTE d;
+ DWORD timeOutTime;
+
+ /* set timeout for 500 ms from now */
+ timeOutTime = TimerGet() + 500;
+
+ do {
+ d = xchg_spi(0xFF);
+ /* Service the watchdog */
+ CopService();
+ } while ((d != 0xFF) && (TimerGet() < timeOutTime));
+
+ return (d == 0xFF) ? 1 : 0;
+}
+
+
+/*-----------------------------------------------------------------------*/
+/* Deselect the card and release SPI bus */
+/*-----------------------------------------------------------------------*/
+
+static
+void deselect_card (void)
+{
+ CS_HIGH();
+ xchg_spi(0xFF); /* Dummy clock (force DO hi-z for multiple slave SPI) */
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Select the card and wait ready */
+/*-----------------------------------------------------------------------*/
+
+static
+int select_card (void) /* 1:Successful, 0:Timeout */
+{
+ CS_LOW();
+ xchg_spi(0xFF); /* Dummy clock (force DO enabled) */
+
+ if (wait_ready()) return 1; /* OK */
+ deselect_card();
+ return 0; /* Timeout */
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Receive a data packet from MMC */
+/*-----------------------------------------------------------------------*/
+
+static
+int rcvr_datablock ( /* 1:OK, 0:Failed */
+ BYTE *buff, /* Data buffer to store received data */
+ UINT btr /* Byte count (must be multiple of 4) */
+)
+{
+ BYTE token;
+ DWORD timeOutTime;
+
+ /* set timeout for 100 ms from now */
+ timeOutTime = TimerGet() + 100;
+
+ do { /* Wait for data packet in timeout of 100ms */
+ token = xchg_spi(0xFF);
+ /* Service the watchdog */
+ CopService();
+
+ } while ((token == 0xFF) && (TimerGet() < timeOutTime));
+
+ if(token != 0xFE) return 0; /* If not valid data token, retutn with error */
+
+ do { /* Receive the data block into buffer */
+ rcvr_spi_m(buff++);
+ rcvr_spi_m(buff++);
+ /* Service the watchdog */
+ CopService();
+ } while (btr -= 2);
+ xchg_spi(0xFF); /* Discard CRC */
+ xchg_spi(0xFF);
+
+ return 1; /* Return with success */
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Send a data packet to MMC */
+/*-----------------------------------------------------------------------*/
+
+static
+int xmit_datablock ( /* 1:OK, 0:Failed */
+ const BYTE *buff, /* 512 byte data block to be transmitted */
+ BYTE token /* Data token */
+)
+{
+ BYTE resp;
+ UINT wc;
+
+
+ if (!wait_ready()) return 0;
+
+ xchg_spi(token); /* Xmit a token */
+ if (token != 0xFD) { /* Not StopTran token */
+ wc = 512;
+ do { /* Xmit the 512 byte data block to MMC */
+ xchg_spi(*buff++);
+ xchg_spi(*buff++);
+ } while (wc -= 2);
+ xchg_spi(0xFF); /* CRC (Dummy) */
+ xchg_spi(0xFF);
+ resp = xchg_spi(0xFF); /* Receive a data response */
+ if ((resp & 0x1F) != 0x05) /* If not accepted, return with error */
+ return 0;
+ }
+
+ return 1;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Send a command packet to MMC */
+/*-----------------------------------------------------------------------*/
+
+static
+BYTE send_cmd (
+ BYTE cmd, /* Command byte */
+ DWORD arg /* Argument */
+)
+{
+ BYTE n/*, res*/;
+ static volatile BYTE res = 0;
+
+
+ if (cmd & 0x80) { /* ACMD is the command sequense of CMD55-CMD */
+ cmd &= 0x7F;
+ res = send_cmd(CMD55, 0);
+ if (res > 1) return res;
+ }
+
+ /* Select the card and wait for ready */
+ deselect_card();
+ if (!select_card()) return 0xFF;
+
+ /* Send command packet */
+ xchg_spi(0x40 | cmd); /* Start + Command index */
+ xchg_spi((BYTE)(arg >> 24)); /* Argument[31..24] */
+ xchg_spi((BYTE)(arg >> 16)); /* Argument[23..16] */
+ xchg_spi((BYTE)(arg >> 8)); /* Argument[15..8] */
+ xchg_spi((BYTE)arg); /* Argument[7..0] */
+ n = 0x01; /* Dummy CRC + Stop */
+ if (cmd == CMD0) n = 0x95; /* Valid CRC for CMD0(0) + Stop */
+ if (cmd == CMD8) n = 0x87; /* Valid CRC for CMD8(0x1AA) + Stop */
+ xchg_spi(n);
+
+ /* Receive command response */
+ if (cmd == CMD12) xchg_spi(0xFF); /* Skip a stuff byte on stop to read */
+ n = 10; /* Wait for a valid response in timeout of 10 attempts */
+ do {
+ res = xchg_spi(0xFF);
+ /* Service the watchdog */
+ CopService();
+ } while ((res & 0x80) && --n);
+
+ return res; /* Return with the response value */
+}
+
+
+
+/*--------------------------------------------------------------------------
+
+ Public Functions
+
+---------------------------------------------------------------------------*/
+
+
+/*-----------------------------------------------------------------------*/
+/* Initialize Disk Drive */
+/*-----------------------------------------------------------------------*/
+
+DSTATUS disk_initialize (
+ BYTE pdrv /* Physical drive nmuber (0) */
+)
+{
+ BYTE n, cmd, ty, ocr[4];
+ DWORD timeOutTime;
+
+
+ if (pdrv) return STA_NOINIT; /* Supports only single drive */
+ if (Stat & STA_NODISK) return Stat; /* No card in the socket */
+
+ power_on(); /* Force socket power on */
+
+ CS_LOW(); /* CS = L */
+
+ ty = 0;
+ if (send_cmd(CMD0, 0) == 1) { /* Enter Idle state */
+ timeOutTime = TimerGet() + 1000; /* Initialization timeout of 1000 msec */
+
+ if (send_cmd(CMD8, 0x1AA) == 1) { /* SDv2? */
+ for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF); /* Get trailing return value of R7 resp */
+ if (ocr[2] == 0x01 && ocr[3] == 0xAA) { /* The card can work at vdd range of 2.7-3.6V */
+ while ((TimerGet() < timeOutTime) && send_cmd(ACMD41, 0x40000000)); /* Wait for leaving idle state (ACMD41 with HCS bit) */
+ if ((TimerGet() < timeOutTime) && send_cmd(CMD58, 0) == 0) { /* Check CCS bit in the OCR */
+ for (n = 0; n < 4; n++) ocr[n] = xchg_spi(0xFF);
+ ty = (ocr[0] & 0x40) ? CT_SD2|CT_BLOCK : CT_SD2; /* SDv2 */
+ }
+ }
+ } else { /* SDv1 or MMCv3 */
+ if (send_cmd(ACMD41, 0) <= 1) {
+ ty = CT_SD1; cmd = ACMD41; /* SDv1 */
+ } else {
+ ty = CT_MMC; cmd = CMD1; /* MMCv3 */
+ }
+ while ((TimerGet() < timeOutTime) && send_cmd(cmd, 0)) { /* Wait for leaving idle state */
+ /* Service the watchdog */
+ CopService();
+ }
+ if (!(TimerGet() < timeOutTime) || send_cmd(CMD16, 512) != 0) /* Set read/write block length to 512 */
+ ty = 0;
+ }
+ }
+ CardType = ty;
+ deselect_card();
+
+ if (ty) { /* Initialization succeded */
+ Stat &= ~STA_NOINIT; /* Clear STA_NOINIT */
+ FCLK_FAST();
+ } else { /* Initialization failed */
+ power_off();
+ }
+
+ return Stat;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Get Disk Status */
+/*-----------------------------------------------------------------------*/
+
+DSTATUS disk_status (
+ BYTE pdrv /* Physical drive nmuber (0) */
+)
+{
+ if (pdrv) return STA_NOINIT; /* Supports only single drive */
+ return Stat;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Read Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_read (
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ BYTE *buff, /* Data buffer to store read data */
+ DWORD sector, /* Sector address in LBA */
+ UINT count /* Number of sectors to read */
+)
+{
+ if (pdrv || !count) return RES_PARERR;
+ if (Stat & STA_NOINIT) return RES_NOTRDY;
+
+ if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
+
+ if (count == 1) { /* Single block read */
+ if ((send_cmd(CMD17, sector) == 0) /* READ_SINGLE_BLOCK */
+ && rcvr_datablock(buff, 512))
+ count = 0;
+ }
+ else { /* Multiple block read */
+ if (send_cmd(CMD18, sector) == 0) { /* READ_MULTIPLE_BLOCK */
+ do {
+ if (!rcvr_datablock(buff, 512)) break;
+ buff += 512;
+ /* Service the watchdog */
+ CopService();
+ } while (--count);
+ send_cmd(CMD12, 0); /* STOP_TRANSMISSION */
+ }
+ }
+ deselect_card();
+
+ return count ? RES_ERROR : RES_OK;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Write Sector(s) */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_write (
+ BYTE pdrv, /* Physical drive nmuber to identify the drive */
+ const BYTE *buff, /* Data to be written */
+ DWORD sector, /* Sector address in LBA */
+ UINT count /* Number of sectors to write */
+)
+{
+ if (pdrv || !count) return RES_PARERR;
+ if (Stat & STA_NOINIT) return RES_NOTRDY;
+ if (Stat & STA_PROTECT) return RES_WRPRT;
+
+ if (!(CardType & CT_BLOCK)) sector *= 512; /* Convert to byte address if needed */
+
+ if (count == 1) { /* Single block write */
+ if ((send_cmd(CMD24, sector) == 0) /* WRITE_BLOCK */
+ && xmit_datablock(buff, 0xFE))
+ count = 0;
+ }
+ else { /* Multiple block write */
+ if (CardType & CT_SDC) send_cmd(ACMD23, count);
+ if (send_cmd(CMD25, sector) == 0) { /* WRITE_MULTIPLE_BLOCK */
+ do {
+ if (!xmit_datablock(buff, 0xFC)) break;
+ buff += 512;
+ /* Service the watchdog */
+ CopService();
+ } while (--count);
+ if (!xmit_datablock(0, 0xFD)) /* STOP_TRAN token */
+ count = 1;
+ }
+ }
+ deselect_card();
+
+ return count ? RES_ERROR : RES_OK;
+}
+
+
+
+/*-----------------------------------------------------------------------*/
+/* Miscellaneous Functions */
+/*-----------------------------------------------------------------------*/
+
+DRESULT disk_ioctl (
+ BYTE pdrv, /* Physical drive nmuber (0) */
+ BYTE cmd, /* Control code */
+ void *buff /* Buffer to send/receive data block */
+)
+{
+ DRESULT res;
+ BYTE n, csd[16], *ptr = buff;
+ DWORD csz;
+
+
+ if (pdrv) return RES_PARERR;
+ if (Stat & STA_NOINIT) return RES_NOTRDY;
+
+ res = RES_ERROR;
+ switch (cmd) {
+ case CTRL_SYNC : /* Flush write-back cache, Wait for end of internal process */
+ if (select_card()) res = RES_OK;
+ break;
+
+ case GET_SECTOR_COUNT : /* Get number of sectors on the disk (WORD) */
+ if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) {
+ if ((csd[0] >> 6) == 1) { /* SDv2? */
+ csz = csd[9] + ((WORD)csd[8] << 8) + ((DWORD)(csd[7] & 63) << 16) + 1;
+ *(DWORD*)buff = csz << 10;
+ } else { /* SDv1 or MMCv3 */
+ n = (csd[5] & 15) + ((csd[10] & 128) >> 7) + ((csd[9] & 3) << 1) + 2;
+ csz = (csd[8] >> 6) + ((WORD)csd[7] << 2) + ((WORD)(csd[6] & 3) << 10) + 1;
+ *(DWORD*)buff = csz << (n - 9);
+ }
+ res = RES_OK;
+ }
+ break;
+
+ case GET_BLOCK_SIZE : /* Get erase block size in unit of sectors (DWORD) */
+ if (CardType & CT_SD2) { /* SDv2? */
+ if (send_cmd(ACMD13, 0) == 0) { /* Read SD status */
+ xchg_spi(0xFF);
+ if (rcvr_datablock(csd, 16)) { /* Read partial block */
+ for (n = 64 - 16; n; n--) xchg_spi(0xFF); /* Purge trailing data */
+ *(DWORD*)buff = 16UL << (csd[10] >> 4);
+ res = RES_OK;
+ }
+ }
+ } else { /* SDv1 or MMCv3 */
+ if ((send_cmd(CMD9, 0) == 0) && rcvr_datablock(csd, 16)) { /* Read CSD */
+ if (CardType & CT_SD1) { /* SDv1 */
+ *(DWORD*)buff = (((csd[10] & 63) << 1) + ((WORD)(csd[11] & 128) >> 7) + 1) << ((csd[13] >> 6) - 1);
+ } else { /* MMCv3 */
+ *(DWORD*)buff = ((WORD)((csd[10] & 124) >> 2) + 1) * (((csd[11] & 3) << 3) + ((csd[11] & 224) >> 5) + 1);
+ }
+ res = RES_OK;
+ }
+ }
+ break;
+
+ case MMC_GET_TYPE : /* Get card type flags (1 byte) */
+ *ptr = CardType;
+ res = RES_OK;
+ break;
+
+ case MMC_GET_CSD : /* Receive CSD as a data block (16 bytes) */
+ if ((send_cmd(CMD9, 0) == 0) /* READ_CSD */
+ && rcvr_datablock(buff, 16))
+ res = RES_OK;
+ break;
+
+ case MMC_GET_CID : /* Receive CID as a data block (16 bytes) */
+ if ((send_cmd(CMD10, 0) == 0) /* READ_CID */
+ && rcvr_datablock(buff, 16))
+ res = RES_OK;
+ break;
+
+ case MMC_GET_OCR : /* Receive OCR as an R3 resp (4 bytes) */
+ if (send_cmd(CMD58, 0) == 0) { /* READ_OCR */
+ for (n = 0; n < 4; n++) {
+ *((BYTE*)buff+n) = xchg_spi(0xFF);
+ /* Service the watchdog */
+ CopService();
+ }
+ res = RES_OK;
+ }
+ break;
+
+ case MMC_GET_SDSTAT : /* Receive SD status as a data block (64 bytes) */
+ if ((CardType & CT_SD2) && send_cmd(ACMD13, 0) == 0) { /* SD_STATUS */
+ xchg_spi(0xFF);
+ if (rcvr_datablock(buff, 64))
+ res = RES_OK;
+ }
+ break;
+
+ default:
+ res = RES_PARERR;
+ }
+
+ deselect_card();
+
+ return res;
+}
+
+
+
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld
index bb15a017..66953a92 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Boot/STM32F303RCTX.ld
@@ -47,7 +47,7 @@ MEMORY
{
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 8K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 40K
- FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K
+ FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 40K
}
/* Sections */
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml
index c45fa8e6..622d6264 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec
index 210f5af9..878f0727 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/Debug/demoprog_olimexino_stm32f3.srec
@@ -1,529 +1,529 @@
S022000064656D6F70726F675F6F6C696D6578696E6F5F73746D333266332E73726563C1
-S3150800800000A0002015870008E9860008EB8600080E
-S31508008010ED860008EF860008F186000800000000DB
-S31508008020000000000000000000000000F3860008C1
-S31508008030F586000800000000F7860008F9860008A3
-S315080080406587000865870008658700086587000852
-S315080080506587000865870008658700086587000842
-S315080080606587000865870008658700086587000832
-S315080080706587000865870008658700086587000822
-S315080080806587000865870008658700086587000812
-S315080080906587000865870008658700086587000802
-S315080080A065870008658700086587000865870008F2
-S315080080B065870008658700086587000865870008E2
-S315080080C065870008658700086587000865870008D2
-S315080080D065870008658700086587000865870008C2
-S315080080E065870008658700086587000865870008B2
-S315080080F065870008658700086587000865870008A2
-S31508008100000000000000000000000000658700086D
-S315080081106587000865870008658700086587000881
-S315080081206587000865870008658700086587000871
-S315080081306587000865870008000000000000000049
-S315080081406587000865870008658700080000000045
-S315080081500000000000000000000000000000000011
-S315080081600000000000000000658700086587000819
-S3150800817065870008000000000000000000000000FD
-S311080081800000000065870008EE11AA55F3
-S3150800818C10B5054C237833B9044B13B10448AFF337
-S3150800819C00800123237010BD0C0000200000000095
-S315080081AC3CA0000808B5034B1BB103490348AFF3C1
-S315080081BC008008BD00000000100000203CA000084C
-S315080081CC08B500F06FF900F03FF900F0B3F808BDF8
-S315080081DC08B500F041F900F031F908BD08B50948B1
-S315080081EC094B03604FF46143436000238360C3600B
-S315080081FC03610C2242618361C3610362436201F02D
-S3150800820CB9FE08BD50000020004800402DE9F04199
-S3150800821C04460D461746984601F06AFA1649A1FB1C
-S3150800822C00318909002301E00133DBB2112B1FD879
-S3150800823C124A12F8130002EB4302527800EB020CB6
-S3150800824C0CFB044CB1FBFCFE0CFB1E16002EEBD1F2
-S3150800825C1FFA8EFCA5F800C00CF1FF3C1FFA8CFC2B
-S3150800826CBCF5806FE0D2387088F80020012000E059
-S3150800827C0020BDE8F08100BFD34D621054A0000861
-S3150800828C70B58CB00025ADF82E508DF82D508DF8A4
-S3150800829C2C500BAB0DF12D020DF12E014FF4FA708B
-S315080082ACFFF7B4FF1A4C1B4B236025766576A5762B
-S315080082BC0126E67625776577A560E5609DF82D306D
-S315080082CC013B1B0423619DF82C30013B1B056361A4
-S315080082DCBDF82E306360204600F08AFA069507959D
-S315080082EC08964CF6E043019302954FF6E073039318
-S315080082FC04230493059509960E230A9301A920468F
-S3150800830C00F01CFB204600F09CFB0CB070BD00BFB7
-S3150800831C280000200064004008B50146002301220D
-S3150800832C034801F045FD08B1002008BD0120FCE713
-S3150800833C5000002008B5FFF751FFFFF7A1FF08BD55
-S3150800834CBFF34F8F0549CA6802F4E062044B134326
-S3150800835CCB60BFF34F8F00BFFDE700BF00ED00E019
-S3150800836C0400FA0508B5214B1B78B3B92048FFF76A
-S3150800837CD3FF012800D008BD1D4B1B78013BDBB28F
-S3150800838C802BF8D800F08FF81A4B1860174B01227F
-S3150800839C1A70194B00221A70EDE7174B1B7801332C
-S315080083AC13481844FFF7B8FF012813D1124A13785B
-S315080083BC0133DBB213700E4A12789342DBD10B4AA7
-S315080083CC002111700A4A5278FF2AD4D1022BD2D135
-S315080083DCFFF7B6FF00F067F8064B1B686433984244
-S315080083ECC9D9024B00221A70C5E700BF5A010020F2
-S315080083FCD80000205C0100205B01002000B58BB082
-S3150800840C01AB03AA00210C4800F049FB20B9039ADA
-S3150800841C40F267639A4202D00BB05DF804FB059BE9
-S3150800842C002BF9D19DF80430FF2BF5D1079B022BB5
-S3150800843CF2D1FFF785FF00BF2800002008B5FFF72B
-S3150800844C91FFFFF7DBFF08BD08B5002220214FF08E
-S3150800845C904000F01BFD08BD10B500F024F80F4B3A
-S3150800846C1B68C31AB3F5FA7F0DD304460C4B1B785D
-S3150800847C53B901220A4B1A7020214FF0904000F094
-S3150800848C05FD064B1C6010BD0022054B1A702021F9
-S3150800849C4FF0904000F0FAFCF3E700BF64010020AF
-S315080084AC60010020704708B500F09CF908BD000073
-S315080084BC014A024B9A6070470080000800ED00E004
-S315080084CC10B588B000240394049405940694079474
-S315080084DC174B5A6942F480025A615A6902F48002AF
-S315080084EC0092009A5A6942F400325A615A6902F4A7
-S315080084FC00320192019A5A6942F480225A615B69E8
-S3150800850C03F480230293029B224620214FF09040CD
-S3150800851C00F0BCFC202303930123049305940694D2
-S3150800852C03A94FF0904000F0CDFB08B010BD00BF7A
-S3150800853C0010024072B6FEE700B59FB02822002153
-S3150800854C14A801F06DFD00210F9110911191129153
-S3150800855C13913C22684601F063FD012214924FF4F4
-S3150800856C80331593189202221B921C934FF4E01336
-S3150800857C1D9314A800F090FCC0B90F230F93022189
-S3150800858C1091002311934FF48062129213930FA843
-S3150800859C00F0D4FF60B904230093002304936846C3
-S315080085AC01F0D2F830B91FB05DF804FBFFF7C2FF33
-S315080085BCFFF7C0FFFFF7BEFF08B5FFF779FF00F01E
-S315080085CCF3F8FFF7B9FFFFF77BFFFFF7F9FDFFF7A6
-S315080085DCFFFDFCE782B00A4B9A6942F001029A61E8
-S315080085EC9A6902F001020092009ADA6942F0805206
-S315080085FCDA61DB6903F080530193019B02B0704783
-S3150800860C0010024000B589B0002303930493059328
-S3150800861C069307930268144B9A4202D009B05DF888
-S3150800862C04FB03F5D633DA6942F00072DA61DA69CB
-S3150800863C02F000720192019A5A6942F480225A6138
-S3150800864C5B6903F480230293029B4FF440730393F4
-S3150800865C02230493032306930923079303A90348C8
-S3150800866C00F030FBDAE700BF006400400004004865
-S3150800867C00B589B0002303930493059306930793D7
-S3150800868C0268144B9A4202D009B05DF804FB03F554
-S3150800869CE433DA6942F48022DA61DA6902F4802278
-S315080086AC0192019A5A6942F480225A615B6903F471
-S315080086BC80230293029B4FF4406303930223049393
-S315080086CC032306930723079303A9034800F0FAFA32
-S315080086DCDAE700BF0048004000040048FEE7FEE762
-S315080086ECFEE7FEE7FEE770477047704708B500F0EF
-S315080086FC6DF808BD034AD2F8883043F47003C2F803
-S3150800870C8830704700ED00E0DFF834D0FFF7F2FF51
-S3150800871C0C480D490D4A002302E0D458C4500433C2
-S3150800872CC4188C42F9D30A4A0A4C002301E0136098
-S3150800873C0432A242FBD301F04FFCFFF73DFFFEE7E4
-S3150800874C00A00020000000200C000020B8A00008A3
-S3150800875C0C0000206C010020FEE7000010B5044652
-S3150800876C0E4B18784FF47A73B3FBF0F30C4A106877
-S3150800877CB0FBF3F000F092FA68B90F2C01D901207E
-S3150800878C0AE0002221464FF0FF3000F04FFA054B65
-S3150800879C1C60002000E0012010BD00BF0400002072
-S315080087AC000000200800002008B5074A136843F0AB
-S315080087BC10031360032000F027FA0F20FFF7CEFFF3
-S315080087CCFFF708FF002008BD00200240034A116885
-S315080087DC034B1B780B441360704700BF68010020DD
-S315080087EC04000020014B1868704700BF6801002080
-S315080087FC002800F0A18038B5044690F82030D3B193
-S3150800880C2268136843F001031360FFF7EBFF054674
-S3150800881C23685A6812F0010F10D1FFF7E3FF401BCB
-S3150800882C0A28F5D9636A43F400336362052384F88E
-S3150800883C2030012038BDFFF7E5FEE1E71A6822F083
-S3150800884C02021A60FFF7CEFF054623685A6812F033
-S3150800885C020F0DD0FFF7C6FF401B0A28F5D9636A2D
-S3150800886C43F400336362052384F820300120E1E7E2
-S3150800887C227E012A3DD01A6822F080021A60637E95
-S3150800888C012B3BD02268136823F040031360A37EA8
-S3150800889C012B39D02268136823F020031360E37E7A
-S315080088AC012B37D02268136843F010031360237F1B
-S315080088BC012B35D02268136823F008031360637FF5
-S315080088CC012B33D02268136823F004031360A368C2
-S315080088DCE268134322691343626913436268013AD7
-S315080088EC21681343CB6100206062012384F8203091
-S315080088FCA0E71A6842F080021A60C0E7226813687B
-S3150800890C43F040031360C2E72268136843F0200360
-S3150800891C1360C4E72268136823F010031360C6E7D4
-S3150800892C2268136843F008031360C8E722681368C3
-S3150800893C43F004031360CAE701207047026890F8F5
-S3150800894C2030013BDBB2012B05D9436A43F4802363
-S3150800895C43620120704730B4D2F8003243F0010369
-S3150800896CC2F800324B6903F01F03012000FA03F327
-S3150800897CD2F81C026FEA030C20EA0300C2F81C02A8
-S3150800898CC869B0B9D2F80C020CEA0000C2F80C029D
-S3150800899C8C884869CD6844EA0544483042F830402A
-S315080089AC0C8848698D6844EA0544483002EBC000D7
-S315080089BC4460C86901281BD0886980BBD2F80402B8
-S315080089CC0CEA0000C2F80402086970BBD2F814025B
-S315080089DC0CEA0000C2F81402096A01292BD0D2F855
-S315080089EC003223F00103C2F80032002030BC704775
-S315080089FCD2F80C021843C2F80C028C8848690D6828
-S31508008A0C44EA0544483042F830408C8948698D68F8
-S31508008A1C44EA0544483002EBC0004460CCE7D2F87F
-S31508008A2C04021843C2F80402CEE7D2F8140218431B
-S31508008A3CC2F81402D0E7D2F81C120B43C2F81C3247
-S31508008A4CCDE770B5044690F82050EDB2012D06D04E
-S31508008A5C436A43F4002343620125284670BD02236A
-S31508008A6C80F820300268136823F001031360FFF7BF
-S31508008A7CB9FE064623685B6813F0010F0CD0FFF7A6
-S31508008A8CB1FE831B0A2BF5D9636A43F40033636280
-S31508008A9C052384F82030E0E700256562DDE790F8C9
-S31508008AAC20C00CF1FF3C5FFA8CFCBCF1010F00F204
-S31508008ABCA58030B451B90468E46814F0030F10D1DA
-S31508008ACC436A43F40013436201207EE00468246978
-S31508008ADC14F0030F05D1436A43F4001343620120D3
-S31508008AEC73E0056801F11B0424012C5904F00404F5
-S31508008AFC9460002C6BD1056801F11B0424012C59D8
-S31508008B0C640D1460046801F11B0C4FEA0C1C54F834
-S31508008B1C0C4004F00204D4600468A444DCF8045045
-S31508008B2C15F0080F5BD008241461056801F11B0CBD
-S31508008B3C05EB0C156D68C5F307259561046804EB00
-S31508008B4C0C146468240C5461026802EB0112D2F806
-S31508008B5CB8211A70026802EB0112D2F8B821C2F3D6
-S31508008B6C07225A70026802EB0112D2F8B821C2F336
-S31508008B7C07429A70026802EB0112D2F8B821120E5B
-S31508008B8CDA70026802EB0112D2F8BC211A7102687B
-S31508008B9C02EB0112D2F8BC21C2F307225A71026801
-S31508008BAC02EB0112D2F8BC21C2F307429A71026891
-S31508008BBC02EB0112D2F8BC21120EDA71C1B90268A5
-S31508008BCCD36843F02003D360002030BC7047056897
-S31508008BDC01F11B0424012C59E408546092E701F1B5
-S31508008BEC1B0504EB0514646804F00F0414619CE778
-S31508008BFC0268136943F020031361E5E7436A43F4FB
-S31508008C0C8023436201207047074AD36823F4E06344
-S31508008C1C1B041B0C000200F4E060034343F0BF6323
-S31508008C2C43F40033D360704700ED00E000B5194BF0
-S31508008C3CDB68C3F30223C3F1070CBCF1040F28BF8E
-S31508008C4C4FF0040C03F1040EBEF1060F18D9033BC2
-S31508008C5C4FF0FF3E0EFA0CFC21EA0C0199400EFA75
-S31508008C6C03F322EA0303194300280BDB0901C9B2F3
-S31508008C7C00F1604000F5614080F800135DF804FBD4
-S31508008C8C0023E5E700F00F000901C9B2024B19549D
-S31508008C9CF4E700BF00ED00E014ED00E00138B0F198
-S31508008CAC807F0BD24FF0E0235861054AF02182F8F9
-S31508008CBC23100020986107221A617047012070471B
-S31508008CCC00ED00E0F0B583B0002362E085685E0035
-S31508008CDC0324B44025EA0405CC68B4402C438460CC
-S31508008CEC446824EA0C0C4C68C4F300149C4044EA0F
-S31508008CFC0C0444605EE0DD08083550F8256003F086
-S31508008D0C07044FEA840C0F2404FA0CF426EA040E22
-S31508008D1C0C6904FA0CF444EA0E0440F8254060E0A9
-S31508008D2C042400E0002404FA0EF42C430CF1020C83
-S31508008D3C524D45F82C40524CA568D44325EA0206F8
-S31508008D4C4F6817F4801F01D042EA05064C4DAE60F9
-S31508008D5CED6804EA05064F6817F4001F01D042EACD
-S31508008D6C0506474DEE606D6804EA05064F6817F46C
-S31508008D7C003F01D042EA0506414D6E602D682C4035
-S31508008D8C4E6816F4803F01D042EA05043C4A14604A
-S31508008D9C01330A6832FA03F46ED04FF0010C0CFA60
-S31508008DAC03FC1CEA0202F3D04C6804F00304013CF1
-S31508008DBC012C8BD94C6804F00304032C0CD0C46822
-S31508008DCC5D004FF0030C0CFA05FC24EA0C0C8C68BD
-S31508008DDCAC4044EA0C04C4604C6804F00304022C4E
-S31508008DEC89D004684FEA430E4FF0030C0CFA0EFCBC
-S31508008DFC24EA0C0C4C6804F0030404FA0EF444EA56
-S31508008E0C0C0404604C6814F4403FC1D01D4CA56991
-S31508008E1C45F00105A561A46904F001040194019CBF
-S31508008E2C4FEA930C0CF10205144C54F8255003F038
-S31508008E3C03044FEA840E0F2404FA0EF425EA0405FB
-S31508008E4CB0F1904F3FF46EAF0F4CA0420ED004F524
-S31508008E5C8064A0420CD004F58064A0420AD004F5C4
-S31508008E6C8064A0423FF45CAF05245CE701245AE712
-S31508008E7C022458E7032456E703B0F0BD000001406E
-S31508008E8C0004014000100240000400480AB1816148
-S31508008E9C7047816270470000002800F0018370B5A6
-S31508008EAC82B00446036813F0010F3BD0B54B5B68E0
-S31508008EBC03F00C03042B1ED0B24B5B6803F00C03B7
-S31508008ECC082B13D06368B3F5803F68D0002B40F0AD
-S31508008EDC928003F1804303F504331A6822F4803236
-S31508008EEC1A601A6822F480221A605DE0A54B5B684A
-S31508008EFC13F4803FE6D04FF4003393FAA3F3A14B57
-S31508008F0C19684FF4003393FAA3F3B3FA83F303F017
-S31508008F1C1F03012202FA03F30B4203D06368002BEA
-S31508008F2C00F0C082236813F0020F00F0C580954B41
-S31508008F3C5B6813F00C0F00F09C80924B5B6803F097
-S31508008F4C0C03082B00F08F802369002B00F0F280AD
-S31508008F5C012292FAA2F3B3FA83F303F1845303F5CD
-S31508008F6C84139B001A60FFF73DFC0546022393FA0F
-S31508008F7CA3F3844B1968022393FAA3F3B3FA83F386
-S31508008F8C03F01F03012202FA03F30B4240F0C380DD
-S31508008F9CFFF728FC401B0228E8D903208BE2794A04
-S31508008FAC136843F480331360764AD36A23F00F03AD
-S31508008FBCA1680B43D3626368002B36D0FFF712FC0B
-S31508008FCC05464FF4003393FAA3F36E4B19684FF426
-S31508008FDC003393FAA3F3B3FA83F303F01F030122C6
-S31508008FEC02FA03F30B429DD1FFF7FCFB401B6428E6
-S31508008FFCE7D903205FE2B3F5A02F09D0614B1A68B5
-S3150800900C22F480321A601A6822F480221A60CBE79E
-S3150800901C03F18043A3F53C331A6842F480221A60A4
-S3150800902C1A6842F480321A60BEE7FFF7DBFB054686
-S3150800903C4FF4003393FAA3F3524B19684FF40033E9
-S3150800904C93FAA3F3B3FA83F303F01F03012202FA8C
-S3150800905C03F30B423FF466AFFFF7C4FB401B6428CF
-S3150800906CE6D9032027E2474B5B6813F4803F7FF46D
-S3150800907C6BAF022393FAA3F3424B1968022393FAB4
-S3150800908CA3F3B3FA83F303F01F03012202FA03F3E3
-S3150800909C0B4203D02369934240F006823948036891
-S315080090AC23F0F8036169F82292FAA2F2B2FA82F274
-S315080090BC01FA02F213430360236813F0080F00F059
-S315080090CC8D80A369002B61D0012191FAA1F2B2FA25
-S315080090DC82F22D4B13449B001960FFF783FB054660
-S315080090EC022393FAA3F293FAA3F293FAA3F2254A6C
-S315080090FC516A93FAA3F3B3FA83F303F01F0301221D
-S3150800910C02FA03F30B4269D1FFF76CFB401B0228EA
-S3150800911CE6D90320CFE11B48036823F0F8036169FD
-S3150800912CF82292FAA2F2B2FA82F201FA02F2134386
-S3150800913C0360C1E7012393FAA3F3B3FA83F303F1AC
-S3150800914C845303F584139B0000221A60FFF74AFB2D
-S3150800915C0546022393FAA3F30A4B1968022393FADA
-S3150800916CA3F3B3FA83F303F01F03012202FA03F302
-S3150800917C0B42A1D0FFF736FB401B0228E9D9032086
-S3150800918C99E100BF0010024020819010012292FA4A
-S3150800919CA2F2B2FA82F2B74B13449B0000221A6071
-S315080091ACFFF720FB0546022393FAA3F293FAA3F2E0
-S315080091BC93FAA3F2B04A516A93FAA3F3B3FA83F378
-S315080091CC03F01F03012202FA03F30B4206D0FFF742
-S315080091DC09FB401B0228E6D903206CE1236813F02F
-S315080091EC040F00F0A980A44BDB6913F0805F20D133
-S315080091FCA14BDA6942F08052DA61DB6903F08053DD
-S3150800920C0193019B01259D4B1B6813F4807F12D09B
-S3150800921CE368012B23D073BB03F1804303F50433B6
-S3150800922C1A6A22F001021A621A6A22F004021A62F7
-S3150800923C1AE00025E7E7914A136843F48073136034
-S3150800924CFFF7D0FA06468D4B1B6813F4807FDFD1E7
-S3150800925CFFF7C8FA801B6428F5D903202BE1864A48
-S3150800926C136A43F001031362E368002B3CD0FFF743
-S3150800927CB9FA06462BE0052B09D07F4B1A6A22F061
-S3150800928C01021A621A6A22F004021A62ECE77A4B95
-S3150800929C1A6A42F004021A621A6A42F001021A6247
-S315080092ACE2E7754B196A022393FAA3F3B3FA83F32D
-S315080092BC03F01F03012202FA03F319423BD1FFF70D
-S315080092CC91FA801B41F28833984200F2EF80022310
-S315080092DC93FAA3F293FAA3F3002BE2D1022393FA9F
-S315080092ECA3F3654B596ADEE7FFF77CFA064615E0E9
-S315080092FC614B196A022393FAA3F3B3FA83F303F0C7
-S3150800930C1F03012202FA03F3194214D0FFF76AFA73
-S3150800931C801B41F28833984200F2CA80022393FAE2
-S3150800932CA3F293FAA3F3002BE2D1022393FAA3F345
-S3150800933C514B596ADEE7B5BBE369002B00F0BA80DE
-S3150800934C4D4A526802F00C02082A00F09980022B4A
-S3150800935C2FD04FF0807393FAA3F3B3FA83F303F188
-S3150800936C845303F584139B0000221A60FFF73AFA1C
-S3150800937C04464FF0007393FAA3F33F4B19684FF06A
-S3150800938C007393FAA3F3B3FA83F303F01F030122D2
-S3150800939C02FA03F319426BD0FFF724FA001B0228D2
-S315080093ACE7D9032087E0344AD36923F08053D36185
-S315080093BCC2E74FF0807393FAA3F3B3FA83F303F17E
-S315080093CC845303F584139B0000221A60FFF70AFAEC
-S315080093DC05464FF0007393FAA3F3274B19684FF021
-S315080093EC007393FAA3F3B3FA83F303F01F03012272
-S315080093FC02FA03F3194206D0FFF7F4F9401B0228C8
-S3150800940CE7D9032057E01C494B6823F47413626AA6
-S3150800941C206A024313434B604FF0807393FAA3F30D
-S3150800942CB3FA83F303F1845303F584139B000122E7
-S3150800943C1A60FFF7D7F904464FF0007393FAA3F3B3
-S3150800944C0D4B19684FF0007393FAA3F3B3FA83F331
-S3150800945C03F01F03012202FA03F3194206D1FFF7A0
-S3150800946CC1F9001B0228E7D9032024E0002022E0DA
-S3150800947C002020E02081901000100240007000406F
-S3150800948C012B1AD0104B5B6803F48031226A914287
-S3150800949C15D103F47013626A934212D100200AE0C4
-S315080094AC01207047012006E0012004E0032002E0B9
-S315080094BC032000E0002002B070BD0120FBE701206C
-S315080094CCF9E70120F7E700BF00100240164B5B686E
-S315080094DC03F00C02082A01D01448704703F47011E3
-S315080094EC4FF4701292FAA2F2B2FA82F221FA02F24E
-S315080094FC0F49885C0C4AD26A02F00F020F2191FAC6
-S3150800950CA1F1B1FA81F1CA400A498A5C13F4803F89
-S3150800951C05D0064BB3FBF2F303FB00F07047064B82
-S3150800952C03FB00F0704700BF0010024000127A00DF
-S3150800953C90A00008A0A0000800093D00002800F033
-S3150800954CBE8070B50D460446614B1B6803F00703D5
-S3150800955C8B420BD25E4A136823F007030B43136046
-S3150800956C136803F007038B4240F0AB80236813F0B3
-S3150800957C020F06D0574A536823F0F003A1680B4331
-S3150800958C5360236813F0010F5AD06368012B2DD052
-S3150800959C022B40D0022292FAA2F24E4A10680222FC
-S315080095AC92FAA2F2B2FA82F202F01F02012101FA31
-S315080095BC02F2104200F0878046494A6822F00302FC
-S315080095CC13434B60FFF70EF90646424B5B6803F0F4
-S315080095DC0C036268B3EB820F32D0FFF703F9801BDA
-S315080095EC41F288339842F0D9032067E04FF40032F1
-S315080095FC92FAA2F2374A10684FF4003292FAA2F2A3
-S3150800960CB2FA82F202F01F02012101FA02F20242B8
-S3150800961CD2D1012052E04FF0007292FAA2F22D4AF2
-S3150800962C10684FF0007292FAA2F2B2FA82F202F0C5
-S3150800963C1F02012101FA02F21042BDD101203DE0C0
-S3150800964C234B1B6803F00703AB420AD9204A13685D
-S3150800965C23F007032B431360136803F00703AB428D
-S3150800966C33D1236813F0040F06D01A4A536823F42F
-S3150800967CE063E1680B435360236813F0080F07D0C7
-S3150800968C144A536823F46053216943EAC1035360AF
-S3150800969CFFF71CFF0F4B5B6803F0F003F02292FAFE
-S315080096ACA2F2B2FA82F2D3400B4AD35CD8400B4BE7
-S315080096BC18600B4B1868FFF751F8002070BD012095
-S315080096CC70470120FAE70120F8E70120F6E700BF0A
-S315080096DC002002400010024078A00008000000207C
-S315080096EC08000020014B1868704700BF00000020D6
-S315080096FC08B5FFF7F7FF074B5B6803F4E0634FF415
-S3150800970CE06292FAA2F2B2FA82F2D340024AD35C2F
-S3150800971CD84008BD0010024088A0000808B5FFF71D
-S3150800972CE1FF074B5B6803F460534FF4605292FAFF
-S3150800973CA2F2B2FA82F2D340024AD35CD84008BDF0
-S3150800974C0010024088A00008F0B583B004460368F0
-S3150800975C13F4803F48D0914BDB6913F0805F40F0DF
-S3150800976CD4808E4BDA6942F08052DA61DB6903F0F9
-S3150800977C80530193019B0125894B1B6813F4807F49
-S3150800978C00F0C580854B1B6A13F4407322D06268BF
-S3150800979C02F440729A421DD08048016A21F4407640
-S315080097AC4FF4803393FAA3F2B2FA82F27D4F3A441D
-S315080097BC92004FF0010CC2F800C093FAA3F3B3FA67
-S315080097CC83F33B449B0000221A60066211F0010FDA
-S315080097DC40F0B280714A136A23F4407361680B43F4
-S315080097EC1362002D40F0CF80236813F0010F06D0CA
-S315080097FC6A4A136B23F00303A1680B4313632368AC
-S3150800980C13F0020F06D0654A136B23F44033E16854
-S3150800981C0B431363236813F0040F06D05F4A136BCC
-S3150800982C23F4402321690B431363236813F0200F99
-S3150800983C06D05A4A136B23F01003E1690B431363E2
-S3150800984C236813F4003F06D0544A536823F4800364
-S3150800985CA16B0B435360236813F0400F06D04F4A95
-S3150800986C136B23F02003216A0B431363236813F04D
-S3150800987C080F06D0494A136B23F4401361690B434E
-S3150800988C1363236813F0100F06D0444A136B23F4A2
-S3150800989C4003A1690B431363236813F4007F06D0B6
-S315080098AC3E4A536823F40003E16A0B43536023686A
-S315080098BC13F0800F06D0394AD36A23F4F873616A19
-S315080098CC0B43D362236813F4807F06D0334AD36ADA
-S315080098DC23F47853A16A0B43D362236813F4805F8D
-S315080098EC06D02E4A136B23F48073216B0B43136338
-S315080098FC236813F4005F4DD0284A136B23F40073C6
-S3150800990C616B0B431363002045E0002534E7244ABA
-S3150800991C136843F480731360FEF764FF0646204B06
-S3150800992C1B6813F4807F7FF42DAFFEF75BFF801B5B
-S3150800993C6428F4D903202EE0FEF754FF064615E0FA
-S3150800994C164B196A022393FAA3F3B3FA83F303F0BB
-S3150800995C1F03012202FA03F30B427FF43BAFFEF717
-S3150800996C41FF801B41F28833984211D8022393FA9F
-S3150800997CA3F293FAA3F3002BE2D1022393FAA3F3EF
-S3150800998C064B596ADEE7D36923F08053D3612BE77C
-S3150800999C032000E0002003B0F0BD00BF0010024019
-S315080099AC0070004000819010026852E8003F23F4D2
-S315080099BC907342E800310029F6D1026802F10803D7
-S315080099CC53E8003F23F00103083242E8003100292E
-S315080099DCF3D1036E012B06D02023C0F88030002368
-S315080099EC036683667047026852E8003F23F010034B
-S315080099FC42E800310029F6D1EEE7000010B504461E
-S31508009A0C83680269134342691343C2691A4301689E
-S31508009A1C0B6823F4164323F00C0313430B600268FC
-S31508009A2C536823F44053C1680B4353608269036A35
-S31508009A3C1A4301688B6823F4306313438B600368FD
-S31508009A4C7B4A93420DD07B4A93421CD07A4A934266
-S31508009A5C3AD07A4A93424AD0794A93425AD010233A
-S31508009A6C1FE0784B1B6B03F00303032B09D8DFE8C5
-S31508009A7C03F002040664012313E0042311E008230F
-S31508009A8C0FE010230DE06F4B1B6B03F44033B3F55B
-S31508009A9C003F54D013D8002B53D0B3F5803F52D186
-S31508009AAC0423E069B0F5004F69D0082B00F2B980A1
-S31508009ABCDFE803F092A890B7ABB7B7B7AE00B3F52B
-S31508009ACC403F42D10223ECE75E4B1B6B03F4402369
-S31508009ADCB3F5002F3BD005D8DBB3B3F5802F3AD1BD
-S31508009AEC0423DEE7B3F5402F37D10223D9E7554BCC
-S31508009AFC1B6B03F44013B3F5001F30D005D883B3A2
-S31508009B0CB3F5801F2FD10423CBE7B3F5401F2CD117
-S31508009B1C0223C6E74B4B1B6B03F44003B3F5000F4C
-S31508009B2C25D005D82BB3B3F5800F24D10423B8E779
-S31508009B3CB3F5400F21D10223B3E70223B1E708237B
-S31508009B4CAFE70023ADE71023ABE71023A9E70823FB
-S31508009B5CA7E70023A5E71023A3E71023A1E708230B
-S31508009B6C9FE700239DE710239BE7102399E708231B
-S31508009B7C97E7002395E7102393E7102391E7082B23
-S31508009B8C49D8DFE803F0051F25482248484809004C
-S31508009B9CFFF7AEFD002840D06268530803EB40007F
-S31508009BACB0FBF2F0A0F110024FF6EF739A4236D8DA
-S31508009BBC83B223F00F03C0F3420018432368D8601E
-S31508009BCC00201BE0FFF7AAFDE4E7FFF77FFCE1E7BF
-S31508009BDC1D48E1E71C4802E0FFF78AFD18B36368E5
-S31508009BEC00EB5300B0FBF3F0A0F110024FF6EF7345
-S31508009BFC9A421AD8236880B2D86000200023A3663C
-S31508009C0CE36610BDFFF78AFDE8E7FFF75FFCE5E7BB
-S31508009C1C4FF40040E3E70120F0E70020EEE70120CF
-S31508009C2CECE70120EAE70020E8E70120E6E700BFB9
-S31508009C3C003801400044004000480040004C0040F9
-S31508009C4C005000400010024000127A00436A13F0DC
-S31508009C5C010F06D00268536823F40033816A0B435C
-S31508009C6C5360436A13F0020F06D00268536823F454
-S31508009C7C8033C16A0B435360436A13F0040F06D052
-S31508009C8C0268536823F48023016B0B435360436AC1
-S31508009C9C13F0080F06D00268536823F40043416B8F
-S31508009CAC0B435360436A13F0100F06D0026893688F
-S31508009CBC23F48053816B0B439360436A13F0200F94
-S31508009CCC06D00268936823F40053C16B0B43936068
-S31508009CDC436A13F0400F0AD00268536823F48013C2
-S31508009CEC016C0B435360036CB3F5801F0BD0436AAE
-S31508009CFC13F0800F06D00268536823F40023816C96
-S31508009D0C0B43536070470268536823F4C003416CD5
-S31508009D1C0B435360EBE72DE9F84305460F46164609
-S31508009D2C9946DDF820802C68E46937EA04030CBFF1
-S31508009D3C4FF0010C4FF0000CB44532D1B8F1FF3F8F
-S31508009D4CF1D0FEF74FFDA0EB090040452CD8B8F131
-S31508009D5C000F2BD02B681A6812F0040FE3D0DA69BF
-S31508009D6C12F0080F11D1DA6912F4006FDBD04FF438
-S31508009D7C00621A622846FFF717FE2023C5F88430BE
-S31508009D8C002385F8783003200CE008241C6228464A
-S31508009D9CFFF70AFEC5F88440002385F878300120C1
-S31508009DAC00E00020BDE8F8830320FBE70320F9E771
-S31508009DBC2DE9F04383B01E46D0F88030202B70D1A5
-S31508009DCC04460D46904600296FD00AB9012069E071
-S31508009DDC0023C0F884302222C0F880200366FEF7E0
-S31508009DEC01FD0746A4F85880A4F85A80A368B3F571
-S31508009DFC805F06D0A3B9226972B9FF22A4F85C2049
-S31508009E0C11E0226922B940F2FF12A4F85C200AE09C
-S31508009E1CFF22A4F85C2006E07F22A4F85C2002E06E
-S31508009E2C0022A4F85C20B4F85C80B3F5805F02D0FD
-S31508009E3C4FF0000919E0236913B14FF0000914E03B
-S31508009E4CA946002511E02023C4F88030032029E018
-S31508009E5C23689B8C08EA030329F8023BB4F85A20BA
-S31508009E6C92B2013A92B2A4F85A20B4F85A309BB27C
-S31508009E7C93B100963B46002220212046FFF74BFF64
-S31508009E8C0028E0D1002DE3D023689A8C5FFA88F37A
-S31508009E9C134005F8013BE1E72023C4F88030002085
-S31508009EAC00E0022003B0BDE8F0830120FAE730B5E4
-S31508009EBC83B004460023C0F88430FEF793FC0546AD
-S31508009ECC2268126812F0080F0FD123681B6813F06A
-S31508009EDC040F26D12023E367C4F8803000202066BF
-S31508009EEC606684F8780003B030BD6FF07E4300934B
-S31508009EFC034600224FF400112046FFF70CFF0028FA
-S31508009F0CE3D0226852E8003F23F0800342E8003190
-S31508009F1C0029F6D12023E367002384F87830032040
-S31508009F2CE1E76FF07E4300932B4600224FF4800145
-S31508009F3C2046FFF7F0FE0028CCD0226852E8003FF6
-S31508009F4C23F4907342E800310029F6D1226802F115
-S31508009F5C080353E8003F23F00103083242E80031B6
-S31508009F6C0029F3D12023C4F88030002384F87830F4
-S31508009F7C0320B8E768B310B50446C36F03B32423AC
-S31508009F8CE3672268136823F0010313602046FFF782
-S31508009F9C35FD012813D0636ABBB92268536823F4CC
-S31508009FAC904353602268936823F02A0393602268CF
-S31508009FBC136843F0010313602046FFF778FF10BDC2
-S31508009FCC80F87830FEF754FBD9E72046FFF73EFEBB
-S31508009FDCE3E701207047000070B50D4D0D4C641B6E
-S31508009FECA4100026A64209D10B4D0C4C00F020F803
-S31508009FFC641BA4100026A64205D170BD55F8043B77
-S3150800A00C98470136EEE755F8043B98470136F2E7D0
-S3150800A01CB0A00008B0A00008B0A00008B4A00008C2
-S3150800A02C02440346934200D1704703F8011BF9E733
-S3150800A03CF8B500BFF8BC08BC9E467047F8B500BF1B
-S30D0800A04CF8BC08BC9E467047EB
-S3150800A05405020602060307030803090309040A049A
-S3150800A0640B040C040C050D050E050F050F0610064A
-S3150800A0741007100800000000000000000102030495
-S3150800A0840607080900000000010203040203040588
-S3150800A094060708090A0B0C0D0E0F1010010203041B
-S3110800A0A405060708090A0B0C0D0E0F1024
-S3090800A0B0B181000864
-S3090800A0B48D81000884
-S3110800A0B800127A000100000010000000F1
-S7050800871556
+S3150800A00000A0002015A70008E9A60008EBA600088E
+S3150800A010EDA60008EFA60008F1A60008000000005B
+S3150800A020000000000000000000000000F3A6000881
+S3150800A030F5A6000800000000F7A60008F9A6000823
+S3150800A04065A7000865A7000865A7000865A70008B2
+S3150800A05065A7000865A7000865A7000865A70008A2
+S3150800A06065A7000865A7000865A7000865A7000892
+S3150800A07065A7000865A7000865A7000865A7000882
+S3150800A08065A7000865A7000865A7000865A7000872
+S3150800A09065A7000865A7000865A7000865A7000862
+S3150800A0A065A7000865A7000865A7000865A7000852
+S3150800A0B065A7000865A7000865A7000865A7000842
+S3150800A0C065A7000865A7000865A7000865A7000832
+S3150800A0D065A7000865A7000865A7000865A7000822
+S3150800A0E065A7000865A7000865A7000865A7000812
+S3150800A0F065A7000865A7000865A7000865A7000802
+S3150800A10000000000000000000000000065A700082D
+S3150800A11065A7000865A7000865A7000865A70008E1
+S3150800A12065A7000865A7000865A7000865A70008D1
+S3150800A13065A7000865A700080000000000000000E9
+S3150800A14065A7000865A7000865A7000800000000C5
+S3150800A15000000000000000000000000000000000F1
+S3150800A160000000000000000065A7000865A70008B9
+S3150800A17065A70008000000000000000000000000BD
+S3110800A1800000000065A70008EE11AA55B3
+S3150800A18C10B5054C237833B9044B13B10448AFF317
+S3150800A19C00800123237010BD0C0000200000000075
+S3150800A1AC3CC0000808B5034B1BB103490348AFF381
+S3150800A1BC008008BD00000000100000203CC000080C
+S3150800A1CC08B500F06FF900F03FF900F0B3F808BDD8
+S3150800A1DC08B500F041F900F031F908BD08B5094891
+S3150800A1EC094B03604FF46143436000238360C360EB
+S3150800A1FC03610C2242618361C3610362436201F00D
+S3150800A20CB9FE08BD50000020004800402DE9F04179
+S3150800A21C04460D461746984601F06AFA1649A1FBFC
+S3150800A22C00318909002301E00133DBB2112B1FD859
+S3150800A23C124A12F8130002EB4302527800EB020C96
+S3150800A24C0CFB044CB1FBFCFE0CFB1E16002EEBD1D2
+S3150800A25C1FFA8EFCA5F800C00CF1FF3C1FFA8CFC0B
+S3150800A26CBCF5806FE0D2387088F80020012000E039
+S3150800A27C0020BDE8F08100BFD34D621054C0000821
+S3150800A28C70B58CB00025ADF82E508DF82D508DF884
+S3150800A29C2C500BAB0DF12D020DF12E014FF4FA706B
+S3150800A2ACFFF7B4FF1A4C1B4B236025766576A5760B
+S3150800A2BC0126E67625776577A560E5609DF82D304D
+S3150800A2CC013B1B0423619DF82C30013B1B05636184
+S3150800A2DCBDF82E306360204600F08AFA069507957D
+S3150800A2EC08964CF6E043019302954FF6E0730393F8
+S3150800A2FC04230493059509960E230A9301A920466F
+S3150800A30C00F01CFB204600F09CFB0CB070BD00BF97
+S3150800A31C280000200064004008B5014600230122ED
+S3150800A32C034801F045FD08B1002008BD0120FCE7F3
+S3150800A33C5000002008B5FFF751FFFFF7A1FF08BD35
+S3150800A34CBFF34F8F0549CA6802F4E062044B134306
+S3150800A35CCB60BFF34F8F00BFFDE700BF00ED00E0F9
+S3150800A36C0400FA0508B5214B1B78B3B92048FFF74A
+S3150800A37CD3FF012800D008BD1D4B1B78013BDBB26F
+S3150800A38C802BF8D800F08FF81A4B1860174B01225F
+S3150800A39C1A70194B00221A70EDE7174B1B7801330C
+S3150800A3AC13481844FFF7B8FF012813D1124A13783B
+S3150800A3BC0133DBB213700E4A12789342DBD10B4A87
+S3150800A3CC002111700A4A5278FF2AD4D1022BD2D115
+S3150800A3DCFFF7B6FF00F067F8064B1B686433984224
+S3150800A3ECC9D9024B00221A70C5E700BF5A010020D2
+S3150800A3FCD80000205C0100205B01002000B58BB062
+S3150800A40C01AB03AA00210C4800F049FB20B9039ABA
+S3150800A41C40F267639A4202D00BB05DF804FB059BC9
+S3150800A42C002BF9D19DF80430FF2BF5D1079B022B95
+S3150800A43CF2D1FFF785FF00BF2800002008B5FFF70B
+S3150800A44C91FFFFF7DBFF08BD08B5002220214FF06E
+S3150800A45C904000F01BFD08BD10B500F024F80F4B1A
+S3150800A46C1B68C31AB3F5FA7F0DD304460C4B1B783D
+S3150800A47C53B901220A4B1A7020214FF0904000F074
+S3150800A48C05FD064B1C6010BD0022054B1A702021D9
+S3150800A49C4FF0904000F0FAFCF3E700BF640100208F
+S3150800A4AC60010020704708B500F09CF908BD000053
+S3150800A4BC014A024B9A60704700A0000800ED00E0C4
+S3150800A4CC10B588B000240394049405940694079454
+S3150800A4DC174B5A6942F480025A615A6902F480028F
+S3150800A4EC0092009A5A6942F400325A615A6902F487
+S3150800A4FC00320192019A5A6942F480225A615B69C8
+S3150800A50C03F480230293029B224620214FF09040AD
+S3150800A51C00F0BCFC202303930123049305940694B2
+S3150800A52C03A94FF0904000F0CDFB08B010BD00BF5A
+S3150800A53C0010024072B6FEE700B59FB02822002133
+S3150800A54C14A801F06DFD00210F9110911191129133
+S3150800A55C13913C22684601F063FD012214924FF4D4
+S3150800A56C80331593189202221B921C934FF4E01316
+S3150800A57C1D9314A800F090FCC0B90F230F93022169
+S3150800A58C1091002311934FF48062129213930FA823
+S3150800A59C00F0D4FF60B904230093002304936846A3
+S3150800A5AC01F0D2F830B91FB05DF804FBFFF7C2FF13
+S3150800A5BCFFF7C0FFFFF7BEFF08B5FFF779FF00F0FE
+S3150800A5CCF3F8FFF7B9FFFFF77BFFFFF7F9FDFFF786
+S3150800A5DCFFFDFCE782B00A4B9A6942F001029A61C8
+S3150800A5EC9A6902F001020092009ADA6942F08052E6
+S3150800A5FCDA61DB6903F080530193019B02B0704763
+S3150800A60C0010024000B589B0002303930493059308
+S3150800A61C069307930268144B9A4202D009B05DF868
+S3150800A62C04FB03F5D633DA6942F00072DA61DA69AB
+S3150800A63C02F000720192019A5A6942F480225A6118
+S3150800A64C5B6903F480230293029B4FF440730393D4
+S3150800A65C02230493032306930923079303A90348A8
+S3150800A66C00F030FBDAE700BF006400400004004845
+S3150800A67C00B589B0002303930493059306930793B7
+S3150800A68C0268144B9A4202D009B05DF804FB03F534
+S3150800A69CE433DA6942F48022DA61DA6902F4802258
+S3150800A6AC0192019A5A6942F480225A615B6903F451
+S3150800A6BC80230293029B4FF4406303930223049373
+S3150800A6CC032306930723079303A9034800F0FAFA12
+S3150800A6DCDAE700BF0048004000040048FEE7FEE742
+S3150800A6ECFEE7FEE7FEE770477047704708B500F0CF
+S3150800A6FC6DF808BD034AD2F8883043F47003C2F8E3
+S3150800A70C8830704700ED00E0DFF834D0FFF7F2FF31
+S3150800A71C0C480D490D4A002302E0D458C4500433A2
+S3150800A72CC4188C42F9D30A4A0A4C002301E0136078
+S3150800A73C0432A242FBD301F04FFCFFF73DFFFEE7C4
+S3150800A74C00A00020000000200C000020B8C0000863
+S3150800A75C0C0000206C010020FEE7000010B5044632
+S3150800A76C0E4B18784FF47A73B3FBF0F30C4A106857
+S3150800A77CB0FBF3F000F092FA68B90F2C01D901205E
+S3150800A78C0AE0002221464FF0FF3000F04FFA054B45
+S3150800A79C1C60002000E0012010BD00BF0400002052
+S3150800A7AC000000200800002008B5074A136843F08B
+S3150800A7BC10031360032000F027FA0F20FFF7CEFFD3
+S3150800A7CCFFF708FF002008BD00200240034A116865
+S3150800A7DC034B1B780B441360704700BF68010020BD
+S3150800A7EC04000020014B1868704700BF6801002060
+S3150800A7FC002800F0A18038B5044690F82030D3B173
+S3150800A80C2268136843F001031360FFF7EBFF054654
+S3150800A81C23685A6812F0010F10D1FFF7E3FF401BAB
+S3150800A82C0A28F5D9636A43F400336362052384F86E
+S3150800A83C2030012038BDFFF7E5FEE1E71A6822F063
+S3150800A84C02021A60FFF7CEFF054623685A6812F013
+S3150800A85C020F0DD0FFF7C6FF401B0A28F5D9636A0D
+S3150800A86C43F400336362052384F820300120E1E7C2
+S3150800A87C227E012A3DD01A6822F080021A60637E75
+S3150800A88C012B3BD02268136823F040031360A37E88
+S3150800A89C012B39D02268136823F020031360E37E5A
+S3150800A8AC012B37D02268136843F010031360237FFB
+S3150800A8BC012B35D02268136823F008031360637FD5
+S3150800A8CC012B33D02268136823F004031360A368A2
+S3150800A8DCE268134322691343626913436268013AB7
+S3150800A8EC21681343CB6100206062012384F8203071
+S3150800A8FCA0E71A6842F080021A60C0E7226813685B
+S3150800A90C43F040031360C2E72268136843F0200340
+S3150800A91C1360C4E72268136823F010031360C6E7B4
+S3150800A92C2268136843F008031360C8E722681368A3
+S3150800A93C43F004031360CAE701207047026890F8D5
+S3150800A94C2030013BDBB2012B05D9436A43F4802343
+S3150800A95C43620120704730B4D2F8003243F0010349
+S3150800A96CC2F800324B6903F01F03012000FA03F307
+S3150800A97CD2F81C026FEA030C20EA0300C2F81C0288
+S3150800A98CC869B0B9D2F80C020CEA0000C2F80C027D
+S3150800A99C8C884869CD6844EA0544483042F830400A
+S3150800A9AC0C8848698D6844EA0544483002EBC000B7
+S3150800A9BC4460C86901281BD0886980BBD2F8040298
+S3150800A9CC0CEA0000C2F80402086970BBD2F814023B
+S3150800A9DC0CEA0000C2F81402096A01292BD0D2F835
+S3150800A9EC003223F00103C2F80032002030BC704755
+S3150800A9FCD2F80C021843C2F80C028C8848690D6808
+S3150800AA0C44EA0544483042F830408C8948698D68D8
+S3150800AA1C44EA0544483002EBC0004460CCE7D2F85F
+S3150800AA2C04021843C2F80402CEE7D2F814021843FB
+S3150800AA3CC2F81402D0E7D2F81C120B43C2F81C3227
+S3150800AA4CCDE770B5044690F82050EDB2012D06D02E
+S3150800AA5C436A43F4002343620125284670BD02234A
+S3150800AA6C80F820300268136823F001031360FFF79F
+S3150800AA7CB9FE064623685B6813F0010F0CD0FFF786
+S3150800AA8CB1FE831B0A2BF5D9636A43F40033636260
+S3150800AA9C052384F82030E0E700256562DDE790F8A9
+S3150800AAAC20C00CF1FF3C5FFA8CFCBCF1010F00F2E4
+S3150800AABCA58030B451B90468E46814F0030F10D1BA
+S3150800AACC436A43F40013436201207EE00468246958
+S3150800AADC14F0030F05D1436A43F4001343620120B3
+S3150800AAEC73E0056801F11B0424012C5904F00404D5
+S3150800AAFC9460002C6BD1056801F11B0424012C59B8
+S3150800AB0C640D1460046801F11B0C4FEA0C1C54F814
+S3150800AB1C0C4004F00204D4600468A444DCF8045025
+S3150800AB2C15F0080F5BD008241461056801F11B0C9D
+S3150800AB3C05EB0C156D68C5F307259561046804EBE0
+S3150800AB4C0C146468240C5461026802EB0112D2F8E6
+S3150800AB5CB8211A70026802EB0112D2F8B821C2F3B6
+S3150800AB6C07225A70026802EB0112D2F8B821C2F316
+S3150800AB7C07429A70026802EB0112D2F8B821120E3B
+S3150800AB8CDA70026802EB0112D2F8BC211A7102685B
+S3150800AB9C02EB0112D2F8BC21C2F307225A710268E1
+S3150800ABAC02EB0112D2F8BC21C2F307429A71026871
+S3150800ABBC02EB0112D2F8BC21120EDA71C1B9026885
+S3150800ABCCD36843F02003D360002030BC7047056877
+S3150800ABDC01F11B0424012C59E408546092E701F195
+S3150800ABEC1B0504EB0514646804F00F0414619CE758
+S3150800ABFC0268136943F020031361E5E7436A43F4DB
+S3150800AC0C8023436201207047074AD36823F4E06324
+S3150800AC1C1B041B0C000200F4E060034343F0BF6303
+S3150800AC2C43F40033D360704700ED00E000B5194BD0
+S3150800AC3CDB68C3F30223C3F1070CBCF1040F28BF6E
+S3150800AC4C4FF0040C03F1040EBEF1060F18D9033BA2
+S3150800AC5C4FF0FF3E0EFA0CFC21EA0C0199400EFA55
+S3150800AC6C03F322EA0303194300280BDB0901C9B2D3
+S3150800AC7C00F1604000F5614080F800135DF804FBB4
+S3150800AC8C0023E5E700F00F000901C9B2024B19547D
+S3150800AC9CF4E700BF00ED00E014ED00E00138B0F178
+S3150800ACAC807F0BD24FF0E0235861054AF02182F8D9
+S3150800ACBC23100020986107221A61704701207047FB
+S3150800ACCC00ED00E0F0B583B0002362E085685E0015
+S3150800ACDC0324B44025EA0405CC68B4402C438460AC
+S3150800ACEC446824EA0C0C4C68C4F300149C4044EAEF
+S3150800ACFC0C0444605EE0DD08083550F8256003F066
+S3150800AD0C07044FEA840C0F2404FA0CF426EA040E02
+S3150800AD1C0C6904FA0CF444EA0E0440F8254060E089
+S3150800AD2C042400E0002404FA0EF42C430CF1020C63
+S3150800AD3C524D45F82C40524CA568D44325EA0206D8
+S3150800AD4C4F6817F4801F01D042EA05064C4DAE60D9
+S3150800AD5CED6804EA05064F6817F4001F01D042EAAD
+S3150800AD6C0506474DEE606D6804EA05064F6817F44C
+S3150800AD7C003F01D042EA0506414D6E602D682C4015
+S3150800AD8C4E6816F4803F01D042EA05043C4A14602A
+S3150800AD9C01330A6832FA03F46ED04FF0010C0CFA40
+S3150800ADAC03FC1CEA0202F3D04C6804F00304013CD1
+S3150800ADBC012C8BD94C6804F00304032C0CD0C46802
+S3150800ADCC5D004FF0030C0CFA05FC24EA0C0C8C689D
+S3150800ADDCAC4044EA0C04C4604C6804F00304022C2E
+S3150800ADEC89D004684FEA430E4FF0030C0CFA0EFC9C
+S3150800ADFC24EA0C0C4C6804F0030404FA0EF444EA36
+S3150800AE0C0C0404604C6814F4403FC1D01D4CA56971
+S3150800AE1C45F00105A561A46904F001040194019C9F
+S3150800AE2C4FEA930C0CF10205144C54F8255003F018
+S3150800AE3C03044FEA840E0F2404FA0EF425EA0405DB
+S3150800AE4CB0F1904F3FF46EAF0F4CA0420ED004F504
+S3150800AE5C8064A0420CD004F58064A0420AD004F5A4
+S3150800AE6C8064A0423FF45CAF05245CE701245AE7F2
+S3150800AE7C022458E7032456E703B0F0BD000001404E
+S3150800AE8C0004014000100240000400480AB1816128
+S3150800AE9C7047816270470000002800F0018370B586
+S3150800AEAC82B00446036813F0010F3BD0B54B5B68C0
+S3150800AEBC03F00C03042B1ED0B24B5B6803F00C0397
+S3150800AECC082B13D06368B3F5803F68D0002B40F08D
+S3150800AEDC928003F1804303F504331A6822F4803216
+S3150800AEEC1A601A6822F480221A605DE0A54B5B682A
+S3150800AEFC13F4803FE6D04FF4003393FAA3F3A14B37
+S3150800AF0C19684FF4003393FAA3F3B3FA83F303F0F7
+S3150800AF1C1F03012202FA03F30B4203D06368002BCA
+S3150800AF2C00F0C082236813F0020F00F0C580954B21
+S3150800AF3C5B6813F00C0F00F09C80924B5B6803F077
+S3150800AF4C0C03082B00F08F802369002B00F0F2808D
+S3150800AF5C012292FAA2F3B3FA83F303F1845303F5AD
+S3150800AF6C84139B001A60FFF73DFC0546022393FAEF
+S3150800AF7CA3F3844B1968022393FAA3F3B3FA83F366
+S3150800AF8C03F01F03012202FA03F30B4240F0C380BD
+S3150800AF9CFFF728FC401B0228E8D903208BE2794AE4
+S3150800AFAC136843F480331360764AD36A23F00F038D
+S3150800AFBCA1680B43D3626368002B36D0FFF712FCEB
+S3150800AFCC05464FF4003393FAA3F36E4B19684FF406
+S3150800AFDC003393FAA3F3B3FA83F303F01F030122A6
+S3150800AFEC02FA03F30B429DD1FFF7FCFB401B6428C6
+S3150800AFFCE7D903205FE2B3F5A02F09D0614B1A6895
+S3150800B00C22F480321A601A6822F480221A60CBE77E
+S3150800B01C03F18043A3F53C331A6842F480221A6084
+S3150800B02C1A6842F480321A60BEE7FFF7DBFB054666
+S3150800B03C4FF4003393FAA3F3524B19684FF40033C9
+S3150800B04C93FAA3F3B3FA83F303F01F03012202FA6C
+S3150800B05C03F30B423FF466AFFFF7C4FB401B6428AF
+S3150800B06CE6D9032027E2474B5B6813F4803F7FF44D
+S3150800B07C6BAF022393FAA3F3424B1968022393FA94
+S3150800B08CA3F3B3FA83F303F01F03012202FA03F3C3
+S3150800B09C0B4203D02369934240F006823948036871
+S3150800B0AC23F0F8036169F82292FAA2F2B2FA82F254
+S3150800B0BC01FA02F213430360236813F0080F00F039
+S3150800B0CC8D80A369002B61D0012191FAA1F2B2FA05
+S3150800B0DC82F22D4B13449B001960FFF783FB054640
+S3150800B0EC022393FAA3F293FAA3F293FAA3F2254A4C
+S3150800B0FC516A93FAA3F3B3FA83F303F01F030122FD
+S3150800B10C02FA03F30B4269D1FFF76CFB401B0228CA
+S3150800B11CE6D90320CFE11B48036823F0F8036169DD
+S3150800B12CF82292FAA2F2B2FA82F201FA02F2134366
+S3150800B13C0360C1E7012393FAA3F3B3FA83F303F18C
+S3150800B14C845303F584139B0000221A60FFF74AFB0D
+S3150800B15C0546022393FAA3F30A4B1968022393FABA
+S3150800B16CA3F3B3FA83F303F01F03012202FA03F3E2
+S3150800B17C0B42A1D0FFF736FB401B0228E9D9032066
+S3150800B18C99E100BF0010024020819010012292FA2A
+S3150800B19CA2F2B2FA82F2B74B13449B0000221A6051
+S3150800B1ACFFF720FB0546022393FAA3F293FAA3F2C0
+S3150800B1BC93FAA3F2B04A516A93FAA3F3B3FA83F358
+S3150800B1CC03F01F03012202FA03F30B4206D0FFF722
+S3150800B1DC09FB401B0228E6D903206CE1236813F00F
+S3150800B1EC040F00F0A980A44BDB6913F0805F20D113
+S3150800B1FCA14BDA6942F08052DA61DB6903F08053BD
+S3150800B20C0193019B01259D4B1B6813F4807F12D07B
+S3150800B21CE368012B23D073BB03F1804303F5043396
+S3150800B22C1A6A22F001021A621A6A22F004021A62D7
+S3150800B23C1AE00025E7E7914A136843F48073136014
+S3150800B24CFFF7D0FA06468D4B1B6813F4807FDFD1C7
+S3150800B25CFFF7C8FA801B6428F5D903202BE1864A28
+S3150800B26C136A43F001031362E368002B3CD0FFF723
+S3150800B27CB9FA06462BE0052B09D07F4B1A6A22F041
+S3150800B28C01021A621A6A22F004021A62ECE77A4B75
+S3150800B29C1A6A42F004021A621A6A42F001021A6227
+S3150800B2ACE2E7754B196A022393FAA3F3B3FA83F30D
+S3150800B2BC03F01F03012202FA03F319423BD1FFF7ED
+S3150800B2CC91FA801B41F28833984200F2EF800223F0
+S3150800B2DC93FAA3F293FAA3F3002BE2D1022393FA7F
+S3150800B2ECA3F3654B596ADEE7FFF77CFA064615E0C9
+S3150800B2FC614B196A022393FAA3F3B3FA83F303F0A7
+S3150800B30C1F03012202FA03F3194214D0FFF76AFA53
+S3150800B31C801B41F28833984200F2CA80022393FAC2
+S3150800B32CA3F293FAA3F3002BE2D1022393FAA3F325
+S3150800B33C514B596ADEE7B5BBE369002B00F0BA80BE
+S3150800B34C4D4A526802F00C02082A00F09980022B2A
+S3150800B35C2FD04FF0807393FAA3F3B3FA83F303F168
+S3150800B36C845303F584139B0000221A60FFF73AFAFC
+S3150800B37C04464FF0007393FAA3F33F4B19684FF04A
+S3150800B38C007393FAA3F3B3FA83F303F01F030122B2
+S3150800B39C02FA03F319426BD0FFF724FA001B0228B2
+S3150800B3ACE7D9032087E0344AD36923F08053D36165
+S3150800B3BCC2E74FF0807393FAA3F3B3FA83F303F15E
+S3150800B3CC845303F584139B0000221A60FFF70AFACC
+S3150800B3DC05464FF0007393FAA3F3274B19684FF001
+S3150800B3EC007393FAA3F3B3FA83F303F01F03012252
+S3150800B3FC02FA03F3194206D0FFF7F4F9401B0228A8
+S3150800B40CE7D9032057E01C494B6823F47413626A86
+S3150800B41C206A024313434B604FF0807393FAA3F3ED
+S3150800B42CB3FA83F303F1845303F584139B000122C7
+S3150800B43C1A60FFF7D7F904464FF0007393FAA3F393
+S3150800B44C0D4B19684FF0007393FAA3F3B3FA83F311
+S3150800B45C03F01F03012202FA03F3194206D1FFF780
+S3150800B46CC1F9001B0228E7D9032024E0002022E0BA
+S3150800B47C002020E02081901000100240007000404F
+S3150800B48C012B1AD0104B5B6803F48031226A914267
+S3150800B49C15D103F47013626A934212D100200AE0A4
+S3150800B4AC01207047012006E0012004E0032002E099
+S3150800B4BC032000E0002002B070BD0120FBE701204C
+S3150800B4CCF9E70120F7E700BF00100240164B5B684E
+S3150800B4DC03F00C02082A01D01448704703F47011C3
+S3150800B4EC4FF4701292FAA2F2B2FA82F221FA02F22E
+S3150800B4FC0F49885C0C4AD26A02F00F020F2191FAA6
+S3150800B50CA1F1B1FA81F1CA400A498A5C13F4803F69
+S3150800B51C05D0064BB3FBF2F303FB00F07047064B62
+S3150800B52C03FB00F0704700BF0010024000127A00BF
+S3150800B53C90C00008A0C0000800093D00002800F0D3
+S3150800B54CBE8070B50D460446614B1B6803F00703B5
+S3150800B55C8B420BD25E4A136823F007030B43136026
+S3150800B56C136803F007038B4240F0AB80236813F093
+S3150800B57C020F06D0574A536823F0F003A1680B4311
+S3150800B58C5360236813F0010F5AD06368012B2DD032
+S3150800B59C022B40D0022292FAA2F24E4A10680222DC
+S3150800B5AC92FAA2F2B2FA82F202F01F02012101FA11
+S3150800B5BC02F2104200F0878046494A6822F00302DC
+S3150800B5CC13434B60FFF70EF90646424B5B6803F0D4
+S3150800B5DC0C036268B3EB820F32D0FFF703F9801BBA
+S3150800B5EC41F288339842F0D9032067E04FF40032D1
+S3150800B5FC92FAA2F2374A10684FF4003292FAA2F283
+S3150800B60CB2FA82F202F01F02012101FA02F2024298
+S3150800B61CD2D1012052E04FF0007292FAA2F22D4AD2
+S3150800B62C10684FF0007292FAA2F2B2FA82F202F0A5
+S3150800B63C1F02012101FA02F21042BDD101203DE0A0
+S3150800B64C234B1B6803F00703AB420AD9204A13683D
+S3150800B65C23F007032B431360136803F00703AB426D
+S3150800B66C33D1236813F0040F06D01A4A536823F40F
+S3150800B67CE063E1680B435360236813F0080F07D0A7
+S3150800B68C144A536823F46053216943EAC10353608F
+S3150800B69CFFF71CFF0F4B5B6803F0F003F02292FADE
+S3150800B6ACA2F2B2FA82F2D3400B4AD35CD8400B4BC7
+S3150800B6BC18600B4B1868FFF751F8002070BD012075
+S3150800B6CC70470120FAE70120F8E70120F6E700BFEA
+S3150800B6DC002002400010024078C00008000000203C
+S3150800B6EC08000020014B1868704700BF00000020B6
+S3150800B6FC08B5FFF7F7FF074B5B6803F4E0634FF4F5
+S3150800B70CE06292FAA2F2B2FA82F2D340024AD35C0F
+S3150800B71CD84008BD0010024088C0000808B5FFF7DD
+S3150800B72CE1FF074B5B6803F460534FF4605292FADF
+S3150800B73CA2F2B2FA82F2D340024AD35CD84008BDD0
+S3150800B74C0010024088C00008F0B583B004460368B0
+S3150800B75C13F4803F48D0914BDB6913F0805F40F0BF
+S3150800B76CD4808E4BDA6942F08052DA61DB6903F0D9
+S3150800B77C80530193019B0125894B1B6813F4807F29
+S3150800B78C00F0C580854B1B6A13F4407322D062689F
+S3150800B79C02F440729A421DD08048016A21F4407620
+S3150800B7AC4FF4803393FAA3F2B2FA82F27D4F3A44FD
+S3150800B7BC92004FF0010CC2F800C093FAA3F3B3FA47
+S3150800B7CC83F33B449B0000221A60066211F0010FBA
+S3150800B7DC40F0B280714A136A23F4407361680B43D4
+S3150800B7EC1362002D40F0CF80236813F0010F06D0AA
+S3150800B7FC6A4A136B23F00303A1680B43136323688C
+S3150800B80C13F0020F06D0654A136B23F44033E16834
+S3150800B81C0B431363236813F0040F06D05F4A136BAC
+S3150800B82C23F4402321690B431363236813F0200F79
+S3150800B83C06D05A4A136B23F01003E1690B431363C2
+S3150800B84C236813F4003F06D0544A536823F4800344
+S3150800B85CA16B0B435360236813F0400F06D04F4A75
+S3150800B86C136B23F02003216A0B431363236813F02D
+S3150800B87C080F06D0494A136B23F4401361690B432E
+S3150800B88C1363236813F0100F06D0444A136B23F482
+S3150800B89C4003A1690B431363236813F4007F06D096
+S3150800B8AC3E4A536823F40003E16A0B43536023684A
+S3150800B8BC13F0800F06D0394AD36A23F4F873616AF9
+S3150800B8CC0B43D362236813F4807F06D0334AD36ABA
+S3150800B8DC23F47853A16A0B43D362236813F4805F6D
+S3150800B8EC06D02E4A136B23F48073216B0B43136318
+S3150800B8FC236813F4005F4DD0284A136B23F40073A6
+S3150800B90C616B0B431363002045E0002534E7244A9A
+S3150800B91C136843F480731360FEF764FF0646204BE6
+S3150800B92C1B6813F4807F7FF42DAFFEF75BFF801B3B
+S3150800B93C6428F4D903202EE0FEF754FF064615E0DA
+S3150800B94C164B196A022393FAA3F3B3FA83F303F09B
+S3150800B95C1F03012202FA03F30B427FF43BAFFEF7F7
+S3150800B96C41FF801B41F28833984211D8022393FA7F
+S3150800B97CA3F293FAA3F3002BE2D1022393FAA3F3CF
+S3150800B98C064B596ADEE7D36923F08053D3612BE75C
+S3150800B99C032000E0002003B0F0BD00BF00100240F9
+S3150800B9AC0070004000819010026852E8003F23F4B2
+S3150800B9BC907342E800310029F6D1026802F10803B7
+S3150800B9CC53E8003F23F00103083242E8003100290E
+S3150800B9DCF3D1036E012B06D02023C0F88030002348
+S3150800B9EC036683667047026852E8003F23F010032B
+S3150800B9FC42E800310029F6D1EEE7000010B50446FE
+S3150800BA0C83680269134342691343C2691A4301687E
+S3150800BA1C0B6823F4164323F00C0313430B600268DC
+S3150800BA2C536823F44053C1680B4353608269036A15
+S3150800BA3C1A4301688B6823F4306313438B600368DD
+S3150800BA4C7B4A93420DD07B4A93421CD07A4A934246
+S3150800BA5C3AD07A4A93424AD0794A93425AD010231A
+S3150800BA6C1FE0784B1B6B03F00303032B09D8DFE8A5
+S3150800BA7C03F002040664012313E0042311E00823EF
+S3150800BA8C0FE010230DE06F4B1B6B03F44033B3F53B
+S3150800BA9C003F54D013D8002B53D0B3F5803F52D166
+S3150800BAAC0423E069B0F5004F69D0082B00F2B98081
+S3150800BABCDFE803F092A890B7ABB7B7B7AE00B3F50B
+S3150800BACC403F42D10223ECE75E4B1B6B03F4402349
+S3150800BADCB3F5002F3BD005D8DBB3B3F5802F3AD19D
+S3150800BAEC0423DEE7B3F5402F37D10223D9E7554BAC
+S3150800BAFC1B6B03F44013B3F5001F30D005D883B382
+S3150800BB0CB3F5801F2FD10423CBE7B3F5401F2CD1F7
+S3150800BB1C0223C6E74B4B1B6B03F44003B3F5000F2C
+S3150800BB2C25D005D82BB3B3F5800F24D10423B8E759
+S3150800BB3CB3F5400F21D10223B3E70223B1E708235B
+S3150800BB4CAFE70023ADE71023ABE71023A9E70823DB
+S3150800BB5CA7E70023A5E71023A3E71023A1E70823EB
+S3150800BB6C9FE700239DE710239BE7102399E70823FB
+S3150800BB7C97E7002395E7102393E7102391E7082B03
+S3150800BB8C49D8DFE803F0051F25482248484809002C
+S3150800BB9CFFF7AEFD002840D06268530803EB40005F
+S3150800BBACB0FBF2F0A0F110024FF6EF739A4236D8BA
+S3150800BBBC83B223F00F03C0F3420018432368D860FE
+S3150800BBCC00201BE0FFF7AAFDE4E7FFF77FFCE1E79F
+S3150800BBDC1D48E1E71C4802E0FFF78AFD18B36368C5
+S3150800BBEC00EB5300B0FBF3F0A0F110024FF6EF7325
+S3150800BBFC9A421AD8236880B2D86000200023A3661C
+S3150800BC0CE36610BDFFF78AFDE8E7FFF75FFCE5E79B
+S3150800BC1C4FF40040E3E70120F0E70020EEE70120AF
+S3150800BC2CECE70120EAE70020E8E70120E6E700BF99
+S3150800BC3C003801400044004000480040004C0040D9
+S3150800BC4C005000400010024000127A00436A13F0BC
+S3150800BC5C010F06D00268536823F40033816A0B433C
+S3150800BC6C5360436A13F0020F06D00268536823F434
+S3150800BC7C8033C16A0B435360436A13F0040F06D032
+S3150800BC8C0268536823F48023016B0B435360436AA1
+S3150800BC9C13F0080F06D00268536823F40043416B6F
+S3150800BCAC0B435360436A13F0100F06D0026893686F
+S3150800BCBC23F48053816B0B439360436A13F0200F74
+S3150800BCCC06D00268936823F40053C16B0B43936048
+S3150800BCDC436A13F0400F0AD00268536823F48013A2
+S3150800BCEC016C0B435360036CB3F5801F0BD0436A8E
+S3150800BCFC13F0800F06D00268536823F40023816C76
+S3150800BD0C0B43536070470268536823F4C003416CB5
+S3150800BD1C0B435360EBE72DE9F84305460F461646E9
+S3150800BD2C9946DDF820802C68E46937EA04030CBFD1
+S3150800BD3C4FF0010C4FF0000CB44532D1B8F1FF3F6F
+S3150800BD4CF1D0FEF74FFDA0EB090040452CD8B8F111
+S3150800BD5C000F2BD02B681A6812F0040FE3D0DA699F
+S3150800BD6C12F0080F11D1DA6912F4006FDBD04FF418
+S3150800BD7C00621A622846FFF717FE2023C5F884309E
+S3150800BD8C002385F8783003200CE008241C6228462A
+S3150800BD9CFFF70AFEC5F88440002385F878300120A1
+S3150800BDAC00E00020BDE8F8830320FBE70320F9E751
+S3150800BDBC2DE9F04383B01E46D0F88030202B70D185
+S3150800BDCC04460D46904600296FD00AB9012069E051
+S3150800BDDC0023C0F884302222C0F880200366FEF7C0
+S3150800BDEC01FD0746A4F85880A4F85A80A368B3F551
+S3150800BDFC805F06D0A3B9226972B9FF22A4F85C2029
+S3150800BE0C11E0226922B940F2FF12A4F85C200AE07C
+S3150800BE1CFF22A4F85C2006E07F22A4F85C2002E04E
+S3150800BE2C0022A4F85C20B4F85C80B3F5805F02D0DD
+S3150800BE3C4FF0000919E0236913B14FF0000914E01B
+S3150800BE4CA946002511E02023C4F88030032029E0F8
+S3150800BE5C23689B8C08EA030329F8023BB4F85A209A
+S3150800BE6C92B2013A92B2A4F85A20B4F85A309BB25C
+S3150800BE7C93B100963B46002220212046FFF74BFF44
+S3150800BE8C0028E0D1002DE3D023689A8C5FFA88F35A
+S3150800BE9C134005F8013BE1E72023C4F88030002065
+S3150800BEAC00E0022003B0BDE8F0830120FAE730B5C4
+S3150800BEBC83B004460023C0F88430FEF793FC05468D
+S3150800BECC2268126812F0080F0FD123681B6813F04A
+S3150800BEDC040F26D12023E367C4F88030002020669F
+S3150800BEEC606684F8780003B030BD6FF07E4300932B
+S3150800BEFC034600224FF400112046FFF70CFF0028DA
+S3150800BF0CE3D0226852E8003F23F0800342E8003170
+S3150800BF1C0029F6D12023E367002384F87830032020
+S3150800BF2CE1E76FF07E4300932B4600224FF4800125
+S3150800BF3C2046FFF7F0FE0028CCD0226852E8003FD6
+S3150800BF4C23F4907342E800310029F6D1226802F1F5
+S3150800BF5C080353E8003F23F00103083242E8003196
+S3150800BF6C0029F3D12023C4F88030002384F87830D4
+S3150800BF7C0320B8E768B310B50446C36F03B324238C
+S3150800BF8CE3672268136823F0010313602046FFF762
+S3150800BF9C35FD012813D0636ABBB92268536823F4AC
+S3150800BFAC904353602268936823F02A0393602268AF
+S3150800BFBC136843F0010313602046FFF778FF10BDA2
+S3150800BFCC80F87830FEF754FBD9E72046FFF73EFE9B
+S3150800BFDCE3E701207047000070B50D4D0D4C641B4E
+S3150800BFECA4100026A64209D10B4D0C4C00F020F8E3
+S3150800BFFC641BA4100026A64205D170BD55F8043B57
+S3150800C00C98470136EEE755F8043B98470136F2E7B0
+S3150800C01CB0C00008B0C00008B0C00008B4C0000822
+S3150800C02C02440346934200D1704703F8011BF9E713
+S3150800C03CF8B500BFF8BC08BC9E467047F8B500BFFB
+S30D0800C04CF8BC08BC9E467047CB
+S3150800C05405020602060307030803090309040A047A
+S3150800C0640B040C040C050D050E050F050F0610062A
+S3150800C0741007100800000000000000000102030475
+S3150800C0840607080900000000010203040203040568
+S3150800C094060708090A0B0C0D0E0F101001020304FB
+S3110800C0A405060708090A0B0C0D0E0F1004
+S3090800C0B0B1A1000824
+S3090800C0B48DA1000844
+S3110800C0B800127A000100000010000000D1
+S7050800A71536
diff --git a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld
index bdc02df7..654ffb3b 100644
--- a/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld
+++ b/Target/Demo/ARMCM4_STM32F3_Olimexino_STM32F3_CubeIDE/Prog/STM32F303RCTX.ld
@@ -47,7 +47,7 @@ MEMORY
{
CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 8K
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 40K
- FLASH (rx) : ORIGIN = 0x08008000, LENGTH = 256K - 32K
+ FLASH (rx) : ORIGIN = 0x0800A000, LENGTH = 256K - 40K
}
/* Sections */