From a09d43cfc9318cd9caf57e06fde3a6fb35790b43 Mon Sep 17 00:00:00 2001 From: Play2BReal Date: Thu, 26 Jun 2025 19:01:55 -0400 Subject: [PATCH 1/2] Add C5 Support Add C5 Support to ESPFlasher (and list other supported chips under S3) Add Support for GhostESP (manually add bins to assets yourself) Added Other C5, C6, C3 (c3 and c6 use S3 select and C5 uses C5 select. 0x0 c5 uses 0x2000) still learning git willy bully me if this is wrong lol --- esp_flasher/application.fam | 3 +- esp_flasher/esp_flasher_app_i.h | 1 + esp_flasher/esp_flasher_worker.c | 8 +- esp_flasher/esp_flasher_worker.h | 1 + esp_flasher/lib/esp-serial-flasher/.cz.toml | 12 + .../esp-serial-flasher/.git-blame-ignore-revs | 2 + .../.github/workflows/dangerjs.yml | 22 + .../.github/workflows/issue_bot.yml | 30 + .../.github/workflows/new_release.yml | 37 + .../.github/workflows/pre_commit.yml | 40 + .../workflows/stub_sources_correctness.yml | 26 + esp_flasher/lib/esp-serial-flasher/.gitignore | 9 +- .../lib/esp-serial-flasher/.gitlab-ci.yml | 283 +- .../lib/esp-serial-flasher/.gitmodules | 3 + .../lib/esp-serial-flasher/.gitsubtree | 1 - .../.pre-commit-config.yaml | 34 + .../lib/esp-serial-flasher/CHANGELOG.md | 219 + .../lib/esp-serial-flasher/CMakeLists.txt | 222 +- esp_flasher/lib/esp-serial-flasher/Kconfig | 24 +- esp_flasher/lib/esp-serial-flasher/README.md | 157 +- .../lib/esp-serial-flasher/astyle_config | 12 + .../cmake/esp_stubs.c.template | 48 + .../cmake/esp_stubs.h.template | 44 + .../cmake/gen_stub_sources.py | 125 + .../cmake/serial_flasher_pull_stubs.cmake | 26 + .../binaries/ESP32_AT_Firmware/Firmware.bin | Bin 4194304 -> 0 bytes .../binaries/ESP32_AT_Firmware/note.txt | 1 + .../binaries/Hello-world/ESP32/bootloader.bin | Bin 24832 -> 24864 bytes .../Hello-world/ESP32/hello_world.bin | Bin 133392 -> 124416 bytes .../Hello-world/ESP32_C2/bootloader.bin | Bin 17232 -> 17488 bytes .../Hello-world/ESP32_C2/hello_world.bin | Bin 62592 -> 53824 bytes .../Hello-world/ESP32_C3/bootloader.bin | Bin 18848 -> 19152 bytes .../Hello-world/ESP32_C3/hello_world.bin | Bin 134512 -> 124192 bytes .../Hello-world/ESP32_C5/bootloader.bin | Bin 0 -> 19088 bytes .../Hello-world/ESP32_C5/hello_world.bin | Bin 0 -> 92736 bytes .../partition-table.bin | Bin .../Hello-world/ESP32_C6/bootloader.bin | Bin 19552 -> 19744 bytes .../Hello-world/ESP32_C6/hello_world.bin | Bin 89408 -> 64416 bytes .../Hello-world/ESP32_H2/bootloader.bin | Bin 18736 -> 19456 bytes .../Hello-world/ESP32_H2/hello_world.bin | Bin 96976 -> 64672 bytes .../Hello-world/ESP32_H4/bootloader.bin | Bin 19264 -> 0 bytes .../Hello-world/ESP32_H4/hello_world.bin | Bin 136224 -> 0 bytes .../Hello-world/ESP32_P4/bootloader.bin | Bin 0 -> 20736 bytes .../Hello-world/ESP32_P4/hello_world.bin | Bin 0 -> 126192 bytes .../Hello-world/ESP32_P4/partition-table.bin | Bin 0 -> 3072 bytes .../Hello-world/ESP32_S2/bootloader.bin | Bin 19872 -> 20256 bytes .../Hello-world/ESP32_S2/hello_world.bin | Bin 135472 -> 126960 bytes .../Hello-world/ESP32_S3/bootloader.bin | Bin 19440 -> 19568 bytes .../Hello-world/ESP32_S3/hello_world.bin | Bin 144992 -> 135008 bytes .../Hello-world/ESP8266/bootloader.bin | Bin 10768 -> 10416 bytes .../Hello-world/ESP8266/hello-world.bin | Bin 195984 -> 113744 bytes .../binaries/RAM_APP/ESP32_C5/app.bin | Bin 0 -> 63904 bytes .../binaries/RAM_APP/ESP32_H4/app.bin | Bin 113536 -> 0 bytes .../binaries/RAM_APP/ESP32_P4/app.bin | Bin 0 -> 109760 bytes .../binaries/RAM_APP/source/CMakeLists.txt | 15 - .../examples/binaries/source/CMakeLists.txt | 18 + .../{RAM_APP => }/source/main/CMakeLists.txt | 0 .../binaries/{RAM_APP => }/source/main/main.c | 0 .../binaries/source/sdkconfig.defaults.flash | 10 + .../sdkconfig.defaults.ram} | 0 .../binaries/source_ESP8266/CMakeLists.txt | 6 + .../examples/binaries/source_ESP8266/Makefile | 8 + .../source_ESP8266/main/CMakeLists.txt | 2 + .../binaries/source_ESP8266/main/component.mk | 4 + .../source_ESP8266/main/hello_world_main.c | 22 + .../source_ESP8266/sdkconfig.defaults | 3 + .../examples/common/bin2array.cmake | 11 +- .../examples/common/example_common.c | 341 +- .../examples/common/example_common.h | 6 +- .../esp-serial-flasher/examples/conftest.py | 86 + .../examples/esp32_example/CMakeLists.txt | 11 + .../examples/esp32_example/README.md | 89 +- .../esp32_example/main/CMakeLists.txt | 14 +- .../examples/esp32_example/main/main.c | 45 +- .../esp32_example/pytest_esp32_example.py | 46 + .../examples/esp32_example/sdkconfig.defaults | 2 + .../sdkconfig.defaults_md5_disabled | 3 + .../esp32_fast_reflash_example/CMakeLists.txt | 18 + .../esp32_fast_reflash_example/README.md | 80 + .../main/CMakeLists.txt | 14 + .../esp32_fast_reflash_example/main/main.c | 98 + .../esp32_fast_reflash_example/partitions.csv | 4 + .../pytest_esp32_fast_reflash_example.py | 12 + .../sdkconfig.defaults | 2 + .../CMakeLists.txt | 18 + .../esp32_get_target_info_example/README.md | 79 + .../main/CMakeLists.txt | 6 + .../esp32_get_target_info_example/main/main.c | 118 + .../pytest_esp32_get_target_info_example.py | 32 + .../sdkconfig.defaults | 1 + .../esp32_load_ram_example/CMakeLists.txt | 11 + .../examples/esp32_load_ram_example/README.md | 87 + .../esp32_load_ram_example/main/main.c | 4 +- .../pytest_esp32_load_ram_example.py | 17 + .../esp32_load_ram_example/sdkconfig.defaults | 1 + .../esp32_read_flash_example/CMakeLists.txt | 18 + .../esp32_read_flash_example/README.md | 80 + .../main/CMakeLists.txt | 6 + .../esp32_read_flash_example/main/main.c | 81 + .../pytest_esp32_read_flash_example.py | 10 + .../sdkconfig.defaults | 1 + .../esp32_sdio_example/CMakeLists.txt | 18 + .../examples/esp32_sdio_example/README.md | 99 + .../esp32_sdio_example/main/CMakeLists.txt | 14 + .../examples/esp32_sdio_example/main/main.c | 100 + .../esp32_sdio_example/partitions.csv | 4 + .../pytest_esp32_sdio_example.py | 32 + .../esp32_sdio_example/sdkconfig.defaults | 3 + .../CMakeLists.txt | 18 + .../esp32_sdio_load_ram_example/README.md | 76 + .../main/CMakeLists.txt | 14 + .../esp32_sdio_load_ram_example/main/main.c | 92 + .../partitions.csv | 4 + .../pytest_esp32_sdio_load_ram_example.py | 17 + .../sdkconfig.defaults | 3 + .../esp32_spi_load_ram_example/CMakeLists.txt | 11 + .../esp32_spi_load_ram_example/README.md | 62 +- .../esp32_spi_load_ram_example/main/main.c | 4 +- .../pytest_esp32_spi_load_ram_example.py | 17 + .../sdkconfig.defaults | 4 +- .../esp32_stub_example/CMakeLists.txt | 18 + .../examples/esp32_stub_example/README.md | 99 + .../esp32_stub_example/main/CMakeLists.txt | 14 + .../examples/esp32_stub_example/main/main.c | 94 + .../esp32_stub_example/partitions.csv | 4 + .../pytest_esp32_stub_example.py | 32 + .../esp32_stub_example/sdkconfig.defaults | 2 + .../esp32_usb_cdc_acm_example/CMakeLists.txt | 9 + .../esp32_usb_cdc_acm_example/README.md | 87 + .../main/CMakeLists.txt | 16 + .../main/idf_component.yml | 4 + .../esp32_usb_cdc_acm_example/main/main.c | 117 + .../esp32_usb_cdc_acm_example/partitions.csv | 4 + .../pytest_esp32_usb_cdc_acm_example.py | 29 + .../sdkconfig.defaults | 3 + .../examples/pi_pico_example/CMakeLists.txt | 31 + .../examples/pi_pico_example/README.md | 95 + .../examples/pi_pico_example/main.c | 83 + .../pi_pico_example/pico_sdk_import.cmake | 73 + .../pi_pico_example/pytest_pi_pico_example.py | 57 + .../examples/raspberry_example/CMakeLists.txt | 20 +- .../examples/raspberry_example/README.md | 48 +- .../examples/raspberry_example/Src/main.c | 162 +- .../pytest_raspberry_example.py | 38 + .../examples/stm32_example/CMakeLists.txt | 6 + .../stm32_example/Core/Src/libc_compat.c | 8 +- .../examples/stm32_example/Core/Src/main.c | 31 +- .../Core/Src/stm32h7xx_hal_msp.c | 14 +- .../examples/stm32_example/README.md | 38 +- .../stm32_example/pytest_stm32_example.py | 52 + .../examples/zephyr_example/README.md | 89 +- .../boards/esp32_devkitc_wroom.overlay | 34 - .../boards/esp32_devkitc_wrover.overlay | 34 - .../zephyr_example/pytest_zephyr_example.py | 65 + .../zephyr_example/socs/esp32_procpu.overlay | 42 + .../examples/zephyr_example/src/main.c | 108 +- .../lib/esp-serial-flasher/idf_component.yml | 11 +- .../esp-serial-flasher/include/esp_loader.h | 218 +- .../include/esp_loader_io.h | 18 +- .../esp-serial-flasher/include/serial_io.h | 2 +- .../lib/esp-serial-flasher/port/esp32_port.c | 83 +- .../lib/esp-serial-flasher/port/esp32_port.h | 28 +- .../esp-serial-flasher/port/esp32_sdio_port.c | 225 + .../esp-serial-flasher/port/esp32_sdio_port.h | 70 + .../esp-serial-flasher/port/esp32_spi_port.c | 63 +- .../esp-serial-flasher/port/esp32_spi_port.h | 7 +- .../port/esp32_usb_cdc_acm_port.c | 297 + .../port/esp32_usb_cdc_acm_port.h | 47 + .../esp-serial-flasher/port/pi_pico_port.c | 201 + .../esp-serial-flasher/port/pi_pico_port.h | 55 + .../esp-serial-flasher/port/raspberry_port.c | 89 +- .../esp-serial-flasher/port/raspberry_port.h | 1 + .../lib/esp-serial-flasher/port/stm32_port.c | 20 +- .../lib/esp-serial-flasher/port/zephyr_port.c | 22 +- .../lib/esp-serial-flasher/port/zephyr_port.h | 1 - .../private_include/esp_stubs.h | 44 + .../private_include/esp_targets.h | 7 +- .../private_include/md5_hash.h | 8 +- .../private_include/protocol.h | 167 +- .../private_include/protocol_prv.h | 23 +- .../esp-serial-flasher/private_include/sip.h | 73 + .../esp-serial-flasher/private_include/slip.h | 6 +- esp_flasher/lib/esp-serial-flasher/pytest.ini | 31 + .../lib/esp-serial-flasher/src/esp_loader.c | 554 +- .../esp-serial-flasher/src/esp_sdio_stubs.c | 109 + .../lib/esp-serial-flasher/src/esp_stubs.c | 193 + .../lib/esp-serial-flasher/src/esp_targets.c | 184 +- .../esp-serial-flasher/src/protocol_common.c | 301 - .../esp-serial-flasher/src/protocol_sdio.c | 582 + .../esp-serial-flasher/src/protocol_serial.c | 501 + .../lib/esp-serial-flasher/src/protocol_spi.c | 145 +- .../esp-serial-flasher/src/protocol_uart.c | 131 +- esp_flasher/lib/esp-serial-flasher/src/slip.c | 48 +- .../.github/ISSUE_TEMPLATE/bug-report.md | 39 - .../.github/ISSUE_TEMPLATE/feature_request.md | 20 - .../stm32-cmake/.github/workflows/cmake.yml | 66 - .../.github/workflows/create-matrix.yml | 30 - .../submodules/stm32-cmake/.gitignore | 1 - .../submodules/stm32-cmake/.gitsubtree | 1 - .../submodules/stm32-cmake/CHANGELOG.md | 41 - .../submodules/stm32-cmake/LICENSE | 21 - .../submodules/stm32-cmake/README.md | 319 - .../stm32-cmake/cmake/FindBSP.cmake | 415 - .../stm32-cmake/cmake/FindCMSIS.cmake | 326 - .../stm32-cmake/cmake/FindFreeRTOS.cmake | 259 - .../stm32-cmake/cmake/FindHAL.cmake | 316 - .../stm32-cmake/cmake/stm32/c0.cmake | 51 - .../stm32-cmake/cmake/stm32/common.cmake | 373 - .../stm32-cmake/cmake/stm32/devices.cmake | 269 - .../stm32-cmake/cmake/stm32/f0.cmake | 111 - .../stm32-cmake/cmake/stm32/f1.cmake | 186 - .../stm32-cmake/cmake/stm32/f2.cmake | 90 - .../stm32-cmake/cmake/stm32/f3.cmake | 141 - .../stm32-cmake/cmake/stm32/f4.cmake | 191 - .../stm32-cmake/cmake/stm32/f7.cmake | 123 - .../stm32-cmake/cmake/stm32/g0.cmake | 141 - .../stm32-cmake/cmake/stm32/g4.cmake | 132 - .../stm32-cmake/cmake/stm32/h5.cmake | 67 - .../stm32-cmake/cmake/stm32/h7.cmake | 214 - .../stm32-cmake/cmake/stm32/l0.cmake | 140 - .../stm32-cmake/cmake/stm32/l1.cmake | 145 - .../stm32-cmake/cmake/stm32/l4.cmake | 191 - .../stm32-cmake/cmake/stm32/l5.cmake | 52 - .../stm32-cmake/cmake/stm32/linker_ld.cmake | 158 - .../stm32-cmake/cmake/stm32/mp1.cmake | 56 - .../stm32-cmake/cmake/stm32/u0.cmake | 63 - .../stm32-cmake/cmake/stm32/u5.cmake | 53 - .../stm32-cmake/cmake/stm32/wb.cmake | 67 - .../stm32-cmake/cmake/stm32/wl.cmake | 105 - .../stm32-cmake/cmake/stm32_gcc.cmake | 23 - .../submodules/stm32-cmake/docs/MAINTAIN.md | 27 - .../examples/blinky-ll/CMakeLists.txt | 38 - .../stm32-cmake/examples/blinky-ll/blinky.c | 59 - .../examples/blinky/CMakeLists.txt | 89 - .../stm32-cmake/examples/blinky/blinky.c | 59 - .../stm32-cmake/examples/blinky/blinky.cpp | 62 - .../examples/blinky/stm32f1xx_hal_conf.h | 399 - .../examples/blinky/stm32f4xx_hal_conf.h | 501 - .../examples/blinky/stm32l0xx_hal_conf.h | 342 - .../custom-linker-script/CMakeLists.txt | 15 - .../examples/custom-linker-script/F407VG.ld | 132 - .../examples/custom-linker-script/main.c | 5 - .../examples/fetch-cmsis-hal/CMakeLists.txt | 22 - .../examples/fetch-cmsis-hal/main.c | 5 - .../examples/fetch-cube/CMakeLists.txt | 20 - .../stm32-cmake/examples/fetch-cube/main.c | 5 - .../examples/freertos/CMakeLists.txt | 280 - .../examples/freertos/FreeRTOSConfig.h | 160 - .../stm32-cmake/examples/freertos/main.cpp | 95 - .../stm32-cmake/examples/freertos/main.h | 11 - .../examples/freertos/stm32f1xx_hal_conf.h | 399 - .../examples/freertos/stm32f4xx_hal_conf.h | 495 - .../examples/freertos/stm32h7xx_hal_conf.h | 432 - .../examples/freertos/stm32l5xx_hal_conf.h | 439 - .../examples/multi-core/CMakeLists.txt | 33 - .../multi-core/Inc/stm32f4xx_hal_conf.h | 501 - .../multi-core/Inc/stm32h7xx_hal_conf.h | 511 - .../stm32-cmake/examples/multi-core/main.c | 5 - .../examples/template/CMakeLists.txt | 18 - .../stm32-cmake/examples/template/main.c | 5 - .../stm32-cmake/tests/bsp/CMakeLists.txt | 83 - .../tests/bsp/b_g474e_dpow1_conf.h | 90 - .../submodules/stm32-cmake/tests/bsp/main.c | 5 - .../tests/bsp/stm32c0xx_hal_conf.h | 275 - .../tests/bsp/stm32f0xx_hal_conf.h | 321 - .../tests/bsp/stm32f1xx_hal_conf.h | 399 - .../tests/bsp/stm32f2xx_hal_conf.h | 422 - .../tests/bsp/stm32f3xx_hal_conf.h | 357 - .../tests/bsp/stm32f4xx_hal_conf.h | 495 - .../tests/bsp/stm32f7xx_hal_conf.h | 495 - .../tests/bsp/stm32g0xx_hal_conf.h | 356 - .../tests/bsp/stm32g474e_eval_conf.h | 115 - .../tests/bsp/stm32g4xx_hal_conf.h | 382 - .../tests/bsp/stm32g4xx_nucleo_conf.h | 80 - .../tests/bsp/stm32h5xx_hal_conf.h | 488 - .../tests/bsp/stm32h7xx_hal_conf.h | 513 - .../tests/bsp/stm32l0xx_hal_conf.h | 342 - .../tests/bsp/stm32l1xx_hal_conf.h | 324 - .../tests/bsp/stm32l4xx_hal_conf.h | 480 - .../tests/bsp/stm32l5xx_hal_conf.h | 439 - .../tests/bsp/stm32u0xx_hal_conf.h | 335 - .../tests/bsp/stm32u5xx_hal_conf.h | 474 - .../tests/bsp/stm32wbxx_hal_conf.h | 355 - .../tests/bsp/stm32wlxx_hal_conf.h | 340 - .../stm32-cmake/tests/cmsis/CMakeLists.txt | 48 - .../submodules/stm32-cmake/tests/cmsis/main.c | 5 - .../tests/cmsis/stm32h5xx_hal_conf.h | 488 - .../stm32-cmake/tests/fetch/CMakeLists.txt | 36 - .../submodules/stm32-cmake/tests/fetch/main.c | 5 - .../tests/fetch/stm32c0xx_hal_conf.h | 275 - .../tests/fetch/stm32f0xx_hal_conf.h | 321 - .../tests/fetch/stm32f1xx_hal_conf.h | 399 - .../tests/fetch/stm32f2xx_hal_conf.h | 422 - .../tests/fetch/stm32f3xx_hal_conf.h | 357 - .../tests/fetch/stm32f4xx_hal_conf.h | 501 - .../tests/fetch/stm32f7xx_hal_conf.h | 495 - .../tests/fetch/stm32g0xx_hal_conf.h | 356 - .../tests/fetch/stm32g4xx_hal_conf.h | 382 - .../tests/fetch/stm32h5xx_hal_conf.h | 488 - .../tests/fetch/stm32h7xx_hal_conf.h | 513 - .../tests/fetch/stm32l0xx_hal_conf.h | 342 - .../tests/fetch/stm32l1xx_hal_conf.h | 324 - .../tests/fetch/stm32l4xx_hal_conf.h | 480 - .../tests/fetch/stm32l5xx_hal_conf.h | 439 - .../tests/fetch/stm32mp1xx_hal_conf.h | 346 - .../tests/fetch/stm32u0xx_hal_conf.h | 335 - .../tests/fetch/stm32u5xx_hal_conf.h | 474 - .../tests/fetch/stm32wbxx_hal_conf.h | 355 - .../tests/fetch/stm32wlxx_hal_conf.h | 340 - .../stm32-cmake/tests/hal/CMakeLists.txt | 52 - .../submodules/stm32-cmake/tests/hal/main.c | 5 - .../tests/hal/stm32c0xx_hal_conf.h | 275 - .../tests/hal/stm32f0xx_hal_conf.h | 321 - .../tests/hal/stm32f1xx_hal_conf.h | 399 - .../tests/hal/stm32f2xx_hal_conf.h | 422 - .../tests/hal/stm32f3xx_hal_conf.h | 357 - .../tests/hal/stm32f4xx_hal_conf.h | 501 - .../tests/hal/stm32f7xx_hal_conf.h | 495 - .../tests/hal/stm32g0xx_hal_conf.h | 356 - .../tests/hal/stm32g4xx_hal_conf.h | 382 - .../tests/hal/stm32h5xx_hal_conf.h | 488 - .../tests/hal/stm32h7xx_hal_conf.h | 513 - .../tests/hal/stm32l0xx_hal_conf.h | 342 - .../tests/hal/stm32l1xx_hal_conf.h | 324 - .../tests/hal/stm32l4xx_hal_conf.h | 480 - .../tests/hal/stm32l5xx_hal_conf.h | 439 - .../tests/hal/stm32mp1xx_hal_conf.h | 346 - .../tests/hal/stm32u0xx_hal_conf.h | 335 - .../tests/hal/stm32u5xx_hal_conf.h | 474 - .../tests/hal/stm32wbxx_hal_conf.h | 355 - .../tests/hal/stm32wlxx_hal_conf.h | 340 - .../esp-serial-flasher/test/CMakeLists.txt | 11 +- .../lib/esp-serial-flasher/test/README.md | 56 +- .../lib/esp-serial-flasher/test/catch.hpp | 14220 +++++++++------- .../lib/esp-serial-flasher/test/qemu_test.cpp | 18 +- .../test/requirements_test.txt | 9 + .../esp-serial-flasher/test/run_qemu_test.sh | 27 + .../lib/esp-serial-flasher/test/run_test.sh | 33 - .../test/serial_io_mock.cpp | 158 - .../lib/esp-serial-flasher/test/test.cpp | 405 - .../lib/esp-serial-flasher/test/test_main.cpp | 13 +- .../test/{serial_io_mock.h => test_port.h} | 17 +- .../{serial_io_tcp.cpp => test_tcp_port.cpp} | 57 +- .../esp-serial-flasher/zephyr/CMakeLists.txt | 19 +- esp_flasher/scenes/esp_flasher_scene_browse.c | 54 +- esp_flasher/scenes/esp_flasher_scene_quick.c | 302 +- 346 files changed, 16510 insertions(+), 43288 deletions(-) create mode 100644 esp_flasher/lib/esp-serial-flasher/.cz.toml create mode 100644 esp_flasher/lib/esp-serial-flasher/.git-blame-ignore-revs create mode 100644 esp_flasher/lib/esp-serial-flasher/.github/workflows/dangerjs.yml create mode 100644 esp_flasher/lib/esp-serial-flasher/.github/workflows/issue_bot.yml create mode 100644 esp_flasher/lib/esp-serial-flasher/.github/workflows/new_release.yml create mode 100644 esp_flasher/lib/esp-serial-flasher/.github/workflows/pre_commit.yml create mode 100644 esp_flasher/lib/esp-serial-flasher/.github/workflows/stub_sources_correctness.yml create mode 100644 esp_flasher/lib/esp-serial-flasher/.gitmodules delete mode 100644 esp_flasher/lib/esp-serial-flasher/.gitsubtree create mode 100644 esp_flasher/lib/esp-serial-flasher/.pre-commit-config.yaml create mode 100644 esp_flasher/lib/esp-serial-flasher/CHANGELOG.md create mode 100644 esp_flasher/lib/esp-serial-flasher/astyle_config create mode 100644 esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.c.template create mode 100644 esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.h.template create mode 100644 esp_flasher/lib/esp-serial-flasher/cmake/gen_stub_sources.py create mode 100644 esp_flasher/lib/esp-serial-flasher/cmake/serial_flasher_pull_stubs.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/ESP32_AT_Firmware/Firmware.bin create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/ESP32_AT_Firmware/note.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C5/bootloader.bin create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C5/hello_world.bin rename esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/{ESP32_H4 => ESP32_C5}/partition-table.bin (100%) delete mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H4/bootloader.bin delete mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H4/hello_world.bin create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_P4/bootloader.bin create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_P4/hello_world.bin create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_P4/partition-table.bin create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/RAM_APP/ESP32_C5/app.bin delete mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/RAM_APP/ESP32_H4/app.bin create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/RAM_APP/ESP32_P4/app.bin delete mode 100755 esp_flasher/lib/esp-serial-flasher/examples/binaries/RAM_APP/source/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source/CMakeLists.txt rename esp_flasher/lib/esp-serial-flasher/examples/binaries/{RAM_APP => }/source/main/CMakeLists.txt (100%) mode change 100755 => 100644 rename esp_flasher/lib/esp-serial-flasher/examples/binaries/{RAM_APP => }/source/main/main.c (100%) mode change 100755 => 100644 create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source/sdkconfig.defaults.flash rename esp_flasher/lib/esp-serial-flasher/examples/binaries/{RAM_APP/source/sdkconfig.defaults => source/sdkconfig.defaults.ram} (100%) create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/Makefile create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/main/component.mk create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/main/hello_world_main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/conftest.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_example/pytest_esp32_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults_md5_disabled create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/partitions.csv create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/pytest_esp32_fast_reflash_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/pytest_esp32_get_target_info_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/pytest_esp32_load_ram_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/pytest_esp32_read_flash_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/partitions.csv create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/pytest_esp32_sdio_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/partitions.csv create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/pytest_esp32_sdio_load_ram_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/pytest_esp32_spi_load_ram_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/partitions.csv create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/pytest_esp32_stub_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/idf_component.yml create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/partitions.csv create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/pytest_esp32_usb_cdc_acm_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/sdkconfig.defaults create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/CMakeLists.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/README.md create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/main.c create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pico_sdk_import.cmake create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pytest_pi_pico_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/pytest_raspberry_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/stm32_example/pytest_stm32_example.py delete mode 100644 esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wroom.overlay delete mode 100644 esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wrover.overlay create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/pytest_zephyr_example.py create mode 100644 esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/socs/esp32_procpu.overlay create mode 100644 esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.c create mode 100644 esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.h create mode 100644 esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.c create mode 100644 esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.h create mode 100644 esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.c create mode 100644 esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.h create mode 100644 esp_flasher/lib/esp-serial-flasher/private_include/esp_stubs.h create mode 100644 esp_flasher/lib/esp-serial-flasher/private_include/sip.h create mode 100644 esp_flasher/lib/esp-serial-flasher/pytest.ini create mode 100644 esp_flasher/lib/esp-serial-flasher/src/esp_sdio_stubs.c create mode 100644 esp_flasher/lib/esp-serial-flasher/src/esp_stubs.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/src/protocol_common.c create mode 100644 esp_flasher/lib/esp-serial-flasher/src/protocol_sdio.c create mode 100644 esp_flasher/lib/esp-serial-flasher/src/protocol_serial.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/bug-report.md delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/cmake.yml delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/create-matrix.yml delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitignore delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitsubtree delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/CHANGELOG.md delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/LICENSE delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/README.md delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindBSP.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindCMSIS.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindFreeRTOS.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindHAL.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/c0.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/common.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/devices.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f0.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f1.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f2.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f3.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f4.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f7.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g0.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g4.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h5.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h7.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l0.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l1.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l4.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l5.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/linker_ld.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/mp1.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u0.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u5.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wb.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wl.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32_gcc.cmake delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/docs/MAINTAIN.md delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/blinky.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.cpp delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f1xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f4xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32l0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/F407VG.ld delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/FreeRTOSConfig.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.cpp delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f1xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32h7xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32l5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32f4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32h7xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/CMakeLists.txt delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/b_g474e_dpow1_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32c0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f1xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f2xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f3xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f4xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f7xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g474e_eval_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_nucleo_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h5xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h7xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l1xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wbxx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wlxx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/stm32h5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32c0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f1xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f2xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f3xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f7xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h7xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l1xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32mp1xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wbxx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wlxx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/CMakeLists.txt delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/main.c delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32c0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f1xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f2xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f3xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f4xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f7xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h5xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h7xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l0xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l1xx_hal_conf.h delete mode 100755 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l4xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32mp1xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u0xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u5xx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wbxx_hal_conf.h delete mode 100644 esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wlxx_hal_conf.h create mode 100644 esp_flasher/lib/esp-serial-flasher/test/requirements_test.txt create mode 100644 esp_flasher/lib/esp-serial-flasher/test/run_qemu_test.sh delete mode 100755 esp_flasher/lib/esp-serial-flasher/test/run_test.sh delete mode 100644 esp_flasher/lib/esp-serial-flasher/test/serial_io_mock.cpp delete mode 100644 esp_flasher/lib/esp-serial-flasher/test/test.cpp rename esp_flasher/lib/esp-serial-flasher/test/{serial_io_mock.h => test_port.h} (63%) rename esp_flasher/lib/esp-serial-flasher/test/{serial_io_tcp.cpp => test_tcp_port.cpp} (69%) diff --git a/esp_flasher/application.fam b/esp_flasher/application.fam index b26275be6d..1b653df4c5 100644 --- a/esp_flasher/application.fam +++ b/esp_flasher/application.fam @@ -18,9 +18,10 @@ App( "src/esp_loader.c", "src/esp_targets.c", "src/md5_hash.c", - "src/protocol_common.c", + "src/protocol_serial.c", "src/protocol_uart.c", "src/slip.c", + "src/esp_stubs.c", ], cincludes=["lib/esp-serial-flasher/private_include"], cdefines=[ diff --git a/esp_flasher/esp_flasher_app_i.h b/esp_flasher/esp_flasher_app_i.h index d66158769f..71baede7e4 100644 --- a/esp_flasher/esp_flasher_app_i.h +++ b/esp_flasher/esp_flasher_app_i.h @@ -31,6 +31,7 @@ typedef enum SelectedFlashOptions { SelectedFlashS3Mode, + SelectedFlashC5Mode, SelectedFlashBoot, SelectedFlashPart, SelectedFlashNvs, diff --git a/esp_flasher/esp_flasher_worker.c b/esp_flasher/esp_flasher_worker.c index 003c043a0d..24fc15df7d 100644 --- a/esp_flasher/esp_flasher_worker.c +++ b/esp_flasher/esp_flasher_worker.c @@ -167,17 +167,17 @@ static void _flash_all_files(EspFlasherApp* app) { #define NUM_FLASH_ITEMS 7 FlashItem items[NUM_FLASH_ITEMS] = { {SelectedFlashBoot, - "bootloader", + "bootloader", app->bin_file_path_boot, - app->selected_flash_options[SelectedFlashS3Mode] ? ESP_ADDR_BOOT_S3 : ESP_ADDR_BOOT}, + app->selected_flash_options[SelectedFlashC5Mode] ? ESP_ADDR_BOOT_C5 : + (app->selected_flash_options[SelectedFlashS3Mode] ? ESP_ADDR_BOOT_S3 : ESP_ADDR_BOOT)}, {SelectedFlashPart, "partition table", app->bin_file_path_part, ESP_ADDR_PART}, {SelectedFlashNvs, "NVS", app->bin_file_path_nvs, ESP_ADDR_NVS}, {SelectedFlashBootApp0, "boot_app0", app->bin_file_path_boot_app0, ESP_ADDR_BOOT_APP0}, {SelectedFlashAppA, "firmware A", app->bin_file_path_app_a, ESP_ADDR_APP_A}, {SelectedFlashAppB, "firmware B", app->bin_file_path_app_b, ESP_ADDR_APP_B}, {SelectedFlashCustom, "custom data", app->bin_file_path_custom, 0x0}, - /* if you add more entries, update NUM_FLASH_ITEMS above! */ - }; +}; char user_msg[256]; diff --git a/esp_flasher/esp_flasher_worker.h b/esp_flasher/esp_flasher_worker.h index 7809dbef07..e7a3d94436 100644 --- a/esp_flasher/esp_flasher_worker.h +++ b/esp_flasher/esp_flasher_worker.h @@ -10,6 +10,7 @@ #include "esp_loader_io.h" #define ESP_ADDR_BOOT_S3 0x0 +#define ESP_ADDR_BOOT_C5 0x2000 #define ESP_ADDR_BOOT 0x1000 #define ESP_ADDR_PART 0x8000 #define ESP_ADDR_NVS 0x9000 diff --git a/esp_flasher/lib/esp-serial-flasher/.cz.toml b/esp_flasher/lib/esp-serial-flasher/.cz.toml new file mode 100644 index 0000000000..2bb3b704dc --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.cz.toml @@ -0,0 +1,12 @@ +[tool.commitizen] +name = "czespressif" +version = "1.8.0" +update_changelog_on_bump = true +tag_format = "v$version" +changelog_merge_prerelease = true +annotated_tag = true +changelog_start_rev = "v1.0.0" +bump_message = "change: Update version to $new_version" +version_files = [ + "idf_component.yml:version" +] diff --git a/esp_flasher/lib/esp-serial-flasher/.git-blame-ignore-revs b/esp_flasher/lib/esp-serial-flasher/.git-blame-ignore-revs new file mode 100644 index 0000000000..0d586ecb7b --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.git-blame-ignore-revs @@ -0,0 +1,2 @@ +# First pre-commit pass +7d17569be1a805527df3045c110c744b20015713 diff --git a/esp_flasher/lib/esp-serial-flasher/.github/workflows/dangerjs.yml b/esp_flasher/lib/esp-serial-flasher/.github/workflows/dangerjs.yml new file mode 100644 index 0000000000..a927872783 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.github/workflows/dangerjs.yml @@ -0,0 +1,22 @@ +name: DangerJS Check +on: + pull_request_target: + types: [opened, edited, reopened, synchronize] + +permissions: + pull-requests: write + contents: write + +jobs: + pull-request-style-linter: + runs-on: ubuntu-latest + steps: + - name: Check out PR head + uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: DangerJS pull request linter + uses: espressif/github-actions/danger_pr_review@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/esp_flasher/lib/esp-serial-flasher/.github/workflows/issue_bot.yml b/esp_flasher/lib/esp-serial-flasher/.github/workflows/issue_bot.yml new file mode 100644 index 0000000000..0f16c3ba91 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.github/workflows/issue_bot.yml @@ -0,0 +1,30 @@ +name: Bot response to issues + +on: + issues: + types: [opened, edited] + +jobs: + docs_bot: + name: Generate automated response by docs bot + runs-on: ubuntu-latest + steps: + - name: Docs bot action + if: ${{ github.repository_owner == 'espressif' }} + uses: espressif/docs-bot-action@master + env: + BOT_API_KEY: ${{ secrets.BOT_API_KEY }} + BOT_INTEGRATION_ID: ${{ secrets.BOT_INTEGRATION_ID }} + BOT_API_ENDPOINT: ${{ secrets.BOT_API_ENDPOINT }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + github_repository: ${{ github.repository }} + github_issue_number: ${{ github.event.issue.number }} + title: ${{ github.event.issue.title }} + in_msg: ${{ github.event.issue.body }} + prefix_out_msg: > + Hi @${{ github.event.issue.user.login }}! Please be aware that + (1) the following suggestions are generated by a bot and haven't been fact-checked by Espressif + Systems, + (2) burning eFuses and enabling security features are irreversible operations and can damage your ESP32 device. + We hope that this message will help you until an Espressif Engineer looks at your issue. diff --git a/esp_flasher/lib/esp-serial-flasher/.github/workflows/new_release.yml b/esp_flasher/lib/esp-serial-flasher/.github/workflows/new_release.yml new file mode 100644 index 0000000000..77ab36b222 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.github/workflows/new_release.yml @@ -0,0 +1,37 @@ +name: Create a new release from a tag + +on: + push: + tags: + - v* + +jobs: + create_release: + name: Create GitHub release + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Get version + id: get_version + run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT + shell: bash + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install dependencies + run: pip install commitizen czespressif>=1.3.1 + - name: Generate changelog + run: | + cz changelog ${{ steps.get_version.outputs.VERSION }} --file-name changelog_body.md + cat changelog_body.md + - name: Create release + uses: softprops/action-gh-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + body_path: changelog_body.md + name: Version ${{ steps.get_version.outputs.VERSION }} + draft: true + prerelease: false diff --git a/esp_flasher/lib/esp-serial-flasher/.github/workflows/pre_commit.yml b/esp_flasher/lib/esp-serial-flasher/.github/workflows/pre_commit.yml new file mode 100644 index 0000000000..e624025d37 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.github/workflows/pre_commit.yml @@ -0,0 +1,40 @@ +name: Check pre-commit rules + +on: + pull_request: + types: [opened, reopened, synchronize] + +permissions: + contents: read + +jobs: + pre_commit_check: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Fetch head and base refs + # This is necessary for pre-commit to check the changes in the PR branch + run: | + git fetch origin ${{ github.base_ref }}:base_ref + git fetch origin pull/${{ github.event.pull_request.number }}/head:pr_ref + - name: Set up Python environment + uses: actions/setup-python@master + with: + python-version: v3.11 + - name: Install python packages + run: | + pip install pre-commit + pre-commit install-hooks + - name: Run pre-commit and check for any changes + run: | + echo "Commits being checked:" + git log --oneline --no-decorate base_ref..pr_ref + echo "" + if ! pre-commit run --from-ref base_ref --to-ref pr_ref --show-diff-on-failure ; then + echo "" + echo "::notice::It looks like the commits in this PR have been made without having pre-commit hooks installed." + echo "::notice::Please see https://github.com/espressif/esp-serial-flasher?tab=readme-ov-file#contributing for instructions." + echo "" + exit 1 + fi diff --git a/esp_flasher/lib/esp-serial-flasher/.github/workflows/stub_sources_correctness.yml b/esp_flasher/lib/esp-serial-flasher/.github/workflows/stub_sources_correctness.yml new file mode 100644 index 0000000000..cae9d3fded --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.github/workflows/stub_sources_correctness.yml @@ -0,0 +1,26 @@ +name: Stub sources correctness checks + +on: + push: + branches: [ "master" ] + pull_request: + branches: [ "master" ] + +jobs: + pre_commit: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Configure the stub example with the stub version argument + uses: espressif/esp-idf-ci-action@v1 + with: + esp_idf_version: v5.2.2 + path: 'examples/esp32_stub_example' + command: idf.py reconfigure -DSERIAL_FLASHER_STUB_PULL_VERSION='0.3.0' + + - name: Run git diff to check if the sources in the repo match the generated ones + run: git diff --exit-code diff --git a/esp_flasher/lib/esp-serial-flasher/.gitignore b/esp_flasher/lib/esp-serial-flasher/.gitignore index 139a9c5016..5d728c8576 100644 --- a/esp_flasher/lib/esp-serial-flasher/.gitignore +++ b/esp_flasher/lib/esp-serial-flasher/.gitignore @@ -1,6 +1,11 @@ -build +build*/ sdkconfig sdkconfig.old empty_file.bin binaries.c -*.lock \ No newline at end of file +*.lock +python_venv +managed_components +__pycache__ +.pytest_cache +pytest_embedded_log diff --git a/esp_flasher/lib/esp-serial-flasher/.gitlab-ci.yml b/esp_flasher/lib/esp-serial-flasher/.gitlab-ci.yml index 0bebc6f8bc..daaade2dbd 100644 --- a/esp_flasher/lib/esp-serial-flasher/.gitlab-ci.yml +++ b/esp_flasher/lib/esp-serial-flasher/.gitlab-ci.yml @@ -1,4 +1,5 @@ stages: + - pre_check - build - test - deploy @@ -16,58 +17,159 @@ variables: ARM_TOOLCHAIN_URL: https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz?rev=e434b9ea4afc4ed7998329566b764309&hash=CA590209F5774EE1C96E6450E14A3E26 QEMU_PATH: /opt/qemu/bin/qemu-system-xtensa ZEPHYR_REPO: https://github.com/zephyrproject-rtos/zephyr.git - ZEPHYR_REPO_REV: v3.5.0 - ZEPHYR_TOOLCHAIN: https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/toolchain_linux-x86_64_xtensa-espressif_esp32_zephyr-elf.tar.xz - ZEPHYR_SDK: https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.3/zephyr-sdk-0.16.3_linux-aarch64_minimal.tar.xz + ZEPHYR_REPO_REV: v4.0.0 + ZEPHYR_TOOLCHAIN: https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.0/toolchain_linux-x86_64_xtensa-espressif_esp32_zephyr-elf.tar.xz + ZEPHYR_SDK: https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.0/zephyr-sdk-0.17.0_linux-aarch64_minimal.tar.xz + PI_PICO_SDK_REV: 1.5.1 + PI_PICO_SDK: https://github.com/raspberrypi/pico-sdk + PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" + PIP_EXTRA_INDEX_URL: "https://dl.espressif.com/pypi" + +cache: + paths: + - "$CI_PROJECT_DIR/.cache/pip" + +run_pre_commit: + stage: pre_check + image: python:3.11-bookworm + tags: + - internet + script: + - apt-get update + - pip install pre-commit + - git fetch origin master + - pre-commit run --show-diff-on-failure --from-ref origin/master --to-ref HEAD + +check_stub_source_correctness: + stage: pre_check + image: espressif/idf:v5.2.2 + tags: + - internet + script: + - cd $CI_PROJECT_DIR/examples/esp32_stub_example + - idf.py reconfigure -DSERIAL_FLASHER_STUB_PULL_VERSION='0.3.0' + - git diff --exit-code .build_idf_template: stage: build - image: espressif/idf:latest tags: - build - internet + before_script: + - apt install ccache + - pip install -U idf-build-apps --prefer-binary variables: - PEDANTIC_FLAGS: "-Werror=all -Werror=extra" + IDF_CCACHE_ENABLE: 1 + CCACHE_DIR: "/cache/esf_ccache" + CCACHE_SLOPPINESS: "time_macros" + PEDANTIC_FLAGS: "-Werror -Wall -Wextra" EXTRA_CFLAGS: "${PEDANTIC_FLAGS}" EXTRA_CXXFLAGS: "${PEDANTIC_FLAGS}" + BUILD_DIR: "build" script: - - cd $CI_PROJECT_DIR/examples/esp32_example - - idf.py build -DMD5_ENABLED=1 - - idf.py build -DMD5_ENABLED=0 - - cd $CI_PROJECT_DIR/examples/esp32_load_ram_example - - idf.py build - - cd $CI_PROJECT_DIR/examples/esp32_spi_load_ram_example - - idf.py build - -build_idf_v4.2: - extends: .build_idf_template - image: espressif/idf:release-v4.2 + # CCACHE_RECACHE Used when invalidating the current cache. + # could be enabled by MR label "ccache:recache" + - | + if [ -n "${CI_MERGE_REQUEST_LABELS}" ] && echo "${CI_MERGE_REQUEST_LABELS}" | grep -q "ccache::recache"; then + export CCACHE_RECACHE="1" + echo "INFO: ccache recache enabled" + fi + - | + if [ -n "${TARGETS}" ]; then + python -m idf_build_apps build -v -p . \ + --recursive \ + --exclude ./examples/binaries \ + --config "sdkconfig.defaults*" \ + --build-dir ${BUILD_DIR}_@w \ + --check-warnings \ + --target ${TARGETS} + else + python -m idf_build_apps build -v -p . \ + --recursive \ + --exclude ./examples/binaries \ + --config-rules "sdkconfig.defaults*" \ + --build-dir ${BUILD_DIR}_@w \ + --check-warnings + fi + # Show ccache statistics if enabled globally + - test "$CI_CCACHE_STATS" == 1 && test -n "$(which ccache)" && ccache --show-stats -vv || true build_idf_v4.3: - extends: .build_idf_template image: espressif/idf:release-v4.3 + extends: .build_idf_template + variables: + TARGETS: "esp32" build_idf_v4.4: - extends: .build_idf_template image: espressif/idf:release-v4.4 + extends: .build_idf_template build_idf_v5.0: - extends: .build_idf_template image: espressif/idf:release-v5.0 + extends: .build_idf_template build_idf_v5.1: - extends: .build_idf_template image: espressif/idf:release-v5.1 + extends: .build_idf_template -build_idf_master: +build_idf_v5.2: + image: espressif/idf:release-v5.2 + extends: .build_idf_template + +build_idf_v5.3: + image: espressif/idf:release-v5.3 + extends: .build_idf_template + +build_idf_v5.4: + image: espressif/idf:release-v5.4 + extends: .build_idf_template + +build_idf_v5.5: + image: espressif/idf:release-v5.5 + variables: + BUILD_DIR: "build_stable" + artifacts: + paths: + - "**/build*/*.bin" + - "**/build*/*.elf" + - "**/build*/*.map" + - "**/build*/flasher_args.json" + - "**/build*/flash_project_args" + - "**/build*/config/sdkconfig.json" + - "**/build*/bootloader/*.bin" + - "**/build*/partition_table/*.bin" + when: always + expire_in: 3 days extends: .build_idf_template + +build_idf_master: image: espressif/idf:latest + variables: + BUILD_DIR: "build_master" + artifacts: + paths: + - "**/build*/*.bin" + - "**/build*/*.elf" + - "**/build*/*.map" + - "**/build*/flasher_args.json" + - "**/build*/flash_project_args" + - "**/build*/config/sdkconfig.json" + - "**/build*/bootloader/*.bin" + - "**/build*/partition_table/*.bin" + when: always + expire_in: 3 days + extends: .build_idf_template build_stm32: stage: build # IDF is not necessary for STM32 build, but this image is already used in another job # and it comes with a recent enough CMake version. image: espressif/idf:latest + artifacts: + paths: + - "**/build*/*.bin" + when: always + expire_in: 3 days tags: - build - internet @@ -80,12 +182,19 @@ build_stm32: - mv arm-gnu-toolchain-* gcc-arm-none-eabi - mkdir $CI_PROJECT_DIR/examples/stm32_example/build - cd $CI_PROJECT_DIR/examples/stm32_example/build - - cmake -DSTM32_TOOLCHAIN_PATH=$CI_PROJECT_DIR/gcc-arm-none-eabi -DSTM32_CUBE_H7_PATH=$CI_PROJECT_DIR/STM32CubeH7 -G Ninja .. + - cmake -DSTM32_TOOLCHAIN_PATH=$CI_PROJECT_DIR/gcc-arm-none-eabi -DSTM32_CUBE_H7_PATH=$CI_PROJECT_DIR/STM32CubeH7 -DMD5_ENABLED=1 -G Ninja .. - cmake --build . build_zephyr: stage: build image: espressif/idf:latest + artifacts: + paths: + - "**/build*/zephyr/*.bin" + - "**/build*/zephyr/*.elf" + - "**/build*/zephyr/*.map" + when: always + expire_in: 3 days tags: - build - internet @@ -111,9 +220,53 @@ build_zephyr: - unset IDF_PATH - west zephyr-export - west update hal_espressif - - west build -p -b esp32_devkitc_wroom $CI_PROJECT_DIR/examples/zephyr_example -DZEPHYR_EXTRA_MODULES=$CI_PROJECT_DIR + - west build -p -b esp32_devkitc_wroom/esp32/procpu $CI_PROJECT_DIR/examples/zephyr_example -DZEPHYR_EXTRA_MODULES=$CI_PROJECT_DIR -DMD5_ENABLED=1 -run_tests: +build_pi_pico: + stage: build + image: espressif/idf:latest + tags: + - build + - internet + artifacts: + paths: + - "**/build*/*.bin" + - "**/build*/*.elf" + - "**/build*/*.uf2" + when: always + expire_in: 3 days + script: + - git clone --recursive --single-branch --depth=1 -b ${PI_PICO_SDK_REV} ${PI_PICO_SDK} + - export PICO_SDK_PATH=$(pwd)/pico-sdk + - wget --no-verbose -O gcc-arm-none-eabi.tar.xz ${ARM_TOOLCHAIN_URL} + - tar xf gcc-arm-none-eabi.tar.xz + - mv arm-gnu-toolchain-* gcc-arm-none-eabi + - export PATH="$(pwd)/gcc-arm-none-eabi/bin:$PATH" + - cd $CI_PROJECT_DIR/examples/pi_pico_example + - mkdir build + - cd build + - cmake -DMD5_ENABLED=1 .. + - cmake --build . + +build_pi: + stage: build + image: dtcooper/raspberrypi-os:latest + tags: + - ESF-RPI-01 + before_script: + - apt-get update + - apt-get install -y cmake gcc g++ make pigpio + script: + - cd $CI_PROJECT_DIR/examples/raspberry_example + - mkdir build && cd build + - cmake -DMD5_ENABLED=1 .. && cmake --build . + artifacts: + paths: + - "${CI_PROJECT_DIR}/examples/raspberry_example/build/raspberry_flasher" + when: always + expire_in: 3 days + +test_qemu: stage: test image: ${CI_DOCKER_REGISTRY}/qemu:esp-develop-20191124 tags: @@ -122,12 +275,86 @@ run_tests: script: - cd $CI_PROJECT_DIR/test - export QEMU_PATH=/opt/qemu/bin/qemu-system-xtensa - - ./run_test.sh qemu - - ./run_test.sh host + - ./run_qemu_test.sh + +.test_template: + stage: test + image: debian:latest + before_script: + - apt-get update + - apt-get install -y python3 python3-pip libffi-dev + - pip install -r $CI_PROJECT_DIR/test/requirements_test.txt --break-system-packages --prefer-binary + - pip install esptool --break-system-packages --prefer-binary + artifacts: + paths: + - "${CI_PROJECT_DIR}/examples/pytest_embedded_log/" + when: always + expire_in: 1 week + +test_esp1: + extends: .test_template + tags: + - ESF-RPI-02 + parallel: + matrix: + - CI_BUILD_FOLDER: + - "build_stable" + - "build_master" + script: + - cd $CI_PROJECT_DIR + - pytest --target=esp32s3 --port=/dev/serial_ports/ESP32S3_ESP32C3 -k 'not test_esp32_spi_load_ram_example' + +test_esp2: + extends: .test_template + tags: + - ESF-RPI-01 + parallel: + matrix: + - CI_BUILD_FOLDER: + - "build_stable" + - "build_master" + script: + - cd $CI_PROJECT_DIR + - pytest --target=esp32 --port=/dev/serial_ports/ESP32_ESP32H2 + - pytest --target=esp32s3 --port=/dev/serial_ports/ESP32S3_ESP32C3 -k 'not test_esp32_usb_cdc_acm_example' + +test_zephyr: + extends: .test_template + tags: + - ESF-RPI-03 + script: + - cd $CI_PROJECT_DIR + - pytest --target=zephyr --port=/dev/serial_ports/ESP32_ESP32 + +test_stm32: + extends: .test_template + tags: + - ESF-RPI-03 + script: + - pytest --target=stm32 --port=/dev/serial_ports/STM32_ESP32 + +test_pi_pico: + extends: .test_template + tags: + - ESF-RPI-03 + script: + - pytest --target=pi_pico --port=/dev/serial_ports/pico_ESP32 + +test_rpi: + stage: test + image: dtcooper/raspberrypi-os:latest + tags: + - ESF-RPI-01 + before_script: + - apt-get update + - apt-get install -y pigpio python3 python3-pip libffi-dev + - pip install -r $CI_PROJECT_DIR/test/requirements_test.txt --break-system-packages --prefer-binary + script: + - pytest --target=raspberry push_to_the_components_registry: stage: deploy - image: python:3.10-alpine + image: python:3.11-bookworm tags: - build - internet @@ -136,4 +363,4 @@ push_to_the_components_registry: - if: '$FORCE_PUSH_COMPONENT == "1"' script: - pip install idf-component-manager - - python -m idf_component_manager upload-component --allow-existing --name=esp-serial-flasher --namespace=espressif + - compote component upload --allow-existing --name=esp-serial-flasher --namespace=espressif diff --git a/esp_flasher/lib/esp-serial-flasher/.gitmodules b/esp_flasher/lib/esp-serial-flasher/.gitmodules new file mode 100644 index 0000000000..0bb11514a0 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.gitmodules @@ -0,0 +1,3 @@ +[submodule "submodules/stm32-cmake"] + path = submodules/stm32-cmake + url = https://github.com/ObKo/stm32-cmake.git diff --git a/esp_flasher/lib/esp-serial-flasher/.gitsubtree b/esp_flasher/lib/esp-serial-flasher/.gitsubtree deleted file mode 100644 index 0d3962cac0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/.gitsubtree +++ /dev/null @@ -1 +0,0 @@ -https://github.com/0xchocolate/esp-serial-flasher 81805a34394a09b0cc03f85fb02123b8a8eb9fc1 / diff --git a/esp_flasher/lib/esp-serial-flasher/.pre-commit-config.yaml b/esp_flasher/lib/esp-serial-flasher/.pre-commit-config.yaml new file mode 100644 index 0000000000..ac5102c9db --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/.pre-commit-config.yaml @@ -0,0 +1,34 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: trailing-whitespace + exclude: &excludes | + (?x)^( + .+\.(md|bin)| + examples/stm32_example/.+ + )$ + - id: end-of-file-fixer + exclude: *excludes + - id: mixed-line-ending + args: ['-f=lf'] + exclude: *excludes + - repo: https://github.com/espressif/astyle_py.git + rev: v1.0.5 + hooks: + - id: astyle_py + args: [--options=astyle_config] + exclude: *excludes + - repo: https://github.com/espressif/conventional-precommit-linter + rev: v1.9.0 + hooks: + - id: conventional-precommit-linter + stages: [commit-msg] + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.1.14 + hooks: + - id: ruff # Runs ruff linter + args: [--fix, --exit-non-zero-on-fix] # --fix for fixing errors + types: [python] + - id: ruff-format + types: [python] diff --git a/esp_flasher/lib/esp-serial-flasher/CHANGELOG.md b/esp_flasher/lib/esp-serial-flasher/CHANGELOG.md new file mode 100644 index 0000000000..ecd1bce271 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/CHANGELOG.md @@ -0,0 +1,219 @@ + + + + +# CHANGELOG + +> All notable changes to this project are documented in this file. +> This list is not exhaustive - only important changes, fixes, and new features in the code are reflected here. + +
+ + Static Badge + + + Static Badge + + + Static Badge + +
+
+ +## v1.8.0 (2025-01-27) + +### ✨ New Features + +- **examples**: Add ESP32 fast reflash example with MD5 check *(Jaroslav Burian - e0b9b05)* +- Add a function to check flash regions against a known MD5 *(Djordje Nedic - dd480bc)* +- Add the SDIO inteface and the corresponding esp port *(Djordje Nedic - b74194b)* + +### 🐛 Bug Fixes + +- **esp32s3**: Ensure electric current capabilities allowing to flash devkits with UART converters *(Jaroslav Burian - 05d78a4)* +- Print MD5 debug as hex string when using stub *(Jaroslav Burian - ab0ce64)* +- Unify debug prints of all ports *(Jaroslav Burian - ccfd42c)* +- Set default flash size when detection fails *(Jaroslav Burian - adbe6ab)* +- INVALID_ARG error when ESP32P4 used as a host *(Jaroslav Burian - b42d1d8)* +- Return when SDIO connection not initialized *(Jaroslav Burian - 3ee2b25)* +- esp32c2 incorrect SPI flash config detection *(Jaroslav Burian - ed43e0a)* +- Add missing definition for Zephyr debug trace *(Jaroslav Burian - 86effb2)* +- Update USB reset sequence *(Jaroslav Burian - f64cf7c)* + +### 📖 Documentation + +- Update log output for Zephyr example *(Jaroslav Burian - 7abd989)* +- Fix swapped RX and TX in Zephyr example *(Jaroslav Burian - 7855e5e)* + + +## v1.7.0 (2024-11-25) + +### ✨ New Features + +- **examples**: Provide more useful error messages *(Djordje Nedic - 663aa35)* +- Add support for reading from target flash *(Djordje Nedic - 0785c94)* +- Add support for inverting reset and boot pins *(shiona - dfb8551)* +- Update zephyr example to v4.0.0 *(Jaroslav Burian - a6a0711)* + +### 🐛 Bug Fixes + +- Clarify and validate alignment requirements for flashing *(Djordje Nedic - 400d614)* +- ROUNDUP calculation fix *(Djordje Nedic - 6f17bfe)* +- Zephyr example *(Marek Matej - 5d380bd)* +- Handling of USB buffer overflow *(Jaroslav Burian - aa95e24)* +- Callback when USB port is disconnected *(Jaroslav Burian - c966fe6)* + +### 📖 Documentation + +- Remove experimental note for USB port *(Jaroslav Burian - 53fb930)* + +--- + +## v1.6.2 (2024-10-18) + +### 🐛 Bug Fixes + +- Fix the ESP USB CDC ACM port read return value *(Djordje Nedic - ce71bff)* + +--- + +## v1.6.1 (2024-10-15) + +### 🐛 Bug Fixes + +- Fix ESP32-H2 flash detection *(Jaroslav Burian - a8b1ac4)* + +--- + +## v1.6.0 (2024-09-26) + +### ✨ New Features + +- Add logging from target to rpi pico port *(Jaroslav Burian - 15d34a1)* +- Add support for Secure Download Mode *(Djordje Nedic - 46f3f0b)* +- Add support for getting target security info *(Djordje Nedic - 96d0183)* + +### 🐛 Bug Fixes + +- Add delay to usb example to ensure connection *(Jaroslav Burian - c0a2069)* +- Do not enable logging if flashing error - STM *(Jaroslav Burian - cc0421f)* +- Add missing esp32c3 chip magic numbers *(Jaroslav Burian - 82c4fc7)* +- Multiple timeout fixes *(Djordje Nedic - 8f54452)* +- Only check if image fits into flash when we know flash size *(Djordje Nedic - 3bc629c)* +- Duplicate word in logging message *(Jaroslav Burian - c19f0bf)* + +### 🔧 Code Refactoring + +- **protocol**: Rework command and response handling code *(Djordje Nedic - 86efdf9)* +- **protocol**: Add support for receiving variably sized SLIP packets *(Djordje Nedic - e3c332a)* + +--- + +## v1.5.0 (2024-08-13) + +### ✨ New Features + +- Add the Raspberry Pi Pico port *(Djordje Nedic - c72680c)* + +--- + +## v1.4.1 (2024-07-16) + +### 🐛 Bug Fixes + +- Add correct MD5 calculation with stub enabled *(Jaroslav Burian - 88352d9)* +- Remove duplicate word in logging *(Jaroslav Burian - 7225889)* + +### 📖 Documentation + +- Update description in the READMEs *(Jaroslav Burian - 16b16a6)* + +--- + +## v1.4.0 (2024-07-02) + +### ✨ New Features + +- add stub-support *(Vincent Hamp - ec1fc06)* + +### 🐛 Bug Fixes + +- Fix MD5 option handling *(Djordje Nedic - 09e1192)* + +--- + +## v1.3.1 (2024-06-26) + +### 🐛 Bug Fixes + +- Fix ESP SPI port duplicate tracing *(Djordje Nedic - 116900d)* +- SPI interface/esp port alignment requirements fix *(Djordje Nedic - 9706ed6)* +- Upload to RAM examples monitor task priority fix *(Djordje Nedic - fd86bc3)* + +--- + +## v1.3.0 (2024-03-22) + +### ✨ New Features + +- Add a convenient public API way to read the WIFI MAC *(Djordje Nedic - 8f07704)* + +### 🐛 Bug Fixes + +- Correctly compare image size with memory size including offset *(Dzarda7 - 2807ab5)* + +--- + +## v1.2.0 (2024-02-28) + +### ✨ New Features + +- Move flash size detection functionality to the public API *(Djordje Nedic - 6ae5b95)* + +### 🐛 Bug Fixes + +- **docs**: Fix table in SPI load to RAM example *(Djordje Nedic - edd8a6a)* +- Fix inferring flash size from the flash ID *(Djordje Nedic - 3a1f345)* + +--- + +## v1.1.0 (2024-02-13) + +### ✨ New Features + +- USB CDC ACM interface support *(Djordje Nedic - 4e26444)* +- Add the ability for ESP ports to not initialize peripherals *(Djordje Nedic - 541fe12)* + +### 🐛 Bug Fixes + +- **docs**: Remove notes about SPI interface being experimental *(Djordje Nedic - 3ffc189)* +- Document size_id and improve comments in places *(Djordje Nedic - 3a1e818)* + +--- + +## v1.0.2 (2023-12-20) + +### 🐛 Bug Fixes + +- Fix flash size ID sanity checks *(Djordje Nedic - 01e1618)* + +--- + +## v1.0.1 (2023-12-19) + +### 🐛 Bug Fixes + +- **ci**: Add more compiler warnings for the flasher in the examples *(Djordje Nedic - eb18fd0)* +- Fix md5 timeout values *(Djordje Nedic - 058156c)* + +--- + +
+ + + Commitizen Espressif plugin + +
+ Espressif Systems CO LTD. (2025) +
+
diff --git a/esp_flasher/lib/esp-serial-flasher/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/CMakeLists.txt index 9afd9221be..2b051760bd 100644 --- a/esp_flasher/lib/esp-serial-flasher/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/CMakeLists.txt @@ -1,69 +1,146 @@ cmake_minimum_required(VERSION 3.5) set(srcs - src/esp_targets.c src/md5_hash.c src/esp_loader.c - src/protocol_common.c + src/protocol_serial.c ) +set(defs) + +# Regular CMake builds are expected to set OPTION_NAME, while ESP-IDF's Kconfig system sets +# CONFIG_OPTION_NAME. +# This macro handles these differences and also a default value if neither is set +macro(add_option option_name default_value) + if (DEFINED CONFIG_${option_name}) + # Handle Kconfig booleans in a special manner + if (CONFIG_${option_name} STREQUAL "") + list(APPEND defs ${option_name}=false) + elseif(CONFIG_${option_name} STREQUAL "y") + list(APPEND defs ${option_name}=true) + else() + list(APPEND defs ${option_name}=${CONFIG_${option_name}}) + endif() + elseif (DEFINED ${option_name}) + list(APPEND defs ${option_name}=${${option_name}}) + else() + list(APPEND defs ${option_name}=${default_value}) + endif() +endmacro() + +add_option(SERIAL_FLASHER_DEBUG_TRACE false) +add_option(SERIAL_FLASHER_RESET_HOLD_TIME_MS 100) +add_option(SERIAL_FLASHER_BOOT_HOLD_TIME_MS 50) +add_option(SERIAL_FLASHER_WRITE_BLOCK_RETRIES 3) + + +# Enforce default interface for non-ESP ports. +# This doesn't need to be done for the ESP port as the Kconfig system handles the default. +if (NOT DEFINED ESP_PLATFORM AND + NOT DEFINED SERIAL_FLASHER_INTERFACE_UART AND + NOT DEFINED SERIAL_FLASHER_INTERFACE_SPI AND + NOT DEFINED SERIAL_FLASHER_INTERFACE_USB AND + NOT DEFINED SERIAL_FLASHER_INTERFACE_SDIO) + + set(SERIAL_FLASHER_INTERFACE_UART true) +endif() + +if (DEFINED SERIAL_FLASHER_INTERFACE_UART OR CONFIG_SERIAL_FLASHER_INTERFACE_UART STREQUAL "y") + list(APPEND srcs + src/esp_targets.c + src/esp_stubs.c + src/protocol_uart.c + src/slip.c + ) + list(APPEND defs + SERIAL_FLASHER_INTERFACE_UART + ) + if (DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED) + list(APPEND defs MD5_ENABLED=1) + endif() + + add_option(SERIAL_FLASHER_RESET_INVERT false) + add_option(SERIAL_FLASHER_BOOT_INVERT false) + +elseif(DEFINED SERIAL_FLASHER_INTERFACE_USB OR CONFIG_SERIAL_FLASHER_INTERFACE_USB STREQUAL "y") + list(APPEND srcs + src/esp_targets.c + src/esp_stubs.c + src/protocol_uart.c + src/slip.c + ) + list(APPEND defs + SERIAL_FLASHER_INTERFACE_USB + ) + if (DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED) + list(APPEND defs MD5_ENABLED=1) + endif() + +elseif(DEFINED SERIAL_FLASHER_INTERFACE_SPI OR CONFIG_SERIAL_FLASHER_INTERFACE_SPI STREQUAL "y") + list(APPEND srcs + src/esp_targets.c + src/protocol_spi.c + ) + list(APPEND defs + SERIAL_FLASHER_INTERFACE_SPI + ) +elseif(DEFINED SERIAL_FLASHER_INTERFACE_SDIO OR CONFIG_SERIAL_FLASHER_INTERFACE_SDIO STREQUAL "y") + list(APPEND srcs + src/esp_targets.c + src/protocol_sdio.c + src/esp_sdio_stubs.c + ) + list(APPEND defs + SERIAL_FLASHER_INTERFACE_SDIO + ) + if (DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED) + list(APPEND defs MD5_ENABLED=1) + endif() +endif() if (DEFINED ESP_PLATFORM) if (${CONFIG_SERIAL_FLASHER_INTERFACE_UART}) list(APPEND srcs - src/protocol_uart.c - src/slip.c port/esp32_port.c ) elseif (${CONFIG_SERIAL_FLASHER_INTERFACE_SPI}) list(APPEND srcs - src/protocol_spi.c port/esp32_spi_port.c ) + elseif (${CONFIG_SERIAL_FLASHER_INTERFACE_USB}) + list(APPEND srcs + port/esp32_usb_cdc_acm_port.c + ) + elseif (${CONFIG_SERIAL_FLASHER_INTERFACE_SDIO}) + list(APPEND srcs + port/esp32_sdio_port.c + ) endif() - # Register component to esp-idf build system - if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.0") - # esp_timer component was introduced in v4.2 - set(priv_requires driver) - if("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.1") - list(APPEND priv_requires esp_timer) - endif() - idf_component_register(SRCS ${srcs} - INCLUDE_DIRS include port - PRIV_INCLUDE_DIRS private_include - PRIV_REQUIRES ${priv_requires}) + # Register component to esp-idf build system + idf_component_register(SRCS ${srcs} + INCLUDE_DIRS include port + PRIV_INCLUDE_DIRS private_include + PRIV_REQUIRES driver esp_timer sdmmc) - set(target ${COMPONENT_LIB}) - component_compile_options(-Wstrict-prototypes) - else() - # Remove when dropping support for IDF 3.3 - set(COMPONENT_SRCS ${srcs}) - set(COMPONENT_ADD_INCLUDEDIRS include port) - set(COMPONENT_PRIV_INCLUDEDIRS private_include) - register_component() - set(target ${COMPONENT_TARGET}) + if (${CONFIG_SERIAL_FLASHER_INTERFACE_USB}) + idf_component_set_property(${COMPONENT_NAME} PRIV_REQUIRES usb APPEND) endif() -else() - if (NOT DEFINED SERIAL_FLASHER_INTERFACE_UART AND NOT DEFINED SERIAL_FLASHER_INTERFACE_SPI) - set(SERIAL_FLASHER_INTERFACE_UART true) - endif() - - if (DEFINED SERIAL_FLASHER_INTERFACE_UART) - list(APPEND srcs - src/protocol_uart.c - src/slip.c - ) - elseif (DEFINED SERIAL_FLASHER_INTERFACE_SPI) - list(APPEND srcs src/protocol_spi.c) - endif() + set(target ${COMPONENT_LIB}) + component_compile_options(-Wstrict-prototypes) +else() # Create traditional CMake target add_library(flasher ${srcs}) target_include_directories(flasher PUBLIC include port PRIVATE private_include) - if(PORT STREQUAL "STM32") + if (NOT DEFINED PORT) + message(WARNING "No port selected, default to user-defined") + set(PORT "USER_DEFINED") + elseif(PORT STREQUAL "USER_DEFINED") + # The user has to manually link their port with the flasher target + elseif(PORT STREQUAL "STM32") stm32_get_chip_info(${STM32_CHIP} FAMILY DEVICE_FAMILY DEVICE DEVICE_CODE) if(DEFINED CORE_USED) string(APPEND DEVICE_FAMILY ::${CORE_USED}) @@ -79,6 +156,9 @@ else() find_library(pigpio_LIB pigpio) target_link_libraries(flasher PUBLIC ${pigpio_LIB}) target_sources(flasher PRIVATE port/raspberry_port.c) + elseif(PORT STREQUAL "PI_PICO") + target_link_libraries(flasher PUBLIC pico_stdlib) + target_sources(flasher PRIVATE port/pi_pico_port.c) else() message(FATAL_ERROR "Selected port is not supported") endif() @@ -87,59 +167,17 @@ else() endif() -if (DEFINED SERIAL_FLASHER_INTERFACE_UART OR CONFIG_SERIAL_FLASHER_INTERFACE_UART STREQUAL "y") - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_INTERFACE_UART - ) - if (DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED) - target_compile_definitions(${target} PUBLIC MD5_ENABLED=1) - endif() -elseif (DEFINED SERIAL_FLASHER_INTERFACE_SPI OR CONFIG_SERIAL_FLASHER_INTERFACE_SPI STREQUAL "y") - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_INTERFACE_SPI - ) -endif() - -if(DEFINED SERIAL_FLASHER_DEBUG_TRACE OR CONFIG_SERIAL_FLASHER_DEBUG_TRACE) - target_compile_definitions(${target} PUBLIC SERIAL_FLASHER_DEBUG_TRACE) -endif() - -if(DEFINED CONFIG_SERIAL_FLASHER_RESET_HOLD_TIME_MS AND DEFINED CONFIG_SERIAL_FLASHER_BOOT_HOLD_TIME_MS) - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_RESET_HOLD_TIME_MS=${CONFIG_SERIAL_FLASHER_RESET_HOLD_TIME_MS} - SERIAL_FLASHER_BOOT_HOLD_TIME_MS=${CONFIG_SERIAL_FLASHER_BOOT_HOLD_TIME_MS} - ) -else() - if(NOT DEFINED SERIAL_FLASHER_RESET_HOLD_TIME_MS) - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_RESET_HOLD_TIME_MS=100 - ) - endif() - if(NOT DEFINED SERIAL_FLASHER_BOOT_HOLD_TIME_MS) - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_BOOT_HOLD_TIME_MS=50 - ) - endif() -endif() +target_compile_definitions(${target} PUBLIC ${defs}) -if (DEFINED CONFIG_SERIAL_FLASHER_WRITE_BLOCK_RETRIES) - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_WRITE_BLOCK_RETRIES=${CONFIG_SERIAL_FLASHER_WRITE_BLOCK_RETRIES} - ) -elseif (DEFINED SERIAL_FLASHER_WRITE_BLOCK_RETRIES) - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_WRITE_BLOCK_RETRIES=${SERIAL_FLASHER_WRITE_BLOCK_RETRIES} - ) -else() - target_compile_definitions(${target} - PUBLIC - SERIAL_FLASHER_WRITE_BLOCK_RETRIES=3 +# This segment pulls the flasher stubs at a specified version at wish, and generates the +# esp_stubs.c/h files, overwriting the library provided ones. +# It is also possible to override stub generation to use a custom url or a local folder. +# Please check if the license under which the custom stub sources are released fits your usecase. +if (DEFINED SERIAL_FLASHER_STUB_PULL_VERSION OR DEFINED SERIAL_FLASHER_STUB_PULL_OVERRIDE_PATH) + include(cmake/serial_flasher_pull_stubs.cmake) + serial_flasher_pull_stubs( + VERSION ${SERIAL_FLASHER_STUB_PULL_VERSION} + SOURCE ${SERIAL_FLASHER_STUB_PULL_SOURCE} + PATH_OVERRIDE ${SERIAL_FLASHER_STUB_PULL_OVERRIDE_PATH} ) endif() diff --git a/esp_flasher/lib/esp-serial-flasher/Kconfig b/esp_flasher/lib/esp-serial-flasher/Kconfig index 34940ee770..e5b2981330 100644 --- a/esp_flasher/lib/esp-serial-flasher/Kconfig +++ b/esp_flasher/lib/esp-serial-flasher/Kconfig @@ -15,7 +15,13 @@ menu "ESP serial flasher" bool "UART" config SERIAL_FLASHER_INTERFACE_SPI - bool "SPI (Only supports downloading to RAM, experimental)" + bool "SPI (Only supports downloading to RAM)" + + config SERIAL_FLASHER_INTERFACE_USB + bool "USB" + + config SERIAL_FLASHER_INTERFACE_SDIO + bool "SDIO (Experimental)" endchoice @@ -35,4 +41,20 @@ menu "ESP serial flasher" int "Number of retries when writing blocks either to target flash or RAM" default 3 + config SERIAL_FLASHER_RESET_INVERT + bool "Invert reset signal" + default n + depends on SERIAL_FLASHER_INTERFACE_UART + help + Enable this option if there is an inverting connection between + the output of the serial-flasher and the reset pin of the ESP chip. + + config SERIAL_FLASHER_BOOT_INVERT + bool "Invert boot signal" + default n + depends on SERIAL_FLASHER_INTERFACE_UART + help + Enable this option if there is an inverting connection between + the output of the serial-flasher and the boot pin of the ESP chip. + endmenu diff --git a/esp_flasher/lib/esp-serial-flasher/README.md b/esp_flasher/lib/esp-serial-flasher/README.md index 7f9291d6f0..ffca972f42 100644 --- a/esp_flasher/lib/esp-serial-flasher/README.md +++ b/esp_flasher/lib/esp-serial-flasher/README.md @@ -2,15 +2,15 @@ `esp-serial-flasher` is a portable C library for flashing or loading apps to RAM of Espressif SoCs from other host microcontrollers. -## Using the library -Espressif SoCs are normally programmed via serial interface (UART). The port layer for the given host microcontroller has to be implemented if not available. Details can be found in section below. +`esp-serial-flasher` supports a variety of host/target/interface combinations: Supported **host** microcontrollers: - STM32 - Raspberry Pi SBC -- ESP32 +- ESP32 Series - Any MCU running Zephyr OS +- Raspberry Pi Pico Supported **target** microcontrollers: @@ -22,92 +22,99 @@ Supported **target** microcontrollers: - ESP32-C2 - ESP32-H2 - ESP32-C6 +- ESP32-C5 (stub not included for now) +- ESP32-P4 (stub not included for now) Supported hardware interfaces: -- UART -- SPI (only for RAM download, experimental) - -For example usage check the `examples` directory. - -## Supporting a new host target - -In order to support a new target, following functions have to be implemented by user: -- `loader_port_read()` -- `loader_port_write()` -- `loader_port_enter_bootloader()` -- `loader_port_delay_ms()` -- `loader_port_start_timer()` -- `loader_port_remaining_time()` +- UART +- USB CDC ACM +- SPI (only for RAM download) +- SDIO (experimental, supported only with ESP32-P4 as a host and ESP32-C6 as a target) + > **Note:** The SDIO implementation uses a custom built stub. The sources are currently not available publicly. We plan to make them available in the near future as part of the migration to [esp-flasher-stub](https://github.com/espressif/esp-flasher-stub). -For the SPI interface ports -- `loader_port_spi_set_cs()` -needs to be implemented as well. -The following functions are part of the [io.h](include/io.h) header for convenience, however, the user does not have to strictly follow function signatures, as there are not called directly from library. +For example usage check the [examples](/examples) directory. -- `loader_port_change_transmission_rate()` -- `loader_port_reset_target()` -- `loader_port_debug_print()` - -Prototypes of all functions mentioned above can be found in [io.h](include/io.h). +You can also watch [YouTube video](https://www.youtube.com/watch?v=hYqkOew8y8w) describing why and how to use the library, how it works and also how to implement a custom port. ## Configuration These are the configuration toggles available to the user: -* `SERIAL_FLASHER_INTERFACE_UART/SERIAL_FLASHER_INTERFACE_SPI` +- `SERIAL_FLASHER_INTERFACE_UART`/`SERIAL_FLASHER_INTERFACE_SPI`/`SERIAL_FLASHER_INTERFACE_USB/SERIAL_FLASHER_INTERFACE_SDIO` -This defines the hardware interface to use. SPI interface only supports RAM download mode and is in experimental stage and can undergo changes. +This defines the hardware interface to use. Default: SERIAL_FLASHER_INTERFACE_UART -* `MD5_ENABLED` +- `MD5_ENABLED` If enabled, `esp-serial-flasher` is capable of verifying flash integrity after writing to flash. Default: Enabled > Warning: As ROM bootloader of the ESP8266 does not support MD5_CHECK, this option has to be disabled! -* `SERIAL_FLASHER_WRITE_BLOCK_RETRIES` +- `SERIAL_FLASHER_WRITE_BLOCK_RETRIES` This configures the amount of retries for writing blocks either to target flash or RAM. Default: 3 -* `SERIAL_FLASHER_RESET_HOLD_TIME_MS` +- `SERIAL_FLASHER_RESET_HOLD_TIME_MS` This is the time for which the reset pin is asserted when doing a hard reset in milliseconds. Default: 100 -* `SERIAL_FLASHER_BOOT_HOLD_TIME_MS` +- `SERIAL_FLASHER_BOOT_HOLD_TIME_MS` This is the time for which the boot pin is asserted when doing a hard reset in milliseconds. Default: 50 +- `SERIAL_FLASHER_RESET_INVERT` + +This inverts the output of the reset gpio pin. Useful if the hardware has inverting connection +between the host and the target reset pin. Implemented only for UART interface. + +Default: n + +- `SERIAL_FLASHER_BOOT_INVERT` +This inverts the output of the boot (IO0) gpio pin. Useful if the hardware has inverting connection +between the host and the target boot pin. Implemented only for UART interface. + +Default: n + Configuration can be passed to `cmake` via command line: -``` +```bash cmake -DMD5_ENABLED=1 .. && cmake --build . ``` -### STM32 support +### ESP Support + +#### Supported ESP-IDF Versions + +- v4.3 or later + +### STM32 Support + +> **Note:**: The library was tested with STM32CubeH7 v1.11.1 and arm-gnu-toolchain-13.2. The STM32 port makes use of STM32 HAL libraries, and these do not come with CMake support. In order to compile the project, `stm32-cmake` (a `CMake` support package) has to be pulled as submodule. -``` +```bash git clone --recursive https://github.com/espressif/esp-serial-flasher.git ``` If you have cloned this repository without the `--recursive` flag, you can initialize the submodule using the following command: -``` +```bash git submodule update --init ``` -In addition to configuration parameters mentioned above, following definitions has to be set: +In addition to the configuration parameters mentioned above, the following definitions have to be set: - STM32_TOOLCHAIN_PATH: path to arm toolchain (i.e /home/user/gcc-arm-none-eabi-9-2019-q4-major) - STM32_CUBE__PATH: path to STM32 Cube libraries (i.e /home/user/STM32Cube/Repository/STM32Cube_FW_F4_V1.25.0) @@ -117,13 +124,13 @@ In addition to configuration parameters mentioned above, following definitions h This can be achieved by passing definitions to the command line, such as: -``` +```bash cmake -DSTM32_TOOLCHAIN_PATH="path_to_toolchain" -DSTM32_CUBE__PATH="path_to_cube_libraries" -DSTM32_CHIP="STM32F407VG" -DPORT="STM32" .. && cmake --build . ``` Alternatively, those variables can be set in the top level `cmake` directory: -``` +```bash set(STM32_TOOLCHAIN_PATH path_to_toolchain) set(STM32_CUBE_H7_PATH path_to_cube_libraries) set(STM32_CHIP STM32H743VI) @@ -131,11 +138,13 @@ set(CORE_USED M7) set(PORT STM32) ``` -### Zephyr support +### Zephyr Support + +> **Note:**: The library was tested with Zephyr RTOS v4.0.0 and Zephyr SDK v0.17.0. The Zephyr port is ready to be integrated into Zephyr apps as a Zephyr module. In the manifest file (west.yml), add: -``` +```yaml - name: esp-flasher url: https://github.com/espressif/esp-serial-flasher revision: master @@ -144,7 +153,7 @@ The Zephyr port is ready to be integrated into Zephyr apps as a Zephyr module. I And add -``` +```yaml CONFIG_ESP_SERIAL_FLASHER=y CONFIG_CONSOLE_GETCHAR=y CONFIG_SERIAL_FLASHER_MD5_ENABLED=y @@ -154,10 +163,72 @@ to the project configuration `prj.conf`. For the C/C++ source code, the example code provided in `examples/zephyr_example` can be used as a starting point. +### Raspberry Pi Pico Support + +> **Note:** The library was tested with Raspberry Pi Pico SDK v1.5.1 and arm-gnu-toolchain-13.2. + +The Raspberry Pi Pico port allows using the RP2040 microcontroller as a host for programming ESP devices. +For example usage, check the `examples/pi_pico_example` directory. + +### Raspberry Pi Support + +> **Note:**: The library was tested with the latest Raspberry Pi OS. + +The Raspberry Pi port allows using the Raspberry Pi SBC as a host for programming ESP devices. +This port uses the pigpio library for GPIO control. +For example usage, check the `examples/raspberry_example` directory. + +## Supporting a New Host Target + +The port layer for the given host microcontroller can be implemented if not available, in order to support a new target, following functions have to be implemented by user: + +- `loader_port_read()` +- `loader_port_write()` +- `loader_port_enter_bootloader()` +- `loader_port_delay_ms()` +- `loader_port_start_timer()` +- `loader_port_remaining_time()` + +For the SPI interface ports + +- `loader_port_spi_set_cs()` +needs to be implemented as well, + +and + +- `loader_port_sdio_card_init()` +- `loader_port_wait_int()` +for the SDIO interface ports. + +The following functions are part of the [io.h](include/io.h) header for convenience, however, the user does not have to strictly follow function signatures, as there are not called directly from library. + +- `loader_port_change_transmission_rate()` +- `loader_port_reset_target()` +- `loader_port_debug_print()` + +Prototypes of all functions mentioned above can be found in [io.h](include/io.h). + +After that, the target implementing these functions should be linked with the `flasher` target and the `PORT` CMake variable should be set to `USER_DEFINED`. + +## Contributing + +We welcome contributions to this project in the form of bug reports, feature requests and pull requests. + +Issue reports and feature requests can be submitted using [Github Issues](https://github.com/espressif/esp-serial-flasher/issues). Please check if the issue has already been reported before opening a new one. + +Contributions in the form of pull requests should follow ESP-IDF project's [contribution guidelines](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/contribute/style-guide.html) and use the [conventional commit message style](https://www.conventionalcommits.org/en/v1.0.0/). + +To automatically enforce these rules, use [pre-commit](https://pre-commit.com/) and install hooks with the following commands: + +```bash +pre-commit install +pre-commit install -t commit-msg +``` + ## Licence Code is distributed under Apache 2.0 license. -## Known limitations +## Known Limitations Size of new binary image has to be known before flashing. diff --git a/esp_flasher/lib/esp-serial-flasher/astyle_config b/esp_flasher/lib/esp-serial-flasher/astyle_config new file mode 100644 index 0000000000..fbc7b1f460 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/astyle_config @@ -0,0 +1,12 @@ +# astyle pre-commit hook configuration file +--style=otbs +--attach-namespaces +--attach-classes +--indent=spaces=4 +--convert-tabs +--align-pointer=name +--align-reference=name +--keep-one-line-statements +--pad-header +--pad-oper +--pad-comma diff --git a/esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.c.template b/esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.c.template new file mode 100644 index 0000000000..2cf29cf24e --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.c.template @@ -0,0 +1,48 @@ +/* Copyright 2020-{current_year} Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// auto-generated stubs from esp-flasher-stub v{stub_version} + +#include "esp_stubs.h" + +static bool stub_running = false; + +bool esp_stub_get_running(void) +{{ + return stub_running; +}} + +void esp_stub_set_running(bool stub_status) +{{ + stub_running = stub_status; +}} + +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) + +#if __STDC_VERSION__ >= 201112L +_Static_assert(ESP8266_CHIP == 0, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32_CHIP == 1, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32S2_CHIP == 2, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C3_CHIP == 3, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32S3_CHIP == 4, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C2_CHIP == 5, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C5_CHIP == 6, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32H2_CHIP == 7, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C6_CHIP == 8, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32P4_CHIP == 9, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP_MAX_CHIP == {max_chip_number}, "Stub order matches target_chip_t enumeration"); +#endif + +const esp_stub_t esp_stub[ESP_MAX_CHIP] = {{ diff --git a/esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.h.template b/esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.h.template new file mode 100644 index 0000000000..a7e3da7686 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/cmake/esp_stubs.h.template @@ -0,0 +1,44 @@ +/* Copyright 2020-{current_year} Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// auto-generated stubs from esp-flasher-stub v{stub_version} + +#pragma once + +#include +#include +#include "esp_loader.h" + +#ifdef __cplusplus +extern "C" {{ +#endif + +bool esp_stub_get_running(void); +void esp_stub_set_running(bool stub_status); + +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) + +typedef struct {{ + esp_loader_bin_header_t header; + esp_loader_bin_segment_t segments[2]; +}} esp_stub_t; + +extern const esp_stub_t esp_stub[ESP_MAX_CHIP]; + +#endif + +#ifdef __cplusplus +}} +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/cmake/gen_stub_sources.py b/esp_flasher/lib/esp-serial-flasher/cmake/gen_stub_sources.py new file mode 100644 index 0000000000..81e99a7272 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/cmake/gen_stub_sources.py @@ -0,0 +1,125 @@ +import base64 +import json +import os +import sys +import urllib.request +from datetime import datetime + +""" +This python module generates esp_stubs.c/h files from a given version and url, with +/v/esp32xx.json as the required format. + +It is also possible to override stub generation to use a local folder for testing purposes. +""" + +# Paths +stub_version = sys.argv[1] +stub_download_url = sys.argv[2] +root_path = sys.argv[3] +stub_override_path = sys.argv[4] if len(sys.argv) == 5 else None + +template_path = os.path.join(root_path, "cmake") +priv_inc_path = os.path.join(root_path, "private_include") +src_path = os.path.join(root_path, "src") +h_template_path = os.path.join(template_path, "esp_stubs.h.template") +c_template_path = os.path.join(template_path, "esp_stubs.c.template") +hfile_path = os.path.join(priv_inc_path, "esp_stubs.h") +cfile_path = os.path.join(src_path, "esp_stubs.c") +current_year = datetime.now().year + +# Matches order of target_chip_t enumeration +files_to_download = [ + None, # ESP8266_CHIP + "esp32.json", # ESP32_CHIP + "esp32s2.json", # ESP32S2_CHIP + "esp32c3.json", # ESP32C3_CHIP + "esp32s3.json", # ESP32S3_CHIP + "esp32c2.json", # ESP32C2_CHIP + None, # ESP32C5_CHIP (stub not included for now) + "esp32h2.json", # ESP32H2_CHIP + "esp32c6.json", # ESP32C6_CHIP + None, # ESP32P4_CHIP (stub not included for now) +] + + +def read_stub_json(json_file): + stub = json.load(json_file) + entry = stub["entry"] + text = base64.b64decode(stub["text"]) + text_start = stub["text_start"] + try: + data = base64.b64decode(stub["data"]) + data_start = stub["data_start"] + except KeyError: + data = None + data_start = None + + text_str = ", ".join([hex(b) for b in text]) + text_size = len(text) + data_str = "" if data is None else ", ".join([hex(b) for b in data]) + data_size = 0 if data is None else len(data) + data_start = 0 if data_start is None else data_start + + stub_data = f""" // {file_to_download} + {{ + .header = {{ + .entrypoint = {entry}, + }}, + .segments = {{ + {{ + .addr = {text_start}, + .size = {text_size}, + .data = (uint8_t[]){{{text_str}}}, + }}, + {{ + .addr = {data_start}, + .size = {data_size}, + .data = (uint8_t[]){{{data_str}}}, + }}, + }}, + }}, + +""" + return stub_data + + +if __name__ == "__main__": + # .h and .c file templates + with ( + open(h_template_path, "r") as h_template_file, + open(c_template_path, "r") as c_template_file, + ): + h_template = h_template_file.read() + c_template = c_template_file.read() + + # .h and .c file to generate + with open(hfile_path, "w") as hfile, open(cfile_path, "w") as cfile: + hfile.write( + h_template.format( + current_year=current_year, + stub_version=stub_version, + ) + ) + + cfile.write( + c_template.format( + current_year=current_year, + stub_version=stub_version, + max_chip_number=len(files_to_download), + ) + ) + + for file_to_download in files_to_download: + if file_to_download is None: + cfile.write(" // placeholder\n" " {},\n" "\n") + else: + if stub_override_path: + with open(f"{stub_override_path}/{file_to_download}") as file_path: + cfile.write(read_stub_json(file_path)) + else: + with urllib.request.urlopen( + f"{stub_download_url}/v{stub_version}/{file_to_download}" + ) as url: + cfile.write(read_stub_json(url)) + + cfile.write("};\n" "\n" "#endif\n") diff --git a/esp_flasher/lib/esp-serial-flasher/cmake/serial_flasher_pull_stubs.cmake b/esp_flasher/lib/esp-serial-flasher/cmake/serial_flasher_pull_stubs.cmake new file mode 100644 index 0000000000..afaaefe16f --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/cmake/serial_flasher_pull_stubs.cmake @@ -0,0 +1,26 @@ +macro(serial_flasher_pull_stubs) + set(ONE_VALUE_KEYWORDS VERSION SOURCE PATH_OVERRIDE) + cmake_parse_arguments(FLASHER_STUB "" "${ONE_VALUE_KEYWORDS}" "" "${ARGN}") + + # Don't make this mandatory, some users might not have Python installed + find_package(Python COMPONENTS Interpreter) + if(NOT Python_Interpreter_FOUND) + message(WARNING "Python not found, cannot run gen_stub_sources.py") + return() + endif() + + # By default use the esp-flasher-stub project stubs + if (NOT DEFINED FLASHER_STUB_SOURCE) + set(FLASHER_STUB_SOURCE "https://github.com/esp-rs/esp-flasher-stub/releases/download") + endif() + + execute_process( + COMMAND + ${Python_EXECUTABLE} + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/gen_stub_sources.py + ${FLASHER_STUB_VERSION} + ${FLASHER_STUB_SOURCE} + ${CMAKE_CURRENT_SOURCE_DIR} + ${FLASHER_STUB_PATH_OVERRIDE} + ) +endmacro() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/ESP32_AT_Firmware/Firmware.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/ESP32_AT_Firmware/Firmware.bin deleted file mode 100644 index f992047ed3a7c0b6fef6ff8c2ce9759269588309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4194304 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

uhpcH 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

%OT(P`2;3)FC7HTbY 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�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੹ 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⪼W{($6n&8g$dQ3L7MZPJB|2OkOQ%g*}U7# z-fe6-K`fcU>+fk`?ffp)SUpjr68ps`YOX}^t{DiK4B!w)F!6(5f##?-$AMRE-?o~+ zZDqG{!&g8CJ`V%`SpVHt$AJ>tSFPr+TiF-5(OW|XzVPOhkf8pXNG!E|+G_r^mEAxR zEqV7g=2Lm#cT#wF!k8Kdg&~~-2@1;&P`Q^I)WB}sVRf1?rs|f>&=^Rhi>uz)LFgYda#f|m=uscUv76 zf7_{6^Ql%gm4hz#9#740BPGz**=p`=Wq(al)XVN==JR}7d)otd*F5yVvqrh+l^!IS zz)w5p9uEE&0H+x6>p_nbIr#s=!GDX3|9`*_ig6B+voCg+2Y!~yNWS9P0`}Je+%|H_28IOTfX!YAvJ)Aru$(}@19FDlCC_T|0+;|PuH1^qdVx_R!*`M!yVWqf_#w?7 zm%*rh6a+ZbYcYO_z7XSGB}x;N$uR6))ZE11eQ6aBpeA3-L8z3}?cdn`)^cC;mETq0 zp0h1XsCw@=&X9W?KVB*7dAmhstvs!UWB zcNCyMOP9VS$gHb7Tk`VYCwiS`lgYkq)7BLC)OkMe;8sy$RYtu#BCfq9QDvV6r}L)m zlB9V5=bKuv0T*kV?qfTOz=EPVP_Tq&zimod>c7rwUGVqw;G1ivf1;YlpZa@R{f$fQ zFVb<&5tMJVC=4bh0G4>?`D0Dv`r(w&I6jY|v=m~18_?_jaSy%lZ5649iO5UF!jw-b zz7#8FNLXjHPGvHXt=%MDbTw>CvIS#khJCfAOa#Rw5hI0i?Ej2OM?LI{F=3o{%_qSb zzIAhOT#54~XRt_71c3na<%{oS0obpI;Eud+SYVt%fLJxAiz_wH) zaxS~!+(F~Wc;CIqR&Vv6JZ)M6Mdjym>GD^%e;YdsE^7P}MXlb>*I+le8OCXegFG~e zF(N!A8vVFwo6=&Q(!y47z5nuV@&^a!izoD}kaWxTNQ?QA7PgEe5pnbLyV;I#Ty`pj zN*vynU9ky5176NDic~Gs8`R>ckG1)?nEhMWZ5)0+y_@Vny+QrskQ8V0X)*h>urF{; zUc38lisf-E@!{B3uyCy+$ra(DG#+4iN&TsWP&^ZEY=#oI@vcv&=qN5H_(A#JDLT~Y ze{`ZRX5ZclDFMyY&xn1Q)l+Vv53dnxmg7GAveFrI7XLRXRF5+_G-IqrEwr!zzW!6ji2y zGP(KXgSuv&_Mf!ML5CZrc3zL$b`V+&?Il{d@6}lpnz}4FIS*oA|8aXU%A6m zqJsLLJJ|EwLEDmp=A{SOBUWTozjc@7#aOfZn{;{;n#0QxO`)fE>{0>(;z|#P#yw5G z;q=DX6ssaxJ4L&WJKrVTmVKN{lChOdV6;M#`W&r%jKoKYrXKcI&Lp4wgEi7#sn8x? zv9lYkr2&uWqnX*Avmnen>$%MU&$_3EPEc-dQpAu-RVw_)%bOb{Y7#L_0*mEs)L zB>QmDMD&C|GA@cA;bh5}{0}4~HM#4~6-v0n373||EBU;9l=XoOo#Kvn6SS}26lkx1A#V)^O`e%(zxUs)}#zFQt6WUVLo9s4U;}$f_lNI0vSm` z(63Xb1!P@lT(&2eFOc=IH8Yju?vgMMr}-KKniZ`p5`H7@mt~3eN_es`PGA!v{+&%mhEu}x}%7)6pL?iq5+q%@)q-VV5dx=V_ zT>>4fZzhDvQy@PU*yflEn$??dM~{sdGdIY3oY&lw*KAwZY+l&Rwlos@-*lIKjx-5I zpwII#X7*_zjz~^p=by5|isb?Mqhu^2RE~7mbkAv~l)D-+&oF->_ns^C%)w3EF8_PT z&Cq$xYwnrXY>R0&$27C$90cp{svHTz{QWdAuutP8*Fo^WN)ch=)==QgEg#}4G@d5T z@KvdJxIPVF*xy-s#zgYE=Q5G&rgH=?t1IL=hcdL;4SAoQQI(MGI2jIHHXvXC0Q7@> zgfCQHSdmYGkdW?E_W@slIm>F|x(=sYF+pJl{d#y=5>>4a7GP)n`LZoS{>ph)H>=V| z2i0xyGw9a^T@jW53{rh`Fne5RnzXGy@#?n0^2y|?eRkwqT55_YmUBpHTK}gx2yq}Xg46=fW ziP|bxFGI0|e8dd{J5k7Pkk!f9U{Ans*61ir^kw~pm{G$kmG3th@BnKR61|G4JWJ}U zil$1tyer=(-(@~JgK5Ah-vtGMxwWab*_lV1yPGUGT${Wo~XF!Xwd6Jw|*pdudh+vcQu= zwnwbUQ#JImZ{1~ExV7HAMqM@Zq;L6xt(SYTCu;R(!w4CZvDTQVka)?aOSIlZ>F2Kk z+-{WVmHuT)cp#T2((b6?tgocx5{p%+kxHFOSLXj{JlX0-T`?gj11yS9#$6h7a+5QSW}hRCr^~`p z@dK~r5{S$co6SdZ%qv5t&T%n8=DAI9H&+nki{)RNOT5HA?@FFW@}#BL%*)sc7OlueM+EIlqZgtTvv?NsrFD_1n~Gu0~F)$II@ zpeXGYsW%XZcEA-!bj}jKO&*uhDU^9!6Ra^S?^~lpAsTPx_g1S08a4c*iV-_h0hRL_ zE2_Dvh?x)&8e3<-2(#9*r(_jR725)uj-5EPyEw@}ZdqDGl@B#dt$l|PwG29E)0H#_ zo{!&ybG%aYKs2FPm5DNcX;pW+Lb7Rs-xPx1-@26FS<$~JQBDUAKshjn6Be09{+Ro%78{Y@Ku=KKvraN^ z)c0IR<_ww7S=B8rwu2OdiN#ZV@zSoK{>#>$%T`;P)!c4n{mD33{O;lc#gRE8_20iR zpRmH+ob(2?(5TbgWpy^X*mhDF+)H85RldPh=tC-c*V^;0)mCRU*IC&S3u)Q=Zsh^4 zA)lQp6p8jQLvy25-AH%=?ib%5DZlKzd_%!03km{6C2Iu5LEK&|FX{qKDZ%DitJ>tk z;)aS6L}A=1phr?hT)HSH)l0dRBu9y&M4-(kYfqEaw#91RVr4IL@Qe({Z6q0T#ma3Q zTp|QGzfhwFRN{7URluSJ(xS!cNSAUAU+L60Vemg~ihEIt`yUdWAWjhX9o~LB?zbeA zAx?Xkid!Zm#3#h(Ml5^NFK!8mST0VRKvCJJWzd~j0%?5&nbD`i)q%9(bS2k>5onZE zt|poF>nNTd<1PXia)z~{S!eN~vm+Ruw%NT6Iza$VI6ZroNP5{N{kL1-c&&k#P669# zyiOjNE00UGE|{AjITArL0p@fogv(xRmSAfxk2DtL?kpqXYbP8u`EjeemcF@Iw!t&W z{~R6gV-@$PFg`?bhvbrJ?a8!)ft$mv>>oLNe>QBMZnf-i@%dSmAO_&@m_Nl8@d*$P zNQ(p#QO=-T8O;GD%5lhg=Rxe{rUb!8lswMYs)*33RN^R{dxUFU)Gi#FI!7pjqcV^b zA{g|p^e3P01+805q^-M+wau1qaTXB3S63S7#cC|2)iDVU0l1U~w~P|ym>M6z$Hv`j z1PL;Ms4r1ait)n&U-h3g)>cLNPi#T5kjn|St?@MQ^PB4Mt-*XZ0N%yokOn~gm;8*SZ<=I%!J zVGjHM7&f18bZ!uMO0sW5632c!WgYK^lbzmY0&4katE~Q7Kp}%=LwClKeYoq0#LVy0? z?$4X<{zzTsKQ`jRme3#b9~!YRl3x9#vF9(1w){qOek1!f0n^zjfSKH38G~O)9Dn~Q zdbR(gl&gfsVvoBUbB&-jti(LuHm_>5WDy4gEtjG+Q5wkO#f?41jkdH#b6O*7C2d-4 z!<@QG`wybnuGAgClX7T}%~_-*FNg~oLPiGFeR67JQaV9Mx}+sC%nM)@~do^;c^ zROn#347Wbw8++m#ZMPfDw;R|Tjw0U}X3rfU6y;e+5;SlkAJy0s(`fsm!Td!7yO2Y8 z?J(5boz$+mz(^-$IISFR0B}*F(hiyOTk;91Psed6h+p8>R~r=I*KJgNL;%#YJo!xx z^-=~Om|FX&;WQsnskT%IQyeTOAw=jr%6d94MdyXmK}_dq?KSjW%Jm(K{d)~g4Zntx zbK8-Io{}50h8}8oM5`2AI0+rNrQtY8M9xpR`wRFn zA8t?+5tq#UPXniz+Z(iMBE(ukh!D%~6Ek3B#Lex@jScFlZhAk^U{Se3G~?iUo}2IH zfdeLPzC&Mn76+v32mJ)BP-wWls23#bGQpC^`!e`P`#Bp@>wS0$Fy6FAuVi(X|_~S z967q{c}u8=?98JWJ<*3^LU4b~|J&f42v5QdmWlirnb$X{gIpn-WO~(vD~0`kZs^(D zV9RPSXEm@L`-S1!Jd7P^o=0J0byTTB_Jyv_{^UGpUBbUtCTsT!SWFHKj0P^!jjR&WNw3cJP&7FQUg(y`Uq2~a=Xw+h@w%O zcj7@K_%8b5v{Sa2MtGG2*L!BPm@Qh@+7lohQp8y zpF^XP&VF;|!VYCZgH_}#0umtBOk6e-Qa^YflsL-{lRf%;Lr{l9qI|TWUPWnNB#dTM z0wV3lG#F&Kz+;YXa4sG(Pi??U9#&1_u1n(74cKIEpp=og7OLJrv6CCdD3!w+;M9o; z_hXu!UH6p}8=6E{j=5p)pV;8oUu&D#V4m2(&LA|QUOa5}Z_wU$-@DFvf$k4zaF|)! zLk;GK8rVpIa4ea_AyaAX9hYh?mAE#eXnE? z$1x9cRNC{`{Wh1y?6O#-P}zX>10lG@^@GJ>o@%>eG2gMUenK1C1;ZRpUlvV2$F3!j zIDuPn-T8_ITalHeP&dXd_SlNL8-U-+iiBnWmlx86j0RM+FRN)CD zZ0T((n3!tF+qt9k%?V`z(J5r+l7E#aNL#rSxmP-9q6R)v;JVj%u(NMnSLXEhSRDIb zv>mgUk6GA%)T0{9Z6j+E-{4+UgOoHug;m=6>lh zU&|eMA1&h?g5xYxXcaf`TP)G!oCjr+U$>-7(r2d6TzJ5_m@;fGm>A!=<|^KA#vI3@ z@-H0uM-U~$c@f}};HfC!dIQ5SV%uXe@3F8=1TM8^*s!Nnf-h3%YP>HVX{E7Od&<{9 z=X@Y0cj;n{#TBueryc`Amx>?4b20vH4g5%vF-hvMEB{~tQ9FG{v~yj3_e`8%sjdEE z@(|VwtfLrXmP*s$a@>0csx!{2G{^~F>Ai)1QA$I0dBVba=X|QZ#~=Gky%Go3khsaF zsPY91*aDDYLT-6y-c{Lo-(#J?@H=puCz3uqc7!$<@<>tyf(+>%IE( zF%A-2uEm^dVSmr{H)6O`-j#RdT{4CoXYF5sJYlwHEaqn{>>85CsTek0R+!Ey4jt2> zIlBwIO)rY#?houHWa^PZ(@hgPi) zJNwN=rN6N!pq~!tvCnJ&E}-8P(39j)PP(WJty02X;l@|beK*c$9LC}*MM7_XH*TCt z8KO~6P*8y?<-}MzP$3G`CGY9e5Ca;czM>*elyj$?_I0h+@|&mPS#WFTwJ{M-?zrit z9qpMD#iswL52ddHy1)EXap}a0S0{V#oQS*gSCf0r<+=L{3%g&Nj0HW}>T_M$j!RFK zzL6;|9lN8Wtu-;aw(b|wb^kS4H?u3Q(9gu`H^l0{+Sz?^X6+-{McM9)Nw9(Jk?8Ib zMSoHOy7|WB_alv&reD2IZ%PZbLtCzPAD^6wa>REayC^r9?P<6$InbT&XfI}Z z6V(;ZP8QRL8NGcIeM{m?@C|*1Oz$h5XI`mCkmN9u@}PJ**V0kik=^m0C%2c{ODA*1 z%bl^fsrpt=cTC13#iq;k?kBGAtS3ez9c<{z_7qxkv9*PzOy9=LncvovI6Z!Sj{~`$ z&fZsYu`CT1&Fj;bUT@s-)YO|3S8h7;mv8K!Os6jV^Ba%MOjSQ}<@UCz)|?X}6v9IH~`)_Eh4M%ji-|~GMl0`K+KGJ zr6+%$Uf(YKN&i?|a;fPpwZFS_URpu8{_LYWQGIPkBvf%pvG`h&Vrk!pnBO=wGyl$F zoGHCCi;|WW$+l0nM|HVeIC8xIc-J3BpUu{Mv69?u_4h?b&%@={lCt;WTe1J>w0h^dDAfOfjgdi zcKUnyrIl+#!v68p)~;>0T=;m>(rek3`qqY_51!asxaWiG3u`(uvE2hF#$K3iZiqx2 zi#J!N^J@oIZvJF6%a71;4POw0iEf+Q(z?a#Z>fHM@BJrso}G>~YHeOu_~a+{6duYw zv^e#uHIAOyQpp}z77fkXw>+L*vou~=?%UT`tvwcfi*~o(oYX4r%THgruxQ?%yQ%}9 z&c%$OPZVdmFGcUD^1{mE*;J}EN1KF7dv#=cIXT2+fB6Rr`{HbNpU17uO^@SvD(w|6(G@YVOcq%vi>~u7aig$c1Uv26A(!<5| zkMCPuJiH)#U}dymI=nc0blcT+h5m21#Y5v)<2C;7KaIPtcTK%|vc0x(bh@?e!)wz_!PN3U*J8gD2_`euFRTtfbtiOjwSqrZN`-;Av7pZ`L463^Y|>Ytup>v(2; zxj9xCX|FyQ14u{kWE1ns9cjoHn~$%E^f(=AI2}Mw%mu`y&@@-*w{T+2oK;2Kcv&f8TVp^iG;9e;m1T zU1{y_<;t&LdiT|&cSVvblmFAQ_~gWGaiYX6=duOwEG*oRWR0WUS8Ky5;DKT$Q`>dx z`1r0_`{Vg}pZcTGA5Q#jdv#CT0Do&diDApJTy%%a&4xL)V4Qa(3ZN zUR*qTZx*LRITw2d!q{j z(l&!_%&@k-H%205g8lPPZa{@rx|zF`nHE};e@a9C4>0q7=e#$AV7lM^eV31C-h1cX zd+xdCo_p@O=icjOnbe<>D|Och&)@SBe357gKH-J&1d)s%0ME>t7B?+!>bk4~LkVWM z`ESXlY$|RR6{n4xNlm|ZZrqHyv$Qwo!EYY^qLXC=|GG$*=;%p6ybQn>Kn|b)Seut; zAVPnyoi}58&Vy96CVNv1r74_CW#^@>qw>=V3|WS(yj;qVwl-T&=?e<-3c?|Gj+&sd z3aQ*Y1BC=I@m55V($Woi1tnBke*O(wnnIDlEh_cqH|Pru|8b#59#0&dmnzH#zBKDb zRTP)Actq=#LF@GEgkl*5c{w+jqtXmiUPeZt-au)KHO05(^g)yam6b~s6=WIoYd{3+ z(hO--UcSB{4Fxt0Wkub8Gm+6;JO;IZgf^vRQ$S!%p?>52Ab+Ilq4#_3QzJMSU3fuO zA&5OIcRls!!wV^WT0wRRrO!1KXBR^Y{=A8*=f)zdAWM3C@VXgTC1mWpj-9p zJasI-O&!>I>H7029&BQ`yC_DC_Lv7%C$zD_g%#Ec|E^h5bT!6^eKwD=AAvJ)H6w^|ZdE zkkDsrD%2Aza-Yu4E6NqqP^E-&UM#ef@aP$laYLzzO=78A3HKIEiag%LA~1UM*h>;x z0J5Q;(HCT8l#Gy_Fw{l}X0%Qu50BT!aY)X+ZN^EHsAXwu_1V;jzZHe34a0wrm*nfI z#~!C15k~_>Ez{?&H)P(Hq$X}1rI|YY-a_xMHm;b`h(Gb!_zJ(bE&X8bIv98VaYGmA zGty97LHj{U-X6(9eZFlK58sqAmNFESAO-AL?TBKdl?@bF(1j7aW#vATmYuaO7Anpb zM&R1C^ruHK@_(R3rGWr)hdGQD2N^I(;n*0q!?!n`&^oUrrUY#tE`#<2$L|fq%}O*Q z=ZO)vG3lm8dB+ZwRtUo%jKOd{!xV4Z;E`O7ngj~}Ems*}Yckg$`NCTbt>JpnR(Lvt znmWR6gSrVuMz9E!zBpa4Usp&8RH^jLto#wFw`EC>Ms1mgrI3&fLG z7f%%*-p-s0Q_yV%_JFr9 zL_E!M({u0Sbx( z)HC%3`h?q0OE*#VOrbEpZpuY>WLOV#(!d&eCMaO>SNbE&%GrXo6{g8`dHTZKCOR=NJ$i-M-n#~=+S!Sm5;Yop1K7A-d4^d`gxR! zKq;&&mhv_&C(V$aDVkYN+6bDX=Qu9|nsswQ6rgkW3$&_lhp< z2!c1YOpv$7=|fd0Di9o-+ZMRd0V9me@SKpHRbkL-1$~TC_9xToW^MVSAq>>+fgh)(ICa{O6!LXYVCsH46)t^}K zI1CK*Ytb9S0Y*KLyn;%8;C^uoL>Hxjr%&bNt<#Ux@c%C&x0TofXmhc;i~{|}P5RvQ z60j23fDCY=HR~Q)v^f^t(2T70n+ir^r%?~(twRTBbXgb#;GAv}OWd|nk8T%b>T{`r zO}V)^l2<iF$nB zTNHy1`Cp4+#cR^@a&m5^4LMoh7UQ50=BvdEV!?cPdR>E_2N)IbxBfRPg5u5sjzua3 z`e&%$-A_HESvL)7tleY~@t|KK?zXZNb@SKM?)%@V-E4Sn)mTG87IZs!aw9UMXHOZ5 zveHL-bfZV^&AD-+hY3hrU)hCrg$3zr&_s!I6t0|SP8FsZa3$C0{u_VdHso*-1w*%3Xvlv>Y8|e&|7%jh zLYP8YH#JkU?*G_Mk)qeeiVgj5i4~-eXsNKy1b^;k`H!A(Rz4IrYx$z$;?b7lw!M!g zM(Fk%h6Z#-%sx{KrjCfaciL=x#*1IV@AAcu5X&D~@i?&nUKZd>QX(wA9(^!z0rA+f zN1hPhrav^Fhy$1j5D$R!i#VP}v;0`{V(PJcaC*hn+)eJ(uk(VH^{)K>*StySn^TXW z`rVXw^yu-JUl`QF)PF;ZJ(F4{cxifXFi9AFqxll-9$2ibLI|hK{k4G_o%_Mu|1=nK zi>e-cEP3kU1xYw3#(`CZ2?7?vHy9q#)uSr~+no=w2Fj3?gF%zq=6eX2sxX89nrML` zeNB4y)3>sT3&GkH8z3~4o}CA)%NsMNDA-sEyg{6lgcux7OlY1;^d1*MXyxb*8TJ}( zkQy0)8NvO3T5fID`rDS;lv}tdKR>TPnB|9OeeWbM#K^?59uYv0D9aOwylDc?Gr$5S z3szmY@?5{EkXre8;<6j^040P_lHfwD-vs6#r}?;h5ix?d|DNPb?Y|{C|KD+TTSgv8 zL%$wOCir=<;27PoSXgkwl2dHYzi$q-dM${@>!UyL$iqpC7p_5aYmy#)a5<`muo8?G ze65&i)B?Rh^dL3suvsJhn9-d-OmdX-2Fu7zo@p7o5B2|6DhzShBGB$N=_Tpe;DZRI zV3r4qfIf08m7gatuBUKeiSF14L5*f(M%>ejHjBey*byr<f)b!z;!fz$ zxf6)?UWnUw1N0=6ruHVR2HHP==Bt}@2cIw%AP3+uz}*3j%2W3!&QvPa5*P0`Hd~ZMHw3U<4qDf`k+Byc^n(4X|LjPpYz`JE0z+ndnF$ zOwfLSSO9~0JH&|0yqQkBfvF)7#W|i7GOKTw*XYCe}L!GW?!9I+mWynfB<*_pnZv4mp2}GJ9%d_1>aVHmDP}+@+UYY^bNqj z04@W3i1~m{`XSIW&@Dp6C#V5t zDKW&W0Pm+G2zSEW3GM{`Zr^5t@@7%a0&o%fdJ8;{0CWN* z`H3=w9ioI9cs~YkCkg!zuo@s0WP85?@&LR6a1kIF+OPuPr=JL-^o*}=CqURYzB+Ml z3G@{Do|}6*8QSwQz(oKj^raj65?;Rp;GYM$4$T7GQFt8$0Ij92Lp!f0@cd_d)wb@0 z@A?uhmI5s$=v6*E-vU^=Z0WN5KzCw+U#v$9APzw%9|rFoi={*(JR^hngsT7ql$F4a znhc)0`F9c|JVTYC%2yI$jByHL>$jl~TngqBt^;Jl-dH98=rG;?8KIj8{RE@@S$_(~ z9YABaT-Og{vLD`YyvyK815g0nQ{}p_X>wgEKrDPu2Jj(>d_RDB08axP1^|)eDsM=t8$6c+G)UF_9faotKCx*Z2zF(F+XNPu%gyQ|RJaXbhvi&B%6><9rAf)B} zlSMo>tiO19y*u@Vt;se?GVgDGS!@!is><+tk+ubxt%=M|H@slh`i}lh#3G&fWd^=% z_3%@WNs%h@Zq~VV;|pSYKm_?W+5>bp_|=MZkir3Y9Yy2-V695>?sh?_>8rlCCc|B-_pNMEGtbcd>n9_bCL`Rr7%H&T)YoP=0O%qzzMLn7Z2H0?lB}kI= zqgaFf0*^fmeZ4%-z1LUokeYm3_q|M;HxaS_ddhJqjjF4%AqmL)YoRA(- zkRh5re&N{AER*GaaQVKlU$`3wMxs*^GQGR-ZJ`Y z{1&yhNZnPQ-Vl(VL8Yd47ubpXXZ*vY*bI3G5Ar)XBS5P)P_0y48qo>zyMuf#Z2Rg4 z{XYZ&!t@L>3_v5J0`hbwbMYU{Yyk(zm?W21}Rg zzA>OnCROXcJ5QQW=POi}UtD2+0fYgvpA7ZJOOsNGj49H#{~?&Kk;RnFAwo-kPaa~vM1=4aN^WNU zDSVM6zJETPat~R_9QUN)`zOOGOUVYN&69%f9}cI?BWs!WJt_Ep1mDlU=_++%%kHTD z+DzW9D|8O z2FZINmP}XJA%SLUgM>8&&}E4tMPn9G%}VT2A7-J8WoP!z9UmMbBh_WT#IlJLv) zp=-Cc_44H4yR`~(ihU7bUnFUI++|b}K(OAg)>OTZ0K;Ie^*4)5`rXw*hRAzBxnX=V z%Um%^;YYNImL)E3sjF$R3udC{{HhAf6;x|0-(0yBxkJ-hfzzEyLera4P7B&Bp-r<= zqFo-{b@&kMW-7mk)hh`2WusWLSkE{YDaDdXaw5G=e>@uVD>8k}5n8B;W)jN=c!3{3 z7a0Nh>f_d%v}daCT^){#JUfMYlqGs6{lZ)rqL z3V+>$iMn-cY6jb$5sPjfG(npM|qm=E55eBLs|9->ZuWp6orgDlYG4h;!pFE%rOMY2gJaV`OAly>giy;tG5%G(nO z`%y}dFA_5Bh-9xqBlXJ8DkUdGs#Mms)gQawiII>>nv!{CO->-yRQ=YMq&l5}Z8ZFR zWv`#Me(TSh?LLzIK48$<=p8$^lhU0_>MN`&b7gu}kh!wZY-)y{R?#sa`O;3g+hg-L zzA$7|5W(>hm_k6_IYXRfh{+T9RS-sYVuwjG`#^}}J09BDk}esJmzD7ot4sjcY&iOFQJTwaMS$2UZG+$xz14CTako*g51eASR z$TY#Ykk}9*KO>BbDCP*V7y0;?sAU(ib z={W^+c@RjI4v6alg4%W=c%?-DccIPS4RV1))CKCCtPBmV7UX1=)V(L9ogU;!L2JIo z^73CGy>2C+vSCp7A%&b)ZE~bbHNJ%WGGF(kv~5V>@f1t6vIKZN{D_Ny)&7Q>l>?1IY+{#;C~&ASH9< zR+>un^!a@eBJEOF%lCt%^3=JY*;a9&(dM8k<=GN2s`X_16(4vWAR8OBjaPiy4>!Mi zP-VwhWz29#RHWl84+ILft z*TwIq*9M16?HO#^b5p5T2b*>eqsY*chb4{TM5|`(gMyD(uWW2UKVT0w5}gUL`If&9 za*qimRbGz~SysUeM;jB7Yte6Ttd|V0IZH34{dsWX^MmDq6Emb!95tYcT-D$?dHzv~ zS%`Xs{ilBs6)g2jiYpt0gtmU@1kGPC>(;@m@^jJ?3g$jR=eh-*nqmwiEq@%O8YhEe zN`)tqRm~B|VZDknQP37(jx}j-@M8)*;&VJ2%^ZvvjZ~5{h1WmNpNaqnx+Qav%N`^H znaM~W+!EAJfqv$HN}nNK{9evHH3$w&@Je|sc=-HY39}mMk( z1)nLsU!D4TqUJ+bw1h7nJbvYzPb_&vlKLtopmt7i{0T+DEg8)JiUQZ(Jpg3twt*;4 zOSq&#zziV9GmaJy!qAY`#7A%s4wCb0=7uyS4*Jcg-CA=vD1w!g&y_~7M0-R484W8J zlylR(!J5N&k%8rNC8U(QcM#Ji;)kl%W{#l93E*Wh+QBd&`58BL(8x+^=1Pq$aWXm} z35Pq(dyYS#EeRdu?ipO$8peEy+-Oelq`EGPAeGhZ&f047j*0+MLHbrmNFP#Wm-_C0 zL)sQcSR+WaZ94M{mH>NpO(;2EVv=a79#~&hrk4&-8O_<_0ZZLVnKk*=bUWW z9VeuMDZPLtMqomiZxLe($k$=s%A(Q%U6DXwc5-qL&Scsimya+t$piwYL;}N@5au6< zIU?UH)%?WgsP$*~BZ|E;{T1k(y07`Ya?N)<7~pTAbc23kHE;7$)P#v5f;s*2?m0ioBH+O}sT?M3+~67|w8(g@D? z^(m$O2gcJ|KYBO*uDZ26`5RD>@hxu;aGwrnuLUq0k%%zU5t={p>;@`jibRtN^;{Z% zTG8^_0M|Mo2VDnEYh@|zE{b^{3xMu^>2LplV&20qXub*7?DA_cCK#~bK6X};dN{zp zAwW~YvrDMuwt=&sI9BoG@5sAgq#hnfy%ykqF5rYOvmA@#aBFSxCqp&Ii5&ILxtf(w zJ-2@V(idYo%(evKNI~Qq1IZsz%mTzZRv_Xv0g-@+EizMLd1T05ndVtu^Ef8HDkR2Z zA{i+EkvA%&ubZaV4rEMNV^sJ|HxEQcr@Rv{l}{$7Zy!jhms!V~qNe|Oz$UE-l;24Z zkmvRK$YbgB3p1xz4rEN60t?sr@z$t&Oq8i{PqZ!G7!f)BPXnPQ;%40BkB?mmx8#9h%-qtloL!$q*7gc9Y{D5_}$}AlM{?dgdD7G@y5N9 zy5I4;YtEKo0|;Z3bYtj1uu`I*hjt2#HTU2^+eJvy%mun96x{p)`45;gV&6+`-(&j{ z35SNT@4Cbs$Lg4QC?GixKD6{D38`K-;Te-`kE;4(nQ@1Ur*3tGI zmesx~kdk>T2|Xg&%+=Kbb4PqY|MvRSS@_Tya_me;3=;4~0%jzzpOe8{AQhVYPZ&pO zM2628YlJDzCaDOBmc$2u4}YnAhuk{f^k~umPY#euQZ;*SyFDUu_pUS4j7Dp^sSx`? zkRzIK!GG#N+TmB7q_P4=8Q{{0b$SCAezXhXQC%?y!p%3;PVy1OVe>@>v3P`2Z&oW z?has%VwHO&5N~8&a$5c-FtCWJ6&RS4!fY4n+Ah=;MKC*rx}t=-G(_p3SQX^5Y(@Tjhi=EtRC)EC) zQ2P}7846-a)su-+ti+fmJK=joQrqC5ASe*LL0HfP+X+L(Mul&fs{G(@QtowYE<*MT3g4ChCl~1qyA#T6#WM0vo(MA;*UyG!X9OoH z`vsUv!Z|n*Vl1Kdh}ke#)DuH9jZw3W$0*2G5H%azyrMVfrs!e%5PEK?p9^$qzo$TM zxx;+O;ii@`0w(hI#{D#iFP5xq(2N19V zWo!*AZppID;TE5-SZ+%+N`0+~74%o6)ovrlmLCG|)(&E6kTh(AEDazB#Hq|PDA;5O{$6HH zGjG#EuqilRX5xl2HOHXp{e$0Q$aur&Sq-b+}6Y+YAUAjw6UeC zpR4a@_&(r|j9mLA)%FEn9ezh}388z1(mTLaHHNEG^JOXZQb((svGv1nJ)Qy2s z|0S&C5B;32zasp}fF~g&##}{8!5SjvDTo$ZfiBnDHdb7>GA7HO&!O{-Y5qgA zOlj7p3YB$v@kDFW=3-OgQd_90BGI(m*0kMJvAm7t>l0zufWM2OeyNYq_23> zMshrD?k1Jy;;q)tP1o~Fnu(%-a9`EN0 z`>!gPqsUijul#R3IM)75UjNSr(TUhAV?t3j;F&tUa~s1I`74_9O?1V^vM>3)N@H38 zxm_>ejo|@SW$@Q->xAG6H>oT-@L9d3a)(t_wYgq>z+!ID?(wVovT0R+ROWB%{VLyL zZCab3mDy>d%`co?OdoBoeub!KD&GWh=Huy(?MQE_sq88$VtuH*3!b2g))rC@A-B!o z4$e+801o^$Bl}B*dkJ4<=~QeS(nuDxA$z*66GPJTjGw+oY3 z^&UHaVC*>{3CT7Fom95~zFw(bL=3AqY+|>~mh3ZoG zCZAF%4PCLlNbckb?LoHQPmwkDn7kRaA=Fksp0y|Lp7SFt^p6EYu$)wt!4F#Lq@B>W z&?Rj@V;^H2{DcoVMT71*#^fc;ggzM7D<^=%>~2|E6k(5&f?rTG>(tsdNi~}a%Y>R2-+FzQ zz6=HOP9Jxuug#Yr;IZ455nL|`_L0|sqO6J{?=Fa6HiV^I>%cT87dWB z)?6VI0>Q!mbk=QwOc%xzE!BP8U$6n^uwMCjjC+$+&?Vr!F_V!d#2J|#eOqM7W?AG| zW#lAjSrWlK-&YYhM`{Y>p6_dVz7IXRO!Oh`(Sa?NzJ>;t!%&euGf>2Vsb~~JV8fWE zt$jCR=wD$Wa(k3tR1$dgdMZ$%t%02M+cId z+hJ!*2=!G9tO__-{Eo(rh1|k{ibWEgt~-ALM$HzZ7i-0z>ddji23mFI#H2+qs+lEy zb6^>oGWHs`sITc^Q8pqUlUkBT$Yv50wntC$iox^Q^uTZvy_kewVeb1CCjMqj$0)&w zqyow9Ucq3;)c2n}7*JXQkv~tkvmcuiJ;}}yUIAb^#Mpm@Vd?-HxxeERZNK&SX8d-?@Q&Ck@x)gar*8H;d< zr{g_&`+9Y^$UFJ24o~{^UiKF0kwRF)ljU;n$y;QJ0&gsGlA(7-baHY~$}T*b0=mI{ z(W@Pm8KpQsGf0kW;EWmNo?QRvg+k_AWE|gin#XkylKP-G`4&0Gf#>bX@E%ghzeS$l zq@z$B%CH_}XxZ0$d;=Ci$qLVjay;7SmGSW`Z=zRA!3`7SUpin4^ly-yy)0B1?d{HJ z;d7Gra}sRK;>fPf#6=-+?o9}U2rkeuNv(let?X<)q#9!;*a(;KC{Br>M(z`kA#m=+n+wDyCFizXK^Ym@j=j?I>TIT@hr9>t zSVw zc=*Ap-1(S&-?LtV_f27@^}tkx%3&8QQ<9Tk<~L#&$E3c`S^af0Y`j$05#R{}jS4la zYehafd&oe*n3QyxOgxDt;(s2-myg2#*b^CePh`aJQ=|%k8Jt?G6X6vE_g#lUy()J_ptLbnH`u|Z6 zNAWzv2NVo$M3y8p1nSr?WWB= zHMM?z*3vUIb7ge+4^v>%4)WBwc-VS|oy*+^enVBZ(iV^bP1{;wYoo>wd_SK(V=E?= z%pe0nbCu$iFU5N3>1f4gs-}`PM(a$6(!bhM1G9X1igJ+ zWb~@Y_(_oyW-;3l2_Y+pOXcUkP;gX|U)zeov^{|(5w^IyI`mgv7y)^9ih3Ecn9F|ZrSctS^DL^v`k?Du@nGXj-jW&R(=MMn8X&X#739|K|iJ|51v zWsH~B9pUFk5Gns6_D4wHxkpwXSJ#94ypciDBnEb}d$%tBPz8B!ZYM*59((`F<*7BMnh~;+F`c(^Ei6XR)+7wgfF_SlKMC>;5+%G zdY)jebwRdz%zFUli^g}xHJX}B!5SU|j}hhvv1xD?%g*{RzaRx@cqyoyDbqyzr#so znAU+x1@@ImQ3?}1{VNPR3S;r_Uc2kkC{(Ev@g!0X zMxR*Q#;5eUEI;5F1qqaAUeud}>7=)d8|-4#n77Qkr^C(b5=E`9{<XDr1lZEK(rHvmQmisE%<_E~_k9=XmwX&H*cF#l zCJ4Az_@J&s;r&_o+qyyMJ9SDiivG09^yo>Ge}x1cAM*FGYxM>4iG@4bJbV9^Q(b%U zOe8dlrYEPw^UMisBX0fVPfnT5L+nQnN5li!C^(x2JaI?6z^^c-5t<>MY3_n;07_UZ zd)(#}2<$|eB;^V*@W37JIwH|`@eq-LKGvCoa(wQWRmI?}zwzxZdz6f=zMzBH$=sjw zcT+I?EN|*ce68!pvA(3V4EC}e{cw)YMOO#xXYYn%{j*A9HaMB#(hwX;~R(*QtodbTM4UqRBiHk~T zljZqNZfhrCOsb7^mv_ip=&rEM0x}iN*^RTb6)Mws>uemTadMObFj9Aghr=tzC?7h) zNYQVlWV%5X`X6~Fr;7$BA{xhO44hbn!A#!}b+j_20GsnY-*y#aIF_7FE=}ZP4%8@G zS<9N+vcatAn({*ZgqlM>$VObWY=1bREx3@M-V7(d_Da{!oOD2PLSFX+|CBoAkV{+C zyrf85)M}EX?oXWZDt(wO`b%Kyhs||x&OMM+ve8=wABoU@KUY6iV_BI#@Y*7djzb zVd8P8)We>hY4l7tMzsVAA5hIR*@e@}>}zo3hyoN$R{>p?@mL#dn!+B$SC^$p>u{tU zQ#QVbqCTjEp94yAweGm2Sv<3?EOO$G;(oQn;_4j27~Xy44cAMy^2!z|+E-EyJR&K?#D z!U4|_a}W2g&duAbA#il)ptNlbp?RMt?{50Cv*oi+?vu{XKkK}&^8&}iEtemIq-9SK zba}wS2x-z1WZ^P4rvlHbJ8^YpLVFXYf^m2z6FyhUE7PBpFEzz|pqu|;bHPzv8~V>o zOXtFphb$kUj>4?pa-9stqAKl;RjuXC&agiS$lLbKA8zzb(h2@zmapZFPFQqXUh71U z9Lidi-oCF^OHwL?k+0Ac-=Wp;F0c664}Xis519E$9E zRH>=FQ&btNpCERWxo!A>JM5-I5o7kSygCKjY*m99(isgpT~O7`P!p6fvxf4yqPc9} z6L1Et*a5$WT?f^nwj|i#yq5tRAyevP@W6K&ynlEHoM6DaZk|89Pq`NW@0b3IA#@wy zj$ST60l*f3R)7Vvj)X-3%K(xA9tT(nuo@s0U>!gNoXjQxS%^s7Q>??Rqu$G=5~NxefS)?<~(VQ+(nKtWwbQALNWu@O@j-k-jSD|$M)u_`>fO=Oq$t8Mk*F&m zG`V>EQHQ*N=lDC}sb=o?e9!ZI&&B7)S-cQnH7Ra5h2YXMGcXZ(7984kE|wqZuBzcs zvFFe*b_%$B3Jvl8Yfd?o+2MZJFJ?^bUzuLxMb;$BAr zR(8qFx!ueKOfQ-_wrGXF{&$GJ;O3le<{Y9iPm%@fT z(GWm42*Ist0`88T$GQc76&TP&^gA@rXX$I%kO(mxlp+L>=pf@UH=VT=TD%|2 zWHd1Vd;XACrb=!RV8p!PkImR5J8N$@G4D|buSdWsCAjpN!)l9MpS zo0{ntw}N|swKP!s!zFe&nY)Hy8r`0S0`rDjSXPL4BJ|G;Ft53H$4lG($>X_CkPnDU z@Qo}DZXvd9QsLf~$Az)H>K4`=h?KO0OKME?CV?zWDvY0iLqx#`_&a}fhlz35rds#N z;H6(HxEJF5hdzK+x&IB`JK>7odxyW7=iHXlXq15O9bA#@f zcANi&I-*^qf!F)MX}BwOn5vR_++BKAKtsu4cED*7Dn&Q)rqSTxQE6E?T0l5{q0jXP z`JBgo>i==Je;7bzRLoyy4BBR1oNoe~) zj-1lnB6pL1?D1wsE?N%(-!$L?>jfu{TG{czYJ#PJKXsm0~uT&~hi#*U15 z`{TPlxO?ch+V{EB)zagFt7jlFywUa?OPg32cU-57zSzwC1

XyWpruM<1N|2!u5h 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C2/bootloader.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C2/bootloader.bin index b897aeb36ecc69c08885ce099bc300d2b9ebd62a..610d3f8e4d675a0aa4e01abb8defe27b16f6b483 100644 GIT binary patch delta 10567 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 literal 62592 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C3/bootloader.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C3/bootloader.bin index c700df765b92bcddd9b852386e51d7ee98a81ad4..27a45f4f4ee9667c6f5c4aac1b6c7cae02d8ab17 100644 GIT binary patch delta 11194 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 Z`QV%#pKbX0!7I~C-#Rwvr(42+{{vNXBqjg= delta 10817 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C3/hello_world.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C3/hello_world.bin index e219ab04cec47516f17ce0861c5004c691384277..6203aac1db0829fce18eb054653238a3125380ef 100644 GIT binary patch literal 124192 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 literal 134512 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 aC%#u=9SZu}Um~rIhi89LH%I-`m;Vpr349&^ delta 10684 zcmZuX3s@6Z)_0Q3Ou|EgBcd(T2#Of1MIxl?iU}kc0pIImYqbT(N87DcYpvQA6HF#C zC@)6^tF1^aD7)=i*qUwo+wewFk@{P4U0YGA)ONd}Dk3WKpPLCnyFcFtxw-e8bI(2R zdoD%q6Rm|r-Y`SVVu$V(2BEnKAp(Bij++oWe#OeS$4}Hwo;-f_q~()W#m7uc=QOZ} ze^NHSu8N(gij9fYs3vNrOpKi}QJcRsEINJp+Be^d9;@1vzCp#MzyA8l6{_^NRCAM5 zF`GxnJij^64{(>SUHg`x^9%h<_)n1EoP`T8y?M!VDt0KplSKbL03q!{hmIl14cjae z*Hc#o8X;#x0RXkbFCRU;$`h04FXS;1YTd%XYaZ3Q@G@Sz$f5J1QT6XIr19MX-Im^V zi{-18Zn@kOQ?yaI!aOBuriA;<3Ugs9vpN(Np7z8Xdx|uAV&*>W8snd)WiQPY>~u9l zhn5vq3yy}W!XzyvL-TSAYa)v%^iOqF)Us&fxTE7dy4HCfoh6}L?NOXdnOsyBsoA@j}p(TXD;-7&Rm^>T^e=sMWeQ+gktpK&x)4@uIJs4^qu zR?d(b?NI+TYZO)MB9VnT+1Xohk0K&f7i(SdFn`1j5~6Ev>niTciO9o4Ypl^U@{U!Z zgq8+sG&>Z}Y4Ey=CZu@0@d%QeYe1|d(j|jf8QN5!hPkJ=QL8=v*rtI-d&mc~q@3hL)|fvRcH* zWb1_XF7y%6g*>XtSIc-8*6v1!PO#UT8M^^%*dk&UIXtT7$xfC-orAcx(ttHp7*?>G z-i-(5(5iA1s1Go`SZ0#6ifB5Um7RnF*?cQ!X&=O`>I(R!M!|Bn_CX@LeJe&+E&mNV zS;vdmX%-QCqyg}Ev?Fd!mmg`!Z&0wo2F}`!6b6M6jC3?UXw_;V#6ZaPJ)sOe3@Q0l z`c*#8b1{%=G?>_U;mc5!*`5*N7I&xK8}AZF_3x6tk?FnRzSa8oCc1*zwu9}reMdEq z@53{bzL9BbcprtW6WzhA-tdJByQm974MUOXg2VBq#@?XAnjzCeleYA(o`<+ETmYgE z=1u7)fhX62NrMnNP+%2kXO7R$u`IoQ&TlV>!G4b3$XHme!|K-uQ}q$GU=jxGm6bDv zW5b51a7f^HRxG+85y4fjVLrV3t^=UC!VkmLX7pjE(a$H`$`AWStp`No@#Cw;f;i*V zw!Rg#-?<3swX2|0naAXx*RACJPAb$ z*~1lP%bsYI>2qA&-e}}g_3qm`F@E6FfgGm(mmG3^a#(_;uvRrUQj|kfH9y5Ghv&h5 z!P>p{OW6=(uf-w}M69Ak9#v7iK-tWa2tzrTY3)0^3_g=3$pSqQssY`gqy?C$h@x8n z@x?3p*2NwjO84lB#=6)b1VYb?a9#6s01Jz>f0RW{l~gk$giQeF8qycp66k zqotAG24(08_*9Yf2Bk3N=^bW8PbjQS73dDdol<(r2IbJHhgRc}OG_w${;>^tW2S29 zY_wqvtmbK_0zHctGS389dGb4@p;NSD0@B`l(YfR7Y5X_;XCK!loNB}$7eG83ux2rc z^F#5+?-wf*g@mx^xeVQ`*f3@c>{>AOC@7!KyHh%53hX}w0;zdJUMcW00*P~yVfY;F zFtZZM)kaVcfiB8EzqA#4}XUGM?qagykblgV*Q&qv0Q{mO>9QhA#Auh3XN> zQFfFDwubPGcC`Xh4~@9J4a#*%F0#3|CuB{Ii&UanLZoV1)NmJ0b)dP*E0vK&qlmU= z6#v1A-<$N$6#@n%yL!Q{+M5`Y`Wy6|nA0(--{ed>edB~^DE)txH|@HAk3(oJYJFE& zOcGcl42>ieb4RWts8d#c$1lCY$%t6v9RHI7<>F49x$0;Xqo|;`hzjje|feMGQ z)?L!0wT}g=Sz#TcKuilwFq^u9II0B+lq!H@TI7eknJmP(M#~H#31(xRzuv+Hk%O4G zCf!Yx=`Dv+GLwmv6y8TKTMS;qjh{@Pv@jlq?iE_sAxwY&^`bfX=>sb zQYk&E?T4^9MTlTy$n@kR0%Zx{hPTL=76-!Y2^5lX;Vlw;>V+)#UYDeg$>CbHO&l}i zTxp`r{M|IYg?XnlNZ2wOjjcSCLKqIY0i9}-wmj-XIyJ4#*^l&195aMRniZ1>d^%y% z-K);i%v&;5Rmxa5^Umd><-N zoc$rqROo}R`HF!K1y%n+oUnCNyyS(6!tqfmvwkF)In)DU4JVrg8Gd7d5-UcxD$|FR z=l`AN$(X)1wQt-J)U9Dilp(@buIQUT=C^F>Jfk?9##s;7J`S9|z4DiYY2Avku$#A9 z^zO8|Ak@26(aRYNKXbdrptQm{%xXHI@SL!2bc9*eSj?|9iW*BhRm^Ykjf+ke^Xa~E zYeO-=-Zxgk7zguLApnO);_xl4cZK?=>4TZ=v~J!hk_9KwaYJt)SE!hQ_*FeaHRMGJ zq8Ek%!ym(o%;47vPb9702X` zHN7}>Lmc&{!jIkH;c2c_;K|_Cf}KL#L30CYPIQHIfIG+5MgYMzIrDO-)JCwEs%N?L zQhY1*v3)D`v20;ux?9`jmlie$$SH+(7KNSjI={WaT$l(|JyiO66c=_rVWSd2Bu=>Iz(2At6X23V%tozA|@;ld)vFuj= zyu8~5xrySaPKx`v6bX1cd8bV9Zr2Ih33xly36(!=C+&pY#7O1cag({L2XEOwHEn+# z7zqw#B0!g?&KKHz-yc@}cD<|0r4Np%jkQHpr&J!dshtrrs$R2V6wy7cS_Yygj60X@ z#1tcophSy;`w&Dh!9nQ`Bz5QBF!y3(+GR-LCCPeXw3`SPD{L`(sht&BH+ALCc-xn@ zgeHhM4DHk36UVJ*8*V|g(M6~>%#P%xi@+<7BRF#7nW2JvKNsu%@8{h>NJ9A3edN?TDlii)7`lh?KIpn5M;Qps{i7(ce&xV z?z}+^2Pu4FGMS$KxmXV!QmJkE!oS9Z2_ez5iOs@_=x9liO2~;;NosP1W6`#8rUZx* z(?x$RVtQUIpBu4Y*8<54x09EroKHzieTgqmH9~;-)TtL<9y@uM7e1-yMNOAMT5-`J z_4$8*aBQqW?OmMVtvkKGokqvG%N!XCvrqG}dMMy&y>9$#huOvzQS0Uu8!_B8~ zefZ=qO5r#*+ZTZzjxTc27WAo&yYG^$(e%TW*umKVvTmO51osJJ-`Vkbuf2UMM;rZhB81+C)SU*Vl?a6~TIi1Z zZ?+bG;x$Tq5wo(j=~TV*9LCKX=22E|#rK4a#gT(#V3O^dg{*N=&s>}Q|8Tt6r>&ob zrg5XDzAyl!xbIL)p_X_MhbB0=96z*Y07Rn?f=^%X{#Y3Q>{IERH4mHwCwt&M-!VVJ z_#Rr~IB(b5&2U0Vy+>K}w!#=$l)A;EJm%+u*`~b}c9Xs^vBI%W*H}uBNFv%?mw`N~^Mi&pUqt_@dK^!XIkq_%x(i+2XI`yfO?8L{aH zN%rX}weu1p*#6`9oz1vP+(6eNgpD6&{wyID-!>tyl-sclM6jY>`9J^DC3H}?U` zQJ#+8Y+N*aUrf<(= zgW3E6Gb0?C>~MD9fSF!icr;CCwg`QLG~_5uGpZsv6JzvJe)`-k9E z*`|I01$E)P^;;30>lC5-1@yPOeNa9TJqI#cdk5=6yO=_SxZJis>g^f2G564_h0ydV zOuF{AV82Ii%!L%Yxv)lfDMn{LXaRGD+qz)4ZDlBYZLKqlh6p_a1{XGwAA-R?7L9%Y z)V5o0b-kw}_YuZgZYVe1*1v?>$#bp<1wD(bvzTdN0AI!bqiNcHtwM&f&^%2H$ zD4e!gx`ptGGiE3&rE5Ap9e=wsLj+3&kR)shK|(`U zZ)fh(nx#pKOofv%cJ^ju&k#PDIKh0u$&xa;JmEsbNl(X||EMo|S`Xfm9+e?=J-(td z3s0fCNf0b{w#bSe%8|wbW7wNeBXP4ugexU*ExVvd$rH;#WmwDam~Wt zp1XX(`2~qDj0C>{&sh@t)X3-Bet!<*ULUELprue%XlR4J z;_Y$7d{_mXK{y`}M()RM)H4K9Q6hKeE*fq8ILyCsbFvH{0F^#>}8SnH;XS~)srCK^BtM@jfttpjF z_W2I+)XpzO8oEF73dYY*q6a$f^z!G--1Y*J>7sk9Ok8M---#U<*-7Wn7Yhm-Fxg8D z*3v8mPe=asf!wtkVuFJ`y5404sK~<)kQE>zOCBI`rQv9{+q-haw^G)(LLWZlmcoWm zL@Byt+>h-jyvB=Tb~rwo=FT@=cC-bw+}>mQ-q9v+x$PrY5+ZI?aOnK_NVy^nOtU2XhPBkD z;7|MUGSJ)CLRS2!xobb#^6dcw4hMT0K&A(M8t^(jUnNSfXj;aC`_|{1x^|Z-E(W~ntM`aFs9p(~{QWik} zCJfh|7cp9+_i1s_<>@$>qpqD$pMN$$9*sO5BX$MXiSt(r)|lPU2J3j)mNEPjSFsoP z>JAM2@i!vy%elj=iurHc5dhVjc@zY2&N`4i;}zd&BKl71`~K=YS6>I(7c_R`12Uv- zxwEeau)ADm#uMUeg|`oFf_~a^F_$F?c*c2)p)7&kSt-tNA94Kx*pv2UjUxiWLf(-VJzPR|Gyp_--^Z zkbBf48N9fH{R`2Z`$bLLLBB_y)~o;Or}2|xiKE2q_L@XRC!YliJ<_`J|@w85F$xIak277;6(Gq^_w6Yz+x43+~X8snl&~~Ti zQMa4hrA?V$gM#myHaFEGi|W>NCChbi$eWAB3E^xT7sg@yJD5+}d`Bu7aLQWSX?3 z95LHFd!a>~7H@CMVjoseUn1^yiLAm-6I^$REX&TBO)PP3bNybf;hxL|yyf6PO{+;)|Hc;23nb= za1y!v(byt!wEcc!W5P*KtGjmojOqb*p7~D>YgC%W)9S7}KNpc^Jowd>nL5%{%?@6y zx!aD47i%V2kj4hWl5uyOXts^}z+b}U2FMbP#XJ;Ut?I1tH$dcHdkZI@bw)sr!qVgq z`siQDSg_|S5ySkQIxGF3-2MQ`d6qZ-T*gP(m+&H(Dq=p6G`Cl?6;7wFxFF%A{sdOQ zAtS@H=@3A&t)+per^Q-23*BhRWZSwOk1EIqs8G*20+6*N0DX}YS#$+)IsQnv$D-^e zQI4kc-H96NA&Sc#Rz063YnZOC=?agAx(h*sMmp}T1_UukH{Y0WF)pEeaX!7$)rWW? z@fu{TQ-N=?gkfLqPX&<^x&t2>zYD!dFitau%5?1ZEQO95X24jHHS2Qz{-sd&F@+3VLxOoO+lbl zVqYcqjK7?Fqf4GSlSmO124Ji*DAPFGC!yA$C|*{HpY@tRQoSu@wt2sBl0c=E{X5}2 z#|8M|DE)Dystj>5a*`LS<7$bNH9)T{Z;(_iLy)cI(EgBgOTa5WGWYxA`92Q_^XaTg zu~LwYMsY_nQ;AtbYUZqb7q_WP2FOy3eDI*PBn9>3`!pUZVyB%DWGdyGMxrj$=;^q6 zP>k^rzGGOVQCYW&FYjc`epSRoHxK6nUq4i4OYfGl3s4oyb+=1+wheXP_q2}Khv)h? zs$%H_zMXuHWdd&XMozdJ@P?zw&cr{9zK5$fFXP@<$S{PpECnU( z$6}70up-cTntLYD56{DmQi8X%M%4y#9hU=uX{!6*@wMP~I2rr=q1d#@=MhHr$4BHk z-n7IXpiJ1~F}L=9Rc32@hWz(1xj_3%zbue8boFpq{;18axQ~HAG9A5HC)~otY(i)W zBu?a1)E_5=@3N8i6S{hB{w+|CwE1`c5MMt9HlA*eV7;&1zeyEjlqf57IPP=I04PKv zkY?GSC3}F^iZWZsKlh#BJ_wL;4h6iP;%(hFNfT(h%^}4#l;AL=A4n2xhV=Z?S9F=D z8AUCTnQR5sa5de2_vWrzaB+d@h2t;mT|&KhFLl+-i!)8Lj?bFUM=eo6LEg4g@t`lE zp1rdkuJ$vOlI8-lc-Octp7U=#SYYsvAI}LSlE{^C*SIgpWP>oT0ZM2BiJ7@|{I{M~ zPglQqed#F1cf!3sDw8l3T*W+hSJE{4E2~<87Qr`9Z}<&fF;cP5#S}~)gBBGq_d?N- zq~VQuy3gQWCwN*qCK)NLZP(i$-*PwWpf|(zxCEI}IT}l;Rq$pbMJKJ4m=nJTc@B6O1^DI}fss{ovn| zC;u(j6XV8RmM)eJaI8M&Nl!t?X8ivEoAbR-DArQ;dEv*zaQ}C1Nbr+N-}lM);N8Rb zeVZkd)xubSs+FPW=fkQQszDp6q7YBF6}CJUD>{)eU9<2;(onyQe&Tsae=u*Hu67pl z8AE3CDZ3TZH48>b7xBgXGN4iRWEVY~ZOz`1f0{Qw3)a+)TyoV5kTu@x6@A;`Z- z8{(f9zgrsxkK;2GNj)JTY76)Dh2ONkcBOcmU$p7@14$yq%+u4%EN2fTFuB!0PILe7 zNb{#3(Vt#OwubKz7LP&9OQEQup@H}!m){ZZ*jK}}Q#ygBo{ubou(6s}33R=-u%>Z0 zPbItY69Fz+sd`3cTkkt`wY*XswN|;H!Eq_6Tz9GFQqso#`0tkeyNuLaxK+sRBC)3R zb~e5CZuuJ8SC9qa-z3&Y+GvDt<9$0|`ZHi3k+SN4c(z>EPeb_0_!?U?2fA+0R5X-I z@M91Z70SZd`rxXKQ|bfRSQAtzK|LXww<$u?(k}TmRDg%9Y8u|E;HfHthSwqd2GmqI zdyTN)6fUtQ3tyT{5~)#;uy2HFX+_%7BzW>xEv?bQtJu=TLVGA$3boouiFArk#;PSr zTHzuaKV(i}VbXdin;EilaOj=QxEPNWR5PCUBTi+6FmZ7xffQEFhaOdQoPh}%gI=61IXamjE+UmJj1duW}u+b>OQpTRc?9`(dQlL3Xzv5tl8 zNg+~v{1P0t%)%rE1TcIL0QSfv^V8p5~YTh5MUMQ;4^j ziD#~Uk6V}f2F$p>6Q~$^_!Ec`mw3}?lN0c82NL5P{Fj#UKK(!iVTbKE=B~V2n6yk} z0OV6xV;$ope%Wu1e6|~5TZt^za%9n=(`~se9bA4p)z@?`hqg2M#lF+rhwZW%hJmxo zz78@DfLXGT&FGd44gOXhLLOAEIC9|*-EfdBvi diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C6/hello_world.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_C6/hello_world.bin index 37f56e8fc21914212ce14b12665fe9687a2cfab0..b27b327b61ffda58e4b09960b8debb8a46dc5c1f 100644 GIT binary patch literal 64416 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 literal 89408 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

B60$Nt$%A~MOa_iJ@eHk}guBdo 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H2/bootloader.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H2/bootloader.bin index 62875c0f67f08d19946a492e0f1232af837e8a12..f2ad58e9b0b9761c2cffe1a2fbd1151d8419811a 100644 GIT binary patch delta 11670 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H2/hello_world.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H2/hello_world.bin index 9cd83475a3a8cb7a3b5fe3a6ad432fded1c7279c..612b22f24dfd2673b5ad4f15c541b82417461109 100644 GIT binary patch literal 64672 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 z z!bxoK{#3GYE}d&2U^$gjntJBDAR{}I8AHB~(=C$H8NqBG&3mzS5q83Olg2_hM~PR^ zg}z7nv;*@CHOwEU>2pxsL)<%#pKPR9Xhza^j!wZV7@BjIR$^Ab?xbV@C5@(r>EGll zum)$i-)j?h1}qxpXx9RVOkRKHPOm>-_c6dX%y?J8{+#R!MZMX}8q@hoL20^u!DXzj zOThWSMWT$~l}cZmY7LuIPp{xqR4HtNXLCx}RH~?nVKc0!8Za|&frV)hUT}vpk)ly4 z5;cZ5*{oJY**3g!YG=eG;r)3hGk~o&Z}s0DmK}}|6WXb zF2;%3KO}ScXz<$K@;`&knv?Wn;VgAaZ(@;0s+f-VS`<-lrr^wM6LC_BBdE>bs8K;w zhzEIwq|6g>=353i$R?QPV&Pey`$aM-j#PVK5d^2izGQ}zdHJpg2mArt~b&f~$Qh+y!-@^mB zPl7yAbw|yVVl|~mLi&XGeOFSBNzgBWWx2V0RQ6f&gCo7Tlfi^?lX?eb{jlrPVNk06r!v(MJuusg@f-EyYU$YzQ z=sUvaGz(hD+m&1Vh3p*nWZ02r#$n?!3q~P^JT*rW&=QUxA2b$-tWV$R=;5dHxAd{x zo@EA-T))aC`cBW|Il+K}{d%Gb=Evao+t$KFDOa0m;JH^MJ^EskH!NS%Upkp|8uQQn z(ucK)wuL1FWeg`|4#8$`_Mh=)X-oTRtlVvrM?sVz?%m z(|cmrAHyFfaeh{eUJ~a6|NE@=i8L!us9+-r6;?xnXqdtZ*G$pmX8?K7WBXK1{tz%H zOOuCy%fTaEK9AwYc|2F9Y4XniKcE4S1xN#2$i_VZbf0$6geP9|6Plb2Af7pfC(7et zISJZH&$6C_B`h>kVvZ9QR{j#U_XX?%Tm?)nM>zp$+mR>0inD#K$iQUg`21_oXFdG5 zRZV{0rOB@X-UoDnF5IBWmk|EU1z%4O!mnuZd4!iEybiL0mob|M*a@0+s;|)GWaMBrR65)Zj#Wz?Pi<$8x>|=?SMPBkO|j}$t01hb_PRGBRtb2d zpWEy8)HgUbxvRlk>|hjkF~Bj4vDv`IC{ybiuJ;w_noz09WdPFq5^yWv_FB{d=++GU zD}eO=4frRdodZBN`W4rkh*LW>`THhKet@{bCQZHwyb<^|VAp1(u~94ob5$X408taK z#anPMKxGYNc-=1o`w?${9iDS7kKYRVgV!~AA?P203lP7sT9Y?>YCZMUYCO9=MP>Qz j4<6Rr-@EzMh0u-Pz0s9b!vk-1jepYAe)xqm-uk})aUhhH literal 96976 zcmdSC3tUvy_5i%k%$#|k=HP%}cj}IeqHzrg)JbpZz&sA%+c2!Kz#~5HRZ&sP{_$^M z<}i*gq``oqd(l*s%xhpx^{*J-J`m9ms7nPAlJ{N%O+;@Z-&*I)2ztBS|L=SJzV92` z?7i21uf6u#Yp=cb=?X3S?LS2p{f~qYB{;(3A3|ve71ad=f8-I23 z+O;V!zLc_Q?TTN_5gsukV)~3Hbl$|+Eo(L5Q#9dW;SoG&>(tOE9$&F$)8=j79QXTs z>AAkgM_l@3;BPOCeq;QcMLn0&eEKUgvoCCKTv1l_+uz@x`~P}u@`~iGli8H@sVQrd zCqs2Ffm2IK)ROgoT%YpNdNRT%Y7_V=TQ+M}ByUb;H>YgUyp)ux*}Q4Zs#VFGl2?rI z8Q}wEWE7z&@IB=;o05}KQ`Qq=NMctfYmzr@O4&qAFSE%THm^xp&)2YJ{pzIkE7m5j z2!&!KW_{}BO~ zvu3ak5(ORjmkS7l%y4!U#L`o-(T6&Fu>$r$_x#8((Wr@TEBJ8rj+&TlGkt6 zut{szYF2JaS*Ka@__~x8$=J7FPJjA8q|dvTK6Kn0l2#>qN6q(r2terD5CF6tvwkxm ze#?fdXrBu~dh z8s5zv07fLUxLXiVx$Tnc#E-o}ULgq<1{zWe*%Z3pnf> z{-Ak`>otR6%@GLmLy0lYH9?ph`h{OeNQi0i;suMr*F8eId#K}xDqx&nCE?4k~Sd|nGC(-0{%RdH)2`*Z4Dv(yaoSG@DVl|V1ENw<4Hr<|MoZEQ_oiL-xyLSmT!f)WD<#* z2re4j&^p&X5XZDnJmtTCT*!MQbg+yMz(#`$^`s50>pz8Go-EX}@E6J+2_sP-LV6RV zJ^Tylzf|{R*kmV%3n~Bolu&oU?+5$ZGz02-0`NIy5cW&;{1Pm9rcfph>RSo*49#;< zN1}d!It##UdZ6x$(B9Cz7=9FB3;$@*Zw42?#=Hji$EY}PK%$d0PlknuJ~1_Pie}<- zYgPfZO^#a)Y;MJ4Kx6BcC$Ct6yB36B1|GaVX)T7MQFhSqvcp(DEpDKWp zLdUOw6hfHf&6<^KlTue}QrEnKyTuyVVF5mV?Us2_*aDyEL*}hnzh>Q*b+BC}Cu@+o z^7&_IAfIOWw#~_@u&FOjhBdZn^P2UmaCJe4gtd_x8XAgQ{?K%g75Hr&pnBdZ;4kth zWFIP}-^fwE1Y`+_czy+2$o8kc*ZsFQ{{NJJax2g#xHG9F>eyxybprenaB%>$fO~ig zi8=*v3;378VchEw{_h;-9hz3U zTVB}kor7V7o!l+Nm+u*buh=^n_Lh6lAKLzh547J3?IBDF4$Ix~w10Cuz@Yun(55#H z+m`~KRt{<3$Ad$JYaaN8J@AW}ZzgNjuO#y$=acnG>q*!X;Sp1&PSZU(J!v@$Vhhsj zAS^P-do-zAK*mhw zImqPYTh^>ykve(Jij|YuO)06Vn^RKOK0cqB9Lgt5-n1r_-5L@8IP7bWC$C*OIdu~| zd42LrYu7CIdJtqMr*2+>pcR`_l0sSRLliGz4Q)y2neg}4>?A`9TV%gDyYy7z&WSr} zX8*kH&kI$?FFfPu@%ZEPLVmT!_tXF1+uwB?HYKxshiPbN47fC*LC@a@`|+%vPta!x z{`N}2|HCcbx7b1>F}-0F%lo$GT;5MUcMg5ci-jWG1Af>VtwaAn&co}#*LN0#9RPpt zqg9_afj=d<_m9I3#L}kQRvBp^g)LnCl&uDGYW}KqwgjIUpsCq3U|G2V=AuN6K1f$`+qUv4wJ{5RvLj+We#iv>?b6dk#wy%{ro zX3-5}|Hwn(Z|CkhFaPBE@rIORD<(=$`FPt4SWkcO!ADMW@9o)F#0#FB7yd}t?dX>> zo_ne+^|h}T_-}!J!*8Ks#it}H6I{;6z-K-oQLljiDmXd7!ok%8%mQx8|B$FR!C~C% z5dQBR<{g^$vL`+iehbPU0QhiB1J?xcZ@_;F+}zJdlpi>+AL0qGaFeKiToBymAz_3~ z8WMj6!VAlVe170R;|V`kL821>7tY(pule;*&kL1<{rR=Lm?k-Of8LMI2=TykgK*{f z!SH{o58GeKfcU=`qF`I8?1dNs@`v>ya*degA|hB6YR9@2gz#IYR0<^SO)lgniy zaB{g+CYRB2IN5uCo`Mp&1b-M4%jM_;L2rWgH2c>8!`tb8+zIV>L7ZB3P1KXMAf$c2pPfaAs4esO@uy;1Xx(B}i z+$@0o0i5I#?Dqiw1NaT#Fz$5-|91}a4oy4mi4TQ`0;~mG6u1w;4F~53ZEgZTvzbKA z2j}%yc*3uK1?~SsaJz{Bf1;g1;+lxR2eWH5+m-kKcn-n;@xUYbpO=#i^@R*k{7>`?KTOwn zX#D?8&j5`tT<~yMx>0Ec6Y_NStjjs~ar&(5nC5`5%gkxv_9 zVtxfx|0!K4sv+1Hi{7$EaC`sDqJL9Eq9{lX1f4bdn66n(ND3kH6jJDyLK4Agz_qC$ z4lWU#23*@Hh=WT6rvcaI3vqCX;56Xcln@7(2u=g8Z6w6OC4$p{Bcc@IrXcs=3~3B)3U8VA)r{6z-&DA3D$Z2Z*IYc+bmptN zZ|c8mxP0+%jXySBZ@Kx^KU?p9^H7abMEQ)a`YA{`WwiUJAQCpZ{HLIWVWTU53JRMt zy7s3a{k74jeYl^-Yo@qF#KPWOLPD#%iDnjc#948DptM(r7ydpYDs}IuDJ7Aw>!YGB zMlCm7H;Ce1j|*B-vLx!6i_a{NzaB4*ej_?K=EE3sY*XyYIXCA>6W&M&UiRTK^9xNc ztbFn2izAX!i6(5!|Ao;Aqu|FRA6@0cb?f(vej2BllKL14bB!VzXNE{&Jt`tDF|qWk zB7WLTe8esl(UglHby~Gz!ilwoo5)DgGje~_PX|O{KHOmrN8LXP$JxDbLkPf2MEB~_ z7KT%p8(S)TEhIg4@3<+cN=2A}i~sYOQ1F;=y=2i_YnZ$cJ9kDWrJ`J!7QHq@mZy?R zhov*lO!L99rU>~>VvUxQi0#dUlW9pH)sb6tmom|3->&ZW|BM+M&3^A9suq9Z;w<_Z znNW^19Xu4x=F6x|*{obGkr5RaKr$?)nJ!|jkrLGPV-zfbis5SU2$Ik5YNh?&eMd*j0>laSkTF2v@tW19UVRVGy*ky)!xH>o(PUPvc?`xsVy zL!_h0LYIszRDsZf^?35pH1X8qo2$1_(E8^gHbphSAWX))`bgB+RcQfEJ7fMNS0^J; zDw#}_pY@qlwQmA((nRmrEtJ>)u3Om_Ce-166vC5*FwuBmzY*#z{95qc*K(D7dxx?2 z+QOp4+5@h`PKi=-fTPSX6B40b_v0ObId{8>Wd*vB8t=GCRf%ciN|;j(WjZ=esI%=K zN#=CZM7dBhQIceyD0k5$N{APVT{0@lTEwU_a<4C39(OTrY*K~=Tc;WAp00y@KaLe0 z)M|in?9H%HrVLA@ue7FH=?+kImgpm?6s08qeMs|_)`!%b(}kO^>p2sh6d<-xtB7HO z0KdY+)9=A6$4C0Qbi)#*HGp|{OT0@;EaOc}vRazg%l%F9o74m zx}qTJ>RSaBY6FBTaopQBN}GZje|kw0mTsmH*Q8r>Vq~{c`C^D|qKA?aTX&m-GBHi) zx8|?e5a$NtUkwTW)tgKICCAJ<<;o?ANS$)|tTRGsOS9ZFpN02AmL>-?tIky<*$g*|a+soqD0h+2>D+ZK1a8T4!H1+1;i3emrr$G>+s~?v`B3OOJ8wu;@p` zijVpfsor{wumK9fDLV3F1}M|`Bi7%Yrr3SMi1;yu=xbN0YzVAm5pdp%}(?8VrqIVE#UN!}G0R25ti>z39)j~w|r z;7(W4Pa$7dNi&~1!v%8+U5P%33o^cL6vZH(tVQYRY4PkEUBr>>_gWrC7MEW=?=edpBV+gx%GS3NbkS7@PT2F6WOzbq40w(seAQ%hjY zN6+Ke{J<(={h#Z48vE)SR5!myS|5BS_SE94P+N&(%#|Q+x$(OGqA@C_Bqk`fgrk$5 z{UH77vf1eXUG9Mfa~F+R9_ORud)M6%NBY!|9RjX2@`x={DR$UYaXlBr9i3Wi+jc=b z{tR`-gE{^CL78kSM?x|Y4+1vzAH;ImvrR6{7X)wtn)rUPZBg$!9uopKkK4i>@85^b z8XeZMN6PU*(9Q~wY!`Z|wO8uJ5A(|YNZ2cYKLGq+q5 zuqvI7SUnnX8n7CC=D4j?w@(yQC#{b?Rl-F`_KCQzATGS-=N&S@~ce7LM-@TR0&>|NdF*gK8CUKyFWDp0$_D$11Cdfxj5j7SZ=4;tEYp|2Sh@BSBBA6_@@%#2gB zfTuwIG2nhv!bC9_&CAW#O+j3@(((w5B`_$iWT7c3C2a2_DlYv1@`%_|It7tr{>P&IvHP%DWH{wlUb`px_%F&(7$F6@^Y@dTNIz1AhkW>~-5q+5R?dV@S2#wV%=Sz!cqrT@ltCchHq z>!GwIX|C&xqc#Nkws1taDa}7(Y9WcB3-!;IWiyAlAddBi8Z;-QU%R?BiJPlI9tx@o zu_5js>oR z+y>`P^8}2I>J@qWE!VSmyU1E1s_E8{l_h*XPlyqth)cwkAol>qG!~=4FR-4%Nl*{D zubvxSF!r7&J?l+ldDgoQv>KXlrb8c~pKankpnOAWRugHxzs|dp2yx%pLOd{%@^#fJ z{|6;br(I`Y{riBYQOjmQsp-F(r#v3>P@Z~!t)6pJf2}Q{o(rBl-u|wed4GS;dEy{D zNy$iVnUN+KO#JUwX$X=<7z@ zOSHifq8$egC@!6$qIbZVWtKatBHA6yr31c~8$~8zUl*Hui4OR=Q(Ak1-k}N%CKYcK zMCEsDC(&ekMcldlopU4Qk;nyogG%(233n;6mL}GTCZdwno@g|%T`h#&H(H!yU^jgs zYFwZ`7k6%Zg;UB=jprSmQMqbEM^@24vA-YMPnYE^xO$hb`+U1B;as)Lvqzkud^eDE zle8WvJFGA?oB?|E>w}f+ULwpQ_MkhA%oFxJ_k2%$t`JXLgz?8G;z)Se@_q3H=KT`= ztbL`rUh>Jl&-Y=!`L>D}2XZn7I2p#RMfUeI>^e9_NBTNtunASU4RAiCO%Crqtx+Ga z3#%lzMmC)VTJDe>`Bl=k3i zB7SE(g_?^9_GzL$hH<$F;u}VZRZklT4=r3RLTLG>h}5S6@($4=YJ^8#@Q!x1H4HcrISergeufgr>%JI(2l!IX(u&N+Rz$m;{1Mw{Xs_c$Cu{H zC}(ZoK-%sM%W-?SecE<73j$|d_Ccg?JAW=z(LD-j%_W^PfTnb^0dhM_1(E@@HnK$j zWme=WI8*g(+r4ZzQVnuZ-4p_+W0gcg)X_RP9jlm|1Glr(r(6?+GhWV|bd$g7_MV)x ze$f~9_?^m`bAb<2=G%O1OIF_5bo0L1YJJ+0&vs^a3tU=7CrUY;H@sJoJ$q2%PazFq zDPe`ngcEJ>#ZcRaHar7`I7%FJ$g3pSUZ08bGiAaRlbECf-A6jZ{^5I~vfmg8%5_OC zQEX~6ImEa!hbJ~fsrmwlis>8JnAK9z66LTWer{*s9@bisG<$5w;0ecs+=b^Xp&&n8 z(1e>o<6#0SUoY&%y@f(*@R<-;1>rUGG$rQXOd*dYHKgX62Kh_4hrb*u$2AG~ED&pD z1m}T@W*-L46TMK$!YyBGEM+Pvhf~o+MpR?Z@A}YAOI0$v==01gW$c~+N*rnzi9_cT zap*&YmEI-d<93Rb94D<$UnrxaFO&(gkFe8)+JseQ8CIf~yMv6{J=6hV24O9Sp=4J$ zr@LqJd62AO9Xh${lgQ65z^)z2c~?7;m+<1~n=M zd!9nVd=UE~HX1ZRAhAr{&#=R8h}a+P1SBlQ4GHM?M%)k~kD~$GK+_S2n2s?w?xKze zbt!oZ9(gP8e6>planxm~7rgzJv&&A@=dV2glTp2{!BVPKb_yhClQ8!ow(P&l_3Fq1 zLq_i4Dk?DaHba?>vK-^&Sl1315VrJYto?_c>GH~L+It^rq>vuK?_j(+p+ha2`a*MfjJ?C7} zkr5z2W>|{t^2jlrxGu!wnGd#CQv6BhoGzUi)1JR-w+!|z4(S%dvp8Ih!Dkj%Sr1ZH zaR^5V(s}Hu5S#cY$dlYUU9p{|6_PRKlxf5f?1MIF92LZ2k4Lm8=r6(=FJLlq$CPV> zBm~n@+HEytOEPkoeJxO+paGy^G?b~o57%brJ#3)XMcM?M2Uq)!sk5<$5Qk9z6IWTe zf+Xk|b7 z4WeBC_Hff$c|v5t9Gro0Q+DUlnCpyhN5W~f8|!JsIpyaPYaf&BPoFE>cv>BabRcaC zzR2@ikmWSWOO<&BQ)R2+!g&}UC93+2VejZ)eH+|-!>a{Q@`LiFt zlAyoyeE!)WE+bdr7}FWfxPbk!KXs8=a83d`;pgXxPN=C(Cr$tj(WeVCa-A}Z67Ut+ z3;PVsTnk`R`#>rZ@?&qGI5K9$pJAnwbE z$G`0KoMo{VZUmt!bXwJVfM(YN{FIh0<5{0X@e>ZX?))W0N}z49#W zNYPtHSQ!)9-GO^S3GN1Z+%GJ5oU%lvZ+SZ7U6bhyuE><0fj3bW?40ebBcbT3443Xs{V;9-iAW7G>pCUZ&R{nsvTWu5`_ z<(6KTldrp1%Kp8GII(U;uLNiZYU+i$ome-VznxgOq*nxI5$q@QaIlU0Aj*E%U>w`L zT{akpUg>Y&OZWESnnwb`J$-RiiQ}1y5XUsztR1C0F6*WBpV+>fsmgPZh}9D*tVvra zOV?fYNd(*g4x|>iL&@qKP#e;oDfNGYz>e>iNu1Ta1DsE}we&JaB1S($_3v?l+*{hm zP$27%EX~a&m$E8kF6jX2%_{AZQBW6kDN9}Hf_gz7h1&?JrND3->P4vm*I`iX>#>4% zwEQ!H`UNg#F#v`0vPYZ2Dbq_MBsWArKl_9ew<};6;>yzcJY_mgXWu}cZ`QrR*m z(zoA#Mol>5?Cl+?llH?YM%FVg3n6Kv@ph%@S5C)}$Dbgl(HM5Lv)MIyc>PD;c@CSN$QLT%ofRGEDPs;xIiF3LiPwzyMCGpwUa zqF`8O7sz5NyHu%MAlwIq!yS!ktF#C1bZSaq_4E&!shB|)hSBwRB;#@+$k zUyu&FL9WhGMO@GLBBuZd|FM3Stk_}=S^wPxjh)mIp4@! z*wa{hl5t)hO-|Orz198ry)00GOwZqbCO#w^Va5ATjOp+8kKU5ylDdf(LaqxCBE1Ju zV#q^9K6wTYRq$)vo}OnAXnoyVNHx373Ny&AKxOHsbcSL=K*C6rcDKED5cWW3pLqnF zR0YV3@9buL0pfoTGW)>W5aXCJj5p73_j^_`<&<^boWb!uuwB2LcF^`}_z&#Ro>I*t{4JRtLgC5Tv(QFqvp9vtJzfszB zS;Pi5l5}&9yVadn<*uUn+dpBi#?{Y~8?b*62}|+5m@;)JZ`@TdoEcNEzz#&DG{nj= zB%ztz=4BwkAwLYN0^Ad6jku^*=`gD!BdsHL!fm5ZvuK2w9Z^fhc6?9^ydtN|r@N=@ zeSclFK0o5I!hPpyGh0wAjW!B9F33Et_bWMb$DZap?7l9E7y4qE<1Ec|?C!e5+M6Zp zzFKMek>SQ@V|UND$B}=6MZ=Nz|L)EG=cAbBjg=jP*)Ql4b@$9J-ZB+%C52LT)Dd=H zGl9N*T<&7u?jl1=y!LsAt@&2R_S!orU*Nog_8G>AC-0y-9H%hKVjGT<6*Wtsec#>Y zSvBEC)#e)`X$ec3MbkTG&Mb}RL=*u!}d5lc9cwW!J$`-Z&lqH(_!@9{YqofNU8S2XnA5O0)i zzS!5n8p@&9HeaF7LXXpU2=;R@*BTEWkm>WDhV^Rk2b+()FFf?0qk~lj{8q1i+TWBZ zqDw^e^eyG zY^Kvj)v#fN-FQ$0`hY+6!@SO}vQ8MLQY9o1z`~zEPcWCBH?*@h+EQSYkHgbSU(!9Y>)`JR>>bW!27K`fHE7WZZy zXZ;m;QtKHwq?5oLN~(NVrw{R+N%S~k&W!b9eUBfx*Y+>s1+l{SVF*^RT)G+UU{1ty z$?Nv4`%Va7+0yU7ZjWp^HB}y6SOe@E(#QILggI$zG1@h;WJtvz_#_LRQYeLiG&h06kdQ5b( zIo%vV9}@|ug2aK`2L3#^21|}zX?@o&E&cf{Vbh2C^u#-#-%7%3;KceRXJY#g$&t=| zP2px|&CLPK&+a`o{3FO!L$+jn)Xe7i0Dbsb2Y2ODeG~{r1Am-x3lxFou2`}e5;1!7<3<|;~h`9^Ro0-P9DY1SCeZbt?}!{f@U$l* z?zDj0JU!9hWAA2jbm58kYk;ASf=}sS9CmT(r*<*4{^x#)m%pUrSuCy8c1IK;xh*Qy-4@NXe4gXX^`n;U`pgmpT0mhA zG+m{#gZc>F4N{tUQqTVRvXs60vlL(?;-sA%&k4?`!Nxa?(wOVdE`RRgb5YNi zJRg+sdV*-#^?6B2zybM{?(CXCMwC&e3uXL?AyZbK7X>R;iKjr7ohgTNak<>E%aCEA z;a(qfoMyPC80Dl3W!_V1;a7sJ04KKGYRWf#+3xIg2*+1buhXOGui-vn;j@8@oS9R} zwKv5RX>qZAzchlrtY=@oL=>jzO07l)_bqU8czSrHHVCW)XgisfJ7&+@X11e-MA;kT z^S;3QpgfTC!P2cZ!xCsJwmY{@AlWs_C2>mtM~^m2tWbs^K)e?0A4 zxaok2j#bgs;%;T42CzG#TiKv^zbqkgnw`B;OVlQ?m96xxDFF?} z(x=R8K@ONY6EHoxm!NGXjTkg_!pR-w1H5kmtWfH?B``Y~xd{o`XF>Y`t+{^#W&CzI~>Dp^4BtuH=efKwLskCw`4>ql@db zfAl;)ELGft{nHEcLM(805^{MVYJ%}wFY=b3-+uJ`mbW5SO`tyd>qpEIq2^36pW|K} zI3u2Nu@rwUgcBf}*DT!(r`85IwO-q!lWNF?J)3JcGw0y%Ev7;NXEp*SP%~OOMy#Ah z!D*Md1--@=vUza*%!ToJbIX`8=xjj?P zFXAP>?uPDaLBdB3C{TPdN$6JUSA(_dR6iofsFA+0?r=v~WN?LKnV?gpzf(tY-Ey?@ z9E&&goJ7(pXv_pFK~|*@MMnyAMWPb)PwGF(4KyaW*&AI1v>;__eS*8QEZQXGXq)|{ zKEYTjZPVvx1?m&3*xoLpHh!3!P~`x0b1dF&nh(kLbpfgO&0t z{eGBtSy{ruufe9Xn}n_Ibg84;n=!m$73SIdvXIBb>$mY##=#lVXm@pVHqeLUI@}NlRz65eA&v<80}*Q7r8UPve_#SmMpnWdT)9?EON#CJZm?yb z)oyL*IPo~X7GJ&==+O{MRLW~-q;yYL>nT%qhujFZPD;yDIM3m{oe5f9A%_Oq2CJ*Z zjiHY4nh$M&#Z_v(qf2cBODUpEh7nH*!e7*TXRmxN+(3`RzrZv`0S%T|tQbIP3&?lZtB|Qrbgo{^bIVX~)q7Ev&S`G!f`c zumgZxSA%cX1#YGw0T}W+UKj)DMq~C(gV> zfF7WfQZrJWz@6_8P`85pVOKXfktDAgTzv~4L)vnypnc`P(v~2f6h4IbVfQI;UnfeK zU(1MYLe>I3C|6PXmiarN)PgnaWd1*07I_Kd z+QQspF0kVRUCFWNIJ9(4@6sN$9UBX`=%>rv)iY*~EBb`0^Ob;$gD=}-sIhLUc_6mQ!N@z{DTL5rSV zz6UUCzF>hd5^m$6^k7@rG-88JN>S?NSi}4rcO|=ViWqSrJ|u&jnBV&%Ae+XVL?)y% z$1p9MhEdTxq{x1h-TXaRklBw2Qi0c^m+#jE=2(sa^Eoc3#ltMZ4GLJ~9b3x4KZ9_y zjC${C8ctsPy^m$JmGScj8;+&0CSSo_3QuAwWZ^c@EjqgR+eAUz7ktKR0fBdlKob{n z=ByK{-p%e3EHK?O&y@kUoZD&?AFYKmSPbBNLz=b7@os;B_So%W%nPB=8^tge^MG6R z3^d{2Z*Q&x32A;!u|qswE`H7(y3p0C=b0DH7?G)oQhNoUH<5wf3&n1PpU(i=qUb6G^ya$JZ_tKFBp`=Kv{H%RJK(f3 z@WE;25b#sup#N=S!k>BtO z+Ae8%RnBAYAILXetK4K9T%8bpt2o@$Vd*Acz{|^mTSYT;Q zl+VoLWjnzVJJyY>3h3c?W7@>9xKebM)Nu}wgZY_RDo}XsQGo~GN@DZuk~197bI9Jsp7eM5bfB@l6L2Mf_P6-` zTIikDQ-TOk*-_x36NkvOWbZhk20K#eq`qPp;Tgby7DxHwG5kBbF3kn|>%BKcLVg+c zXks7UR`M&Fc~=O*>&T-%^sIgINFfe)Cr7<@g=pjAotfoTD=YrshBu^2zGuLJIEA)Y z_b&S;=rXa!BIa12!FrhCc@JRenD#*JF|DRq;6)Q;#n8Tn?{Aq7-e6fL>^O=%8{cD5 zM)vw`(8cdKwuotsFSU1xKF`V1178P=7~06USHu)ocMVd|;9IMpxv$R^%|nXP?F1eP zj+?t^-ciu0&N}Q8ciX?Ej7}TXh+GY{4X_U){&3{noTG)UMmHnS;leQ7 zheA1cIYIVLj*b%-Dc&tHl?D`pZcTgS_TWB5HasSV5f1J^+Mxe>w?O~(&tu#`Pls@I zz`7__)ajr_E(WOWYqS-c{%)GzmRs6`l49@dy!|c6EdNcL#+Uha!YlPO)L(RZUiZn4 zq7DN_*z;O*xGCKPwY(1Q>c+1HEeF;i2D(FE0k=)s16{=^-@HBjg zzQVVBNcOHr@3FI=iQtO#7no8R*kf?z%_>;?rJ22CZ&X9ne%bNdg;5O^tlv$N5Y<{C z?Byl;klX}AE2ABE<5-YUdsuSho&^nzCJ0{BSr6HvukAFfZa-n~67GP?GSrdz9cXWv zU_x2P%}DE=z(s^v3-j}0rNs0^_uy=v7!@6-Lz??V$)W_T&C8o-0p<1#!}4Iker#zR zWdiEG)y4A^0lOgo!YK~qAxyd zKNfBhn}hwAMk?yD9h5?7pyMUl!4o3bG(W@IYehPE$1V<*77veP?bU?sybR|X2{~OB zk$G9)@n1LZ?#uclR}B<5&_|ilc&hPIfufUd4RE+R5@`Z$lKRK;u!Htvc_#^WnK&?MgOk_XOXqh$nB z;^LDT|E$1six}ifNDsK`KFM7g%_{q(gY%-wTgRVSmg2yLh~mmsY#@ zz3mF@Z8wWwH6}9%e8`&Bu=`_O*s}HOj#4hd$Jaz*?roYF- z^z72O5)+mlb47f3XfI(0K60~o5C%7J5XZIICqn5qcpsj6(%und9mK0=2Ly`st+fIb ze-um0J~|@?3PZgp$~%HBy|f9m%{9oylO`cYaY_`lDt8?DB)64ubRz_`Ak3Lu?e;D| zMKuRpEvx$4q-EpY8z;uxkaJdUG((-n7;96AKFQS{mcedhI~G!drDT5ZO+vXQ+$5Zi za1V1zdj~$rZLGZlvJv(KEseeQ-6f8%LrU#7;xPM2#I-X2;2iDtWwfzjuO113+-Ux z`~YvK1f7MTm%jdn-big8r4;T+``N9VDm0$$Txt!d^CSYE~*e! zO`UXr85JFFM*gld!Ko~o0)0NbfPP*@C+EW)G~)QR#YIO(oCbZ#9n{}}c3iY>BEp69 z2A|`wy%_03$So_TlRhr?@(_oafb`OOS2d(B>G-c?Vw*PwKI{ir@|eoo3a7l z-9dG#&GZ1Y{8|u)6ff*DLT=2<V*=jc8cm};QY44ZsKY<6-CON@`DgL0(|0Vt3-iMo zcn@q<`{9hv=n#t`eZ2Ih4eo=rfjMBecrU*)1=A?X`nNj6J&% z?C%n0@z@Kk0g3fRm2`syzm{>J@$kjWrdg*%XN+>826ux7UN;Qa`$|0X(bDm7&Rvj; z+h*H^^BdSXBnofiVo!n9y3G+3;=psn<00@O70yNDD6sNKyslTf@%@GO^9bWpv@dXB#v}XX}EpsR{XWEk0a#njxMrh`vFVf9IPW?xijxRwy<8r~< zb%4Na@y2_wllSMboaEr93t?a}E66~l81v@0ygxK8@qI7-3%hJ^MR&trDuKRQKx@^L z0^e4F^Ha~C|B8~~>~DmfRFHM>3j`)h%8A+6Qck>f+XeQM#qhlq_(sD&y9m|=XVAZu z=xK+ru4xC_NPpY!lyM|2KA}9YI-y#98uguU`kaV=6C(4N*7CgSxs|(W)sfpzb24># zh9xJmKVAi8*tc&Ibxez)rF?j8L3Lf_V2)4hOASgxM}N)TbFR3^K$AKquO_Y%ULiUU zlNPxB!rIdU@+!B(Ew9vCY|Raa@3kNJPRVA9L;nV0buJYD2c9l?*VioIbCcdkJ zWb7+fM3_?yEtanu0X9{>(Bl48tPERptYTHoBzx5X8M_tk(>y&(^P8U&5jREr40iy} zs=au}>`f~-3vJQNXJ*!pHa;JlL3$t`m`k7elDKFK(fJQcoR*^tCW&0M!qD#z_p}!F zH;oTyGH{o7%FIs|7$O<0G5zdJhRqD1ri1m*Dl(OcxOI|5Ed7BjeKyAW$WCYc1fqH& zfRxtOQXgk=JEz(6D^*=mJy>r%3HSAsijirYvKn1pWql4OjREaJaK&*O;1Bfn;jl6W zesIce3<%#<;rj@^qoW$o5q;2~c+ewG~0U!%|@P_GR2d&N~i3!uE0PsU?Z#fxEAG=7r%zH@spfctNDr`o+36M6h$%)#Fjua zp4zYvV2|>otpfNk)B)CJzb(z}BIRgr0$fUvt%Ut+27D<5_KJJG4nE`Ubx>XGsogvA z&Uwa;@|D?O7r1|=Fw2gWycP1w15)-@BTo&$n@?*rjzI{tL?4q{|>9b%;P z#zB$Lq625juA>GiF~YBrn0C3~Mdh+xTFnlyrAl_`WaRVG%ucu=w7?2uZ{8#`-YD4@ z@c~+o>*5uO&_-7-0o!-Pqn(+OXV?bTq~5gK@O>g-)$7JVx>Pa+-Y3LA1NLtl-;&mR znN7nT)X_RJEm7?378uX6?&8!P__`sU%fX)cO)V+MTK0!tFA) z2`?$^_Njq}5j#7EH{S*MV=7n$0F|PREm*aJwQJ_o0>kc|9R*!?g}H-XLLMPK!xFLO z1CeT~Ka6H+q}tHVzph0t?V|O!`u$;7CtwE;_N_Aclz6nEp3;ndu*Wxp4|zm6PY0TA zzZo&D4Q}LfzQ}nxEg(YIMta|r%FwbfFs7we%yg2*IVvf<&fW2x^eTLZsPSyh9L)8w z3~a!DhJ0tm%q5aD2lyD&^QaV{efXNTaZXx*PFewX{%Jd}?J+}*U||lH2uiTaMoXG) z8&!caO4^hVsah(h*aR8b4g7-@2U5O<_NAq#R*S|;Yu<3mdq%Q1KYGY|L`Lc0dvRzl zUi!moqCFBoiE2usBU4LnttO?NACb@+IE~0jPidz=h2dT2>*hG+HwS){zd`RyM`+#I zU2`CZJ7Ss}UPI$s=vSok_Ut_?Hdhm{ENV;hFL`6{oKkozeUo0Z2U8m6@b9EYhSzTr z?CZB)aG~(eJj57zm%0zCVWdnqnMO#(Uo2RFp$(b{)?xOkHo@r;kGjG|7 zsnhCqn^{SVynN*~u-_j0cLl@Be~>R`N)}S4yxQeV-dPi@0Pi>}=zF6)RRNbqh4`t2=>9Rz+qXyJ?K!>&DDBcw z7*04PuJI#*(SUt;eeUL8pRdW9mlb%*88D6bo>@A#Kj0IYPI_nHW9vq!DWNVf+C{_r z^J(y&-G7sGUDhJZn>&qUd-A&Yyj%FZYP}9tKeX>w>%Zn#2to)LDj^Je|Ea7BlnEpzhb?2$g$X5QKCGc61HM}H#a`4=Ux1E7QW*w-hmRa z>bVd?#rV!)=f+SEYTmKeqM8E^HgzY-j)7O4nX8G1|BP|UV&GPOhpZ_#uQoz5C9*z; zR&0TjY(!TzK?@^nOVB8Tjk)8vo$eSsNuplgNptip&Xg2Tit-KXhy4?JlWxq8Wq2hjuMM zo>AJFOm>|YRlIHjZqb_z+yXcR#O`qm2=Dr$ZUJ(Ozsd2d3Ou(sziYuSaEtTzaf<~* zxW)Mfpa|f8VtA=@2l(Xq9I!(|P63?Zd``T;CE$&VJEu8k0m2%e*43okg*Qe3Yy2XI z!Iv+I75#30bd8ne~^YVx3}VJjr_v*3;wQiz5n=dM>mFoIwxYj@T-EJEAUOZra1DSNUPmf;j$(hdh)*x5lUqsDb3U}D>a>)%mpX-JY$Ei{+plD5GvfPQZVg;vOFm1NTzY)EW8vn);!V2_<~N1*AQF zB)(fv&;8JL8~90fWy0Kr?!dXu+$jWSx^!9(NgI7#irgR&+D@%?_wt6VVAlV&9G-w+ z^kBcVbZ&`#TIRzt7xZEbyt-Oi7l`w!KL9&?VBLPJDj<`BS#hi90Qbomy1{kCP#bv^Db7#5pXfDD=UMa$Ds(is(_m@NngUu-s#<;IpT@(}J8 z32^Z9zQA?l?L*!Ic-14N(ZZ35l0^c>Fa#s?ffsi0MNNiazwo`1;LAklKPr0!U$j98 za>5SMavo3W-a2`x5A5#LgL!fPX*oZb^VeHn_ZF64#{Y${sq{Zs8yP?@^Gj{dC;&kVLxt2l)tJR4&RgjeVIVdhl=eTfd^4z)-bYh%|>ld_9(4p ztg6Ho;&{v)$_7FW`x3_7t#v%9LPairEEpV=o$U+21^+zFST`%#hiAR%$y&RUr@((I)7gJ%28fL48tjFStc-TB#N?CL3$Fq#_#d;IYYxR?EWzYBC*h2K`D z6u#DyQdo8hzFAN>P{IGL#cu~dtf|yhEuwgv?ozH=lwV7M7TRmS$>04Iep?n|TX(6% zJ7<|_4~jg8{}Nu?Z+9F3YtL{q-kqlOy!bP$KhUY}p@9eOI-U#fGb>LSM8LaI^A2_e zcg4*UKm$NTEZp5-PMUeg)^$=SrL`4#Le|<`_~MPD7ITQJ?I%%7C)`1V*fyGv+oIuH z6VfJ;JGYQOYre9Z(TcA@y*&!Vj9Tw=YA$Itpk;angK}?LfQq&#+4L?^{(0w3Sr5K~ zT#^+f6W)YJTJdX61#b8n%e`-Gcw0LT?WLPQL{~ z_e;>;ZyNq9{)AczU(9B*+x`#Q-UY0QGwmCHCdniOP{DYj8{0?(m2F*>T3*{~gOCIe zTWdX+cCk}++qd1;b=7shrJI-xF(4uv5vjP1R;039tE8B1-?aqg;8}D%w${a_%DSyZ zThU@g|G#@C5$s{F@4K$|?{!ILo_Xdu&2zYqzq>qCM$i8L37TOVgPf-c_fpr(H1sFTyDGkk4tr-cY(S~@5UYJ z`7XUTMwH%y2jX&D*Qrmj3x>`W2CF?5M$~BE{)?}}5`WTcVr4;wOefjt$-+g*EstQw z3JmeSdIx*J`}+EU-~17n)q57`BqYv3lk0(T>{|*v^gY6=Q;e{>E=blRFAXI7H?oQ+ z94TPv0LSH1NrOtGWyk&?jrqyYcu$Tnc{I6d>5HY(*Ir)6Uy{FzoTD|1a;%o;d?-iU z1wv>!opx(dbdPx@pG#+Fs+$sbQ$5SeMqKWhui82KfS7(6-I@ghlX zat`L0sI+X9rcbYSo_(eq_92A-k{csg-J>?yBIqpS`Z%dw)lPaAbYHtkXAiK2B;Qx? zd}Y)9;dYR%ZsP8dm}S(Kao=mpkW18-%3y?PzX+TpVB-9sHE7`vT2lfafV-_xWPYzb zF1bAlAY690Xc;_W=)^ud^Z%tqXMdzc(f^ArB7Wm^+BPSBLwTnKGEbv4;sZNaglP*# zMcoq@!7RbF}XWD_-RE z@RAnIXRTfRmY31&srcpcvUw+ROjO&gXJ}`L1MU%_VDxI6mF-zFkd-$rTR-a{Ffib= zpBr;87d>$j?EzcBN59FAW>VRQMVgO6W#)H2=fkOIZV^7uRsW#OBCF{34A8)*T`0P) zu3vB!^mb8@x8%SRw<%I@H2E?R{-g2&GqP<$?$?Y zAU_|-&Rp{F+k4Nolz1IgslF~hJ#~lP9>$KI$5ZuOOGGNh{+G*Ll;?t!rzDg|!?qss z@PR1oNeWOHw&#kE)={oc{U|3?OA6ac$kEEjXTWr?lS3F7wjxjeH;BK zv3DN+ZjahP*XqtX{8gT>dlwcChs^bLar1iduvnd5$#K9C=+AWX%#f$#q{c1$xJCJw zX4T(+x#{edkN2NGeDc`w{BtLdAp*z2kp*@$EFGa;k=JpxQ{aJv+bTSuW!I<7pJti8 zb9UmKwR6Dhzh4-UAb&hM3c=lOeq?^IF z%~GB3(`;eM(G4cyo0;541(Yv3!dF;;*^#W8mKtAvcIFJMdwoQ;^ZER#qEB>jp)zkj z|7IoDWZc4&#~jtos&L!$&mBAdaZ9xmHV|mFFj$K{lv;YSM_cb{V~kv0;M*0Z-$u-E z=~J_S`&ThDS!!W*{%_1a%?T!aW923k=wp(j3QWoTX44$_=1nMlq)C3))N$5iHz$f` zvASw3nVn}%zp+He{N0)eWbO3S`mK z{BT!}#=a=+Qa|ee(i%~bWT8#_F#7E3-jn>G>cGv`3d^e$v;&aO(GT|l8M&UUa&gM; zI6Fy}4HCMbjI9r=je;@aPH_ydgHW&AzGL#I@G53`lRQyZl)!fS+)Ox%w=3oA6s)M>2T8yV)_=BhLW-UH3On=!8u?-al*F1pD1vX~%%P zj&rl?tSM1GU(wsq9jFoVylJU3-dtWbqkQ3AEIQgRYe4tOCwiDt4IGhaN4?3YAHqfM zJ)0)ePRk(+kDpc%P|TK)_`uoIT#A6q<#o2r3EOU^`Y^b+oBa6*(12Nb}jRUiz<#Pn+nG&6LxO55!PEX_DjpkIfiKZJ~T zB3U(hzyavQhRtNvR%?j6Oh}2adA|)bN(+56*lcW$y`ZdY*!-$Nr-~swa>+-F`17!) zn9%HjNQQS>e@X8sH(M*?{w1g6zR>dxy(uV`-Dc^8Rg$cgt;~&4(m^)g;15 zLy3VIW6WEhh&@DQIZ)Ohv#`2KVXVHmS+3E$P0rUklVpOlPCv@8um=BJb$eY?XC3u1 z+)HX{lCvnC&lLI(RbrG3Qjhz45XU8aXP6y#!2^U-A!D`TBPR#xnw-mfALYuMF5d-a zJojl&i|Q$}K6092u`5Tkfe*z?a=zT5;c{Db;Gd=X*aKm2&t&jPhuM) zVnXQ;EJ`rEf!VC~jqOk*!W*8f6hrNQc~MNl8-%L@ZLn@#8rdxC7NkIvDDQ29&97a_ z1!X@Eb_=j|o;}Y}i&YS+W4zrwFLd4d*gSJdIQ>z-D;hfH<^hDw<{CiJU^E=zv&}P0 zSBT*98m#AO*Cr_(;;jV2-pLboBce(}+V>T?1h_-lkbXc z!r{aDC$}8i-y(SqJ>h8HS6RA8TAfv{Np+m&C1)7ryVfxB1UucEUP zr|q1wcA9$jb?Bnz&3&!)O1%HKHj_?tu9Hh`y_|4K_8pYcq%q9hAkPomm#~?-o6~kl znw7P_v7L8kWoKwK1J)#1u~1Z}aJjh`f8zQAja&b*IiWG|@G&ZAT2^T{1M3_s%5bE| zd!POIwc)&+xAjUKI2_*EAJ#8qM-m6?mo^rQ*(U88UyXebc3g+;z&+y*mzq~k6#8so zu@?&v9V>!(Et{w*Q3p%?w{?7sbXJbSU*cMHPVO+tr9G;K+xiT`GhEn@@C@Y{W_npJ z-y|WL_w=F&)jM(C2%rKy0N=AIXX4vq*l$x*qN&|rTcAu(b@^4?MEEGt-m%UP>qdAE zb-{Xlu1-|-ZO=9IHpXuy1l6t-#K`mTTAiHkjaCjtKHM8OZ-s3c<;{)CXn5(-c9Y?` zc2n;3lz!YqKmM0Zk;?uhtOWkxaW?!xcx{a;{0!*Td6c%WpYXeTQr`d~(I17mYgFNV zZ#XbYvGYkg2HPKA3x>N_Y+rlpsL7mH4+}hu4t&vs4h{w0{%@5Og6}?uQ~5m(1A{9DIXn<5JCPHpBm_l495W|9Ud=n z+;(u=+$OSUlfP%+lThgc)}=X`t&C`h;Vk9hDA*S!?#Gx09&IqHud<`VbEf%K%m!_T zsj)ccI9aUf)J;#)siZZNpP7DIBlJYwv;^&Pa@m@J6^(j{W3D*l7$!!jo90@s zTX%Gt8+|&9J#89;KA^OYg^E-Q_>MF&N+7A~P1R1m@P10WL1}uE(we{~ zTYwLV>o+tdmVBVy$WKx<3_Jl{JFGlbGAu6Dq1BYEY=-s@HLzB`Fs$XPf!$^pMK))$ z{Qxw+sb`7@nUgQHF`OJ&+c}dO(UJ1Ps}ZX+^Hx&oj5rfHOc`U3h1c#2IXc= zm5fG!$VTbhzi4E;r5WVOKK+Tf#*FOHe)&%I8a9P2x3gLnT1e7D^fTdVgyv}#mFhs5 z<)4Q+a5LuGeo(o!DI*&9W@m?Khs}CZUn_Y;#9MQK?T`}~lnzv6ctd^YnrPKGDw(i40(y8Cr+ml7 zgf}C&l?M(^%9{nv4_94!@IY4_uddfD^eeX(G5ETwI@KOmKL$@e?Ii`gI&Y4)z=mGw z;WOFCrE|(pmQ4uJ1Z-8c%TYO*DJy$1WA##wv`NY8T1FN-aopZ!XoN4yBa)k6?eaOD z%9Cr(9yEGY3dhif@AzKzy~_RPz|l-j)?VPFfJm$;@x!x>I~Fcqtai>jF*W}rzP4OW zYkpz@G{&mE*%)u}?s!Ymd}WoUipw;kC`c=DC$a$V=bcT{@dZpb`w^4Ta1* zG5-MUZ21@W53zhKP7RNx{g}&c5!&V}XSlbN3u_8mkobs{MuI-br?yHVMb86h6^!>b0sO&=RP(?l0uBgL~R;KJQNOCu=%P zALaAPArW)^7V!c&N8;9KM+#B2Z-lrod{H33ZMCu#6(VKgzo6HG!sIgGl?D_E6=(F~ zcaw^fskcCjqe{h;Thf`)yP3h)&6JEtD9QParnptfu3<{!ruUi8KTJ8<;aPhMI$qDo z6waqfR3<-?sMMWK;dW|1EKBycu}9R&^Y^lvwU3lJ5}iz$*g#m7{_AW^8GK!a9!JgB znA}qKTlqJ489eZqBcXxO{uAaJ<=q&(ZwmFJ#uV5ipI~Gcrb;ENutrfh7=!A5su7#sWraH^WSX2SY1zf<8DNYX0ZjWQP3uDfAngZJo`s$#SU zbkjEj5txTYe{d1)_u*Ywj*0;5_EwYSg5(F653WF=! zZbz6efHsi71M%MVPb9gMoFguY^T-N*v{^o#4E7}F;6tN9`G)3_l}^arcXS=spd0h_ z>(6x-<@J!XDfA6SL;gD$A&J+QF@Jz1J%ifOdApzKgH^uk zYR-Mp?8qw&F0HyX!ChfJ>NgH`GkwD)$pa_8fug91*5uNv&}y>1D92I@@B8vx`hKq5 z7w*k9d*QKz6LvpZAZwlXw;VoUOuKgn0olkzjsbaoF;P|^AQi&GHK_e#O$@%>d9X}HxDZm zWyOqzeA*BbjE=k&%+lV9{R;1zggC4jUR`e_x0TP zoSygXn3i`8y{qMAzFPirRSCOx;JB{5)c^R#`=z=x8|zC4N_Z^R>3&_OFttk=ARyhe4IWeBe-`?S}Cp5hvE_*DgDDKi{mQ7aO zl3Scb-33e6M-J+G*|{k(pNT;4Yq^rX+?+S#WwC3VpyvDH>|dpcQO@YaVhaSdI!2i| znPLCCU){U!4548swB}1^w9$QS@RLB3w z<#25d>cvInLq+UN?YfE2Yv#Iw%1bwoXLb1F#oBR6MbBOR43;ZcF-xz(%E}^HW=)Vr zX`z2gmZ;|ZT{DD%$Jw7|2*;OjI}2ZM^3f!J3&z~~ch}6|;A_|A78u5aTM%%Orsm!M z!IzH_R%l}8nnS#Zm{c_4%-p+cmG%0QRkyUWj~X8HUCdE639+}H)+2*hud$*~sEMTa$2 z`N~}EY9pa?kexJe8&`hJg?({hK(S65}OTK&oDiORS0SqeC( zmOU*Kf#Up3kXzl{V*R}`?}3+ACC{JFTAEv)QNG>8QhGycz2qX7yl4+6rT;@t_xEPs zcHNJs5z><-Cqqx^ot9^i9z*H)y^?o-@{*>|Q^$MKQzbL_?!1QhTd+3MB`=xJlILIN zTK>^uIsS}a!BoqZ|6Wb;bC3T+Y56Z$7@?ha^7``yFG#6t4mf@hL8;I=`R*JcJ3d%s zUR~w8c%38LZhGpwev$Lt`6UadDUs&y!yI$$B8T@&yy+v{O^k)&P@L!CqZuM>^Tq}_+z*(qgJ1gzMU zRT*sEKj@rR4p*~j6W67kw*oCxp-hYbow0&uicM$kxYK37&3{-1YByr_DP>{?bTpa> z?9GanQ&WCP_V-i%xpLwttFHqwzasEe1|=_1bCXw%YNk}Am_kni_dcOg>FrU?EfdN9 z&mi@z6+I(+zSBqKRFjk%_+Dyvf4lR(x_p4<*XsU~t>qfax@WE~@2mM*9SiF`>f2ppN95_R7e`F?(d}s_olMP<#Na0lh^y`MwGAtUWe2|uUam_G>))@buKHSTx#Ga;tKsX zhki9Na=KOeg&ZRWepjGd=mcitsv*hm1+hmrN6)f z?rJ#@EIWbN44RmAR;=_s@cC(8XI(7)1=>HZfy0l#=T#rvdKpCd&` z-lY)?KnqK{9g?lU3ddaO^)Cf#3AjB-n%2Y1_!iwm68`(tSW1mG1F7Z~q-@e@(i%k+ zmT^~6;J@)+@bZOQLO(wX zzSME+O!4`DX2yHUDmmS(c`O-`1s%iXT)K1fn6B&{t{n0!&*@)5hVU)8tG&#pzCX2m zm5|=T&fI?boN@TpZ7CvpmGr?jM?&K^6t%xu4r65vP zsn6+WT!!8HsM8o~Wr8=^n4DRv%Q zL{@-Chhi21C2JeW`AB0KT9pIALB6M~N`LQ6vHievW2F&%=h`-7wdy^}E$1=}=x53S zZY=P*HJYJ5@uGsI`*vPbNJttpuceM$;~V=v+X-&bhnRM~hLc4=^26Xr#rI8i$mGIE zo^CI3Xxd$sg^WjcLg3g$?)3z6fu!xw$~_oI7;dqY}J;QqWPOaDTvK9aaj zXLF!gu92P-&jlMZ=xc*o4pQ9|^c=`K?@50CQjM)@=`HI)NF<%_jl@isb}J3ZaBIwA zFMgTJf+zKr*MQ_8#UR9<)|!$mZZ`Q4^|jYZekILr%;!z6?ZA)mR&AH(9rk)?rNTS> zlZV@)A|32S!U)~InG=I|0V44(aZz7ke9C~1T=ow*s+;JpXM4$aMk5;B`D0)8saK5|`vA3W*_-B>k+#28i{Fb{|p6q^% zQ%O2)c=LwnX>V*shAIR4Yw3HM^kdA+*T~nl`(E<($n6gbABnvbfjv6Wr;aN;yURmYZF3Uf3s!=gRf^`0* zBuLWy?Oeueoc8>DNXq8wcyqfvlD2n6E7<}Fh-;k!9t5}-15Ox{oU!%pvGVRka_s3L zIRNHfYu#C@36ke6umRcPQ*Kua#r#8vk0hU9Q^@uS{szA@?!7+J*HxeiT_*gyPV_8vl?-b48gqUHHS;#$nJWql^!xM;S-1i4;^? zW;B#TQZ^SD?LeE2$A3be9f1EpZ=l$xv|o-CL%XH?{RRtK%pHDBNPc&UL$ zo`jgOp|%dFM!T_>T7cn`e=MD|@^dExMOsMZ6)CiChFNPM?fb5c(H+j00;07geEHO1z5@lM^ZT-|g$ix?p--F#f zYJYwr#U6DE8GHoc@#*-;8hI};mFqCWxlEepc{4m}rgHEDnNZP)s5i-)OA5;QVVM$b zUAEq6YlA$aA<76{?Ay2w?Ivq8{aN{2V7q1Z^V(jTU<}!ihRYAE$;saMPijeAGqr^B z?XYh3C*t=)UHholpU|g{1ziU$E;r_$G&4pvpwCSYjopO)?i$@cfH;^YUXf#}v6Qq^ zpJ}BK>MZ&9%d}smwL|J{>;bBS?BXUO5&&UAEqBRxTf}4OkL1(+kJXj;7}ce{TbCX) z@&B*7+)`b$C*1AV|59B<^+;nF!UDfMI?1_39RJAOda}!<(W8;enE%#tFj&xvSLqJ7ntQb#jZIP8tJU+Ca%0$=7M6mP?5>%h(* ze#5kQSsm<@>wuhS<1t%0n9<(B$hReNzqHGcS6#!HrjpS#@^c^N=_^0UGyRk?7W>_= zToK5dE`3E?rM0n+W)XMy3wM9rW9ch@P=op-f80T%Rhw`f#;#KYk}ate=*Y zzu^G&Ves8P$h$qwO)A+9Us=M4l4myIL&>w7=KQCAc^*@0wHTr}F_-1hlw(H3O&DAs z-Xq|J_IA#+YVpU$()}OD@~8U<3(3C>X{27l^Q{{Fe4x9ZsINlqDNuvf>u3G%_Z2Y? zmv;0?Y8crx5??U|=YXG1hD2)(ovQH1)i+Bzec6f$XS`0bz${&pR?_6yV$qiG#_5&M zYf3a{pj-Q~vK$F_%ev1ml~p6&Eob|hv~rY_ueCQ(s$9}}P|mj^+a_ zNZ08n(=*x|b-efj(M-$BbSh^}L?CpAz5rB~wLNn+_FZ0<5s)bo1uV7byp?)csqv-a ze5Uh>YC#MM$zQ-(gD+78?^P4Ykzq+jBT{Mg;Y+Q|N!=Sty?3p1vb_WBU!nE#VHEj75|yk>gVb4SdXoPiW-^S$lm;Ppm0!Waoh3fh%p zjt64!*Wfl>H8jV>qE9+-kI^Lu$|LAM2Ui;v?Tk z!eKw^kB5b!^qo$Q+&^Y7bzXoq6u^6@KC=@Sn4I#KspfFNN2xwEs(LON;@r0H`i$Y&065-BJn3UE^Gg zM{w}@aYK4Owc_aq^c1tS_&j%k#%a1=8ZFxgcF}Dt*zqROSM*;heUx`1{I9JfkD+}?E%SGi z)n@&h)SD*{%QpQlGyvxked5wXW7AoimG|t{NuHJVH~DNK;$dZ$xHv_)f4as|mCXUm zn%lHytK@UZtF-TY@I{umECp0QycCSy9F9tt%W1s{iS6g@qipf-O5Z=+>wA%#F*|Kr zrHDtH));M@*!8)6Obstc;;eMc!qTNUnu0~g@`7 zrp0W7j}aoYj9bnZ7z^s9IT)IM_W=zlBoU+;7&}kP%X8CxseM#nkUTf#8NAIkK_nkg zd0qyxbr{K6ld4^D?L(}_)f7k6_$P21A!*jSBd6gg%Og8fb*(q?BJgmJmxLs(8) z-gGx+o4q+A4SKmgvQ!1qv};VVmV>RMN(B#S`1rIECdMijMM*tIC;Vm+V>MV(yFDLJt&wK$P5e72~b&|XxYBClad-l!udlJH8dDxaq^J4{Q_jA#CjBAuy2-)cOr}4I9f9TGZziMxDh7)* z{DQOhYMK6oF`jsQEnz%1gUW>cK2hZ< zAIc7g#w*|%dr8h^7>|}G$=A7$-yP3CjquOP@Rg0=sHd~C^NP8)SyMWTOPW3WU;Yd9 zVT>(-*Ut6lWccEK&iQV1!dLediVzTEQ^sBT8mMy>CX$m8T2lq#B!0$gi~Pos)iqC+ z8b^w^=^KaYAB%V5L-jw*nJJP%-mb6*Wlz4IY%e9x>P$Iz>qB9Tcs|P$c}1xOs#Kv* zsP9zVi$f%H^X9oSy=WZis5;=&m5l)MZ$(<^5urF;DHJ*RqJIhhDnNwZX^`buSR`!6 zXQd?%C}0bVxg+bW1?or2`lYQ%JD7HKRlhx1`R!Nwd@O2H>w;eu+`i`>Yw}tr-dX&Q z(|G5qAJ1>e&-3pobKyVMO)5|?mR2(4D>tiHyP+k!Qr=r}4nwbU0dWf!Ek4t3m@?^% zRhBk}bB@aDnX_v;a?Yfj+cPNVkDbc_#L(?Nmx)7`rCRX6$wTBnLyTE2F)X73O=TPD zbYEyUyq%BedKwn`wt}k4V z@TgnW@FyQ6oWHL2s0~V?;M5?Gdb>(kacU6a2Q1LMZtVLx(;v*)dwExI!?17MR=%#t z;%Q4^f)+7~4J~8n?76f{;)PL*-7mLP!%>}LUFc4EsLrF#)e6O@`g+v1XrYLHb0dPQ zPu(oBPWHogCttl*a5nc9a<3~OkC`Ocq@1s#Z83NwA-Mk3^^MlbIv~QT)w2Y#Ii^2d zZ5Ng|$Do%F;`y~5){S+3OCN^&p=f_^;j8N^{{Ri$+tAHZDmQ~L*ur|Z?or}j5J zMAxsN{C{1wrtaEhU0A!pI=8mS`gE;mO|5lXYj>4eD|eM!OLx6%6?auyYiqY!D{E`5 zrL`Ye#oAA;J9ZtiZrs&qE!nltYTtFjx})}tbz|*iYf0?|tG)J;b?mMVYr?KhYyVwD zH^{bqSUb0AmAyVdn(4FU^B2-I=!Sq?<on<J?U{Ppm*gz0s)SX&*@9{^Ld zBU+pXUB-iE|EDA&j)qKKaVUJn8l|g!RzXB=$`?~vcfu;zJEG4}+oS!Jm}Mg0x5$5) z+8HTa_OlDp)g|gjw7(RyN#sp#e+RWJvXj0?NwL&DC=FYm2_TOKR=fL%ZOoF{z^#X|I1;>!$Z-b?z#q-|c61 z`4N2>S3|GX`uj`mv+b+BO3w_h?(&ODw#)B7ffa*jyssihZ#KQwpMcdN@^fC=<-dS+ zA@Yx;A}3ab$Y;#1_0Pi^5cxN1clrBc1&I9WBFssOBjE@21%IFyND~W>PkCQ`yH}%} zZe9laYbnjUDQ;gV@7=WAjs4HZ?e#2ukpbCbMQlU6fxT2qXUAQsAI<4@gLi=&azEn2 zw%x5y=Eaf_8!IC{+qW#7W_VMZu07Ol$bEtJs7GEse7bZV z4D3D+KCp=^j4R66dBo?%NfDwgQ)53Yi*K-{kse~SDqi9mN&1-k3)s>2DT7H3JY}Dv zQ-)H#h_6nXn~>C@M>)$DepvS8VF#jU&)A>U;wf;mB=-!F_@Jo=yLmX!3I*VUq_RvS z#zNjdA{+c$WIA{t@bxXi{qw*Dfje7Q)`JU*mAD{0KMX!-F!-QNFL99ZOQqNl4-j0C z!7%mzkqg?i^&T#$wl1hy+>;9$Al_IA%|PNY^6c`^XgO8RkJen^)_p*^sgR;r}xUnhk9sS7G`X z5thiuo>w8J{IE*EB*DNY{1_*9Z<#tZix4gA(sG`vcfhx(k56;m6uf!;HsQEN?~%Ed z?iNr!%H_Vxr;#=+o;m%|*Tw9g6l*UPS?Hf@O{`w`oK@(fs(+rue6`7 zv}f%w@Wqd;?KiP#RlnWJ#O5erPc!)D;HTy#v>kJF1*Mj+t~#&QZ>=jG#^pM;VMwg_Km&y)Yu87 zka)&;v%<2eP>%mli}(4SwHVUnT3U1Ot%Z{~^^u5nD>PRr!lT$ar{}x2RQX-Qb3NY$ zn$nNHYna*dU6V5Wh+hV(n{tZH0M}7PW#4=V&Tnsnv!5nTBwZF zWbFEmVNswSm6gq*a=bs+hE{3dl+QJk>)ty{+aG_n#IdWe^b2~2YL>MqAssPn#>0CL z>7T;Z2}i%{cObP+u92neM-;b``8ifvVRBmTxKOLt`83m0?PlRZCp-M6PpmdgT>~%B zyX`W>>rGF0e81LKNK0Oind{G+{4_k3Xv%s%42EtIv_e z)ANUcvxR4Q(_cCWf9*bDOP}0bKbKjQVvkfJ=Q1p~UF=tXyan1qgRQ?uvk_g)(h0%cjLsbfTlcI2kzQBg+f`kj9 zUKu_vCyCJMNpX7+PX#{n8hDaQ{f$rNf6w(S1^5<`pyaRo^RLv0p5K&xj&BMqhaX0t zlgncFQ9H@DE!@tx-VHs`Q`=64ET~#bNg}00GzIPxWm9t`qRRC4h|LPoBDXwHELwv< z>-b83*NX^7)N%)MQoA21JAEMZWI+9{&=)#b#d_|_E7Fq3da)aacK`1^MI@^|Mz6m& zJc>m7a_r~Us9fVF%}RfjR{kxMexniT^k>il!QPZSeVcESMna-3TWd@a0a-dKpWn@E z$1O|&Rs#@W-?6flR^{8xOu5an6-p-ValJ1w=1D36K> zhX)1jYq0G7P0NyF@+r7=P%j1r-Zze z!SDcbxfEyWc*s92Ht=`~o+956ostMU@(U!H{nVS2L6KmLN%J6E&8g3sqSKfaIY*Bk zSa-^!u_=6-TZ*3VCp+QGDgez^m%RdvoyvdYFS&GH}%eRI37g_M;&D+6m+kjeO_<>CMYk0yQ z%bqy7W-`r)aN9V`xw5m*98X)9*1wqhx3D0EOV*^M_6tlXfZz5vm)VC!$J5R}bNL%Y z>x2#>T^ViCAGe`@>DZBO0trhVEt;?M#l!hC^3RnS|LW&_t`C4^a;Er9QBH#oJ84X>`UI)HW>UZu#9lKB;EJsGcAE1j3uG6V( zie%MF#q(=&rUV_D&$vu``sCW#hr;@Aol8|QD2?Pc)h_Ts6*Nm?kDSh^)@*f9e8|)3 z!VUbL@~D&h7d?}?L^=VcO%d4Vs@2n`OpKW*MCB`DOv0e+3jMUR7?FyJ)6&*umln%@ z_t6;<=@kb#P3dHrZA=Enfarjw1{L{-yZiq~n7OykJb>Mj+j3ZM>OyLW=Q? zNX2fHDyTJ0=>&Lp&6zDaVAZCnu$t@|v3?mJd#i5LICcq?x?iPPhc0eH7w zkXs;H&!R0H?5}Pzqqm%ad+ZVMn>a`_daKiniUExrbpamJq50iAJkw3RVa=$DiD|@_ zj)|cdawLHxYTlln1Fe8?1b)QQ-0()p`gyXE4q0Rkg>-5_3a1Vze#P>ew(Q>2;J^tY@012N5XT~~GGlMT$7QMsXXn9K z`W2=V>#O8mu;jt#aaSqNCfg_6Wsj@A^0evrB;m`8?DT;Ya3JuCcwhGBpG%|1n_>=0 z{@=0Vbt1R9Y`dg8p8=dCl#|M7z0@mZm8Kje{dL_QoOcoyHborNxl*eKA;y->ONXsD z9+5n{c`X@=?DZ^_qk`!LIWce*e)pGirunFx^vR@leYP4A}6HMa-a-=1sn z@BsyO42jb=x$Ne-p=*{u*IW`#ch;EZN?-A{Kl}03997nx)%l$DY#L`SY13H;LbrYa zD?xCbLX4GWL?)<6yWr=|m+N@zr&2W5pL(MuP0*aY`_8BS38MTC%@rCU$FTIB>ZTQG z`$p2$*)(@sct#lWvCa_fon%;355n@dpdNdVY~lLk;W6&eUV3!)p(H0!=0dMXmR=vC zoEJJaXYMR&^{7V0Jmgh1%Bk#iO6@ojBAW+`C!juY4U*^uY(K14IE!p$X6QPoSZO88Brk!mX#cp{a3y8MUXjk)K zzXFzINY5?jwk_~e&#TgRu1MohV*1WNn)Y8WNXU%*+>loZBHA~w^0o{U@Q|)ZRA*mi zT6`^3-vaC#%nhE2u{QjtxR=PItdr-Ww*xZR&@2)6P~WP>*b8!< ztr6AmwByZN$IAOFozb#=gS^^k$4;5eCdPfz|qZubVXJ$E9JcA`!4PUPJ!UCVn;pVcP16D?|Wcpqx*C8rfxBGuu2 z$Q#|`ooMW$n`qvLd1iTUlv~Y99$Dla7CMWxSXWYAt#_|X5i|>AX}tVa|Hf2FzZQP0 zl@GsVQimnUT5jtF3XjGioSP}bxm(FoLf&KVrsZkjGcdbNW!An~nTUadcoyRe78g%dKV9rsv)ozxzz4FFP#c7p6N+hRDFdz` zzS$!Un=Cb&tE)~FPiWX=%>gdrLv{Tog`OdrPv{xqUFi>;@KZaeyqrubudjN-?mt=k zT90X-cGNq@7d}@Urg*4^vuRY~4oPw@YA7mn@{H?>)%7$hD<)9{Eh?|b{U=`kH00*D z4i)Q<=IsJ1*fS*<8Nyemrv-R=XgxifTuaZ~cb}Cv>YvsDC%$t%(7cZ7pLV-DqIWa?byImnvC=kIOce`BUry!eQ~eZ|<{9#ShW%f}x+kTGbcf+HrIjLHJ>ys7;6v1q zAAe3eQ?)BA5HVZ1wOJvb-NK9nE<~S93hj4es$suO@mwVR)@bm_`HAAD@ceoZwh4yN zTpLLfkBZDK5815km8^DFOKGR z@`);iaw}|*)T`?~>NvJmoeT-C9WwDIP@lF5zUJ$SMA6sWrZB2uPw{81s$;BYNk<>v z3TcH+uw7J;japuRx7BBb)?pye`PFyW;^Ix3GsXK5P0i7quGrd+9YBiHAfJ9=tq`4n zDRB`}KN9Mm9)=d{n64}_i6Hq{nw!_9oWb^Q1+SP$%}Sh()V4yYQPUYH;=U6b*}96fC9`^SXk*>$?S`?G=cRx7eMXSw7xBflFG6d-}kUsP8kjWr@KGGN9+KcNY zNMDL;)^E}3e5AYnjum8Dw0bSl%P4)&qSafFUWIEFu6H8cPc1R!4O|q{j3>>1M+>!G z1JT0A;E$w5%;rZI#SD6E^5_ zrfT4$DGAZJf0*qq>^eYyOTGxrTRTXD(7!N3BA$6^7PtN}{DdK%W_0eYXQlU~XNEU= zJOfv{X!Xp;HZGug{8o&}>IG;+F_Z2!t7EABuE%tm7VV;8!_dOA$F?rexiqWkE=6;P zElQzZc87kU*Xgq;CFN0h)V82sHYVp|kg;GeTo@yyvLZ^A$Fm7#Z;x0sECr<~2GQ7^ zdJN;T{hO+kM`gRrde|{)u6*N1`%s_!%kI$cqSezM`)11kj3s%GYu344)cQrk@FZpl zjbtJ9;vrbqblll!O>zmBPDRLE46HX0%f_Pyb@8j6s?iPQ7NO56mGId`1uRLq8|qSv zzpOX|BOI}iRz_Vd*(3g4aqBX zM9&$wRc*RdH)NiqQ|i^hVC@mr!T8H`D(+2_xgcZgrEx??s>3WSO`=AsiodJ`PUQ`5s0|k(v(^| zWIX&BoXbEx0PkuNty)CK6(Vj>+mtu3i}7s>C9ZdHe9v*Fc_BJTs^TB`dm4QMT~j-T zSU`cAV|lb(+Cy_!*IQvpD@i%LkAW}euMtnq!{55!X2_`IF{`8*77)6sq`t_Khi%UB zh8(l->NPef6KH1-Bg&7tACvcg8t23{$+a$|^=BP^8Vf0AJgC&f{f^CUzpOvn+L|&? z@|z972lsjs{9HXi^XJU=M0l2kWcQ{ZP$Uy`%+=0#QJCAQSO+XeA+M9oO*Hb6m>eDDk~o1$_Z7_A~ibD*!8(qBR2_^?dhR7}!AR^eHzL6inUS`s!~gaqKmosJp8 zzb>-WdCU6e6~)0ql_{3nFv`7w`E#*~Y4;&Tz1+4~ifC{j5C7r1AyTi11|izqgY^sC zz8JSfr_!)`oa$OL?8sob)XPkgk>s&gnE8pYbu@Whg5!&&_7mm6&m~Q}s7apQfqF+T zeBn^aO3WAjpg-}G`3KbhjQ=$2%#)|4o|y5EIY*yA^76i4H~aBC#M8t$s-pj9Pbc~C z@R-ndeRCEo$mcBLydm@2TYq^J7FYxLzRNSkm&gBi>3<)7lgs3?bW#8Fk*Dx4kts#+ z5`I+>AMK?B?#^Kmn6>gA`D@2aI}=BjgDcH zYmG^@oKX!aFKlvi8h2au;5|07oO*|K2h%q?tf>mI@NE^4vL$XTcRqjNZIw!qYRQfO zN&q4*(B7Q;E1;q&jKha2vqO}U>reK#Mx6tr$yt~8yU<~>u&HL6BsqppCa^b#ubNS0g z?}H!oHDk2))40nmWVdckd3jpa>rop|ib zx*T&)4lT)9-X0&S*>)@(zeIzuqK>DIBm6OWNSmN!RPrh4pPLB7NBjj~E^|!}PgFD`w?1JO^&^$tIa2)c%e9 zL&-K(w)EX_04Hr9L3vH}v^n(c_VSIezy2GmCl0(OGrit8G=ZbG&T1s-JwLZU;g@U${kyp%R}E~IgoKIp*dV6O!caTr&PUtFHYmQ^bhuecUE0_ z;sb9=WDN6YZ{G2p8IkI{K9<|Js&e-|Wrfc1?y|fqgd8surrTKZoTSvLYdrfp?n(aGt zhWVC^<*uIlVH;W(cef$e7M$b#R+ws290fu%;)1J&yra{Yl*yW5;N^XY!sK(_WWfv5 z?ojJ|*B<6d{nTS-+ac}oGS}MrxP0n6${HEXIg*i+|A6j>ixGmx!gk4G1hHO>YcH_V zKr(4%e@hjfZjGKbZTgWN4zhnjlpR>XM^CA5em%o6vw@WqmN(~^2CvGQRletO`kfX% z#cm;Q8p&ddtuw)5@Qb!czb5d{&VjyDZ9uF3H0T)E!19*Dhv<)a#l``jBXaN#2XtR- zPyo@gfHeseYF1$?3I1wt_AH}!D7OJf0qH7OIl_KZo_o0)jY%rSU@!J5)TTgfN%_G+ z9oH*N@19x=JI6LQ+bX;T${cTVX1CX|mFI#hwYQa9c|`v|^MX*{_`{p6Bh+=KLOaSHxf7<^3?Fj2WzKY0a`9z^hS{$UDw`~{7q=Z3~m(l$Ih zv@0(qCyl&3^S!-6gQL&Qi8(Fu)vzS}arw&ni=5C^^OzbFYtf&UDFuHm z-Vo<)muuhivp*nmT2at3vr!rud;9RoM8k!4e_z;2hvgD&5xhFnM97f24$135H2swIBt3T7gr zBE#+hz1~Z88R9&Oq`{}ym5R)I&ax%wvW$9*IM?OH;z>uG-D^v+WQJ@F$qtK z)_VK)_D{DyL8$n!PUxbUS^I=zDDdr_&R(|kv!{iKZq~3`&G{!h!4c6bo9IX{#PR5ipxPbz<35eJwhMy{* zx#f1f_tCpOB3y>X@9ZXwz8vMUqc*`CJ`2JaA=Ed+$CM|G5W>&ZdKWK@Z_KJceD2s; zb#vmLlOKP4`rJuE4IWdl)2+o$S02Rp9J{;M^}VJBJ_pN|_PM8a{zyB$(ikqGy-%mH z#dvPGVuW>VjQS;iH};7msX>ABV^t*C`vHB$bM4F>SgfyA4YE(#@lL3&3ZefsrUXLo z)7|@C|7+hWhwfvU{_fHYC#fcWL1*#h<`*+)7bg5-L9OYVW7@D%KEF1sJY1Ogracp} zLfX3DH2s5Cg9uKh%HCPLA*frbF$oW7`iA#2!G1GFE*qS<4Va}kFS_6M!nP^%LiCiw z`BU?=#N}_|bnD%r&Yoqzd#0hk(%xfunAV9tLpmArpglo*X>5-Y&XV0H=a*pNM zozEtUZ>DErK5r}x+BIJx($Ol-mxD6Oi$7YkZx`vw7yBLkKWD)s{8w06SU3MX9gO3@ zs04c;ozF?5VFTR-C0K>c@ZWomwcYgnSNf$#2x12oB=Ed|}em^}<_GEc~7J z9r;y8j>)I$FonNP_N+ljIl6CJ&X%(BRX|fSJ#N}rCRo--`0^ov`^_g2KGk|tVwqSx z2yq#HIKu3H8eu9QJX067MLxH}JC)(>pB$fQG(PrpjE}pqw&%D8ALzKI-PO-jzN&O( zY2DBaqJMm<)h6Gy7rDgH7Y}MX&gnBi%iwE5PVs{;Z|fIsmoI9)DcrW8V*PcRN24FY zcz&E?3SM0L$sm)@wKO#+@O;^zK#8=niHhsFa&3RUcja!}p|_L=>6~<&YGmUO7xl@L zGmfdxkuPT0mWXVOe%-XO5J(%qnBI4wBJ)f$eLH1!Bv#2Vwm2vj3ad2z?2|Y%H;Ky> zBDF&W#wR|%QdqQ%%UX#@i5aT&X&FLCRpQPy!ZGKtkHy3g6`Z?DZ`uTF_AQ9HAg^oN z1|gP@@fEIzUPdU7!diJUwBlRW&%5BLDqxB0leOh0vDmozCOi6FxwkuqZGFOtyy=7A zQI3dYj-gp>NF>p1mrrlW7Z$B&ALnP~lYPAKv^SE)s1oW9Qf`| zFL(_s^ham>I=^f+@wA5Dhvusv>nDQdta12eE`9H>H~5_Iry32LIaNbe(S9eQF>_f( z5vG^(fl(#B8CarE_qnQ4^$mK{zcKpXAK4AxbkrtdyyVt-za(7f=#22aDMXdtxIuMp z^#dpFLKVX|{y%3F|CVao?@YW~7kgcwJ_uhdu}t4EC~)RG>5ECN@V=3HLR+`rC4BR9 z?wrfld`dA0Uu+KQ_2r*ZD1eg`O!r=I+(n~(%rzu37!4}@FB(K*+-jZ^>PhSC9>gmM zYWdSV?~9t3I@c#mI?L$GQ#pjS6wLH~ytwv-?)EIur+?=3xm;53KSS?R{|9ql;(5j# zf8^w&rzd@wVa9tNmhh`ol4a`SIc-6kV&Y%(;xA8 zuf2BxYvNk>#@8g7gm95SP{hLCNGd9|RH4;MTTGB-1d)0rYSp4sZMUZtwY8r1Y)%6q ziQ!VDQ6ehch}#?cXf13>ODo}i6Y&m;sAwvj+E&q{Aj;+cu9<|p?w<4Q?|J^;^BkW} z$;_;^=3TdUU4HNTTjnF7F2&u8pB1u*_p-kD0V5JN99|VFGvlv2UmCj3SY}&y z?6&;jVS7<%CS$J-tBJFCWJgi#YGOQNi{hVOd3TCXs5r9S}{N6OcRw^3Vl{iTgq7E99XLsIC<5_mU*t-I3qG~C&4WptJ z^OI+%!CtEM-W)Nf|IWKGVt)Uf^rYj8{=4WOBL>{5ewZTdf0tDNrz(sZaR0p;Y;p(O zfA?l6oQZlsXV?EM+7z+0|4x|Kjr`v6no#y7MHgPmxXP zth_pnlc|5-0MC)}I%ooQAc;0=28iw#JQJ!tTMcSajd)idj>}_Rp=xJ$zCW8f)5@lv0|l zf%Q1klBLo=flnpOSMXW@=Kt6BV6DMwISP319wK&5WebmjxgIbIZ=H!UPr=?Xytl2T zOk42G{y0w0j$-~2#_k?7BJ za*Thj!X<+Dq;XDSx5mP$yjWKDj8iI+i16YWrT?ZKLws=5ko-TAWmlE$J{ z*ViGfQ_*8$B#jt9!;1*1(Zng@=5{Y9B8a&` zWd|a}PEL~oD0LO=QVIk4?u7bnJ__XT;ralpVI^9h{_p8r1t0zUPVQV1#f|~aX=g9F zWnKB>5Xzn(lr9S4XtA_M&G3I>ry1ns$8Mt&s`&K#W4MNGkDnSIKXzWJpg$iKDn zHLl`xKNOtqR>G*u^~v1nFAXJH#bpXV_NNiDN8KSpGDon^c%ayQ07`V+ez0 zbo~94l-~|u%tv}ZrTpiaiSowSs5FITSIv_hQp4y_ba!Va|K@J7R*SY5Z4bE^Lh`m3 zUo7rko~F2e((tJxapf-jpYv@^Y?NMM$*gIAek{FW|~vWuG^!N<5KgNV4lb0{)9aWPww3z<#mY@@wtIz%PH`kitBN zI&{s1-{I%DMOp6Fo+pLSd*NAHNn|3fP3)C$cc+hL=N#~6JVGzZ;TZ(u@QEZ9Ius~K z1glVY6i-dx(Job$enqVd74HNqtgMMdeW)TVKg>5gJ)A%H!8>bKoL>>La>LHtl@nm> zFpQZ1rw8o_*)Ao??lJVO%e+K>3EanPz4)tl8~9qZqi8W$XT|l#@NhLlDWVv7yoqt_2 zB~B`tG+rk0od&$wGMJ~XmP!0K&4TB%Aml8`qRz?XTF-$k`|v5fm-oXls58p@43nUJX`7fZQ*aZ^!0IM+B=In|s>B7#%H zsoR|tUld=)Im>B^FX3E_n^#!nnbfOs1#&PQ?%rv`qcD#D!&V+Ah{~|Uh?+m7-JBp!(K@>9XZS09?<=7}CwzUEC{N#txJQM}+#_Ml8xqA} zA4!}EeE($v&ZrU~u7r2fZa*(gD1PrnB>v=~Sx7-#CunC=y(g@IR#;eK)dzp|Yr;>9 zB%bo%v$vE7Zp153Tm{c+bh1JG9#47zaK%k_NB;{DZ_a-1eY<^T@q2DaZ!V!GP&gFW zRCUvTZr~J9cvVQ3ciVpoe6I>53JEwLtDvcNd$HCXeI>}h4tu???-1o1zlsW|lw>tD zryUM~leZ=-436$F;|nCq!S_ZM+{qKPNrTUe-wQ=+PwaIS+Y!QD;!lXS zvFBla|4omltlDfahGEp7kqD4*h=0zMf4$gb5FF=>H-}IqlsW=xPLRdX2q=GUJZfd2@dRtf$Tv$xga|ZV`;DGF~E7G7T1PbjO-PM z)-$qGk9b&~y{`Qdr9R@mM545;Aj+VHGOYNG*S;iH&ixyS#9BF`soOjQu;;o8a<9Wz zUf(VXF#1kpqf-CqE^)Y6~z9g+U(JINX;6&6iBM*UL?T z4yQP{U1|hDd&D}&Zp-7A9#>`1`QWN=e<0=_P)t^U{px!>yAydO6hR%4LkJ2@rN(k?HylH*!VP3?%$M4_`=k)jRf8x=%1r#lC;?b8oIRjh0x;l3?i0dR!nnpGq0VD&s1+mv50OMD->cndXlhH$pDMfMBH+a~ zz<5R1VGCf~Y73ZFyGvAnOFXNxd6TK&`f6M@1lvO&m4bYBbi>d5fhpo%33kFDW3ZkM z6+*8)zBq737Lh0LmIdltrGZXaG6VlChots%&)H#~y{ixg$+NYA>s}_Hw|01xzV?!idw3jGtelO3YzM(Ca1hi*!II-2#+Bi=GYPKmTLG~wh*pZ{4jG@oP^ zyyu-Or5&6&bkom+znqEdY4l-RZLmF%sgDY-7l|&h^)Xalh$UXuExU4}J<6bi@i#=A z$tT1son)X--fnSZ(e9$%u)UBZFS`ePwxC(4J zm|hud#3eq>RCs;7NxU@yL96Eq+-N5!N4lxg{wv`w5!U!v->VORzCRe&tUjo3<{qks z(%mLHb~g8X{>6fN>zHr!tMRXUKrN)ineGf<2KR`r63*MK6t9F`J8hjdNOQ+JKPWQL zB693PYVcFA16YzZW+Cu@Vq6~M_}2M~j*cRsFP~+`0fS&8k8U!$Gu$BwyfWNsIkisE z6Jf0KvgtOq%yEsseaKNZU*;xXD*u+P^>f|Or=Oj(38qh>wZb_zz|==8+Bxhf;y62? zGXMJg*=`ip-Ak!$q8xl4Q*(0Z+0q@Amn%=7beuhZcK&rYYAJQ?1dTv1?{}5r@?r zL3Pt>aP9=J7Z}egHdFqUx!3WiC&_MYPC1c#eR@q$-I0^Hl!LT|P$y8zD!dD-`rNDf z0fiCDAtg<)C7n>V>?HfEtaQ@}_E%_G*a?F`#HUlc`0$rUe~tgDNIVbN&%1Aj=K==7 zR6d>y&}ZNG!oCJCAQmG-d%)JjgB-`qEb%@q%>AA>XGG_j+1z%s&N>(6(aC~aF>TIG z@I}FAn7yC(bc~^+t6K~$gi}lJY(=!#0g-bJ@AE{#mmzNr0=F4LqzVk{Wb#;8A@1(# zX5=2%J#Ha2Us$6F(g0`4Qar2U9u!om4^mZZ=>X>hv`N3@V=3%?meS)U>?eZ74&?sJ zu2Fae3@hFWCg$PFD)k{U`81&0T9rd#~_M&atJl*e{7q5k>id zUCRc|En9u8$`gD<;F%67^h@6F+}YEuJeESIcG?+qoxNC^!ZNFDOAk_EH!*{X`VhaG zdstDuMiZd7t*0w{K0ZW&lTPl|Jw_Qc6Z>_X!FRK1lZAW1GSf=^eVm` zUVGAI)u69E(DaP7!<^cmJXW6ctDSd}Q|mEz%Zbfl@fF1<*nFQZ8*eJqPd0ZiJ8I@C zx>5Kg1EiD#TC}}4_>#J^y_f#767>CcE}dBk^WURre`^WjK2%>qkLpRjqe4arF zx!`uAM!jC)k=3YAQ7nuMkgpIL?BeXjcE!R-UAXoEux7Nu+-)Nt+MTuw;(;Fdx@!{l z@5xJfm7sSBrueN0blfXlPCZi6p&f``{>!Tden)So=k!wrI&nvrbDUg)ZrX#*FNdz@ zBaI^SORz2G?1yIuDEdOfRI%W`eSv1OTx>U$pVxYj6QqUHQgs6Ee&_a{d|h6}L5@ZK zxW}O5bH!v!?|$cwp0Qx#PYURJCO@!xzkL9ta&bsY6${4O2OB+Iz>h&%SVmH}jI>-w z;F-2ZX@Ii8i09Q}Xw^ZN+1bZ*iWUh1LKX)n#m(DrnZEE5vHUWgJ;zm+C}C!E*|7CR zR9J!U^vqqTU180>U%pa?C^J&&#ce#iCN75ca82d_%-_cUh=f=zb#R7DMiW8G0^DwvfFtZA6_ zOcR{1YhBMoyWqIdp*U_nm3it-0>{%2hzGKc5U<$@$7`12cu^G0aP4T14&H#gK;M&;@otJ1kMxHltx_K!dfmPOVQZ^@ZjzZC>To3EBQ!r~aXrV;j z{%)Qm`v;;RbHlaZt6o%o61}2-m4dQ*mZ*$Ip|dE%d>C}?)xE{8mpc_ z9>Q{x3Ixyhpi|4Kg3Mv>om_5ixP)W-t)SQb2)cPA5BI#iQj6nnXYp4ofBdZix2?eU z-zVsmz;5Ii%_k~xJ8Lu=KI2K3hY|BEslv-~VU`u%R}B0%=VgZtd`~p}k_7#VJ~F8* z@Qi*xYCv8;i238~Gj2nza3#cj*j=1v&$M>I7$iaM=&d|@v5uRoG&pYL-!fW4nx6#f zTBQboJ6dh_ID?-@^EHA-`^oGhDtFP=*rFXf{9!>5nakr;&qWz zDMzUhl7gVK_+Eej3GcZT6{tHx1PWkvXuR|->2%G+^i%FlyZhgZVTD^jEh}Zl=<|4t z?w<>Qt!49FZMM?0v|G2LG(RN&TM84k*lXWu-7Hk znSJvYDm*9WPL`u9&s-DXeUp!1ZVqcA*jL6gbnX!a+Q;u-6ZNk!V4sg!6HUCi8rDP$ z@LB_}i5#3nu;v*x@|vi4h*hKs z=(*2Y55W!xtcSiIc|CMm*nDF6N~YQQH|{*J8nv#Hhe!Z%PQnTjzTe&MyudWP%wPE# zm-*T)* z9WJBuC7!H!L0F!#Qe8%Q5knbem*z8xc*7+rc!H%76zv9X%M&I5TvOb3V zv%82S75nXQxl&KrdQ<0fds8(d;eV$$$;|oJVIQ9DO-|68uK%-o)7wS=s5iN=t(o0h zV0+WN7XHY)3;&be^vZX?zc&?L*NoI3|BlO@d}fb&jnQ7V9%YGac{1|O0x&M)exegp z#58}gdxZKuYOCLv=D+M=_K>a*>HXFg64PwX7(rvoY`aJ!X-xQLdj9p8=0B!e>)8?N z`P#GUx%$7UHP7rDP|rhmk{GQC-~aOW>rFWQ0`%s$&(xbR4;Zw23ws;QsTsJYH6z#4 zX{>9Xr#HXZiA&#U*>z4#+uONNN>bp|aw5Q@2m9tshS~6XJR4@TUDijpfc=K#?oT}mX>|9J zj^Ce(SK_^3+Wl7^O}0*inT266gDFG06Mh=r0{Vm5fSr#@c*CVodXm3>jaN z{Q?mH>o0oYbq>2;D6G3DmA*xb$&I*&iMLf2w^JW_ctsY^DRw`W6w`KQKaS43nTCh=xahjlOcpZrGtpV7UG;1oPzXq>-8o~El z2YcLZh*k;4K2QcI_c=)Z<7rQ>QgZBR&mC9~u=p6Wn(Rl%q^c>j7rBaAb@94->4n?f zFz;(|m{?d{;x)Gs)^9Hn>!I%O3XVRV0a)7}RItO>wt`#UA&O~BJ%n@r2AlikPy2FT z6Pev0Hx9N;60p+UEA(%%2bBZ!w!c!>4X&y)y6pE_5mN+?fYTu{sIxWmsV= z@!Is6`TGOpZ$3sEmxs}dg*+4FE>P$#8>f@aHR!8LGGUD=@t#54iP8whb7|>ILW$2r zVtPh6lf!{!-RuGNAAwT>)Y01j_RnhKmbFw34r*A*0q&^iNO##ryYduxT}@wTMFlz^ zT=p05DC169SFBR$XlQ?PZc&`8bfzHudF{m(YFA%5N?qv} z$WZ)cna4O?oH;Nlfv8EQ7fm5 zQPNANa_g9q$E_2$yb=1w)V6 z-TpDe_r+4jD+2{D$?!fVy{H4)5xu;PgZEQ#j-R4nW6-tbkRq(#uhQ3kvc@k2n}v-r zv>WM@PvJB;O7%R5e?b6@ad|1-QrR3j@;EnMiBk>E*mp8s+3nHo9(*=sU~UFTb9_DY zKhIA*K+l2p!tG;EU;D67-*xxz=j10@EO-g#SXa5j2B9#bYflR-}!7^HudbgP(Q9X z&OqIIXW8<1431sB*0HK{{ON8FvET)y;oZu>C*ewbGKk1)L9jBw*n4^uS7=go1YXF#Xq}?8xt{pLrHU=HJ5h3e7QH z0dl}HSa12!aQ_sy?3WlV0;5f1XP;DO!#;b2>s03UC-W_N0Pu`qYnEu&w+cbKwQ{b; zG=I}!`+|sCdj;;>W0kb%mj|?~@bLtSjyco;d;KtC?;CC4-5(7j$0KYP=-clnaGbHv z-J3ng!zbqKUrMn><42n$-s4>!?UA_N=X5Rb({CGFcwOCa8%ca!M3NWdL=y3R&fWzQ zpEQwwLU7aGB>@%F!7{^>2(Asj2r~t{;IqN?oXf_Ij1A7K*@^(g6nqxZS@TKQ*$yWW zzGGVn%5(v1WVKSp0oxcJSWJSgqsBdWgkSU z>$ee+agniOxrgjfnw<+baEky;Z34-iaN?Jdvw5dMNfLouNFvy%o>zfMe4<2f?MsROg&xblj(h4Ea{3?y?Z0EUs9sPZci_$a0M0%L3V^)DpqU)Lq4Cq~){5 zE(7qa*8%4-c}m0c)%4p0V_#xy7wj3LZ;f@^G{*94b&q6{9{tI*Yqk)c+;_M9+Q~e* zX(Hq|O`A3aH?3IUbIJEY__?T4%d6Lw@*5)0EIhrca!vXA;=9-V%7V@+E*?t=NXQ4W zLI0%O#C;Z-we6{X&Zep^kPLtDF=dDp%q%BGqY zfi3pw%d;_W8un4%TYkA1PCxlGej~{Ojj81EG!&nQd%j`08(09h0T=HRME{|Kvqq_Z zKNogqJ2n~`YmjGY-ksgZ@}+%vwvw?wb&RO7s09)1`fY1X4B9vspT!kx#=FnHntIK_ zB;U(X^=vyUIym~~8l{HvEX`JCRQf2{*^zOYXXy+_n4LN%Pm4jvDIfWFqKBd=?LnwF z>A#DwgcE)h;?Fw2IJk`F3*B;+GX!n3#6pjvT*0^ME2;6dGhk*5ob?xg!T!Q3j8ihR zOLP>=#676H0G{a=tj`Xy&jc3%vAbw}wkszoTmwwnOe}AfWAdO5LR4BqWbMa@+bYdL zYs$?#0N+cph6i*K=X8zcy7jH7H=8LH(CIB15l)x! z?0k3op6Ap7qSRt^0XC-dM&W%=7m8N@YESFB;G7%q4vOmn1L z0|r_PHhfjx?^IKqv*QoL`E2kcUP;ewgO*29!Bv{ML1%raIQim5F2Kr35%hyfo{zk? zt?&*0Ytrz%NTlOVr*_Zld$@-Ljhnz$wJ4`B}Xj$91kau#I=PPO8 zgq=yz3ye`~Fe13(LD-!XXf0nlA$onSB`%jpZZ{h5Y>XJtl$wsTkoOz%XBAW=|fteOp)YCdkO zfto{7pYscM#_H)&u!e&t`c!Cfi#t}`r}U}8nT46byXmD_1eRgF7S2Tgy+JRP5p%W)3b=kuqQ081k+hcl>v zkKgzXz4SPwS)eh*kp+Ba_c@FuwkgTrsG{`XBjG+~I*dPH_)9 zL3@}7XuY*QS86E36%Xk?C#REa9qOPCD+ku$J0YKV-dM!OM@yE2 z%}irio%OzGDgG|^Aio|?f39y#WJ6_zne2+X{I&%qeTV2>PIhbseyeIrXOU@w*$RO#pQhuZ5%@rLhp<+TKgiD7U*&`e>5&NC}+3Z*}e(aQ@qT+332mC<|G$`uDcid zAzybb--yo>G(f*BEXx!8NCaO83-3x?GFS_94+yH&2dL^2Yi^^Z+BuEdHAxDsRi1gc zSF0xqE^#MOm+=5$Uh>l)ODQZWDe2Fz_pF>MHYS|>4(Uf}>a00KVG4?L z$N@`S0r!|5zuWKpOHVkq&R}w0G>evHx%$fU8peDQ1s@f)B`2yfb)Q*2d`2+J@zTzG!C~A`)c*U@M^7mgEdFd6LIVTbvuoo zljW&Za1TJp1L4)+2g&3-ddA>z(Nk$93HGIkyKb&p@wC? z*m&Nr;QZ|~NigDt{*`sxCCTl4ReV{7jc9D;qCHSw6%53F3ktBaNYC4<%; zcK(`r)+N!Id*E#7W7d#T_najE1biRf*A7%ZbSUY#3N(EGGwC?tZNrmsh&I~WWBsAw zWxfpST;zZfU}i%n34$b9?-Q{HaozQg@csF-TogR8glzmT%MJ&|G8|?p&=V```@azF zxm;UslYgvbK3M~O1$tRrHd}hE2Di*NJ|QW3o>8z4?9FDteA8D6_AcCvRIJglt_=pA z2t5vF+)jV@O<1lofNf1s5?9gD8|zMc)FaEdU%?6(aY>#8H6gVE5PH4@5c-T0A&T<~ zjU!uPDlwkpfQM#^wVdrOBJw{yOb;l7{%J2=J%h;8&ydkY4xBqF*LADmxvMg=E>G79 zqiXPZ{46dk#hm993mlk7O`8?D^6~;wZkfAtzs18L+W^-3L}=PCc-EQs1ZJHYnCCc= z_GIW+O0bIf+UGnepZs@=x;6X0VDgV~)Nf$hO^3DdKpWQ>iG5ixqv68ut48jsD&K?> z%Cbk0k9AO-VzeSdk^_wMU_XvFPPM$7^>?rv;))$S!OGxQ;O7(OL9xk&H{`0&yR4e;}-ra+L>!xws<_ zfw^+8neti%M7arUDkv8@`GLXiI7iG?3E*_Ae4U)xsO(b(IqfejITZRkpy zJ2?~>0jq(l9L`%YzKEKr0+`KAyG@1#dSrlS#xjIis9_vpzL0fybTP}+_Er}7EppQO z-k{%B%$N8cf%xUXmXHgcuV00-zQAK;aP9#<*9F$~w@v-h;}+R3J8G>OLG~=*=d;P4 zb#AEa!m6hEOQlVeJ^20Xnmx8iRmy%B``qF^9_(2QoLz)}LcZRhl@rBlePJIfCt+b3 zA@3f&H-sbuJ4~>XQpqV+=jkdrkw)=S0r634iP3OH0DCgvO;nP`w?s_nrsITs&rn+4 z$%~NsYBc1DxBLATMH8mf-saQ$Tmu{ zXAq;`!7X9`e7?75y<4gE=%Cw9R{1)NgF63AEx0G&aMf4f41}5WG zi2^*662dPyd$80A{(|K$2XjvQ=?v{#k*37Z?v4ogzPpC@iAZ0eQG1q>&>Qve7oS?m zGHep^j9bNOnH)|tbk4Xnp4_K~Unt|23z-JLX235YsfSbxL=zF-8s;WWZG&W`T?hBVv2mlNV$FQVzY@^$nb0V(E&65=s_;L#dJ z7q@X_t6ZC@S92{RjH?Xf7SK9sIefdN+-|c?Q=b zuR0{`d?-F24r^-(?53p&R+_lqkSOqr8w4$M=Hr~LJY5B$Dpg;Y z0OwJ2d3!^~rRJx`g>WZ2BksjlP##VdVgw4da$KC#oPCUAj0RWOCvAOzB*%Jt)XICk z>TG8ugWkE7llR~}k#2-N)AItt5_1OZD=P@k(lj!SKh50jHVybA*#3dXJm@)Fr^6fu z{7Ln3XS&_-tQPi7ny`o9_StcY)6;YG`h;^;a5^f7*{fvrC!C>mgfpnlnf=P9MBoAol)RV&?BaMY)6ju!J?k_+FcUu==m%#7hHJXtJg?Uz z#MRnKiJyJ6n4{-rpj{CT?Uzt&w)Hcg@JJ12cfgv=x8_*F@*?ivctm(rtxUWuO1d{R ze2-6UWCdorTv!Hs7fatqrPmZJ;Qv`FclEgXBnIl(zH56*BX z*m-}<{n6V)cFAZ#3(Q~WPg{U-5!gX*H}u%bEW9dLdl6c>Mk?Tuj`KSXd zl%VV>y0rntr5<&M`G<}|aOMFj*d^PL|7C?H_7C(=*c0?}FG11ow<9NhAb*TZytSe? zPuGI(yYHIqbP7gjLTKJ48<(0!!r6GlZey_yz6yUoH;OL^WP$JuV+)e3yC`jx+#Eah zrU|cpx>JCiv#W3?J?}WmBacfB4RYB$ik{PfOr#xxlX9hT6!4AeDtkH=8nA$9ft`BT zm1$@NMl#F}jaxS_EV2TlEs4Ck9X_?(zn1leS1l}qvqBU3bsq&8m|Zh`iq#QHtS{@u zCyE|b=)Z)o&k9stL@QIF1wWijs1GIdE+GTm{)*sy2UMKeUw1y?!I}bwITb>-vmwQL z2tC@XTnt{8!Y>0G08xRM%aZXJK7zcqvR?yLVJN2B(@bKXmeu-&tB3p39 z%SDrrPub+404iHCzM9Q*o_hy;H&A&9m=T|#po)M{$&^GC_^JxlfxtVA_7xctF8-La z1E20C=FR5{lWnKre8rrHV>=mI;@1dPnjfGoujgV5A`Tgf(~AW^liNRHJ}Hb7oi}cq zJBIh|)Gf@(KgSZ_bgp`zi#UG^YjgBR-ok8s{)xVt57GCp?U;l2I{kJ2+MTJn@@z%A zAmvM7Qj2QioEHQp>QJukyv7gq+yJX%=RGb1PbrW?Pcre_pzSqq0-+~Y13x3?(F`w% zEV@SdCD0{@7@R@u_8P)E+sEiRH)1ZH*|~#T85)*I#R54&!wC-bjRw@M2Tr#1 ziKrlbdk87di^@lN>G^;|)x!)AIK$UcoPHMFqe}1?YyV z+dUR~LG!G0sqDOWIv`27bnyBMe7x?#zWP132C@Jv$?D3{`fKr*Jd0MEy*4!#!LG_M zCKnrz%ZB>tWg!&Sa^VU5=n}o30hnBvdq=?}U~+k( zp=XAdD}sITxp5J|;1W(m9EcP+k}q}}WY#ye8%9t!Lw%Z+xW5v3&W^hxnn zknA4(pEKAw(SJY?%wZFL!YW%?KghIw96R?cK?6wumuj z%boJaCWf=cpwV>r594fEzJqJ!Y;j~bTYh3VTO5J2#V_G>9>dv^+0WS$T*vl@=xqMmlw7Th*nO6yW^x#C&Ja$~k;^c>L2o%Ds1JOkJf!Wdnl1HZi#DYm=G zrh*v0mRxEiz7`u>OYX|$JNa`bfMzwM+xS{En6G6G=4;6rfv;t8si;&Y=;v$U0$+>z zu$8aHyAn##oe)(nuI%S)aVsr0dnzyw?(!5+CL2?_1BL zkz@-II|{7{x1CG#RRm`q*8b|391!>AxoErtcX9$!1M9Cv;M7BZ@Uj5&C5nL?@wL)E zZp6d_D2H)q{Sa=%YT!m(2+WU+HOfzZ`eo&gbE33HDPCt6t!MXJjEZl>D_5ecLg?GfdkVs|Vt zSFZt{&7G|VI1Q66gQ5$PtQ;gcoP#`WyHekRy+Z6t@Fjc`W)eI}&J)zFEWE<*%jup3 zvrM~=#n9d=Uuh|dF9Q~r>zt;R1WpyFj8nm>0h{D`!L^Y|ET@YD=5*Q9$`9ndA*1cy z;2s2fu~&(rqHJSfSvmz4uRM*Qu!LUTfn4R=QN8BpH?Y5-^wpLGpG-9cv4L~N8|HB@ zp#4IEvmrTl8I)oq5z4I*AcNi==0o;9zzRarpL75tgSW(0*~jGK0KOM`BC<|*u8+wD z?@#kMx1u0bboO(L-KbA2%BIb(js}6_Yhy)$$*r)~b!_HNiD=%Cge}?P>hfB2guVu2 z1`_*ooc;DPu8qMZ28krD^38R?3RjI8T!L%ZmJmJ1ufi4hgUpql^39RKWx3SJ8`;#+ z8`vuE#8vS9kiz-D)HLpa4m?xaFTBqI#)J3V&_1)e65C)i3@)EHaBe9X53Y)C`vCB~ zSHC1cE&_UvjlU(R9`;~C<^p3tlO${F&9uYfL=TuPOjh)Bw~+S0-9kMX%-yof%H4AD z5R_Mu*DWRRw=A~ux8O3+Kp6mY$$9-%>pZ~b{K+VF zr3Wyzh%sBuy$YUQh}l~(Zwtil)(A1@Oee6K2>Mw~_E>pa7`dgcjNEe{@pg@~NoAAi z?RM^DEK{WJu6AEmUn%l(F^3DV9kLuQk9aIEKmb#YBJ6<(!49faqqsUgrua0fhtienXH@Ve4CN86=0|C@ySUq~`N z$MFx{Q5MmaD2uCO)B%O%Ui)H5mAhYXf0Wq%{;1dfqhD5B`&inTdQTa5k{p5G7MAzg zwL$XQQeR>U0GTlhnJ1vl3fK?RB3gP0SS`k&ulQme|1~#JL3%)wKSZ(;5z3%b&b8BH__QejD~xGq$P?FnZ~ zd<8HOHW7GlH$}Zr3p>c%)2ZSWZ=$^0I%2VkGQ zR9=bb5RqXXE@$dr$I4Fkc|H$~_w(Utk7ZhN?`TK13^Eu?TPwAhS_i~I8TdaTh5?EAocmIS(LiX45!>ei8T70g6F zgWdNo(4l2MiMGG>AaMzZkOR{+cD?u(u-7kUjPVg>U-;xmMI7LRUQgJcw$r>sh zE^hB>}H_;EdPo7l|5X)q``&ta=7~>+LVWyXC!> z1n@6&<3-aKejx599i&!e#+_o>Z!K#!DRUBd7` zJa1n1-_&-^H@^Kx+HSmcUIeo;R@=?H#2rVLmDH&4tZoP+9u!5$+{ zaZ4k%|F7P07lY5Tno#OPVJk{{Z$2<6!6}W~e&f-j9bsip zx3$*VRoo0p^WPhO}FGx<>9 z`B+wNvdLkSz*`lswEV%b3)X_aw0D8jr6It3+<{`p6{M>x0CQ1GP$M#osUjgTUUqmL-Tz(OZ5L{?kduXn`n}jbDGJ8wlznz+j{lndeTo}XX1s6E1 z?hU>OCv5(GU`Xy`aY$BLsGZW_|nGZ=2`f zIP0`tk%n!RugGT0#^xrREWk0?5r@9|*f!oZ&pI~k_Bt*0I+uCoCaf+9O!z?t{(oO% zUshQ-cx?N7Mc~ovMP~G(<%#_4^!&1-B0O?hF1PQsjuXx1BNl?(Yhwe-}!aeYkVVK zg{2K;#>ag;dKs)Xn0-3P-~I*NEeSHW6Q+Yy^;O%`8~c`-{y9wlr>0`2|Js26W%~bL zrvH&y`v31U{g=P~Pht9JG+*;i4}K5RKNHsb77qJ=pXq;2(Ekfe|DFmK!R#)Tjl7lL412!e58CX5L)VKkTt(fUR@t9)X=o~D@QmZVER~59>#?ZIX0{R1Mf@Qa3P}&7eeQF`_Te&7%p@+^^g@8 zV*CF=1{XT}%E9O1LicUBkn;ds2u?=m$A!`XA;PTm&%uR2<^p4G35yFE?8gnkg)|r! zs(d~!l#Y4*ZMYDmXTyb}5{KhL7m?U5j_1i4%e7%Je*~NsV=y>0%#Don>BEK6DFzq1 z)WsRt%DEMIw@5Mya3Sbb8t^VQ*cS_JxDZ>%7g3{T9Uv`dhTuX&(|Haq#I%GQ(7eNO zp>%~67rN0jNHX02xQB87D@mrS7+h#O;6h&w!iAjgk22WbcgDDoO;%j{SlWBTaG`+V2Xe^g)cl~vkItUjU8vi-CP@m=*0T(*k zrUxVP1W!$ zP4!CLfW0)pg$79rvErVO3k}j!gLX=X>ZwYsbB5`e=2@MCcS;9+AL0zeg@(s|_t8LH zXi!|}AmSoU4IyqN)E0~Jjw$ur0evF1Y8JM5xnt^zlw+hTqsYtMAni*UwD(K16=6-@5F_+ zE%cgQ&)`DqhT=lC`85M@A(+#H{ZKZ>h3)_@bf4RzsAq7Y`vY;I+QOOvxDXTP?Z04L z=nmjQI0lOg?Lt;uXr%CaF)jq_kZ0mT+ZK66*2DV4jc6H;3o$A7;W~^2uNW~dbSEJ% z8CdI9ZMWh=^&n3_F0_ko0bFSZkv~#=1IC5!B;YmAV!(x7CF+cYuDR)T|h5lbt1-vhH1OzcTcj~t{)c~B%d|*KwRkeXuDy! z&@<;{|4nVz{BG_)(ss|qh5nDV-McxzU)y0^Xt-{fb#NdqG_Tj| zAx46%>wpV=JscP6?#G2xfD5H#T*%ObaUr7>7sBg>5pbbIdsoS*1wuSNZWxFQ!5C)6 zg+TXWTls`~w`d41gk!L{5Z3R_?;f9a zdp&~-6%WFNFn?EZI52lD%#6UJ*Q?CvMb{?sii)Q1$Y#bJD=x&ObK`FeE;RBUrZ>aY z@G`SY=-qn@?`6UcCl517_MQY5@_dW}EoMeDK!L6>C=iqC7YA29x&tWCNplPEO~%*A zO@IWk-}~!FSHi%vb`S&PeEgl}e;dL8+5GNb|A`EcOkR*%9|L6b7hmV}GeC;)45#_e z&t-sQQiyhe-O&*kAThs!`jB9k`VciLUZ=S!bNLYV*Ia5oTM}2Jrub-YG2;{TS{7os z1mqs@MnB|Dyb3(6`qB|VI%%g37(WGeMzE5$^DM^xs1j8<>^y^?BV1xp8}Ts`A@Tf; z(s&j4n3m|N6(wL>{YRNgUV{nYv)FygG)cJ$LMo-zBv47gsskmGfeDY051f~UzddF5@`XtP;u(MP{`IY%sh{>s<2ozj$ zug%;+{EXQqSPw}OJTgAs&inko-e3H=K~Ti|uS4#ie=K_Ob3$Hj+Ct^%Xmpzce*7^V zn12nt*&ewEzSf2SQ*;-fXn?;nNGbfknxfGoK7H#Dr=iurZ>5HF4WWjVyr zP&3vFqiI10AIH%v#F|P(qXw}0sN{}6gX<}SqB)O7;kTLamg3Pw15d2capG0qQndXe zNBZ6&@I?jr9dVeWIE;{XZUCEU0XJTCf}#ob&G+~X-{RizBwlq5&fa)rPyc#|bB_H5 zX+W95Gn~e09MTEc<-6doW4!7TDJc2hmyVWL~Pcc~z>9M~szk>A_^%OrKK_4JAB2mI7053Eb5s}^eI6ai{`G!MtdpJbF>=Ge zHzz@MhW;ZkC&DW4Mh&)0%h5Bx3j^1KuTfSQc=X?En{|tQgIQugx0nsoqu#s@3fRs& z!FwtJSOX=hi3FQEdU;Lg18G0YiTk22dfrFsY2?}%(c8DMWcNhQ_cZSV{`7iq$s7cX zn`NAed-Kf=_oU`5LT;4eu_yZ9A4sv*lDY8V-K?y8^KTrwH@`Q@L<0ZGBNP%x5p#eU zMM16upF!vWYu~WO`xtCSkiOE05Nd@hS1Kb|3Ak=1ok}_ia4$h}4)EWAE*fx;Pr{5> zL4-m7ygyJ$R}cshF4$HvxXeyw+WI+QR?0=e6`nGF-4xU{H{QrfDkh^v@v51de42b4 z!!LtY240Xj`6k62JO1_Qn0=@h#wN!&4-u4Lo4H4LJD1W5(vm!ju#U%N zN%u?ef_Q;HPbBF0iQFbBK53^(8E>r7 zfD{=`QojVUxJe0q?;w*)77+?w-5Q_8HZMOpeC6`&uDQM%$Jy~l;B*uDCD5*qI89O< z1E=#LaLjUc`z5S?luKFSCw7Z@D$y46yzbkk8S7M1(-s)-_{dw#_l-4ZZf}ce>wT#D zlSQSWR8stVoLnWH zv_d8IhwD|i-h^u-gpYp#h1{8hLb63F=~%d4h5N7Io)1^nL=+MV*Vph2hr<_6>uX;W z0*1gL%O{|a3b+E`{_!aIj_}_oRxAFJeXcU6w zANUXT_WnQpAI=M#%l`l4y7HZhLLA}hf6CU~fP3aA4y$?#g&czmCQ3~GJ~s?P(ad`Y zi~k<~7h5?yMB5SeJnmTZDo(Rzv`WewqmtIb`-AQ(=~=jzk5x$@z~3%woE0Ckak)65 z|G__RPn9$PuC^Cc(u;6?4%a7e`N7433nzKU`gdURT8Og-F8nOQ`gh=a+i$58NG5y> zWu*qAqKQJ}y-$GrB2`iaTnpjKfvX9wyKsF6c`1U+&fd<>4iez;*}sX)RMO}rDrw6K zm9#EOCH+she3dHc;*~0CA^cqhSA-IU)UASW@NO0SwtrV8y#>#U7D2jj1;IU*=~ZaM zp>REhcVppx^_rN?pG=zUy><1+-t_7ZKV18s_v%l)=g;<@`me}4W`j2!vw5vIgnN@- zO@9C{-}}?YtJgrNV0eaQT>bIKYd3%5y>9iN;9-zA3W8_elMtE=e|c}Kq>&3)xp#xC zHE`L1j9Bg+@K*uXe=LMN!QVOX_c&Zw?!V*T5ce^Z2_(b(v&oHb7H?2V6QG<5A#4d; zU&7@R4P^<}o2wy?2!|q&=Nd>G-w*lc`X00;xD=qjAQ(Chf9FHk_dx#~gz*6fSHQh$ ztxDVPS^MpKhprGac6guI^)<=c(d#zq ML(7{#><<0^05k~rdH?_b diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H4/bootloader.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H4/bootloader.bin deleted file mode 100644 index b0da89acdb7993431ec6234b372b4864d1e87d36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19264 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H4/hello_world.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_H4/hello_world.bin deleted file mode 100644 index 1e9250f975211c060afb3f44dc3fb1b8fb2d85f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136224 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�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 z z!Zh*mwW}s+V(FTyfySx<>#HV`Rf{O6h%&Ixbl4evUK&hJOfaQu*Fg>zC6`}hdbdU1 zUVc15x-BxM{18*NEmB?Hoba!0k&2(X7+-lmY}33T58|ZCUApsWSZI|y|7)Op(4D`V z;O2cN`y|1Rq2`%~!a6dUbH@9%HO~w%5836Ho+y%va&+j8?(>1y6+>(6Ga7$9P|DBm zsiQF@G5vJRc)zAiN;Sn|PWZ1axn29z4ZazBZ4XNa9!!?Xc;^GP(W16=%IekH3MQ1k zr-cRYPXhMSn!`#=2-iMPF9o&gJ{x#Qk#{1(xoAN5#P0fV-GJBZq}x)__LOuWtUb14 zu00jD&wPxvg(lfY?reVwVo`a3dA;YGY(`!$cbq={QGaXUDP(=@qrTQJ6({F-X0Yi4 z)`s~#Ei^0$6MNh<-al<^CU6}8=wf4kE3EA(3U@G`#`2;4V)sWv(hH4!tvgm!K69Vz zHY#P!4}G^Wic3%W=-#y1|GIM)5$?7oOGRxT1)R4JxE}_ngTc(t@sJWWDI)HAO?s^&$s%sL`<8$@BmWLVx{jSHT<*N1mk>~wzCUufKIPK?p?g*}03XvMo^G`e^hGSO5}?M^~^ zyC03%whD_gq|`cR_duOT-1Yg7fX%>kl{&h&Q}3+=C(hPFq|MpF_bYr+vlTzV|M=1HHn|Y+IgO;Oe(}d-CfV z5WXS8Q%9y7Z#YZqRHbzWV&xpQi7;6V@huN_kd-l%!#YSIc3HKHNeiy=5VPfIQ-_Mo zWP>!Z=6?{!(qCf{;FTrq41hrsi8YBHv(?0I{vYJ=%l|%3M`Ysqe)jo(Cbr6KaHyHI z%FO$?Kj+Px_O&SjJMB8J+lKf3ki;;)?#{g|fsS_ru6z;^V}4 zY~mCB$?ew@m-i%ni4@AJe*`z8Hk?vk+Gy?keK)1m}fN=AJ0JpJ{hisZ|_$dtfx{+L~YY4HgYuiWcTR+o7B(1s5)6R-285BhDdTJ z#mYw`+{wlTUze3=0YtD9*m$fR(kP}Tygxy-og;G`b!GFFujafXi8GOb$}h|3q=+xT{GCXode?&G8HB96rZGS18ONydl;=} zd;6HAsyg<1U#(A+(}5KR(&q>Im`I^K=>;ud}z!yujbT@YtjCDd115^JhSF?M;S zMRVg-$!;OO*hkPN3Z`m+H=}WVZtnX0{Pm@!>ywidMP`vC9qVH-a@G+w!_g-!^)P9( zeIiLJWoW=S&U;_ZzSdVhG}{-)!t60K+ZV~c(#Iss_9<9fA2WA$2BcCEqhKCpZYRS% zKfkmz->A(`kWZ5(r%hfWhY`r+IT6YejD^v6S~kBvvGezvYp4ClWL8;UQK28k*O^+h zMTS}Im*K`DI=76j+1OWFq0OI9=ROe*%24_^&8Mra>8f0G+x2}0PTLTo6c9-j zAQTlJ222$y>o%3-iva3T(#Jm4SKeQ>8H0#Wq!R{0k@EDzLFn>-CN6zJtSwR-%G3b4 zw1|+Q+$Y7xB5m&DYW9h~+#;=E<}O1KSxs0igRD>JF4iPygN>eb3kD;VMe{@z4+k+w zq3B2Y8lUU~0$W6qxs<_AimjgD%GiT4i zIKk$1{%YD}$~WfcgDXw|5-l^VRzg8ntIbZzlDK4|3z)p?wxat)5D#fW+CW?5sD&Gg&wS0@VvqfwARMq*3_RI%#(Zg># zr}xd?Co>$#R&}WTA7(rCeLk|la9rV;VSPEA|4q2xK{s%8=`X_3Kzte9P!rzcpi2pD z(srU%Y~fuF8V!Tbnz%mySYs4^qnxg2dyC+U(c~7XFS{t$E^2jR+wp*JMoA+72UY%F zB9L{~X?yxrJtwp|pOE$n?`xExi|zXpY*;gCd*|*A_PoIX-~%`?{Z4HCy%-o#acZpN zl$M4AStyz+Q|JFw45&~N>3U!-Xve3-0L=KfIv1a4#0)L_RWIt6DHF`W6CP`(wN3QY zP&-_MUF`X`d%h*9PQw|?AoC0Ti@7}y%gI*E?u7(BzSHs`L zrMv)Fi<;-d0c-={!p`DrVjgfg2wZ^l`{DXH2p4vxP62I_(*zYC^tRUZ-c;n-V3BVP z|KBO{FTFWuKtEX6!}P{fPtJUdDoNg7tTb!|w46aM_w;-&AjA@9kw`(JdXa>KEC}vG)r0hokSB!mrsGqaQi@0@S7ZH7^1_Q8$6_ zOUU6aUZumk;!Di~UrtjLt_^4oU#e&bpqSEtCT_T`J|r(T&g})-+zZ`n@4<^0Gx_cX zZWOvv#%AD0;K6HW_xd8a=*oDq0tFz@mcAq|r7~VxF9I0kb0#-C_&J??5;+-T39*5- zLdEDhGn>*|lhW%<>BaiZ0Uo$#4_-%Xbe5VsdYQ%86TG9>;bCGOCGI#co7jte@VLS- zFG2MhviM*H=^**8jp{wQF10qb7|S7Xq&#+Vuca2N$;G7L#;9KGOzfZ=BYVAAu5rIc zH>!HQDfJ@VYqT%gI~%(kAJV=Q%#S{xedOx{IwW7ahde_5%Jl1ZM6Z}N`{l6dFcs+% zW4(=~NjVi*SYYfHQTb&EctKbgY4!8Ot4%`1mo1A{Y}&>4l1ga?My5;iDyi;B5#zHc z$}fj-BINxPW_Vcl+Dsy15f*EclLUL0!Muf~BT`SYWS2lSRB6|qyFOiUuQJb$g#(M! zLKbEzorbbUbJA`1e6iOds+`jeN}^dl(mjbf7F{Bxa*X^JEPnH!WAlISZ@8Y_`Oj=7 zX4`!qS^Uc1KW>zXMy=3x4MI^BJPcJmo*(?>XiFY)W|EaKGk*{)@`v@!M@oObV=j$_^i# zEESd^!QBZq5A3KNtaIM{W-JF6dqn_0pbYBI6m_V5OUoPhx*Ud?kEs5saiIL@! zB%X6I@l}@mH)gDP_Px7lM!B7<`lT+6;&)@wyY_AZal>A}sm0$NMmj5ST`#JR#Ad6| z4CLEA5dq|>-N|y-XYw>8C9|GRORFUntZLbp9!%#nUw6OnV%h6X({&8lq!Nn#HF=p? zLg_wmh2m_yUUS_69BW4m3L zu~9pjaQ5Eo8)P~aX59}dHMLAev|b8PC?}2DyEQyz9}!%*;%dFU%(20iA~mnZ?v1!+ z#`SG>MZL7}gol|-R(6-qwx^iDzn5p{TF~Dm+F*mC-x&VvKO%R~r^3;y>@(K@wVmFb zHp?uX7+rGLn$_t1K&H(2fN8O>IeN7emUpGyeXf!PjAFyG?hzMk#7baKz3{rL?Ob5{ zN+v#qbek2Au4t*a66$M`tAPW;HYPf?E_^5W-k>W-SpCpU4lqnP*3N?SKDV6e7Lzq! zpp&%MHzU`u%WVDub*ZFr^B=fc-V*vr>SWcHZ+HR!{|b4VYy{?czM^OM=rfD2ul{o)!ETMM}5=rh(b zzpI3Dp1-!Pgw{}m$lvL^MuJEj8NwN^4a?I_h%haQr(ydS_;;yVh_^9#yyG;jFl|h!B7aa}EZCIq_BxlO!SMTTWxcvz?50_WD)y?3!O) zdyakyqYK8g52VsfC3N#bU*;iwv&{EIdunruZ_%NQL(7{t#Mjvl#hBamMJxW{Tz8HA z`8B@uYE>DiNonad2*~@Tg%<+YBa<_XPqtT~@@4GZE2_w(j_D6AKfVxs$aaV(sh{X_ zuDZq+lhmd%(^zuI3Wevsn|}I@^zjZM`Dv69>$~95*S zC;Q%OOZj$-ctsu~<%*JJSg+)bbq&+1^Z%-K9Tu~{B^ZmxX%79eSO3kXUqcp(GDqT+ z9^b-EEx_CI(iVU7@|<@9w|;j9yfRCSP%c_M)JC>czZZ3L1SaUw_(Bi6MS5| z`n~t1zLK(gL~TE#;){T%3e4&c@M3d8xUE2Z;G}HY`#9Vd<>DT(XWy&nSWK21&jvip z9rxSq-Y{>}qDLKDT?eOXj?27W=kV41SNTqddV7`a(9}$Oox`z{Sz>u4l#6a6a(P{$ zsSEdHEPBE#_hLK4yU6SCc)VVR!gXk>*Wxtt2t!t;FnObpq6l3{fe+foyIg5C@JJlk{r4ZP22 zyV|u|y=J??(O`ElOkb=|-qYgm@RZ#nL&NolACWULM-!>bsdU4s=WVI-<8)s0Ft_K> zD;DzSJ2_*EDax~5$)XTfqdL-`zxHNkrXdS|S6#&|-T!Y=N zi9Ls&71p+g^p$KXxB?a9eD$i8Q`b1I`V^+hY^;Px_HI|9BUJywUh#tbWF=lf*xDDp zmmz6Sea}ZfCnsZ84^rkzk#CFsVN)S+w8R+cE_s{5zc;8TnJFM5``^Afz^A9ys*f_h``uF@gf2`*lcPQllf)$B}@-T^y(mQe?e5VG>X*|nliU9;Xq}a zhSxqO!C5+XD)H;6VzpP(xFj+MVno-M^_7-cH8@-6|$kdW7pb?R~VV|vn!~bMcTb%SL>YyGR3@+iBY&aS?YKJz8hqMd%@> zV?z3mg6Ut`Rnz%>>0kM7`j>A>f8YwES^A!K9#46s)r)cXj(=wJgJsLM^;B!HOC

5tFY%k|;uOJ!#PpIlXhecoHXM>o23f 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 Oyiq%I_9ug{-ue&fkJXj{ literal 135472 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_S3/hello_world.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP32_S3/hello_world.bin index b5edbaf6559e36fccae1b07165e2275e3c3f803a..9c9ad93f4781759b390a3b64fc4a56d6b39ac7e5 100644 GIT binary patch literal 135008 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 literal 144992 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�P zyC2+R`#pN9{~IbeOK{s+zT!MXV)#Vbz+l`ufVT5QyQhtasB0r& z5rEoA2V6TqL|dRXGJOl|cJNah35Tn0gB=(+Un%(72!)ShPv3_2xE*Ov{|W675dPb6-Yzd@8Eo74p$4PI<@A+H2ITP?*I&}WkqeEWLl{%QfD-1v~uGXOp zc+%m4JjTBC$`66e|E)6UMw!U+txK#Wg}JO4HWey^kPrT~IvhKM@f7fNWnh9V(g8n_ zP)PBoy*ilxmvop1y|TPIEMAU6z_T3oB`OCq>XhoD0Pzbxj5i+wIy^Hi%>(yfmboqDp ziw?-5`Y0=4timgQFWU6THu=x?iEr(fkVWzzDO{3+PlQlF*~#z09Ef%^xBW&&C3C%k1_H99}Yi*zXNU-Knwpfz|Vu< z0KXlsFMTucBWscT#0PhAwa;czNK#0gN~^r+@vGriT_8Um_#^&G9tqcRRocUm!~QSn z7=uY6lqTqe4=;s$8LY)vCAv`7kg|XznE@M+Vt1L)@c8%kz5+% z84bG${8EJ83bXWyAep9{dKVDtlX_ z{UBBPEY)}+)m)L9R-2mTNG)!=Ms@aqSR;L=DSlgHyr40!)TGsGvNmXnU-hUX%lNj} zep&vJROv*jaWK_vPEAWo&B{tGE>5keNUg0+bvRPnzD<|?8toB{bVAbx`GXqs?V7az z&}2QNDgK$J;weq-uQiSrG;Q0yMVEuYb4Sr3*gyKb6FfKMpP_#@Soy&}Dx2v39K8Gb ze@6a$!O0)^Zjk*Wdb}SzSNqS%e>+&&hQ9F+KcN5JKSTcy3-%D26PYNn z!=GmsvlIZj>p*@t|op86@%`8s@;lAovX5IyvhX570KaqxT2V@@`h5G;#@QotmhX5aC#2t6=Srm)3 zz~LNbunw~H_*x(;4QoZZkAY7ZW2XN~F z9e{4=;)vxeCfwa%6)dX=c{l*w!?O6Sm%tgfQnLJ5kQ41AxxbM&qy7U7*BS z7XZJL)9HR(#Z0(=@jUT?9#6r=Z|S^#Kir=J?j*crG{eESnQhsnaKF4uF%Rj=L0=3g z11uQN%w;#=E;1kmWz~tZwY`9O@OQ&K0C*R$2y_eXW9BSC5n#P~-)!Vh*bX;Ik8?ZJ z9iGnPU*dbspI}xELYac56JUlv0`cy66+4b^IZx-rn{{$}6MH^4-W*AOd#7O+(#Gx5 zZVS`wo4pHs51<_AF32MPeX~utZ?bnLvy?$r!Dl$@1FiyK2h;-AQyBPS!0TgB4ic4{ zL}z>`IQQ$vzzgo*0OtT-0Ul>Yq$!r~RU{%j2XG5uRxj~G{oa5+a=s|u90fN#5BFLM zn56~yA0TW*ILj=eUKpE#@LD>fwBmkp1T&w8y+D9;Bk)h4?3C~qBW^S<2HbEb){)~- z-ao~+#i7jnBI1*XAKKV-Kv5y?T_QXWun5q0y{8RtM}624Mw4Q0v^4>p8BfJP9KMwt z!dY#<+kFhW4FJ^WcfD{sQNQ#(*DgR7=-uv9Zubqy;l}{?kh=`HaKP+Nx7!@dGrs_i z<)ID=09n-LK|f#v-3{m6^Qf;Q?GW;-B|VX*81O)TetrkinR_4u3~G_a4xmzApT%b_ zIKXAS+s$RwX0fc^GK#x9$O0GvNq}&G02{?`PJ%ICo0l;BE(v!H?j<_g556bpk;En-~ z19}0w0Iop%7FiH8o5Gp72maHw*mFWYjgMLsx)EPH(6~4o;kCfm04^Zi4QS_O!5AA5 z?m4q}_Hnd>V}M@wC3g?pHsA~H!zvW%7DO^jk^%Q+(e~YsFJoDdTZ=kd4roKWU?Dh- zHd7V5XR|bFXYzRR#ypgLQm2?@2BZKOU>+b7kOo))a6=x-?Y!H)6Rz9uS)6*i|KxTL zP$|0w_RAehhvc3>#crhgKy>4Vu}{#B=>AtH+{1ufAsFxBUIc){%x>Jz8i3y)`*IO* z9Uu^pg0jj2OhEe#2cW*(y|iCM+@ZyEf6ndx5_|75?6GSA#{h>B-vj7If7u21re%+@ z?Z9^f6qm5J#tJ&?S+_gluWmQ3nt%EWxBDb60?~^55NLu9`6n_ODq)d8T_H< zpRg?46WD|myBT`SBtTfixVjwQ2%p9numIr>^wlJP%pU-{TTqTZXhPcKh);okI{Y^$ zGMj#AwVJKJAZp%@8rm5-v^s@}YO(s^>g!guc1o<>pS{`Aej6Ka7sEu2)Ucw~QI?UQ zG_G2caYzvmCtj#@sN)lOqb<=HGPKGhu9xh!lNtgvW8Eb2&AGEOceRtQ-fe)P7%V8^l7l@Z&MHTsF}@= z-c|<#LM0;x2E`!g7Ol2j8icDWV73dgCxx>O4HAjxea4H7IW2nxCP`)MgQPD6X{y53 zJ6NG}82BEZP3UcMAi{qw<;!|26-ytN5>!2L@HoZgdWwrz4iFti6V)tPC^USF0l%z8~O@WSWor&89 zV|EVO_E7@sb-Zmad0YX!Ij*z$1>Uxsg0^OQCq6q^;^4GS30W#hVz$=_S;F}njc3kI z;+x;_6USMf;B75~Vl+}LSJ$shklorxh~iPT94P;+_7N%*Z%|CVGIpyk*4Y4IdA2H& zf#j{Dn%}FJuM}(p%)4cE;!uV{EG^ z)ICGT#nf1|fs)Igh1YB@9_(~hc$8_{8D?8SX{P#Td^otnKfI=uvlYoKE``@*ZQ~Gp zjDj(D42mJhk7W+!N|$J)H;3VZ8YZALF45%N{K9TqI5wf;EZUtNS&smqV&+G z3*2Qcm+`h+NLGh*zEcOYwNL&^$xaG< z_86klDAzM~Oh_~j(hu?-3l@u2SO#%F8bleI#jHITA9#n7&ko^c3^MGr0v7$@X%mxqy1-W_rMpwuMUuBYM>Cv-Js?od!TL=MmDdcI8@-^$yx6ofn4 z>t07LRplI}`U1lp$+GzmieoYG+BAdFYLU7~wYoRa8>b?I2tgi>c!p+QlValuM}yYx z0eJSD^YZc3q<$Bdv5L7;8MLwP;%E$p4E>N>*5@=)cyX=)w-^B3z8Zn6J2BAIL<&|$ z2RrN%c?yGTzYuDFqrki{uC`^3el{y+COT?sHUA-+g?&ZZ{yM95!y(h z{pi(Nah4ch`>iJ^-a&}*wk8US<0+w>1M)mexQO2kJmoa;hM|A7v$PnhTop1Ch}tNeZ2Xu6|G9!b8=E;vw@$#c3`I5 zAe8ghQ1MhN=dbp;BT?x;}MV5ApMBC={)nv^J8 zn6_K8O_Y;-=4Q6p0~IT@SRBN0Mw7JXtlKtYB%-PZI@+cW)J=zYam>nuDqEZ!Sb@M+ zJ{{d8X22Ocuxf=kcI9iFsHt5jrKOd9x!ZQ*K;4Z%uT0>R-*rQcRdKe+fp`WEh<%Sx!HZ{s(o(E%lc2;?Gem)uMwQy`-0g*2P(E{D;*pa z_BN?|*WN(qxPkV!25o09A#(w`4Bb~5%f2#1tgoy|5|vX?=gyD;+X;#km3v-uvy5Mz z$VeJO&z8%(%b{&|FvzjJN=csDdHd#8&IMzNxPxouU7xt8`lIim&8RhLJ2mM!EbDDe z+IyPxT$Z*+lb$CJJ=A_|gO|Mh9*qoP&)5}n{!*I`*4c_!2eb1vVURFB?si@Nic{1S zDP7&EOUO)RDy!?ggtzT0(n4;h*|fZ?J8`L|r0$DL`9VD1=H~;=n>qtlY_dD-T@^`{ zopFKa6)pFe$(KX zO9N(|R#eP?^-_VdXF*_h)%c|R>Aj-ADu^wAxclycs;Z0Nl2%nwX<#dbud;qC*xMD-*(RZ*TR}uUCaWI8fc4QeJhp?^SF5~j;6A>4H7Etw7jjGN zei>;n&GE_9ewi3ltmEQizlvCTDf_`oll7Bso~heCupF6e{=~i5Ukt0}Wa3ZVc5bRa zilpV?9e$z970oME#y4|!C^1X@9bR(`)?hhRO8c$DXgowrfG1^r>S zw+%_@QiSCa@|w>FcA-eIJ{4M()&V(pOq>Zse7izil+_(bgP+p%6=E_b4~6z)b%{bH z?$FYDlF+XW?2Pm9f6ra@m8U+_n~XV?hZjPss`(HS)oj|Y+M%?)eo=0(-EkPh2i-d- zf(+9{^Fg=jl1yidq8vv=T#_bN$}I(TZ@YnTG2xfsF>b1i2*0$!ptg-8q)|?VG|gdr zM2L?FVdt1jm{@c=&h=YG#%ksayky;smc&?P5c4}e#vWADfR5FmuGH}>H7a{-iv`>a z>B*fs=t%d*MGLO=3TOXC*G5kp)+6-QMVjw^qwtJNwv!htDjh9q+ZPun+p%Bn9;-j2 z5;a(}xpu0-Fr2v>6wad;o110bk+0Czs^)q{%#n-bmr!o{Muk0SyJ2-0EB_ozl+~H6 zLtVR#YwL(H@X!2=Z{Zy~=QkVBotP zD$)WPZzPE>J1OG&l>$?IGCq7FRhlVc4;B>fT^g*^dB^uA19Ma;CxsnxJxP6ZwMTOr zS7LsBF{06{C@MUKM~aC0i{)nweD_flN39}a?L|bSBBu=eRw{xaviTQ^7M(o^lF&B= zSEa&Wse%y!{A{Z(+SQX9CfX7%I_*T*ZqPRPw>3(Q{>~>UyxO2`@%JnjR~KmIvCH;z znI_OyezER{7h7oE)l{ezHME>0p3RRboR5%>`f>&48l$lcs}D@GSy^Q#R7aH5)i6L5 zQ^u$IH$S3q7F}$9f*J&9T@Ndq1w?CIeg!R&dB#**4iQ?*6waSq)Z2XR$Xcp!-b-|@ zvMcByv$(iy&~Jp`yJY%eh4apf`k(vgz3umoi&%a&@L0kJ)f!e%|AJ1Q{*st-G3O02 z-NCV7Gh68FDGlt&4>ZS7>hUN6OZ0dQ;%P}V$yo}=TLV-nyg2H?Bm}#nxJ1)MbGH_S z4AmQi+S@wo$6eo@(5kRFI9u$+#~PYo>D}elw<|L8+!h@p9#P@9KG{@@7K-6mi-RKe zdx32ZX735??cgVW!fELPFPtG65%uJK9PE&cVW0hEGv09_-^^Ei%+7Xx zH8HJcqSmG5B+t&2&sJRCnr^18>D!*IX;=1W>`iySpa3nlo1PsiCtk$X(G+9cnQBTj zVn@4Kn6JKwtz;ULn6g$nF5oXlanUSq2F(^mD zs(Dm+@;QaHS%~ct7$^9x8O3-Zv=~2bWn=>5gN>Vmp<>Y6T+q(W@?J?=1N9M={9D)x z>roEhl}ql!3mOhNyvLT_*%LiKHd~eY)4uGW-76KlS13Z4UgF-lVD1r^(xGNdIxQth z<{s~cIh;4@Dr5Fvm>kD-Ul4goq#ZRHkFJMh933*=d2Gp5^y^=nk#C z&Vph334TvJo8NhXB^fR0jG5=AEpS+ZxJ)HWk}T<*LC1`9@6`>wT=Aoi6Zl%Zf&>d6 zY!M zUW-?dgqO~USF9N?OB!D3S$O3X<5g0DS7j|;s~vbXwc*u%0I#kdybku_b(F2t+a3C+QL#60iB%W; zR`4nlV{yjV`_Ve*n&+TNWKO#`YT#uPZ#>>_3Nn7yFYtUYFGTW+I9@r2SKYGwzdc7N0)U;Z3Nq9RU2HJylx9E^IN^4Av;lxa)(X>5c_7omLe9k=cV-jDx` z>9iQ>ah za?{Z?M{(%nN{fQK>4L{*BOMcrM}@?=3r3w5b8%=NdaqzIQin8qI%Hzh1v7f1qBg*S z1Q{jn@k!>7gTwpHr_HcVc77pr?pJii)h0$>Fvqo}2w4-QoJi`RRmU+4CV%RNW^-r5 z=5&Q_U9xWNq}xG^58N1!Zn*kjQgA_6>ZTo`+rg2#wF`-Z_zk9O&~4!SH|qA}P0$Tv zMi*JT+I=I5Hug$=-;nivne=^!^!@U@T$Z?MF;&5RcK(X8{Pg^AS-vw;-IP@o+HDINvx=6PQ|I=et|5 z^0M*W=3bNJ+oWb<;aI$wUN`J!OrLqBG;D*FlFDu_aJEuX+U zSDe=?XhKFhF}xg`LRYVEeJ{?F!(Uwvhm%RpMay-0O(M>d!zX;^cJR7vhJA<3=W^J~C!5*sKHtDcb1NGa zwuR@bVYJqtmQ|#(vZY;)`>`Bn?H`Uyy&QKd;vlBE&+V9uU+p7(L7R9v-t3J(H8S3- z*Qu-Y@`e*(qwke%mi6bb;;_Y>x2qcrjk*StJ*+XdI>9F z^d5(|C2Yejey^^JYEf_a?;Bc{SLbXjiS}>m3fs6m%?Yu-ujbF-)Yad_2I zka4ejV@`BI<=(LB5*Vc9{-^(w;QaC&G-&<{Y2c}c&(Fb*gZ21+t{v^5QLuCQVX)uG z3814@!D5b{(?zn%NKTquAqH=V}-qXgVjIWF8~8F(E(cJe}T6e3Io;tvv6pPM==?Z!1m9cPZyN*+?yLiAiL^oYB17B(PaJKeOA10Mq99`V zIZ>J8;A*Wa%=tv0<)y!StTKI{J1tG7Z}HH3rM7_5pcaFBU>VaO!O^*#e$ zTS?=Mq@K$j!jWx41&e}L5rX^}S+3cW$p%~J$nXw-W&@!^mOO7(@G0zy6 z%?`u`_Bj}~S5lW0o6Sy)7M~7(YSAVu8BwT;<#ALDf4XzK)Z}>9bu+3IsQ49Xd%K3u10MS2vUNtc+BMqr9iIb8Mz_`>6(6Qp)>kVe^CXDR_0v zDZi-Q#5uN6F1OAhOp4yyl3o zU)UiuIr5u(-Q>qkugTF!HX2_)ix^8v8TzDXng?MwU5j4gZO5K{p({v14IbrY9mAR& zOnXW?p**4hV}2utNSo$dz^{yr74aQ@PW3r4to}88{&EgR()bxXM*hvpb4?Deej5)` zI-;&9J75po8GjZBfe_q2g;mrlYS$Ut8nv6_&H~dY;&mvXVs#?02Rz3q0pg9TsP!BY zdm6RFXiB*^pkhs8?J8rZ=iEC0Q{N6H<_hce=#7*ge+F|HovB(yg=>u5MXCOpVV!B0 zC>zkLd6Z(Rzdpp*e=D8*`cmhiv!dp>{|?Q5&8LmmRXUY5^X&goEr@C|n;u&C^r-HR zrvt_}Hoa-sp{9ZE{jgEzH=V!X{OFZ8D9#s5xvNkos%a?=wfu7wtaDi z1Uk;xnu!th3)l$m=UoSf>YQg$ZNwVp?S`|cJouYZWQ@iu%(nI{W_g&TI@DT<0?dpyd!FbG1k$1-rYf_uk&u#pZQzIsUz%E*%k|P9T;-G zi>&h24|&@Y9%aBMqLShbynNh(FeZz(7bH}yw=G&6_z6FD`(~(-8rXcyee1fhDS;a~ zvsrP1TOT4$6~kebJuMhGF(g_b+pstR{hV)A?16=w)&UQlEx*7T16Re>TC|hnu#~Tj z(~A6z>G4~{`FEbpRA!F3d%8;JklO?nVVIebh5P(#K5XG?)?pRIwgp;05~eEgf62jS zos@jaGuPQN&PJ2DhRQ=j;gad)=X{nC&*owEk%Z zVR!Jea4ZvmOxcnN>v&T_#&L`}heG3ZjwGoqPP%*b5v&OW>to(}gB9qfGtVAY*!{@d zkAyY%8lPK3!diH{f2ASta9FEg^4sBW3I=EFzv-Nfk(m`~Ga`rNAoOkFyI0w!oNZBW zYW$-^3|KK6f?5@bzI`E?q%RR~om1(ETvH{R$Wb>i!~cY3 ztIyu&zg*SIFZb*5V*{VpG^gu0sYFWGhh;3oS0d??Sh^l}EpQj3N68M)SRaDrj~~3< zt5O6L7azhq&z~`=DATPxq*HNVogbYTaq0|CQ(;gvAol~G+Y_Cq&NPHIq;5}Wa`G>J z+`zZ08#Fx{_T`M0#2uV{oIM5Ux;Hf>+PRK*Wz*ZqTSD(g0AM=CGLi1V7 zD;eWdx=2o^n-H4LVGIM~>pvI8pcD?jMR#jEkF|2*8)sStgTg>phNk)tj1$k_-EnIx zZ%~jf9+Ij4Rk*MyZo!$DVB0}G-1h33ss1b1Xx@(4*mQb+Mn-8;KOq&I;&xs z!L35NJ`}~5?o{8sZlirp<=%m_hG*&4hCKG$o<9@K+10I_Tx{K|*57648Zv9{X%wgc zXlJ9=f9}R99STuC{y}@P*7Nz3l^8%=jl3(zy-`PNO5kbhlC#j4JgTQ!JL z>zsa70yF69>dr`;I&s^J->~&~jiTDSZ-K%N-+6GlLz(l^fUb$_(a`~q?Mce%hB$xn zSCW60f9xAVR-CpSNwx*jZfMaE_5j_F1uV?44%`El_X#*vpgxL7+nUp$@#-cy6wS}c z_oNb;jwiD+Hi8*V%(j>q>zt|@fA1O``FkECD&-TGRcQE=$IzE90qXhcAsbKV)+&yE*tx1VvQp20AT zp>nl>8NC-8ta?EV>#mGQIs<$)h$7~kkvkXVSH7N-(J$C$QEY@7{34 zUQvrG^6eFEUR`Xs1V*PeXXb~W>9GW2u1M24%7?^&Bi#P$S_Aa2(v+7egfr#&F zGWu*K`*`=*Vcwi z97`8Z5GxtRfPst;scq2bkNq^+a|TwoiRde%W%}rlij_*RknC+WI$EP3stH>oM@as- zuZTF>L;NvJ50KsEz%p2k6>Rvut~*DpYq2)&a;UL13Lj^^gBA=(OX`#BYkziKMi|$^ z8~o+5Nc5LS0Gt%5L+wK?v8c>Y{~>u;0S(e-vQ~MJu!n`FxaIhaH-`4mu!H!9psUUV z#9+%&oReZg78S;*H9pxHN0sFlvKl$e>~Ds@xOwgA^7F{l@c>7QvB$G;rqVhdAWmiz z%xsgh$8)G2;C$+It=)*I4*xdK644)l2LCBxEZofO&RY47Q8mV}nHM_2ev~*Pd>+hp zq}!K$-vbh_@L(^y|LsHJGB zAuL*rp4u2D$JKTBJG=X9SECbi^{?@j4pw)x-$C-eq9XN*Yn$46QjmK(Ht+9R8KYYdqIiax{=NJ8A7!o!3AFy*3p0e?G ze%ddiDypfhs{L)p`klvQ6mFqu#TmWWF?x%U(y5()?U(V!O;o2qHPV;~{0AO<)>U}i zySpNtIF1dcn9yt6+u!72c%bt8{E$z=%tEpl_Awo3WpiOG2Z< z;ycz+fmUAyOO#yC5lzI(&Wk}6D;1K#=&J|Y`hMrBzKKDR6Lo1BK`Nv%s2%bRR$S-) zRsZVW(XP~>uGMLi{TRIHvN{y2RvIorgL<`-)p{)uP0lH{6{I@}kV(rgfS(p;*gB~S zHec&S1@(!D|0I2|pSf|o~olwJzu|$J7+>O*u4xBh{RK%nG6DRvcJlrp;9R>`2 z)c=b6Yf2^tNwj7* z9H%R4&(yCA3}`6-uzrSr#O!|D(CZGu?PG5l-NCyC+yS}`?LRQD>#DUSZnD?fyF`BF z+Q_H*YGGq=V`OTa7^G6NMf{`?&^acBgjT{<%Zt$~Lud^t7K&j_&K}iix0pbSA;^!B zNPdc7zAa>8NMwE#uaa2C^M1gY1dJ2N=lD3|s;*RiV^D&wI(E zVq`)_F4akcTD+}xwL;9Tow1_bX@;0Z>e?4p)TXXc^-_CEQJXD_FL&J`R5~1DBpQD5 z=aZ~*j(InuW>=uzmo5-LQnMe3D7d~zhIY!}M+d5u}H zqxP+qTZ~EVYYa$%#?jt~@apH8ugS#R+?N1LxNVoO->{h7eFq&1}pZwTp76E`JLq zCioiFbxnQkvYvL0cS%4OfbE*i_CAF1WrBBx(b&YkYSMEZ=~-9bCziQ_HNP40!V=DXXw5T-+#u*{`!MrM-O^oC--q3{Z z9StM+o=I$?fv@@z3%||wGZGz9Mpe!a_hIWNgAv7j=)?SoKCE{QqRz9Z&J!Q(OP6zK zP^5WA3VGyE%unk>SR9kKFfh&25fu?xeTfhC&A-1dl{7La6Mxc&V@|Qmm=tLCBvIxE z7gvqJ#__x|)*(!Ue($>zr}w3AdL0C@Q7p~V@fEHvcV>{qX^xrSck7r$i?ip}U-7DB zX5FNyIS;DjH?j7!zT?IfA3W_kzDXyzUU5g<)@Q&C8|yFJ$vo@OwZvkeYu-W&PjF8W z%734gM75SG#3c4Lz1brp#d$uYCs>sw-wsI?#5~8mHKLHpiR14O9JjAH=qQBkQ;*MA zZWizEd_VBOyOKDC8dtvSkAsIeai;9o|8a0o!00$tTqK8^4^a3{aj`G_r@@1c;sftV zp3ar8e``>jAWj3tdR**=ZFT=(%-B9zm6c^=O@-PIU#VfTPs5ngr|uC{J7|(ZLQ5nT z+lo%l-IiPyqwXvJy(df6SI{HlwZ1H>!=HDoU4aa$DO1R#qhN)j99ew`sx)%56#AWm z$-Ct7&9xEhAFlaX-+s(B&y8aQ^0_ z@|TUHZpB0yQMmSP>$?W+SSUwXQtQj0sRSaqy^iPf$qTQ*i5712`N^QYp~(MV<2G;MGn zz^ci+FtPpS)XE&nBhD>Khvz;yWla4kqg|U!>n1rt`3g*u@{t*h5!ofDVC*ukkTTMh zvDwV^Gu#NxAIGcmjLVL>fsi z;Ip#wCQjm2v)O?Lt~Os1!+|a2wcUZ)x1Or|q*s>h{I6agKRH}}!Ltf;bTm0yD&>=| zXqD}Ey%->Eq4cgxkh7)|!?g0zO{h+c@Su2UQX+WRRds*r^-gc9&^ZB#qfVvE3q+H` zGwQ|Cg>rF{EDqQ34fKtkWDbR0*w`_mml*ZXec zt(Eur8{?ZqRlaV4Ev2_>!-0y(%8IheiYJ#gL9mrK&L#3QO!KO9hJQi(e1 zVY#c1=d-G$wyw^K!<{SFr`O-~<4r5Yv5%Oz-;8=qH@UI?8Qd(r+hjV>%%x3D47gVe z-Eb2pssePACz_p!+FZ`@TWM3XF*{KlfAb{4m5EXVQe>h63GX>h1v7Bthqw_^| zPFF#7Hf~m^nm@v!yfup1vw!ZNKQ6UFCkBX9wno%;YwhVrl&^;WaPNGWr(xX_Ogg{Z z5K}~c@B~x(p+tO1NoN}{TyMn9X#H_+s^5g(r#92_m5)|bU38a3XuDqp|4%s4PbJ?b z={Di4D41*CX~t4dAHro^9Bhx!Hg%<;WqFQens*Pis;nP#Vi@Ld%7cv+&W}zMRV|6- zmzv%zXnv1_&0A@hA)A=<$1N>LTpxv-t*Yi=sL`~ip!siH75xVTl@saGXsc>JoglO% z#!eo){w|_F!kH3}D4HV2?pL($)Ha*YJ5a!}lS8_55lvUVS<{sagf2Vj?^wp&^+vT8Oiv1$*MxWLXfX!6{m|(;A_&Rt^%B|wMQtMx@KBW z`7-$G5QuZIrvd%DTrw7qsJn(B`Y7{=;)GJuFGPlzI|Ht5DW_9HeX z;^WO!?!;)El#Yh_`j1i8`Qtc)T;bqj=_-J!v{hl<#o2SHpCI$dp1p6qnw0pG<&RT) z3R?ftP^-e#O_wl0*Kx3+a&Onu{4LLwcj3#9r#998uyaGZM$|=*MP+LC*&A@CA3Zif z^HlVv#@cP2XP@GJBbquI?e%MLyF{FW$+ywB4{Fdo&0k-r>1b+c*E!gRUkA4w7x~|g z6I)vB4an2Vb$qRkwmT%ZmDg7e!1cA)E_t-gJi0?TyeNhLa&3!FZ{|{U;};?m_Z*e2 zcwa`f1ljsdB4hR-i%xr+Jw;a?bZduF^smB1mBOb6(cY;g*7g~tS*_FBV{08*wf4>i zzB;zPLuuD-vRB87{`pZY8^$yTEL71gIMM~OTZQ$D?6D2HH<6;=B-laG5o>#&7*RQ4 zkE08U<}7c_gF1$fn_uA2e-zEF9D)rW+xxNE+d5%CPbVh&etDEz1M6!|L(>~k&F|t1 zX`CQgTR7CtE55rg`N08+`@XW|1Y2-em=j{@nuqGcSrn2rLG!)_zG78nW6-Lt4twWT z-Ks{BRvTN7HpafXCJH{2<<($xAFb<;tmZLq2dWz)`j@#Rdp)^U|OCJONl zoJj{IUC(pINYAw=>gSehg%$tfnT}=Tu@oIXNcan@bgp-j_vAeoeq5m~HHx@fIW;O3+=xrFg_A-2p(~(G} zy2Z!tF?1wr1BdTb4#|DF%fY0cGUGea4zURbOUKc7*FR`W`$`PhI(e)A))|!#2Dd*L zLWcpk^588alTP1_UlrJ}#=j#rVB6N%mE&=0OD1y9p#YspoN!}ErFJTHmSM^PYkZJ{ zdI0Z)ui*{j;op^iB^8++MJ6iiJI0T74*Y{?wZ?bBE_I+A>F}I0X@Z~ z>E%fSX)1M^&;lwXeG5awN_$c=R<5B_{jfoYeg&3V8I}Rh`7-L!!4eY93#8_cSZo*F z-4m=o^9bIa8DLML8mc~;k;Iwpciz$vbbf9+-Th_+QL zQ1Z71Py2GOxn<3UH4AOqPWDU=tXSnBIR@OU38;VBZ2SF5$zB1BK|P?;mvZ>%#JTxo zPgJ1ec}myf-||}hYona4Cns-`gJMw4hvGPqH#e<`ANS&!C^OBaam zEPlPBwzjOhasGdvytlh^>zdG?DUl*tJ-_;-U5RS4viWwRsnoL#9SV3hDslU;y-Q)< zs3aeMEKJAY|;L{dA`K#knKY%-G20FYxO57LBl(>daTLRIEBkM44fs%T7ZF zacsbUh+^8l6`g5i-RpOzoP2Xz+ppGyZtauPfZ#R0>JM(&L__tEIG^&D6XpHze*UbJ zJ!OGuNmQGwqnOQdvf-YUV+{z|Df=yoN~})s{Z;zyo0>Z~d>dEuG0+_fXTr(bw^`e% zffdiC1_A?#G_fK&_<{B@5z|RT3w6;B#qHZ%n>m_OV{RmDQzT`iJ&LuzrLeYf9%PDe zYx^reM+?bcP~WMGq@;G*RpV2zi6^@slb5#ic@R(ynuY}Y8;gMqX`8wh{eSGeeSA|z z_CJ1eleTGkk)$m(rB##kfwbb9CTJ7HB?%Q%9(LObwXp7PA80M;egs4*Y+ZB1(=F7s z53Zz$np7&KA6QG(wSZkiRV-R|5#3!t9x75OP!tulwuOA(=iap7?tVYt{eFMHKkciN zJ9p;HnKLtI&OF>XXZV|GXeH@3Tjn_=^C)xkyO`$A(ibozO?g4K7E1%|WfEgl{)||{ zZIo}Wb1_%Vbr{2P3`_eXwSd->v4FQ!!cIEFD=k-9zd zjp(WLjDI6Kv$0c=vQ<|5`9%Z>k)rZy6;Uq8CBGa}uxYX^u5J+2JO`4RE(h112r`0} zPD+EOBIbFyb?*U1^V@B{rUn_mryqF>Z%1X#a8)YZS!%D$SrQ$$5C#hpRgbS9vwl}w z6tn*Awpo*^qhKvY>6tbyQE;y{mP=$%`+ax%nWrLlD69CT`qKWOaU;6f`*Sp7L~@y+@hXe?GqRMPh6}K#6DnT5*k2$T{%;F z%gFpnznU7?C?0(v9^%(tbd$Z15uVbCmTvqH6V?=sOuvx84VZ#NN9!LWzm-j};9+Bj zr|BQ2fCB0q1!1|1=%t)qDo7BmAm75U+(#(b7?xnbBQ31=FTvaeQpki?GdVUR=c402 zdbi50ubM1A=#Ysoe@bF8s`_VM#NsI9*8~75YsN5~RF64a(a$b&Vn(zwuZZYgSNSzO zwy?DqNSaiHS7f>}D`J{xkOf%tiiU6s%GmdU+c2&P5$JInCbtvKJMOuB}o?rN?H+7 z@y7CYcI~ksj0=1Mxp3!2|II|KA&D_`l87~wFijCOZTe8;1I$&#`gO!y>@j1rmI@2i zICjD_KliIIRt{m6rROgC$6lOF)g`drcK$}fCs0Xn5~)pxuOwosW_%_4HeIpKCc91H zmt8EC$@p;>CsU7h$+;L*6E!IMqkpiU_~UXY;cupdde7!fQK)I&iCCdAsWWl>9qp@df$fClrnY{rp}czg)qo3R8V*cSYmnt~WL{Azm2{ zt1Q%~pX#q1N;$%~r7pd$e+N54X4?narfjUHxP;!PgZ@?hy`PHfFno{vnDIYJP2Kc2 z1{9!e^S@>cI3|0D@vrDFJ;|Wkgbwc*408NCJGGEWDK0FlG_~@6{*nHT<8N_qqNeml zZl8zAQwNQjg3|F{{pb|oHy}M>_A2A5=vil!N>a;#?FzhrEIk^_+5uica-~&9C8+xxN3VBEP?jBbxnn25O9ErBshQ@91w8 z&ZN4b+M61ZZMy%4H$7gotanb(U`b)ckU67|L%{zbE-$lZvJ*u@kfN599 zs_G3JCqv~ZO%Cmen%#kQd%nVA6vjq8B{Xv5yelTApC81{2$KlKe)vi&=n~1qV zJZR5|CVDZoPub1nT#)DdQqgU08b8i%vL&B zu_6=`yzIUNY7ZfHg7(3p;01UK!lT6PfpB~|*dcFviw1r_XpNo992+kE{=KjF($FW)DWmE4$o-2 z;1+xZc_zWP?hmOm^LB(a#mSo6^zBrg0vnn?llD$Wn5o4_>*uku>Sa>ZG;O%z_gzTY zM%0U4BoA%mlT8@+6cXndWfT6Oz~Xs3!zpO4B=T!FnE^{V5j3Q0LOcvU(QlG++tP&rikEU_L|!A(C4`k%N^igWv7 zv-R>xEEOqZ5fNsU z$31$r=%EWU?kKeQidJ5jU$!=yFD*lL0UNw_xQS zRU_J_a%5bvH&E#dBC)ivvinfR;%7@_(s9d?nMlE_iS;>_fUP(q?K&RGA|Ao0Dz(!{ z_i27@Tbuq?qS?i6eNB{t#535t2h*hV(*(vJcL7^GrEA5S{b5elS8Z+B9=#r=pa9Dn z+qu{Ycd({uy1NzAN9;8C6=?O|#~IkaKwHT!l=8qRCCwN*?`;DogA6NdV8ogYF;Q5x z$7aTVoUgqy(+pwL)Q6pcm_#q+7L>!<^jFUV_!^(%Fb>Mb+Zx0Ukg-d7a{AbS- z13kjTIm6K#QIU4bqnX+Qry;g1HZN4E$IhdFN%iWAbQM3lfI69t>hH*T^f8y%$DT=^ z>BJsU4}(5-awKn&4~n52hmnWs>j>lj;C%0+C>MC$-$i-%J{YR;+RpPmMvc@t8jVcc z`@}xYN>6$$R=$g3{coO!@hAit(iqT7V;^u7y+Jr=e*srFh|`AL*7G^bsiK64rJXtM zb)whWe^{!>oX~Jl=g&zOHVNYSP?+ziK8-y+MemJ4pV-BkW?mtb3mFM_(=S6LN~vAS zo{bv2m`6qC=H+j`Dz$k|Xr9X{Hc`LJwp<@vAm0(5KG%R;=Ze!@!#xZrrjH5NLs{if z>%_!WmVMv~s-q{x_L&NBW>@TQ1RC6wNE#sBN`y#bB1@mu#!i)Vm z*oCC}fuR;Im2z@1*j*`0VW;bvZ||6w-xOXJKV9rQFahZ>pBH6Zfnw|HVlSsJD;av~ zG+^AO9oK{$W;};*?C|5OquVM?uq!yuAAA0`u$1W}1XAz#Y3e<9nn6yedcu2yk~c5u zKKoo9Xvr(NZ{NvKpfl;dge-(P5q1=2yi(KJM$=|n@X?U?;L177AMao$d(i&i+jOa1 z64pi+gI7<|eJGwdWP3{PD~o>^8vnKYIsW3gjWOl!PA=k&0zKa5DMCiz zPuJjk!)p2a$6;F=rgDmz_w5Kv`90J8YR0o-e)7;fL{1_yOo!~&GMg8O)+(95pO$Tn zkCQ5phEMj2|F`FQZy^qYc1i5?{$S#B?hS#e6578CdH3~F{o)%M>sWp6Znkr;8sF<+ zi_}(R#-76jeE;Nb7|88%>|Arszvf(;##6-foY19Qyt+*>Gi$qN`;3%Id_KEHhpEdW z=PECwO0rq~LLzk=t6xM<8w)dUXou+0Z%P0zEoD;f3CSq^;&bSRSn2~9HhJHjC=!hJ z&HLj!^YbcM-CT9?y9v57^}>|Bi_R65o#P@3y92sz^@^|+;{tO79pO8|46oSJQ+RV9 zrbQhQoxayTXyk9A7h8131Lv~qY=(?qoa6m{g_c0k{pYIK-%c-FT(~$(jnnG$oSt`E z=UZ%G72-3@!E}3WB*O|WIv(5n>!4xs}5++-=xP<0V1?>H?Gjne~cR+yw9;{J1 z_DbBeh~brm=jEyL6j=7b$Cs2FuJkW*pO+U3fpxE5SS;EcZN`28f4hW|ppdjF>PlRC z&>Ed!u|-Qj5+NBsIY;Uh1|RLZ*x1w<1%0An^y%lUvKa;&_5j4)eqH()q{GZPvZ^PbM=Dh_wu;jxw zh=P|9ip;u8_%zX*0h2sLm&XuY_s4gzXrg7|E0=uD>e72g#_7hFncmrqZ@!MU$YwK* z#gKrE=VeCHE7FISvHJc#T@oaUP1?H>?Z_Tr!ZJptw@3Rhx6MfGGfnat+0Cbn@&rSg zyev9S|0+e$BsZSb9P2Z@%;=Im>6$Uzm`i9>7;x2pAf~*5QZgl&SZ+t+C?xJL)^Cy0 zZf0SUtegB+7KRmljJcR5t#ilF?;6}kV`h}HF_->!_Nw07Ck|zze=3n<$ z#thxrudRBe1_p9WXJVl6^VBs+Y`A5-(PvI#VAjycX1v~qV~2)7C4SWAXvWkNgN}l9 zln3e(7A_(+Y5K)K`7AA?=)e044Qg2Y(}``o=2N**4==ji8VjR;>{=GI-nGf%*^K9b ze6j(#Ja=6#oE(|N85naOv*zpIoq9%Jc74)}r$-X~{<=h_9y#E}q$5+6FDv>keeD|< zyZx0fcb^q~{bRqpPYT=objI%pO>kgrMkS#MQVE0VF_*ZpV=jd{KzX0Z?8AqOmoi$; zioRp=jA>GsV@aP&F~fo_wlTz$=$lgWJ>0kVH+|d<$Jw?mY~wpN{vi?u`OCP8Gx$a1 z#cH@vmQmW*AuEuRqTxK5O_TDZtbi5OQ>=3XIKD5PkEB&}cBwdMnM<`$JQl5WHSsc0 zl^S2PdfhVURKw_CUgHvMDF)_h4upv&eVZN(MU*}&!_fpW9lo~_Xz2=>cwT3vtg~^+ zam7K=Iv-p55G4T0lw~sDfTy%%B;*l7Ax8GDz&0Cq!Cc3s^^Uk1~1ZAIBj=J5+_SNN-THtgN@;jT|l6=`7M$t0JXi(+6z%3Ks@ zlHvD86N_K%^Gs(^{Gp=pbwvqXUmnt{y?YIN7q9sU93|&2F=q9*78Zv}W!gT*q66o` zT#saYD$uPqx$Xb<*Y37U_N*kXgzc_Qef%N)_&R;Un8-1gjzeNBzUO`Um@x)@oLPUP zj)^howI*4Nj*T(vV~n{bd5pElwWNSAudVP4JH30GKWzV0Bo6k3V1)<_Ks=g$*4(Lc z`Y;U5G-R3wNK{dHqQXASlaX|GhQ;}|nhPr|VV3C5a!R*ougZNv?m5fk_g$@!FRzo$ zlh3r=Yx#PK7V%XPh14&B14nu`AG*lAdnh>OhRr`W{F?nxb9UhNh+=u)n8BZB;&J!j zPl*RFGHVVJ$cyG%Se?aWyXC`(e+!2`E2%j`^!FYZM5EOp7f~*v-9H`_Wh}lO9XPY| zt+SizaDYI&aSsj`RPM4j$oB3yvuP8Tu<=b97ll*Ln9U#4)^0tsvl+n~_uw;zkF4D? zrLPZzLqa%HhOmJmeNQ#SRhPFJ#&Ih2git=>m;#zMc&ef+zppY^IXPtmt*J>55#gu` zr&tg03(;O<6;AHk;%&yXX@D919smf$H_JEFm8lX0r&rq$V@s<_vT6Sr?5Rj^JU%<^ z{&qSYE}%5gUW4FlNZ%IUtevn))__|B8k|6FR7MdMA(Igjeyn%-2hV_Z96e^rqLq9J zy&#S+B9C;c3OF;Cp6zaHmh($!JPMbia+_nyq9ghLqIW6`|1kNm-j?be)&}lAAm>y~ z8q$kp`O*D0}c3bW3~9nwEy1 z295i5-L6P39(wAVvJ&Q!N(YsZfAfq#_w4%BZud9PJ>U8Bvy+8&^)zysLdizbSYSIH z@cQXzP3|@6LXV&kl+Ybx&-Ur`)6S}QXMQKxtM%VK6IN66@y5i61YzbL`mW7= z4_rVB#ktgRiiz=y8)QIQ1H3q_I-QJ#1MiG!Ic~*`r4tRWoP`;os``6MKQN2--Lzkry|26G52IAXp<|og@Ozwm)BdKXP;s-Cy&X9Im>A$ zXWhG7_7n>n#$aP&TI5lC!&z<<8vQy|E7jR+R)0l0YQxS}ikk*d$D);BRU`_Iw7l%B z{SOWVzy^5mj6ZlrWFDPvPD>+6V18RKT3kPLMpV-Z@isp|P+nzf{CBnAp5eyhWm}{e zQfB)uRG<8pXT-Jth)qY6`4lNYnn>M8{I+)=OfbiGf79mk9#HIVBjeeW(@mG|T2NT* zfNhBE`{Ta!yqksV=7oE1ozi!Eibj6yW0B3fMZ zW5iFJaWWJs#KX{S<J6Q$G9*8*l;AF!U0SZyaFA_QJ0)o$D(UpTxful4=-#&HVuVIx> zV2H(e@qly^-6%$Ji9Ox2e+oHxEu_;Igyw4NWt>0FoWf4ep(S&d3p*1vno#xy{wca(Zv?{P`k4j;$Vt5ly3JrdMc#8)C4}NqxS|)_!04}wo#80 zYzV-t*fyfsCMBKt!=&~G&2)Tfm-6^0SPddWC*w8YZ$n>jxs2pM`7~GbDMMIWj4Dqa zcViiQDk;32?Uc*QzdeqnU{5%+R4#|1L2Tuxz86tBz(m;H?%KtR3z-}3Oqt(ZMuaYm zEta$SIBu=QOGQ@B+EumMUfdpI5@fjH#J!wgR?r4e#T>EOS7^wu@w`Ijk=)DGIrkI9 zJPIwKpLugUa-23kSb)PdIU85`!-)}q7c973T@ymLxvMtNE267dRx?*!_e!t_96X9_ z*q}r^9k+qtI$x31vSJtkXL1G{`->c61wtbi|4AB z0^M@i;xctkKE>xPh`?_Fo%pROlNCxkT%w9ZfnxbL;@Keu7v~;{nx`mWF~3ex!_Gyg zoUMMK-LgZ`)QoRz7`5(QTv5_-LzSZ;_sEiSMF%2w$PN`T{OzY9Q5)Y)ZkGv;z9M^z z@9+|DF7n)!zE}vX{5)aqz60XgxEyDU5iCr1|2}MUIegyyN}=YtdlDMl4eE(XE^1vo z2C>Q^Mrm(tt#!K#8Lgek^0!KAJ#h!uXgGyv@76or{n{!=>uLKQnSE3|P2b$^c&JxA zIOBcXE~qOn_heCYNEP^Tc_NM!gRy z%|DNNvHyP5+efh1k9t_YL3WdQALP|;Ec9KjDN|Qg7CsUdz(7%^DSU{SXCXC5%VBZP+Dt@_GuVcIMN zD1~s;DmHBXx4qMIcX+F96<*s1DvwRJfG(3XJPuG;#a{Mw)FfDNyB1z?HzjT_x7+F+ zDW`Q7nSC@#c^l-q;q?4phyXbY>vf1i)>0{n8OuXP+|X}e#7*ov^C}Q-EYFBL?T9@c z62Sy&Y&LJlR)Hwin?(@l1LBz`MtVarUWzehymy*nWb^`?Y$6!F7>w4+&!l%lxmAiC zm5{Qs86i$|jReY2136DH$nsnlU8f|GAo}HOn;_r$4(^(^8PB4BEwZ zjAT+PQlM3{@1d79 zcu=|0c!8>&-WDv4#dzUh3NT*unkas(W2m+*q?v+4c;T-5b6_!(Y@q&m>Iptoyz%P7; z8EbsNyNU#VnYu=*^abk@BMw$;q6D}58A^~G31wh3lr$6-FNkbQg7vMG4l2K}z+dqh z7Y=d%EQx!}yhGxC!Gq%>4$jp?&CMw!Bn4YM+Zp#nN1&k+si&I_>4quB$w#kzslZ?N$iMnVA)2k0)?od{5`2EXbR&CmPDSX zjOMMLRECT10S`$dR5)4KQbPcZ$kLQoNAiaZ`UDBQFag>s=^j((_EzkS`V8-hzr|%- ztW3u0_qNz51tO6eYjQCf>5K8vuj<|K8GoED@tN|C|}}Dvz!_0x03z9pPXU_^N2I5gxDo=+uEQge0yg9IYm* zd!dYr*Nujh@w-0jkmDeyd(Ft8MQ!6M6G(+iUSo2`eIdZCTI|=7HV=8_dhJ6{Fh4j8|O+dn4Ql}b&^-|4-Re)(PsllEA^m8|eGJ$9lrajC?HDI5hrY0-I z`O^&P(D%GO(>izGT1pnlgJ&Ov+eP@dvv(0>W%!#}GW1WKoFPrK!Lsw4Q|?vtX2sneQedk^Jz-OSh~EXn4t(lC4IE|@1(OiqsNIcYXh!+8 zzw)a41rxCbn10Ny;2%QNWz+YZ3cye+R^i?1)^2Ln{WkO4v3PFFJ}7>p{a%h2;~1SJ z*2ai=5#5PvOmhR=jfiYkGUM#b{r<{tbDlN%q%4$P5K{$pNd_kK1lb4mZt)n55Wn-# zr-fxQBMZwfg#zhJOSx6WOP`KcP;M|dFHYI#fi2MH;!gF&pkR1H^_!?r5nHx$+U1k6 zUuk4_m+4-m!g%j;>^N09j8E)X+=8=4r@?n23kmzSnbHlN77=gtq}14in=TpI4=hr& zD@OnEr#eZ-#DFWV#RxGvOsu6Uh#|AaqD)0Xw^&C)Ozj7ss?M)f1QsBU78v%$EB(L z?QL&kG%AGwKsH4VyIf6bj2JD=+oGGs!qXuqFHmUkVIzfZCKd5Oz2^qW&LQx#)st}` zV3KG{kn&@z$Cv&TZ}4+kWM`7@Xgw#_;f_{8P9G$PgUwEutF*u_-{uxv*C#~#ngfl+ zvQpAAgjXG^)stJ^Z}B>X z@ilKe20ig`0}~L`Z&=y2IHm%^_8e*jVNu@6UFnBC4O8|@gtZc32OE5cBmc352zT^Js=b_33jI29}ww+WpQCVYU%^`2KCH_O+r;{D+sgf zw!o;zo=>amxx_Y~n&0&)1ey@r?yP(pU(8z9J=XfdoOKp<`t3}OaLE1AAx>H2^|X6h z8d@8C*2uI;w&ZLJE~ohE9Jj^OVrjMbvgNK~E{19e)}FI;*~P}CR67*b@-pmFr?6d|%rqDse!r z6&W@MS^|v9ZZg%vz!oxW@%vsfwce2oLB4jMxR>x0Tg?i2>qlkDY~ss$cHg7SU6#tO z9SYP>)8B(zQ8|w=?O9xx`=v))Gat*`&F*`MsTs5<4nQ9lIR!8>#8Z7V_@f$H8gNZ= zcq!BRlQ}xeAyWhDv(=Qvv6)78-!GZ2WtCR~R(u;JW7*I9O%3V^4XM@z2?8Y#y|er7 zV`|)mU@G?jN?YjZx+P%5Ej=~5!Wx5G_m#c%&vSITLiZj|UFR)_S8v*LaF5Rz71yX~ zH(L$6EVf(QvjBl;F{Ur-Y~5|PsC(;;fj%FXFmMCq{G7k?>zaDgr3Q7w4c+G`?>&BD zK`TsmTh+D&nA-l;{j}QrzIwx{%yv4dJGlG&9^cf!dW(?YcE`FcI$HwfQ$|>4g1EIs zdlPD2RBw9Dnzk#R;?jf!^h+y%V06$zQ7;TO;5{wUme8Da34;_W5l1&u86Ua?z_9k3np!TJ z_`~4WHJDmcu;U+CTL=D&+^CH(f&U_L+}L+HCCYZm5@6&a|HUx3i1`X8ANZ*uu#e8I z7BL4D)n9kNCXTMJ;g}blVe9@3rXL}0Q;r64HiC3tOx;fgOoqDjGwU1fw?$TdPg1Bxu|2zk z+mGAzN+7%{pWk4$Y4A zPHs=XP8`~=iNj5|lQ>Kl#o;^uP8{|zu_Pef*(RYFgk~2D<6Uu;`)6iB9?lS|;=s5o z1;>j$3zfK1R}?v$dr0KORlbAe#>y-qw(l0|cYY?&5MUz3>W`=9YVfzdo(z+dtyzJ69|Tw4QxOYGx;a8%@#5IU z_yiVP5x3zr__4P-FRmaKra$JXch4;k%X@ctahY!6xaQdGu*$#X%vW=9F!8>-1xw#~ zv4X1c{b3T-NlbwgH0C_`*n_CKOeW`7b8^ZK6@pQ@g30CS^X^=j;&m2yAjSh!b2$yZ zg2?+fnHEM)c=pzcrCi+NN}o4^m~*Ya@*DRWany+D9w55Q{DpH(<;6Mq>b&Ccg7M|C zmG9-;ubx@9XzsjNY`o6jvvN;vPEU4J^%^cQF^Zo}byptibymJxI2W70kJbFwoaL`q z7A`-u_%XRpqPs#LKYxf-8_=j z*tpJ;WVM}S_4Jp(>)dhl5%<%Tl5qUR)Mn!o|vtlXkju<|Y>krkw6T_*+5f z-HeM^{0;iiV(3t8Nr|fPEe|je_MDtr?nW95mire!W~!N+jON()cWG`{9c?g3XF5M+ z9PvF^F(??PLe{}f?4RlPIA%K?KQk0*3`Nlf$1DSufDI>5ZeHEfy zoihFd>K!vJWzGxGy*@o8u0PmfU;p?r*bAwg`Epy)UHnSQy3O|;w|zI+cm9f!l-@R& zzcMW2){_%nRTf=3IU$wRUp#s5t9NGLH_7CYxUXAMGk5&V4s z2OO@&m+lh}W)Q4AB`^XDRgHH>!l5{XGwP)uU7yZ=pT}-#jI-c-@=ceZRo(O^#l{U@ z#o0T4D-kPwH&6NH6=-_m`T)#e#cZ#mjeqw9bbqw6vaSgJxs&4c+2XvAZ#ZdiQ3(L6 z|HDZSEVN-x8K$p4Xxbx$@f!C~jnH_*gxE(+WD z{3n#k<9lxu7~6`p1Si}hFoy^xQSdnA6O|&IO(SSKWD;6xwCiBs8-?}w4qpd6g7$jY zH%DPPqX?Sk0JYf~o1SjGk;u3nzLns)Y-|j0hT?tuG!)9*H zvV|2|PMOLA*cZ+!v8R^YbSbX+s(7(F(irO^ilsE;u1_>Ucj1a zzVZ0VVNicvgW4lqLSj*yKMKHL@aVmZBkP^^Vouvya~W!>&8vL6W!>lfUz~tis&N&~ z-UWZPS%2#ZoYxV}Bhfqp%!syZ%4hOhu+-H-XkY=9yxKSkx6-4@7-uQ;*w_sPvm%i`I!CZ;TnU29}& zpFMHoc^1Fk$i%x2MTWsVX$*KGHTzC~*YVVO?7rI>@6sC=8fvQn(dO$v6p2;+1=Fro z6S>4H)BaVJU#s!u<8vJha@MXnfpbs9^Fi~ZqGs2;7I=d>+(m=m`Uww2@VMU4k!GLc|;84*xT%sXw@$)ZJ8mua! zyt^QfBAG+_arv7Dz0sh#E-e~|aY#_v=eiNK$TB+upPi^bxeUSrPI0ex5|_|yHodm0 zbFTtu?%fpQ(nKs!xnK;_wX8#i&$L7y?njs~o^5&z_NS=JFw71mMk$oVk27^0N@C6` z-cuCGFCkhuNMVd7x~hy>?cnBI6(q7F&Io=sMvKP1n)&wHsP$YtHYBiV(;6t;xLHwo zWSuRF|Asi6ZXTmN!$;2j6{Q|8PGu&eJnCl_f?9saOao7QZKsZKyS&T^b|u zCl3mDB6lJBco?oNk&e3JJ%9JWwf>b&0WIGN(-+STz`N42GK(~QN5{BbOL&u51*1cp zz?#vQF%pS`g>gw5Zu^mBeGydG81-IVo9~X^q2RGi&Fsv*+%HOpg5Bo@nL(x?QRBX> z!@OOTa%eM8^cd7YS=YE`2r74)O#k1vI3 zWX`?1Y`u$!anWTZY^Y@c?;tv0)CjlRa|tP=vMbR?`)dc}Q+|P4ohWEj2A5t9{%>S3 z!E?Vz3E4EehF8fYi1&<);2p_NIVBOOCU*b`!K-4rf~rVu*RDD41tH`M)ca8rHF`uezLh1FoKueNaG0Yg&3 zYJtbPl+)6(eCahDS_BJ*yH$d>+A1C@_4vcr)pN)*VKmR%AhecXLaBR06@jM*Qa`ONk7%vOc&o&W!lp0NK7JyhraAwAf)zcwCW9t8fQ z8u6h@NU?VP*!D(FZNnP|9Y)kLQ!mh?s&pBbh5kw(;w0_#s z7^J+ec8G6lHo0py)W2EY%pMODR0kA-fb|E!e!wOLBH!N=Vv9{GYjlSq#HQE!FUS@9 z?QdA4)6hBmtzmKpS*1b~-=^vx6l6ICy8E@MLR^PRXs2+xNt~WEXjF2UGF=~xDmC0s`H?x;U;phKY-C<( zGJR9$>-6};Hr8`qCpU;gY8!F2g+Gk+=zwcPmi+7d^XJEYIRD)6$+h_>k3K)z$%&__ zpG#tvf9+_f4MTlinpr30E(SnXEK(9G*Os=uiDFH4w>V{q zrYz!i(b@^d63`vR8SD06;$moMt+Cc)T-ij~m|z6e!A_Jnvps^w?2wD&s(EjsEyEaX zZV7{Qr$rl!b(BGtC=E5h_iyB;C}!FfXxnRY(+(qClH6QfA6JeQB8?(^CFR@9W{f-5 zAp?G^ii@?zAf0t7W)+gul7uh`P{_=?apjW=pK}yKJ9-lOGs#ShJ zf8;O9OYlDk=o=y60f~T#3Y#Y5n@^k$xkv?wNs>7sOaGOUHX}(-5|{tBU;KZe#daMn zAN^;vkmURyXt~zbv0_`hsI70IZ0zo36BQ_~b8jNryqV3;K$|=M^a~T#N^f`Onms8s{iShmqkM4Z=lZj7l)N*2U+m<0* zRFycpnVrbtTAi=JKH+3f(vST@H<-9=uC{gx6W+jU9~#F;hrONuhHdUaR@W;f|_|o z1HaDxjXhh(AOzZsf=;JfMzbEifH%M(VUv!p`~=x~{wCuTZtOw0mvwK+G1hnI`I;Tu zz+9n?hW~M1{Q(i&%!>2+|8!n`kkb5L&a3%rvRzz@jj%QbKCx?Uf@F_VhJ~uJNumln z3O4=3u#9P+pcX~u&em9CP&TQrabwB3jXz@E_Pygp6^(u zRgt(h58M1voxVg`m)}Jc7CYo%=>kZhf^i*WMpK+6G_x+1Ct2f)&Ns?vE-A^?WHg=F zx4NF`kRvUo7vj1}l!Ktd^%|`?knQ_n|3t@b1z#`HF>zdo44t%l#*hD3BC!0SnaaPX zVbUlKtA9v?A7`gbQ2gt}K7IqW1BlYe+?p#W}TbvtozkjXVS)n{J&Ki7QfE9JPNej2@gO9sqfe3Y^Z@oR$FoQ;&71fqj!v+uFd|K`YQ;eQw@23-zBPOmg0CJZTXY7x z^0YLic^1FyC>QDW1OV$!TP5L0v3`$h$uKK`Y{5M@_-H7tF`DlD-nT^&l@2H|ZPOj! zAM&9Q58#5{Mqf_p>H&{W?QYaTOTYAv@AV6gK&AMXB&I0=@@g{w5S|CTJOpq4USB}) zxuft!47i{Tmhy*m7o!rNIuO<9dnskX0508lnrb_QQ$O=a#yv-kuz-qB1M)DZoYsU8 zkWP6xc3W}S+9Qu}3o?Y{4=5c|j@lIYPGy}u(j!;8p}*CDc$HZm#RxDkqH|lI4XQiN z9$+89U3F-vyH(##URaYUE8Z zis(i~3~rJ|q`O6?Yti+nXgc|Rlm)l0&Zy5wIO?261wbA&nU9tVB8=I1M)u`-%-8k^lZK~?|GcDnC7LMP1gjsrWm*2z|}ff7nJoy7+&c#Oq1sFIu{h;8P;yf zmYa07`11YtucIJ&aOOg1D%4rjrmyWd;iS{m>at@1Yv{biWDb~IF=`#7%a+GAMns%a z-gqj0!l}vFBQ@{8lr5hZvoL9eMOWldyY1oM13A$1mvLummMjE+Yk$ zpC_`TCE^T}khxRO6n%0y=Zt(dQ<$Q@%OGhh-*YiIMv)_`)1!WI{tbHj(I$0_)nL-Z zSj{Fy49>K0G1fejF2-7H(#KernhY^kk0~hzSQr2FGaGAC%WcsnjofB1DdaY@399!_ zlTL2SGwJ2FVv|8`TWU&@+dO~=4V>I`x`^sINvAtaWfRu|2v^vp@JTvo7n`IgYIFK~ zKqEeW{Q0p4eyo8XYv9Kk_^}3ltbreE;Kv&Hu?Bvufgfw&#~S#t27au8A8X*p8u)*# z0Ug6QWABtP56{fBH-C_6w?;8ew_^X))o{ZbGVO}KuBih2lwq?6K`PbSt*SD zWBB{w`T+L~+~#n`UidrUdwS^iT81l3go`a?3opg=3fKiJOosdGi$jbN&xvrz>q?KE zD?A3*57!4b0CySg65KG{GobNJer}V+K zBYw-gOnYKkraiek)6Sr5T?hlsRpN}}r*hy%|BzUZ3z8s6=|Hw*4E!n+an zF=P7J=UYgD}RIz)m>~|G_wRig8({U8!QHyrW^KFz&9mf=`Asj5{-+ zJjgK1kgrPv9)e@>E`xhV%@uaRb;BKm`xx#p+%Oz2(kVO$Hw$h6t_NYkFM~k_{@~M8 zlHuTKgk6GDAS@PcGaL>-6!szPGMp0cS~wrvEQALT#`K}hd&U+fgU%=6K7q@OVyD!@ zeF1kb$4+?>?mM`jk71{5g$u&ne*-(^6*$#cc1kJSezIc!!@hm`HKLF>3zuk+r#`ETzPh3KcFv%~V&CoBp0o#LT4xXne9r{t< z-HdYq{66%#0C-S9x&;WUL|hI0)<0+3Cj~O?3*ZjEg*w91hwv>(vl-7UyuULaGU{B{ z)B^CiE1I!4BYZoY7Jh82+qb~~@%l{r#A?t5yuXL*Mp!MLl;&gj55u+M-3RA7-!+wi zkj$Z{TVD9{w;84%WuAyK&q5e$XP7xL?369B?3BfLKZdkDaL+(aDt^W|b^Zv(my*g9 zeip~LSKrL^Ja`AgMBdE=_T9!%-UCQG1ZM(m3~;o<)q;*c;kgU01MV=~r*P-tzJm+G z-LmFF?(O5)DcNwphI<6A4(=7W*d>q?o6vs#OnV<_GL~oBD-+o%{hxPD<FD5`a4|tqZk{&6UzYm8t^G0vn$}gg!(Io%w_Pm8FIJ) zaNB{)g{SW!#%V>pZC}VZR|B>ZZq{O^Fb6IelrzELSo{;qUkOfvJjyYkFTsJA3K=_F z$mGDi_Kso!%EFXaMXDLDFd|CE)Bw)_a3{M-u0xeWf3 zz~_e4>jn&i{Ig;hdkuKmxE6f#MKI_B-s)uV5!`D@7%PyUUJ1?8n=p33Jp*UGg`F}5 z&JLFa=YpFDw;ge)O#FTEB*O%zGK|U2Fg;Tbba!_f5wC@N8vUsnbBlJA?--mm8S@m> z`7oXj!!1MHBET($dlc^RP@3g<{vK}Z1cs>r4u%<+S~TsElCA3wO?|biaD#FEzNtei zUd)Nf`eo_K?jr;q4K!^c?$1C{^0p0_=xa+2iJr8pftAMe`ZAi z#^#7=bI^yzx-0bT6ffKWoZ29jmC9^{e+%m98Mx{clpl^uWv3*=QGF216!_aGV0?#D zDpCH33I<=a3uX4ejU1lZLbh-YWVe7ZlL24OONR+>DkJ!45?mtO)Icye5zipnGnt+; zs$=G=34SA-j>4W~g729bW-)M;(^vqv0B$1Y7|qB-Y3B;d;rh^j`*dJWN^_F%3w`ID*5c-QYp=`#CGozt9&B+5)A6J;22ner_$gP!&)DL3=SCfG3%$~NhV{zMJFh@rD7oDzVn7F-gM8c%vSHXx`!A(OvIVLQ)Bc|mf0#hOc{JhAviGI=wtYc{4L3&=KoBd4jgmxS(or{ z(#vcWDsMOWCd9%3B)^NizVmW}&!^knsB7^+xnc~zLkbm5zYuRyMf$|BbX2O0f1doF z&Tsx?z1h(D1)V=68!WiS`5aUC{x^TJDI4Ga!so&9+Ohh^Vb3dM5v|U^=zYUAUK9N7 ztp3H})^_q5S)E|o+c2zuZWwQexynIZgRUmsbWpOj$L)P~*u7o^!s1pVXpOBVll?vqG^> z!Dv+0t{nDBNtFEZ;lxdZRtbv`1fdjPpd|n!PEsz)-Z~A}(o`qjRp#;YwME0Nf`+@W z@7=jltEc>y z9~c5);`)?JBolDZ$v`A{m4dcGUzNe%GR%#k7osR(gTDbMLuGs%;ojiqzoVqBof;k8 zhT_wY8-|f%U3VjQci>$I7X^T?2msHhP=YV$9o^$x=&2Hk4ZVZdJ3nO_U+RMd%nchh zL$l*0nL{yb#u?OP#%7)^&x~UoSBGo{&XVo4MO&Rv18-j1BWE&(hfF2*h?0VguZJ4< zX1QQe$yuZ^7e!}W8gj|$ta%Y*)9@cqu88ORM?7K(=y^9p&zaCue212Ss%fUkZ%oE% z+*HV)rs&zK{K;X*RR>g}*!qZq_}A$7H!6%Wd>eTiUwVjS%AXp2FN+dN!T*thAye+g z#R+nLJH6p4u#vFqh ze(&F9-J9U=cJeP02>$~8Qr@AlDMtU?5ZT(W_;WW6-ESVNZy4fYW*E>J%uZreA$pyh zgLZ_9sh+{tQ{oK<(G)q+!f&L2l$A`%pV`tU*j^LU)WA07$@S}pa5}S=A~ULncCJG^ zx!9)l;qYyXC4X;K_|DZs+mc-@RQ;>Mw@qqh+tYjZsPLFvDn7=i>`|3I5$wG!tT#D~ zf09t?D~2*w3_MkDQUPHu@F-F)T>Ys~BaLQ*tRo z(?~dfKV`D-7@CRdw-@_uq7pjJ{ZE`F>D~W=Af$@Voi)_6K$ElDm!^F4QA{xU)n)U; z%3@hi1HGLK>as-<-C0B$!$9UVomZEw)Rev!ymx$5;aoS07$(M{W2XE$h}n~sFz26+ zf_EBuc_;lk5{B#x>=6r)LCP65ZyMra-7RVujqtp3(%zzj8OGd+L+jVCyMr#x%)NDp zzjbK-d|Y_AR?p<74cTV|?!ALudo$yhFf^kDKU-gWWM}FShVD~pQ2Z$r0olID3_j3VV`CSx2L%9fk9q-ht~3glFL z4BSwGU@!T%n5VK$3F4@cqG8sGnz+Vs zafhy&k@P<3YO%1S#wF~N>>5H})JG;hJZRiEWciC^9`rHg4q1~AeGL9?7r&1xf`6BO zsekPJY_QW8h9vxFVhzcf(iy!l2+OiyACDo%e{9es=njzeJWp{94IrflDXP<;Hi>5a zI*ZjbTo6C){Akes(IEd3AsPweKOFquJ-96>9Hu49Dn9649o#0T+szSP z(W8H9Fl|~mopmOi3uw*D1ShUb&EQsszhSL)og&aqlj_ zW~3pI&upBiWxq`_TM7(YmFB<%;O&PMV5CWP-xir%^Cf5La}2l&qX0N=Ms6aDjnia$xg{M^A- zi)Ouri}d)Ej|<9X`PMpF1Mau+=MM7!kkCjxmvQ|2+Mf}-c# z*RdksCQXK&D416EjT+XaC`BldV-T_GAI3^ijW7v>;aJesv1Aq#2t!Hkpd^LY84@0i zf{Eb~`=JQ?3f5R|;BMm{;1U{rMZA%!ypAQo3~Kc|z8A@oVZu8~vADhxmVy%uK4yY; zOzE>~6E00?3BUwc5~(v#Kby_!;|8sm8g|QZb&F_l1{Pzg=Qlsv>(#UvtgA#_F3C;` zF!5qdJ5+-%MRzPvK+a%UR{DJ~ZcyF~h5z1a4Q^|f!B8IS)d{>njJoubvV7LZCq-h{%(2v?R(O>-D$adq^V~EJF zkU?#>-RavCDD`NzEv;VJ))^~NX7q&mih7BzG?odV%KZWLc&2n5qt@$ugSy!)6c)#Q z_rHjH_qe96tbh3Aqpg?L5!(zMs$U zpI1L0a`tWQwbx$zw)Wadhn_&w+gcoZQ=D}J#h;+HfPs6c8_a_Z436W-}rz0?Kd-ye0-}R z<(qk2;5SRFciuYOrLHKqDb-)saR(;figB-0565&*KA~FHlilOs6iX|M$9_{1F-j(B|h^!M{UH{k%$3aktwK&i54jA1NYd%PoD^9kim@A}w+<<+9xb0wz*}CuwYT)vdKJ8e>wCs(qtiR| zYOR=4$KQGyR#rP|b*A9gx5dhIf4CKq5*u2+q-Kd9pG#$rti46n7Pv}&4F&B>>Q+sJ zWBZcNC#Pzb6`L}fluPFp&t0*u~F z=d}bOqVaXT;)-Bb4Tl%U<)to-DfhcIcHZRM$1cj+M;}shiph`qN6L476p9DmflS>m zHof<&yis4f2j)%~^>yqMu7g3(u@mKGFoD5zeAMxELyEP$!}?}Nd3e1lQt=$S>zz}a z!X9(LuUv1RynE~cc6V@jVs2-UX5*cSayX~0YVSDYA5rxBr82K@LN0D~X$R09bDw5RJPN>q{X(ka)X#^V`-}wOr`eDQt#=si^E` zD_%W#;8-vhx@ig?M}BLsm=2UfW&}4#dA*3z_*?v&givy@=x`Lc!r%fQMyQcRO2R$- zmR;Fnq8)slvdST!yjfmV{bbCzi*}PJo}zUNhO}f0^PfB9T^a^XO2*Ts6 zy0C~jnC5C~tKxzzo$@@%+}Vme^`=FNokHN?TTTsY9n-JGNt#8I*1CTW$2ZHE$JDS@ z43{^1zZtGq9^>8)JPs>BoHQ-5G~Th&GL1PLSNmRKy{Vid>X`hs@$$)!ok&*3C&v3- zlWTQPZg2eutOmxGT@}is>rL2p0XNvy3?{ppd^gn%BHSPM>Akp9%)Gt1TbVUSX0&9# z7?j~;=Wb%V{*3keO4_s_&B`%|v2+=8olN%ZAj>1htd`2f_PvPItTt?4G=9rF>AxL* z;djF`&6&G`@XP;hcU z4lDVTdnq$mUGib%mzlw;j828k5m0g?Ew6Nhjum_zA?nKa*MyI8)(^w^D}U!EVtjjK z4iCc*I%n|wY|2&RxciE9Q>lzQxBNwIb=ffYRGq(NT!2x|Dt^VJ+lO6F#<4w!`|}K^ zD}Pk0PFd9ezZ^lQ^G6$w2{pQ)zN=5Gj;DGO_%*{-qF*HJ_{o-K!sqE8zTF>L&tE+x zDV!73&6oVp?uW(7`<1VpW^=Ipl*XfWLApE(mY%JRQJT#`ZK0gX@~6>R&Q=|h87DvY zAZt!z8k`pcx~77Md=%Au+0Tt#m|5Br`c+~-=!P8l*E$Xskvm{`d{2}mKymV8I4Dcl zRkO&>JDTOY>Yg>ql@8~V+sBYiq|STI$o^8>?gux8Xo#jlW%sw{Jc%Y^OXdEOnDd31 z!#ynO_#KhQ7P5?ObKElYqPhcBfV&CKhOl@Jnr zLjils($w;B``+Tv@;LjErSl8Inev$@RNCb$UGGcQu7WQHn2;=ZjwwKIWa6`h8~!G= z;2GHeY?8ZwDJ|xms^ODe5CA!f94j_3#R@X#y~nxz3=3Lt6A!P_mi*A%9>4InK?fUG zJi{ziZR}(`{2@8^68u6DfofCe3}tK>z#R~FE%F03hbZ28^(Jqj54|o@!^)GZ;Z0VC zqZqTop6g1=7{m9YUpRQP!4GSF6cy(p zvhgH;Ccl#cuc)xo{-oa|Nr{UMpP`xu8`#JfMoGH%n|_5R*ujO(VOF>2W|JbBUBf0W zk@0E~4BI7PkarXXFc&4mHE3E^JWRrtU85-#a}&0fiH-zk)6JImZysX#Cd%ozERc?x z-YhBi7>>`s#G^UMv9AT5 zSO&xcPJ*-aW=rYKLsB1)`YrQol4@!g)DV%BS$hg5{(mWjRW-3~uv`R@I7}L$k>YX$ zIJ#9geRlF`7jI`1R^D{LAih0l?~6B&yh#01&c@dVaRF0CbHOEdcReiWfm1#^w{D&> z{dYI5o-1jM&7MYNOAd6rA5TU^ZBA^;t#6PZydlt99~7}?R*(6r__md+Y;`cRT)e;7 z7j@-$F)V(WY#FLZlPgzN9*nl}OiSKP@ujs~OjWkbx!EMaUS`e9<@~XLn5ip+><%ur zUI|h40c=Wftf`YsQB_ri;-pZg)0)ydaA2vYb3imp7kFO{-T!2Jb6d13L^T32Vw^accaP18{yhYtO7k5@LYws}pYG_)t}2)y3bm zIoM5!p$_dzF1e=@XNGGq)k~CO~6 zEoX+Ptg$rEd19z&$FY`ELkbB7Y0JNm&wWEsh+-Y*S3^Z1pESwIH~LM%68?R{?}l{0 z8%mutIWa9w8+vDO$dHlHGh{I^2?vJIDR!ye!;D;`&;i&awQU#DGSaQKc-R?E!+JWM zSa*ihd;&IaDR zWy#k22TV`1mEv8r4exu!deWUkK0honjuOjjyKV|}W<4iZ`hU=DgH@*oP+yotaa~BS z6PqmKLg7VcW^G#9%8Y4@d060U#du|a{l`5m$8jbulN-~{Sr-K@e=%s`N43j8t8H#x z+0n7G=qOwETWoC7Vp8T5*~sr!hC>-MDQsO0TQ-d;%3u{wGjnU$u1C=l(I8z>D{IbU ziaIZ+zcN(v2pXb~W?*_TTOXt`GI(`=GD)rVxiOS=CD2}@#>H#`fQ3v<%A%svY}s6< zXt33m4{ar__Zz{cV=T*V?~G;@zhhG2{UNAQ122f0xtOeFfTPPFf>~VMZ>UXKY{_e| znu4zxG@)g&@sr}?dlVf4gFL#& zhrDl&hI?yVSRj7}%*izdC4R6U>kP!Uh;bD#U9{j(-lQSJ`q7Eb4#!VbCcgg!JY9h- zNH2VSv@Q-vEl*M}|0zd;aj0uRVA734C7%JFN#>(&r3S=}hi9wrkoLe(?g#(yp?g2= zaoweG21(U>7nSyejCk-9@S%68K^fyTgAVzgf|Psw8*nF2oR znli#?MS9v~g3ruJa1G3s=^5uYH)zO#&&raC&va*QpeGqApYGr9T03eH%R?guJ*|3`})l65Iq}=p0^oWMh zwT)zqlBGQ(OM6n*bzRWy7>P5=(&oz2vSc_^>)s!Ui6nNtGD&j~O%aih_$P z|7i@3ayk6G2S)58rY{!plwoR&tJR7#o`UQv=zc@-CN@A{CTA*F7KI+rEx3V&MmOIV zk2zAW73WC!L8SBso#h5Tb_6eg00G7sa-)od z?f28n{hE(v4;eG2QXhe4k)WA-=LpSo<3*aWY3VXrAZ`h|abn+4U0>DkWs$~!?n!7I4@r>3QpT1HHJKa3JX7A zEOF8dhhLXJlfc|SZvuB)6xL(#ke}K^fg8N(QmXkR`rSSb#6|FqUvq765_zuyBa+W&J|s4r2)0^{t>gbDhMT zx>MI7L<7z8X&%y?9)+!SBJ`X-xt3grQr!Nn!sf~_TO9Seg zxLlUO0$sJO6jw`-h+F4qb2G^FpA3E%Ea567<9f*#o0qiH5C&VS#L4cX=oMuK%j8O+ z7Ou_6U~;1%$YSTp7U%rcSD{Cq^Nz2=HaRyYU{CXFr2&oYoa3X?8nI4P*o+FxwYHH8 z4+(cvHkPS@9;KZk?Ma!*8W_z5GVafX<1_ECEiVen|8rke__h^f2nM+ftFVo@3lKo+ zkSbdQLh;`H*v|ami%(AS#qW&T$3^;@@}gj=_&!lA#YJLq#_h96fKLUB>NestBn-v? zV!O`#L}#0lgGGEMq2PK}l;7e<2mvmfXm(oxJc(u^RkD(HMu$;FuvtSi3zy%YYLDWg z*U2VPVWR0_;Z8WP{22kpj$rBiyN?1tLbekH*1anCQNTxl!XDI51OSNSBp(%bMja;* zpy5Hm68FRX?eWb|P9~xGS{n2v7U#v|@0k$3=sNcK&tJL!zi#`r_yRHUH~&3Ri)ol#evM5DKz9%hMUhyilUS*z1(XSEC-|E z`gKVV7ri`NwlqI2Gsxl{t=Z=HJgcpBbep+=`f8VhE!-j0Ra?UKvx=6~pD)h049N>v zM)Q@@;vTKJ9;PjIJkOTDP-B!uZmv&ve|p!R&Z!psc6(S*fW5}CXu-SI-L-W&+*)fx z>2BWp0>m?xW#c{Rkz4rWYiN7qW<$qa`wM_wx5pg7Fvat~rX3@q*W^)EcnTKWQ(SB2K6Tl|BI)0gI09tpFAnru3SrFc?t zx<)hFlY{eCq>%sBwKkeUS1VTii7mUu;ImudymF0~6FvDkgwTC$=fd4vsp4h9RB^v$ z@g;k{C2WXV|FRl&KhM_RYq#MeU%Q|EvE6?X+g);7Y8pKf>AbGx|Lz($8On)8~U@c<)F0k^D-e!|`(GrfZRv?JWN|wMnsB zV3scoEy$N?EO!g^l7f7B&!c?vwep;n4c9z5g=2)mJQ#D6w!DduJ5(r~i}_I6@;Ze= z1Xz#1kXo1H!s)Y7-MF;Hehp$~tzeh~8|p1(6nH==d++ECq}vB=RS;I3RkY%)Av{+r-~;OZ;1uQ0f;LCTy)Z_c zLTM=+))r{BFFIO{GA_>jI;OYt7@!f59<9M5M&JV+sWSin&~{1Xm7|)4do+ z$T!pbvS9hvOZiR}uo6wt-z^3|%XL*$*EWOpX_ECkhszrb`yfyZ1f#yuYR{Cn1_C7TXg#$2?lybk;~ zV$4W1kM7sV_rDN)tw2=EDOke1Fg)0n0b(rm10mhd0l)8zQEb;YLR&6qxj@i-d!uX_ zSX#t)pT%%TBir`^dtdqU_sV0Ia?eBguTj42AeEQ8^8}4*uxvic=YKmWl6+MJt;rbi zHwMdCivRLnyvi4UWw7kdU7JqsV|8e-I6PK&@7?^K!F$t2#7NHGLB-(R{Qdt?{`6qk zg}WtpP>=*@kAQxE@0K`E406vJ7qDGkBw^`_b0=XzKZJy1zJ#)W`x0h)6VP9uBjF2Q zg83U?LPcRb`ukw9q_V6Xw(^}lgI!1Oc77m;^#r*e5-c;jS4)gzRnD%#Lw;O@`SZIB zlG`N{RNe{Ldv*cj-a+m$Bb;G>DuR4UWq1$^_@_wt#Ft?HtC-+&SlzLJw+|^heJNeL z?$&e$EiBXCk!x0d?ECDDWm@;j%lZ0hF3$U`VCOMQsybW}xn-FGzT4WeoDG8te`dYB z+yB`XF#=GV@3gLE_YLf)X$Mwx9fka;sT-9pve+T3*6iq4?t6h&cG-F~xx zIhKG_;B855t&zxj>a}wmZBII18dMw=BIe9mHTfg^b4r}gB8p~BpZqARaNT`g-Wd(j zU?j1I$>{(0S4d=*b3bT{9BpRjvO&eC0(Oq(kM3dvDJk1=7w3fugJmsuJvrv)yR;YQ ziw2DuVZFH#e8HemKbp@UG$#6s>d57#aNy>X6Y{?qH0EC87Yyn6f^vW ztJS|8q>o=+rSeY=LRo(%{{{tY4#u{OG29ZUm{`tE(Y|jSbqwQ~=K0$6^udX$sR0%@ zB$(y0a#EOJ7_SDtr}AV=9_!z=k)4}*cHtbY=E=M6F-%|Rux#OfNftgUaeS42Whnjd zm)a{s+AD8&G+WY7_NH^1O;gzd2XpeX4tSL6jg(t1+}7;Ay*sqUG}s{XMA!qqYLsuT z!=wVEsmOQm;K8nqC6WpoHzo!K66K9sCn`B*<0FJfmy)RuI1mx{Fc*3=kuHN%FC9MG z(GTZvUnfd9Y4-GviGlHxI+|Eqm3jji#Su&rRmC0Lc)0F5>R>wNcO0J6(K|+Nxp7O= zb!%zBya+g#35|gk(#8w7-heZ$8VxJTSA%Xg|m*6LyxoX0#d0ZS9vYi@PvFBsBSQT;n z_f`H|%EJHas`L0&424)FFaD+|`7bG9B;S`;`NI@+esNXz#npr_C@b_Aa9on|pZ}E4 z%if);ni#-$QxwqUKf4NN6-g4#zggc=rSE9KHI&E-;8jsm((pcRDxkf3O)v;Qz^7gF zV_JSU6`rViI-qb^(7x7jYCEiz9ol**@|ec2!_~bMKpQ>rdPJ;) zzgcN>tF?KDwQ!KQ6YYniQIQTh&sFGlRq)#hH0cx&5`=@Iz*N=S0U9=Nb?`8|Y7eV;nAx>SeiKd`CouMcN|R?r!)nipaur{D)swMqGY4Jp zHCL#PvF1yH^Np+a#6CUlNUZN`H5GnWwsvGVBp}DrisidI4vjjYEKjJHoY&n_r|s$B zU!!vNggQx|ZdmJ#1bFL<{_TczbC@oA*WdR>dtbMS9&mim}#gOr88s5n1aip`>UIN6%?6H5HQQJd5I&?XB-f_9kDwDE)ZPl#jiW?jCRCAGunm z?Ah&n@GAEp21XK<^GNwb`lXGo$YUkLm4j1mO@m)-(e69P0xQ=? z=*u9CiLjNcs%#FIW7`^K<94GohF20kosMnLh4c#LvlyFJ6;cckxOc6zev%`ROiP z!76X^-EBd))B)iR6O*jwPhZjMtF$Joig6|=Cc6FWZSVCX=aL(~%@h)xU?R7hp@$Xn&D(2>9#pLbMSELi=v!*M^g%Y)s zUaj2}v@5iZW!f!quDFTqQtxTORMgYDz!vLQG6=V{dN?~yR`@M?&hfFoOAfcamPW_nqZc$2CRMBVLVB$n&! zIwnBqh)-M?xgV37RJfEMX-l7ghR~|^PoZ*Xh~ct25Y=+r-M;2HgFc;2B=s zt^&9da%u_Y0}_ae_2V1zRv)awGb6AJheu!;|F2=W|1|=u@beK^kN#i7!VM5~N6Q?FDc;W2<; zA7^cqZFv{MSO~SIG0w-Y@WGUa1_pkhwZxQM=cb?^@@d#*Op|0xW6ONH<09V_9wGm% zzymt_l{bjiul@Hn$^8mAAYypvkc?p863~VCz3G#c7yd(dPPJvG$aaN$1p8Y(!}oPo zG&+l6OaKx169|aL84-qg=w6?HPIzd-A&)9NC~O}S8fln!ufGidvEVh5u@@L70@Z~$ z$bKkHRbg6C;QfK!tr`A7tl$vgC>lanpyBlH254e+6Xyb{_fyDmNAUE*^X!K`egBCk zkv!lY$+1rrX^5%G$4lOhA8|Bv{D0%yFtyMn{(lv~!+#2U85!nqeT?4(xw&n2tSr@ zmmPOi@4C$Ix(q+x!5TnFsfjge&NBc}CV^i3&ihLH+UIP&>}?hFaSCV4Weg}#k!5rr zTy9{UA6zbM5$wyH?_VZ=S*W!km{ugvWTGs+;j%{tfmiyr%l2@O>=5lmk%M<%c9|G= zgMi4;LvR5k;wsKn{M(m3O7C{TUO~Dwh^HY9Sh`J@U3#YQ9YI%f*%s%AZ-P^c%m%k$ zhr@M_GGlBYFJCEw-zrqELtd#X78*!m9V4*#SH*OvQ2j@wk3qVxMfa9M5ytN+PvKvL z>X(scEb;)n=!DZZr}8g~>2C|RxG?AMF8kVbfBJ95^gkipgmvJj!i3*qvHp6Y`Zs_b z`9IhHESgrhNvO6U%Xp9f&+vanEdQ2J{VOE?;=kke6w115h3ZTsKX89pp5dRoyfodT zT#+w#SL3oXs4u--VvCC!&N(3`BKc4qp;OD0%g!m6I~|N+J^3FMw=F~)_i2d9PbFP; zPQ1(oa({CF5eiVpHy0*S>_eBGahFf9+<@T^i0w&re=llB`T92Qa{S}6#4K)vKMMba z1Aqo+F#QMgl19w40NQ3?dVcC9>fZ-0!&Bmq?_8acm-$~1XC_48RV(e=L#*OObZm$& zTB?u z{~~wHmI*M>a)t`8>a+PTx+qw*c^%dc;8K*N*6qB+MP;y@?vqPtzPAWP(*kuZmvB#- zk%2zOMWf!4=lvV27kju%oXaiyP^-rMSBj)+$qfqi_uh*@N$0v`$~~UJ+4Qp+E>S<5 z)h)ghyC`-x$3iYq6g2|D zMUF#{Gwl*Td;z6#^bPRhM2^>dh2l?~H$hUEB;l`6YUN_QuQ} zS(?s0x==q2?;@0Ia=5SgAVXTDiM;h+}>+x4s=wy&mtWmAbDWAV4e07Ljwr1Jt(DJowDprrN z%hxn=errP3NY{j}ksAMZ41an!~Qt*yYBM7-LkP<(h2Dt(cUV+P8Gp z-3~6i?OC5r`!3bwHdAxGqs<@eQR8?bCMAZlG&o#wew1T}b9=xTmr3fVcX<3A?`j+T z+rm7`Lo&l^2pPNJ@PMFR{}Jk+?m<1(mPMxmkxwyW?Mxh9SOOyy{)w0-#BDv(GtGMq zUUUTSS~jw{Tvdkc7x-SxJIcKVD~Z4DUS24xdyi3G!)jV#up<@W-dkJVp=R^;i$AR` z`3zO~5{9k6{>SC0XOUqg8(9E_4bfK<)K|rFr57>G>`HsFrH_NFk=f!|-Mt%EPIqh} zY{>ypH`6wog?C*=BC|7v1T2g~u2<6FLu$4R4=(vJ#Uch?s}^}jAq9jR!SrPFaLyGLE)I0fj6$$+k1E*3IB!YuTa zp2S$i(&l|aq|*GUz__**;${prKnMo?SHj>SraJf{YA}B+L}rofs5%)DMO5`D z`bK9|bK-}Qso7Sz&7|P~4r16Qksf+)p7As#lV@bV*a_y?j zVn6F^GL-*_vcnU%BUNizdlPAR2{YHuVrFZ5CTnqK1ZzGfZ10=MUC;azt1vUWK4i^$ zrs(%<*^|uB>$8d;W6k)O6<-v=mQ81h@W5j_EkSHy6-ND_`G7!kw!02~tsqe=Y-Thc z(`^N2m!fCcu2iPzx2*XwTpN^O>&1PDD$FU&u1TTX2C6NEDZ+hv3e)P!gBBXYefiXf zbCF{*!+GaM#5+Dzo4rEhO5`k?ghG!+PQqtb5tQBxF@DVtGcBtwlzkyYeuxlQZ`Y)-$PM&4k%`>q`)vh-?NQ_UFY=#==!#<^ z&yM_l3hH!K2`$fGQ0x<)+OvF*TCo>RYjsXg{EdDc|D|XbraaiS2Z_*UYjtc?>=xs@ z6}u4CjQk%_cw4h#2mNkWDq8Sc1w6sVOpEe@qKV=$toEqQjl%K|)mFg?^`9P;AC8=ING<3s@qj(+sL)~bw@l*-Vx*+pS-I5^362fKj6A}zh6t9^W3C~14^f$TD)Tfu zQT5)kmIp7SZPW4(Qp}cREv5_Da+oN<=_@z8$ByiBxnMrz0uCXV!n2f#cmqKycZ6R; z;02N2KTm=%L{8;Nd68L)n(p{xmM_F^JYvllmyTIz)bayV)>6iBt%ZR1J4AXcb?Tz< zW6&N1O^TAnBgjuL}Dd>qa1ha-6--9l^2Sll|>YMGX?wtWx zSF+<4z-NI+Qhvtyj(n+g|f`GaUp0zi_Y5D<^$#Y?V6q_qXitKg9C;i5vZv#W`Oezjpah1C@x~Hzy8#r zX_K2+W0c;QWHg41HuRFE53C=e^)-emJdbeUML_{MB;)QANPpCOMo@?o44{%!bp$@} z&+TuSE#ja16aLOIM2f8*PHlc`cQvIu6ouZGn257rnC7UL=c1h^QQxZiM2T; zdi{hZDPEMAWB^i5YA;!d5HaJ|Rv_hHr2HdiasF&S3e~Z;*oXA76JzRpF1}i0H?sjS6CJw=8#MWT!l?*D#Y$nkhQ!?ap5Hj_qa=O3ucR=yW<=!Ytp~UnN zxNSd!n|=?j`wfEo`2PSm0}vC9IgL~~NLkyZac;wUDj6@9l#TdlA1U+p zf0QxYD^n=e7WF@ssrrvHVfV`TFx1>vCZB;#zLLS-Ny+)8{T zMU22Hx&BTfZFSNY_Mcp#PAhQaDL@L%ODg`?#Iae528k-WM)unO~+C6H#gKbOZxPU!eSaT&*N>=W#_uF5WhYa>`)PID^hMavZBrkVpo@kAWX#Q~0g=bCvCj#J-Q$LkMJBS|C zf0pvwn!MY5JPo1pnPt#C#|WWa$4(KuId&*4BgvGkg*6J_Op^>eKA==ST5KmoBx!LS zF-fx2#g3gF`H}r=UrzROMLoffr(~1g@l>BpFx1R{LG@-h{a{AOC)GE9C(a@3AqVPB zelR_-KP}5qCwtGo!=&a%^_P5K0sC`&E!CDKYhtsW;aFI0siLsB20w>#@4!6LV^HKc zf6}0i&51WSl35H4&5l4<)D(JW`#sg!@sc|K#`#&9%ci&E+5cK2{|ACm%-Y_+OU-+< zNj9RX{wTkiQaHA4>nE?fqEh*bR9qYdFHi!1_IzDVTj}OvJ09N_nB>hx9Rznr*e0xwQlfL;p?>e8BeSN;Y?Hfo|d`W&-vzgZrt3Dwaz!r*El4Zsca2Ic$Md& z$}#t2(jZF13(~5UhwIf%T>Ge-{sHZQoN9lYtiR3rUPpTAd4Ao!3Po!b0WBJ4*AcK%Bu?43V@eX~3u{e|;ItOh2*Fs3T@SQ|U`Cl63vqM)WB$GPnM zfrQ=ZvH9E>j-621E}190B{{GDMwjveKb1%uyFpiQK6V=(4q^W0nKcRagjmTubx*S1 z3Hl66u3Wi(OJ^A^m~dSti%qZ0%~MBa#JqM=mv^4?i%TjQWMIBzc98B@=RNG(?5fQQ zco(HB!Q>Tob$oKr=;g1Jeoc_kCEO5bUM5Sn2+U6T6zlRfGQpF=WtPj_%}2-C!JqD+2N>dj;&8T5S`-s z35v@h;gft|rm8fl3Qvk%-5_lU;ZzON8frZa<+B^Mrl?%|q8l2jqs}ipEL*91%%A(g(XQ=XsT7zQS^5lqT^8 zW(nIlU=Gc{hOIbhLsPvxb7Mx|(qT#WnsZOccTHiv72s z$}2@d3m2}mC~gf)E~@rFA-Sk{UbPFlONxb;f=(jg<(qZ&G)G;%)wevxaYf&3syVq` z-5uOMDw*v_>gaiYZjusqJ`O0_*^B;mU3YN2{Y6tvxz2L>2h+Q|H^#oRlwI4X?~0Cn z_ex`Pn_@V9LU8%Aj~`jCm-IZr4KCD6>=NxBZHh)4rA=1HK3ZXjeR-Za#j@L2UNoZ& z7g$P+$y3B2!wDv1>}XsY{2s4T`All78HZ$3EEq*eqV1OibVpTEb6u_Gz-dl8QL4ZZ zm-Y(l$u8D=Vd>p{;E80}mKPJM&&At=lAoEJ9GE<5a+}h$VJh1*4T%`6b+s`ek9xLw z!ab_V;S)X5b(>A5t#*G?aN9H!>xnW2YwaDT#ab9nTFie!c$sSLTYGBCw{=OFss3en zLR9X`+S(+ImGQqI9D%S;1`2(yNKUE6nwGt?Co6tIspd&iT!C`KR7}!juB(B-X*S<& zVh>4XwaioJ;uPwpIAErk|AR>#D>X@CWfSEJ94gQ*XhZYs715(;B4QFSwev98Y?{^vH>6M@!4|e~=s+W%x|6W3a5+tj2C{Y^>5GSrZZ~ zPl2Y+_$wJsX=eDvCMfOo0t$NVTly7e1j3b*+F@{MUDRm)pJF=8AEn>%R~%a%9#uqA z;aLF}Otjz2XL=GvEeRV;-|f{xf3=A%SC>oN{m|vUYf?kG0Pu=(gZW<*zEg%HJJ*G? z);Ka-H&!kZn>PJpdWQp&Goxvg-f_j4tkgTQYaFYsvG>*kKASqI@*o#x z%P>SL%U!zEzVZy}tG$daqHoGmTtG4mWI~29L~YlnEA{C?3)t8eE|i}@^>M5ty0l4x zSlE@|CsI`9<|au-x{-g70(zYv{FqzxjC)9E*z1hyYnSjwN;tk*_dp+Jg=h-&9JIp$ z@VX=}A+oPLH&#lmV4&kGyLXRd_)c(!_wnJB*{SYxGb2yxsQn3=KCUNAnlPr13vlg| z@t+f>d`MqPV!3{Xcqpbm!d>QQ@E%`Gsn!9hb-gTs>vO95;$h~1lriaGl23^z2c#!2 z%J$0pV*bpXkiuxjQ@6eQzXw7`*uIM_!V6U5iHrKZz{w8j)%=}vCkx=3+_6H>Sk@s@ zI#EFl;J+v87R6oUZ;RtV{QC;*ck(wWyy|0r58Lj?-=Ki*!nu;~m+6tVi-OgC=i2?2 zm3v6Ga*-ll@Sd|vmaPJ!DSioO&T*qW%Jxyql3+zwj<}3P*!WPkgntp3B##t(7T!%U zT%d;)^)nVwh~(!OV=dpF;}$?Pl89WdQKKhHGdkll(nHd}JjaEne#nPYW`6&?@PT8dFIY6@ic-u6Qn;9l% zoT}5G>v+Ai&fh#NGzFM{5a$>E{rk%_++U`9TukK8%J`3z(K*lA^bFK249SdMPo@#s z9uswyK8v#}&38z)6^R=~zMdNJJo_9?H<~#A7i!OKDM|@<)_}VF*IuNV{4V6uw2n7d ziOX1L4cX7EQhbpZZ+M+Il1h;G6>w;#P1XHS$KgaKbkATs>gvLC_~i>Jmf8%ur~eua!V>19a=Q8Fl39<` z5X+dLQQflx@o!T+<;5csjvJ$QFg7V?DP}w&mQ)#+m@Kt?ahFabwUjR*`EPGmMQR2f8bn#h~2Dq8@OU7AwGkx_e!`X$N+A~Gr9?k?63z(VB z%vB-h)RCM`Qo~iD?6@#DS4n^#rD#|gmSt}(-F}oceR0>nLa~{ z-qTEyCq_$#rahfA>Kyt%S#F7vMF!B8ilgG#P~Dd5Wy+S&bNZQ3t-@nQf3Wd|Z#|(Y z@`fl)90LP|i3TPkN}~A?4e&@arUiOKKw~ZxU&N+hMyCX;(W69DT8+>i-L+mjwh7Wt zlKFGua8)@k_Y%iVqD*vKhgX+ahbtSoVAKny>1pLyXKyb*(bt1eHWVi<^f@MKj)o=m ze}O}SHA`DYtG*>qk!C5i+>oE@?L8ztAtz({lMJiB=Ni3T0STvjVO;x!0@k$gQcKED z7weVs2Kw!0Pbd!dz-FM7kM@PRsn`mN8MPxBAE4if@)Ynb4I64F>bE(iTWnYbLd0Aw zA3X9ahVRL_kZ(%?GO0!qEhE2T7!C2kd5=XF$w<=pk>9&#Me^_h{oV&p_d#!Ub1x=N z$Wxnot*?HBPZJ9Xm3G@lX)s@-*E(9Y+&E6zjCUi=P=w?k^ul(D1FwMpR9op!y9eM8 z%Nbi?W1%D9)keF+-dV?5lWY)u0G4N7{PfO}Yh;Dt!w+GF0k*{u+b~Z|N~rBkOPfTt z8Kz6pW>UfoN=S_TMSvZ@DfGlLOOjC03-JOOvw*mHx|oX+lIc(4(qH)64O{Ht2-n$R zq6_x9@L5kF>g>*vUKrRB!-Oi)$kSUwLJ=@{wba;+Ntb@3|!>(TO-ndn!Q8`=AX6Ln9-%QB1=&W-(9CMDM zrY7l~BEu!Yk-f5H*x`U-Ac-;j7Xfp!-;_hW*dbVX9aE@gR;jIc+K97=U7PKD7@uMO zTEPAeI)&UDv7p}-+Hiqwuqb?#@v!p0y3(_T}j!P2EY2&JtR+OA6i7m`wA zrZLN!5BbJ|Jy;jqd%tKOeTKNepT}YC4(yG53VSk^-$eABDtVf9MKLhK8lgAL4VaZw zlzSQP90Ce00X`mSl5*pQ=oyL4Awfr^yV2R@mHKzyvAG>e;Z_+XjsBnlgD{tk^_vkx!zEwOT2j5RCCP` z#qeXi)<&E8s^Csw#IrJ^JL7dZPl6Fiikqg@%e0%H@+*BBga)SEcf_L@lDKfHE!dtGp=V=_GfLBSdK*|0lhb%;VuSQ*V|cVN&H$T|n}A{2)shX0&kLCX<~g7?tvCbkUPMIv6h&0b@;+Cn< zV|07YYU6BJoyK3mu=3s!&AUf2+6mG6PKh?I(=6UAOh{e`+g-AlHjSHQ?5XP#gOg{b z+VR$>l}($ZjZa%i^2O9dye4VGr5$W|&;o(Fa$fQ34U8pM>MZdVCPG8`5S~$yI$0uC zH@sx~j?l((JSo7QIuRPp>m~)(!7}f<4;6)vFtIqKx?>qpZUI=jr6S&}^^Gw>Cbcmv zP?zsDn*4M{Ud~@Ug;1WwzC06bR>yT~)s0P?)d6)S-)>4(>3;3inu2K_l!|eP@}1;U`l86Uk=nN^mR=P(204Fl~`35Q~??VGQHwG-XmOV8vGO zd1tM98@8rMQ$Xz_=<---}-XBKrel%U;jPdeWG?H~jFPT)1 z!PAy(vd3>E=HVg^VPQMHclFV|CAb0i2BM%PE;v{B02cxiO5BFjN7AONXU<8?f8c4= z^Qy^jv0aJG1P&V**WNt-4Ut{d@IW%bYQ4U$o>e@^@T0u+J&q=T30&*mJXFQ`s+xk{ zB}`sXX_hIgcb|pra#f9PY<+5tF06iLwZvOLzeX~@KDF6{U>Cdghw;M{b>XWS`=9np+^2os50fSXlMnN^#JY5vns)^Tw%;0q zxN-R1w7HubSCbiwb8TH${r)vwU352jJPNy-_dZSj6kEZ;(*X9gwCsC4&85bjCg73W z!5tKc5-VSu@a5SVQkU)*Ua8lOn5-^pQ(cfpuj#+j zx-X26qxv;*cPKL~wV)(^a86uO>-7%)$ zf7QzF{qxx)e?H4Q2%EicpFOhWEdOWv?hPlyVH+25Y16b*Wg1zaIf2R9c$Q()va?&V z7X>+rw3?xSy>Fa7^2S-dS}eW(?2*c|{F@`C%`wb7AsiQqJqrq@rM1k2P%~Q}uT2W# zWC|@aB{{}3CUF~_Hmz|S)HZ*o<^M<}%fcDvyE!Gpj6BVnT|HN|VDC$3kGy=AUoBR# z^6Zh7XZe@u`YZ`ZmwYIR7^x2$6i6?*#>s+` zBwZ3FaVwtabtFm1;xj#)73J5yNor&nKwsEu72K<7SwYt6QI=@fbb_g=v@C7LY(-W` zZ>TaODyTPsz&zDKl6_0+iGgPr;Ru7S@MtvlS(SP|3>;QE*w- zIYHJrQI%ijg=9B&|q~VCFQCuN6)#yO7Z9lfDve%$BU zr&;pAyNW2heRSCidWx}l!ZK4N!v~yQS1V5rHp>}?_s6#)Sx;wPhF2f}3o4+zCX3$f zhtqVuQ)P=9=hvq}3u|03ol1Sotp(#Ua{YE^?9Sa? zz*V|B7x0hM;Nnl5iM5s2;HTWhA3syxN`E@V=>z3kzCGh>b+@lxn_g^5@XuPJ*YF3Z zVxk=J-T#tj?|pd!O08K{*6EJJ)74FE>!&MuF>#`5OE@rArG$Up*r4zHw3r`r-}vXh zKSj@3=!LF0KRDkz&A&@9?}a_5dC&dfZKwII_lF&)dB=TWtVhWOl_82TOuFk#V!@*` zTp12YMu8%+U@|U=!1C02GTI9Hz6+)JW_{n-T{I+mf^l^|%Y9z(=nu)b*A4hc8sP)?TPpW;;W<`!;FO0=Ue*)hy(wg|ddIQ2>85CVXjce?Dm4nr zY+1VXjH@#*qd=NiFpmENA#4~F?)87QimOavQ}ijpDH$obDFw9Vp({T>g={HDQ%)xq z1Sb|?%rW}T;sEXEz5NHFl2Fw_ikMDXfh%mW*Xr=dcRSNbn=sWE0 z`2$4rmi#kFaJy+!iFp1~F>(P#7H(6asUvNZ&D!guh_^xY9Q(9NqoP4Yxvqc*HF2_T zb-VPab0_L1c+cO#gE5SYug-{L=~WfwJR`XD8rW;fRq#(za}j4abFak)8y>EfX(_Uh zSN(6i6-(t3bNv$H&S1JrsY!@ElaZ@PaV40*-6^dJF=tXb6P*lBmPoGrC!9lY?W_+c zba5g$_KYSYSdr)&$ImiCYsCFE(Sj#hw6lk#-plvK8E!@Jtj9N0*n3-E z%KNe}FD4r)wI8{qVch6Bi=NLb>LlD@s1u#Y*Mck_|FRgUQHWXG%|d60BJCyh@}3}TPgLasThtf@49;P)lw*=s;MSo? zHBpc1PiyociVPQ%rVp~}qk2|Q^&;P3ivvulsYR-in~D#Z62JcgMOas&dn6Y31CyX;rH_*4kf@S4`*R3Kn{tGg$K(;T2`ww4PhG z{BfetpE%)J=-!WWZ40caRWvqk_h-#7GDo*DhwG^t%Nlug|njeNc3m;jQ+ySVgx-d)soi;Uh8|H=_dxAjfMm2zM|I==lF8FZ0 z*0m_KX13yO*%mi|pe%rl@ckkxZ}~Q~E`9TcJ2AEp#r|SBR!*!kZKd4!n*6Zk`$^yc z>S04!q+-jm7?7a?WT?#ak)iDi&$QJcl>^<^*4iCC9f<6(cVLz8mLi1DgR9oXCavw> zzxyG)TB&HXuIgxzt_j%^@Z+LaL>*6y9(4*FIO&7*vlZB%tcVJ2D_y>PA(=MH4})?8 zR>+_5FfyKLoU-kU@(|Y|W?e+2Yv1(k5us=p@&aK#o1g+`G_U*%w9ECuzhRjG3;Xi& zj#cBLkP(xQk8f5|cUU&dR)?&cJl!M(h86l);3%49cI{ihZ#@ZE{~O~xMiu?YIEHDe zF71yTxlVWm<^jwF0`VX$oD=>aqT<&=+ZS6RL<%SgS;IXNn5LyaaynKDN384li5l^NRjeiQvh))xL%nqb>m8pnm7ilZKD5Z;QaCrXo}dy=qCc$Y~G zR&cMuG^sTyYRiks8C#NaYZP2;)my}r#j@kK%$VXC$fVn8?sNYi_TE0OsVmzXKRF~P zkQ`e;OwrJ3&fy(#CI%}n)ec1DMcWyS1;iPj;Y0y(>Rik87Io}Q5<4L%Z85e&sJ2NI z1k@I3JH@wq1GXt5wqRRZ-&(cR>HBRRow2RT@4HXJn^o)FJI}rIdp_4cv-k6DhU0QsXbyPavKKju|iuUg!c zDV4yaiX8LjS7>iMrQ2fC`rf=4)S+)fXqcqgV3RmoYn>m+T2HE*SGM*|=A22tb#K9e z00RBqct9Osevc5LHz6w&DnZ{ZY2nOCgr@FLrhVHV+FFC#ohCT_>N&T8v0{&)8Mhyr z-zIf7DNcOap?7l<{R@9E?Z#AWv`JQRSk9i(hM zww1IFPg<*kZ=pZ`WRU8{f$a&*bkMqg+NpYX-@6O7)6aKUnnScFJ%?l<^>hVUHB14q z)AF^I9&M^8HL4)sGp1@_p6XF%ZKh&->fLPp5C)6ZyBznhpubv5u6(4j7%*3a3p7(Pc#gdsk+KqrG>3 z68f>bTSCA&b(;u@2Bb!{+rQz=t4YO6Tr)rY_OCEvX#Cq&w~+#j?1bJ|nnN_W2?$*E zz`%(mHc3ZRnoYaMQ!UvQrOo#g%)ZDJVo`+&?!Ex+6b+~@?%Yn5NTAG)9F#z~bxsrZ z-=RZfuuk#gKAGw6^{G;82z3Z2W(b($E^nBBr9Ol`4_~py5$ryC3O9HJIxVZKWfm?p zHf~(C)Uq%v*b>5Tp{m9sr+XeB0wu;fP4QCicYb?853!8S^UcCjyte`Alakq;&?Asx zBu`iza=!u|bVR8WYysBiO8^d;XMD?;$7HLz5Dy85BGeGSKRZ4keg+#FKi7LZHD~ha zBDcY5!nb)6d_{1_jPkjvcL<7ToY3ZKP|c@kQ)~hkp7l zMa>%9lHMFbxuSuNNPqpG!?6)CT));=-z?_+m`LiSN+v5#w}hl}?AWx{)X8jQi!dI+ z0KG=yo#DU2O5WJ}7vID+cfe*$;cJ#7;yr~Y`olL)h5_@3r-s)jr|~>!OPJrs57Cy0 z5N(N)&x5e+xbC9k9Rkb_x~nsIA2D2T_I%YP*6oa2f1?ULq(bvUhz&>av**aUT4Mi9 zC9n63^>RWmewaQr?i^$9BHzS%_dv$K zoXRG4p;t;}{05IQ-&kinh-VBXE5%|ncPug|ixP6;0&+t8WF<@%G5Au-K9x&jWge&D z#btRCrkcmn#f9j`?m_b~7zz2VLOxghE94Ub;a*6)7cxX(XOa}Ma~Wj9!kqirkkyex zP(`Mox8O?19b5B2++X4YyecYZM(<;TZF&Z<{?9XonPx_Ae-EyB%Us4>{r=9mr?8L% z){P$ok){39K83(OUHH_Xu^N5hYWIws_3zE?SbYFoa!N|IjBT1AL*x$pApCkJQCc$# zU5~v_nvPA>14O%sYeERSn2E$Exo7u&hnyZTVq0yNh2zANA&~!dQ%+$7017e1F(%@I zpNtLG=Pv*Hyyj!HL{^ZW<9%pH=pJ#D)t@9ym|@7~*`q;`J!!2wD4r?s^AU8?ir4?KIE9ZIK?VjHY)qCsXicD$Cn5}s6bkK(?AuY||6I~RLpc=ymN z;diw=msRb-{|~={X?^?*q%iJ2ivMMdv(*5s1Gh$`cZVm1r#Wgcj1>*W1j)aucCHAtuBVh+ zZBgpi{U z{V1X|zj>(3X~IsR*?bbxbm^gw=e#EoWDFHVCacQfa`hR?FTZ-i ziBQqNQ~X?*YQTT(?37dtIABSh$fOLzG9xuA1>?FV3D+;D1fhY{7>Z?^wn_S(iv@MVN>tf-QpXGm7+2>=VssukT zR3?mOA)CDZj%uYt&5Wf+6!!7y4a3MH~n9wKBhmPQ?W~#c^%EwH3n)Za3%F2~NG>G6)-u!lnx0S!mXhIBB!OExcqt zONPS2x!uAGHO+C0dyP8+$&|VOD%bqJopZ)If_Tmy7mE1_x$zs{*WuNA1E_%7l#qbEt>{)<;Ev~EO~a4mYs8JV-Dt-mw$mBx=AK6HyLYWR zPcVESh!>u>GAyaP9ya&{t&XhJO4rXtHC?@Y!)B=tfPEM?)L?-Hkz6YCZ?0($jWzx} z=rFhO47ce#_iPvE8Un8ID(x1Y&-y}1%_(?))dhpF&ETpUp6_FSI@$zzZ+)!YjP6gBN!4!k+-~qqITT12tiEU07na zb1inkrQ=+fSJX*7vPghFUB?STaVM!uGs6=*HXFgf+>^QCvv|@x_k^)CSdGUg3`gj- zwkC_F%N=Fu4E6!s(@jvBBCna?ZC3KGkL;bn3DrFJJgNIU8b_+~r<7=bmGVbuy}n@8 zH>^}Wcaq#LY|#tb^}=(|uar?}VWkGHMO|W$ksk)3*$dt<2;1#k^DkQs2Tman-`X4~ zWV~OTkMpHY88v76``$=7hSMVKB@j^3<_T`$Pv$Jbdv0N;Z=jOTiuN8FNMyD)(M+k*$ki)b z%UZ``;M#C6mck&kxP|RIgow+te-TktmzbeqNh7!2&>5WPXe$pw)?VsXsu;NKk1CGjpUcZDMg#0j z>m!sM1UpJ6{>eDAfLT9)A+v)7C3c}Xv9WNxf<;GLSVvY4+UHu>XY4YG;Xq&EJ$Hj} z6G1rp0YbRi)>=|4zw1EX>w7*+oc+pp+WUJS;kF}%KtPggdh$wb|{w0 zK#m?uezA`i@6}hqY5xHlRMDP zZE4%)%xkSRFyPHCU~hG)n`}*L;WnKt1sNEyt-<+V;RXfzQkN1CrBsB>$UT==sxb=Bc_YY%ZlcVN7Y^J=`J6Qz zBVE7uqeAx>2#k|&<7sLs;pBGrFL!6;O2EhZ&S0?e4jMds{%y$@(qnJ;yoz*+KOf)~ zmN;bq7Hh9ka#KT1b@GdnrrvBLPf)lb`ndYy4Xaumb!uW(0#iP(-b-<6sW!rWA_?dN1zF$5h|Q9 zkfO+$AR@~g9))X!4_AGB!>ZN4%LKmK%;1P`)=r72DvX~xgmSDL7>GQT4G~^_EzXw+ zC~eVgsU*?sZV~5LKhC4e6P(4u);9DD9J5Ow*?6JQ9SCyQ@@?KfP;OEGv|{8SHyFGx zl(1uUQ1WG3zO8U8&A2FxXGK&)#5ergv^X?~NLo(~ff{vPVuNBLy;Eo>0TUijbY6Cj z#J=s_0^afUud`FuUjeW|Ag)n@xnz%=uu*j4fUbe^lA=SP#V)=Ut`YQ$8lvB59=HZ9 zOxM=(oAHd6H-W{OYh#dBTMYlDOl!d1b;Sq{NPLG0XGH#n;3k*erg~Ub=;nL_ z1jV6x3_={*j%kB$%fXe|u#8|yd9_10`}oe!Y$5@^V2&N>@is~a;uI-Fj(MR~Cv0P) zME=Vrq7l0S4eBN~tg`+tsW=HT%pa%ME+k@{E~0NVPAD4`%47(!6+&zj6_+TK@GpnD zh1Paq8-Xjj&CRv8bK6?5;Sarh!S`N#dHJ~SWz&Q^JOAx?|31_qK$!pLe}ANhCQ}6t z^l`0+xot$XvB;bGh5xhaQ+d{HL_0t+B)$bjy6)ZMIjYP}Tei-7T(nI|eHIt` z1+#bSgy%4m>V?eEY$&3*$^%p+S#01|rHrYPUF4`m00`%VJbTc3LrB&x#o<4QG zp2M$vofC>yW8hHvIh}K1;bw!+Tx@?$VqQn^aSJXCb3v;V#`}E%d^pw%8h##Q{VV1a zJGUh!D2)x9uBe@|8nU)`wV`X*bVZ){WBZG4VY6P?!YFVKxpr2D_{(JlJEES;E^PK< z5x5X^*xip!2@t{eL)awh@FnbC37u9(M~( z?ZQ^`WBwuQO+&c7u)zSjIfaaWIUYNX&iKu7;AiAq%6Nc>f0F__?>XN88!$stJGT|h zn;#~%+l5A$E9P@GsV7s|3?ObE=RE_yT@@oE5_8?HR$vy*Bwt}YW(inPd zXUy^b=;KPAc@Zf?D81yHPVRVr{)lcg{!i1Ha}&mQPB`BGGyg|(zW>YR9(hTcQK;pm zw@+iN5crueVQQ8627y?SvE#o~#~Yogums8+G%r=~Gbu0OUx0#zIgp#qBos^w($4f8 z*>aT)Xrd)*UD{N#(n<2@geL23>b^xfZVP*Fc4**z53oPZwj+qk=uTgfVRz@{Vhua5 zAtN`Wi)(MqILy5W2GR=@=%f7$*`bJ@gQc45zK4NZwtW(~PX5tdJXh=FJy?q|JYj}f zv77sTixIR=q?kL&yR=;9HuCqr(zM(%`;TF$VMXyd(|PPz|IuT@>8H@39Hgh z1+*J<+=jHw&c0*)Z;mLY7^H3jr59?aF>qR_*V~0!;|xm2)n+GsZ9O@_bEvx|HZpkC zTgkjq&oyQ9wDtc`SqnkSX59-P7+$*yqZFcL;5KNd1}meB(;vo;AWY5sjIj=qk&Jhi z;=!t?Agw5bIyeb@pGp~xn?w-@@m(hVLKuxlX?<2Q*e&s;BSsvmf*&FAZA=!%V|bs! zJ{7y=A)PxpEzR}LFb+O( z?sPs=R2lBn36AN~go(c^%EFyo0T^Jr9tpDxlg{(*RCJPnu*B@UgWBEc6ZSkav6%NH zBw>~z(_AvX&YyMP_=%ZyV*{rJ=(1Ahr`pDHPGYC4x}-e! zLPF`RQfn}!bC&9aW>&SgLeISbsavwBq13Cu>oTIHgyyBRe9@hD?u7k#$w7DR1)Csl9I(x><}XX8kx=4NTmPY#z~GAjVr`?bWyuHiK@^tc+cxzs9D#1)Bko ziDp9_?Yz4!KHwH?hB#WsJ)cTze>yoelrj43-*dDTCMYoR+iwIDEFy1czYXDXcJ&Z0 z>Je6`@q3tPhpnIM+B5%YJP-jZ;s7&xv<)iaKy0`h*wI5cG*%AbKy0}Gk@3(OaODOg zd=LYb%iMu}Xns#TMnDd8x#avYajB!o`U9C%)P-0elwr;L91)F*NV2AR zi;j3~c5)fkyz8hTP_Mt{#W4EUHMImx<_Xey*;(J3x6D1p*S{{5@-6^igFyIs=n!bJi?4-i1pT6Ju-3W;EUor}wG6UP94pt=PyV%{A55T7 zca~%&+WQiC!jA$?VG(%?I5cXnV$F+4a=1(e$@`DN;bH64Tfl)PeeeAUv`6;h*_^Jb`khy6Om z{pdJv85dx}@|sc&_;8vW*uX5T$a6o_ptoIVi3&LJAwHljwHEQy0*cCH8GE6Ej=CQWUOWkwyzQ!U>^6bZ^4Ac zmkuRFi<4PFUr%!rf8`YEHL4q7yw{R%1nm$a0obDddSys=v!UMo5~98R`qHW+3Nsne-9H%u;d`1J%RxUq zPhWxVhROU7*LxR`n)fDrIHbFAphu)1(cQ4z$$aidfu=B>!(aJ>^UvE?eEv!(LHH}% z|H1m(i^bTD<;jl+B21*<$GaqZA0DB@nK#LvgyDz$mEGX!tTzY1ylS8FUI^_qT6s?% zR^Hd&W4K0lTaOR?5X>ob)?t7*XZ*W%ES-dx{Wg_fGD85ukWrO&0%+V!I3bycwc9%^ zoBwN9{nzcPlC4BGMHB2F%+vpUc2)EYK`Z+7Qs$1a4zj4i830GumQB1 zC~Z;(d{Ek{n)DeNd@hx~P*bqsimt1V4b{f1hD%dr8P5akGqiUhrHr2z05_dZPZhWZ9Za$+XC9Vd`TAKh=^gF$HWIc2#WI|9g# z^bP{UJ}Iih+WB`<1io0*MJe)b`(Y;{6p<~$+(EwK0|0m`c?!9^0YsdRt3z=i1KHIz zx=c%=2dVqARx<^_B}8M#SLpyjwNoIJP1 z>~^#^RYwld3WS=_i)KpBNkt+tzoy$=A6XEN)?xI1^|%s9x{uPQBj2fS{UlKBSliLP zyKK@+<>5W0#?g*Lc8GQv}C1*27ck`4X_Ym32Pkd67gFB&X0Tnq+VYddG5 zy&p@yPw%%#TO3kce6)$N{tLEX$i9NJq%4|dek190z1{DGH=1lZLe$O2-}VW3!Gznm zx89Bq#OaW51fPL7{N0J2HCcZ2JtCGIBK^pL{e?EON!;ORO6CLgWEY0Ec1euf3uwr| zy|l#NQc<9qFAql?8wp}lf4{wMX@TNVw6@y}H++Ol8F?;rvb7EH+Yba6g*#qK-O{vL z4e9X>gvb=puSpAfR$v(Q7{*0>*H@1-pr6b6wk~E(OQ8M;txj6Ixc;Ts=sgUNhOlwc zG>+`#arHMrRgEDe{4y+4jsGSsnEzXy>q45@z%>C?=ypxCrZ`WEevy?-_cpEPo>UnH zY&+Pwm*T@0(6jjX7vnZNfO7oia~A2^I7DrKZ>XYoNehlGwYV;<;jp!IWIb*ID}J1g zkY!=(N5uJ0xlK)vMU2Mz?90-EHA^tMcI@QGn{@lXdYlF^vBTpszMa$55~$8x%h&%Y zIeJfOctcXE*o0qAK(7qxiISbtf(fN)Mu%o1O~6aXJ*nqh^OJPKlREB+T+ps4R40(= z!*imrNEyBNPMgs{oP=Du%OL zq)-e6^NW0Hp{>It%Av3G(|5i-tQQI=y*yG3@A^Iv(N6Hw1CYXYNa0!_W8j`kh~Ija zw$7#S)_WgSGeem~CJZ~bLz$^0Q>mT%6G{VHggG9k9pUX{hK2y`7Ex9^i1G*@J%o)8 z@YBx#;rwc}b2y07Z1B{coY8b=3Tnm&9`mc^qv4`rhPYJUH4<&##8L9Ji1)Evu^l%y zniLePaGspo=OC0DKRpX>nL*l#6Hv@hBcmoDOvT~^RFE(eh~#}H&OO8xP3E3MZ~5n* zkGnDV>~w_p_~xG5n%3Nf(qs@vFjaI7=$CHsPdz@E8u;|*CZ{_*8{$9LJ~tUh3^zDF zE9Mu1;mJN|qzojMm!v~%bleM$z*NjkFMtyba2ESH5nO|(Cm{U30UM#nqyLEhQU`U0 zp4*TyN1%u(l})Oj#0SobA<|e5%^AO$Xdj5wum<+LM&{uX6Zr3Lk(Z%< zAmb4-Y)P^K+S0k$$vhXT^FBVPh;)k-O{?!58dCpotU~?CK2=n_2q8>F@=q1yT{WE?>(zB^Fol$?tSBqW26JC8~Y2dTiO zgg``Sp>GJOK&PhF;JJ}=UP%SuizTFju6YT{Ih96T>~=2k*Ub$T>w@rWc~Q|`BkU!= zfqsr81me)Xg=>Pw=^XP`Kl_$%Hh~5-a8D>x%sIqn+}o2H3cx^0Wu`h`U7eO$P3Qip zsA(;K?vLcm2Y|y6^}ISP|BC_NoxJNp0+)phBG4rf%(-Z7mPXY7<)Mz3a~qo;yH@{~ zVEo4q@*7m)q(H!ikYd+eZ{;+$&`^bz`j?Yq_NInH6{3YnflZHT(KlGP=OBZ7-$V*R z?F~{8=&O@ZAU6_bi?3wX8Zo8gq!!}TQu zfo;TuHb<)Z^shLX!3Mza1*XYQ-{~#9fI`M01y5|Z=$}hftyd6nM7499F?E>h4r6Sy z?!Q0*{9YqMIfW;%nT~q)p?U|1Ju_RXQe4dZ$M5i#cf zf!#ZaROT~wF*s;EqvxLYoe@~|7tM_IdYl6g*99=wVU>r*$Y|^G%U;K2#J-E?Bm^oK zxz~*XZ9d(PHs6zc9CC>hlTdtinH&xSXj3z2oKjnLl$=nTlZAtt24R{-NVSZWBM;u3 zY};zP5MvSIY@3b3bc>K+ahfK~bH9e@AKoHFR|xlp3Yt(M$}A9=4|CJbaMRCo_ad(a zaz8Yly^K4`Kc$eYModBW#CNOCJN4@=AzAm~k~)&n2KU_I;6p7Uo^ZB}n>tBqHjs9F zXFMqLO9bfq6*UdECCI7+N}S#LojLU|Ij0)NkUToc;&T*(xyXDso+T+$aIz7{6t6wa zNS1E7Bzqr)qmE+N+v{;IaX1?SPx=+lC5~k*FB~_Cry0p%!JHZTg_Ir#8f_-=Kx58~ z6I<}p;x?fS@`700R8`o}3BTfD~+2QADJ@) z$;+M^r+1osZ)3xP#1u$4;paPJE#N@pJlxZo-AFUDDP`v2{b79%I4ios>SfD5ayH+l zcAR=Fq;^SH9Zn=fQhkk{HLIQOi~|z;{%}io_!YUjwXTD9J0*{-G1$h;K51&ZP`t-t zGF|N1Q*5)e)n06A=s6yCfZ4o9RM_#I)8^+ctT( z&D1uzw)O(f51AYq$L+f$vj=Rq)uec30PD;fm;anB%heNGz;>Ie`zrDRQ$tx8@+2ER zW$gRIYX9glSu%9{!)NEayTVvpER+1Qgbjbh_T%oL6osenf;R6$U%qE|zE*qDxC9aZ$tmN{zHm(=cm@) zRQZJRgmOiBnoU?--@$A=xLn1m$i1MYt`+L?iQ>_rk}pt=l`nRzV2+%nSXDXArS|3V z!SQo&OoV01>9{$@tplD?iRO{uvbtEVzhB2iEuIq}z*+l?d2G{bdPBWjfHxXRm$=vZ zEnG}|Ab!{~>gRMm+TXvb-y&fB9I_*DUy%6~!uTgz?OYU=B0)SCQ)A@*4eiCm2V`{g z=eoRi1axu1hq;huVfNQwh&i5$B`ptW7Bz04YT!aLmh>at84k!AHV=66B?&Psq$@Zt z6TYH5aE<~0mP;0gxVPw5mbN~U7`Uw2LrqAhwzw*r!6&qFCx(|x5#Zq*2}P-=gFYX75(yq7iUTQueh^6tod$qu4Kgy#tmiJfhtZE8k!!((m+?^I-%m%q6uAh~z4-?XFcuAv-!_3&&Z}oL@l(BLR;K0E zu&Ng?HVeDPk@;&E)#B>?wtp(&c2}z_zTbQgp-jDy<4SQL@%u;Y*s_;!p(}-{MP*NI zx?|aQxOhS=!UVf8-u!$YnzD1_E!+f+ zW=c!Ot~u1;kdO)1?R6cXLQUlb!%#m zYRnr+GbEiA8>RZQ)U4=VrY+XyO)=%Sb<5rxhkntcb_!?y4^plrV~(^R9R-3Wlzd@u zx9o7VME|P9{4x2ev1qiDxwZKPNmpx9S~A)NSl22dW~vftr@OEJuYDpwe)x}(DgYiR z99cqdpBiUA7fLg3@N-}P7bpp7JWPrxlL>C>Of2yb&ncgTn`O+uAs@Ok-kY;(iunL} z?p)K?f4a|^DKW1hKOa}@eySi;*7?W2{u6x!S%04%^3m7lp}>V+ zoJ$HHlIFdmF*lM&o69YPwF~3c=*hhgfWn+XUN2CXr;8;~lYnP1_L7l5sc3p>n> zBRCs!D0Q5)YAbXMTdb^A$AP#P4a5vB)`WpgME<`Zx8txv+L_ zoY_J?`2ZljbY}GRZ|E~WO5T$8A16mX0WIWuIe9nF53FXUsbh|tlbTh&`V-8d5Ei)+$Pk!N3LT7wm{{nyCIWBYDV5R1ac21^=GMS^u8xR?rtv=vg zclPa^(`TOVD~XhhVo~#4^83gddYbHhTFDz}s!(-tk~FJXB4QET*I&|So=wUSEV7VK z-NFUiIozL7o#B|X!EgtArqWGk{et2O`!uoQ0RUx8uDNKPCPs6Fmm0XS8(x#btmJ-9 zKG%oZXvaD`H@4b*q=;6=pwNbP+RDIo4AyZW@fkWn#-7QMph;Y`x?xHPatGU7%BeXS z^X9BcvMP`P^jzm>Z}#hfd0;yiWR50~iKAssCyyH@B(bvlWjJt1b(`N?2PP2t>fgwG zXx>NucP`PGcaaD3-8_y|8q(5Z$uH2_;MLwAXvn10wn>56>r0)!43=*W))HB{m;5?6 zA%-*~_7OlT7wj&Op9{?@k|^^}2jOvetOyllfg4ds?4mAQe}4> zGe~hb5B+%WBl6by(wqH?KEk*ELE7%z`DTCHn_^#|liz@=py9k#FR4G>yCUW5xSdF} zIi8B^JjY{ccn7~FDIv3WZd}N;MNstQGdWwG^R;qna#ZNNo!Tj$;%E;mEslP%IO|2g zWBc09g_CuaE*nA|kKnykt99C=Mr z-(UNy$+dVKC$a6UHO$Dfd9XWCy%WL5j{f?uRo_VGo!LXTwNKG3916m#l4q%uP8{zKJQsOSeMZ&z+u+Ad>0~FIi_EiS6m&=@3vbp# zeb%iG*TG~-lGFv0Ow{8ra__y z@rRv|(x2AqbY^Z`f-gy)rnx~8`|(#iLl!e*To#n2LbpG{wzIxJ&6eh<-kHWb`crl` zjlI3&A>fT%6$FJ%z{l3#6dr>cb?A-fLYGSSR&<1k<5-e`Bpk3b3*W@t>;9C{Ti{yu;zyj zfqQ{NgfF|-wmen|^c$gUfZN+0`qso94ZnQpbZ!@idKU-ig2J___w! zqjVNGnjfZuqi~~(z;53sEqjVZMGP06voPr-1IcAW5l0f@SG`anI@##rS z^F#Y&jj;puE>L~Rih8pp8>e6En#K~2J4uTiSE5A^#7(i-T<=0=sF=A4D+q6pBEXd; zDUC{&4ddDP2ZHCh33q({sr+Md*h=X*G2Z5yb_epXR2 z?*q+jiU`uQK=RTqM~W;Mb-wYAqBdGR4KiqR~kX4DRCY*Wqa-0k6D1lPV zm5)d*boPaBGm73I`Gi8PScPR2;u(3O$oh}UcmO|W9UtINU3xZGrbnKrk4Oqzy_@o_ zx_v2ZXTJfq*RN*^K9Y#p4+2Rh$ZYb`pEol)OU6pAQA2CVl1IL^?S~_vxnni*`rsDB zOU|6lXxHvE`5Xx~wvHLd;WU}FL2~?A_Geb9#TOK? z3vSUH_!&owFHoK<9{oGV{`muLXRtZA7tOTTd%r!T=%4q7Yu+2}&QkMS(sS;F+=N_( zeuCmaM z>C|l3FJ6VNLD3ncsA~6>R5T0U#H@Ivr1!%LSTYGLUmP5U9l)B`+l~om-g$* z7(yvAmnSX=nl9DGIExJG(()OT0{ng~%FMp8_Gwdfd+l?RaT`S~(qb#w@uI!n;85?W ziob-QrjG~2o~SomR}Zy2-!NYy!&p8atFKw?hU})OCBI!NpOti&!OVR4P#?P;adk$o zr19&4##VdS|X{~EQ9 zJA^d}@1&|yVO@mq&fs;fUOe+%fhJqXx(^OjrAlY>9z32nShY*OVX;KbW9fOy7IGwq zn#fxv)II#4FG&)SDOt?(WJ8{NQ*G2nTr3&;-Y?nsy1*clIip&^h9X%cTrJg#NkIrO zpeXo#CI$80gQ18(g@+4@D6z{7Q|%P-S!#L=&tc*-jf(P*88oEkYjUa;R@5gwVtjE) z27UHzAK}^$xn4Nb?n*be62h_Jsq?F6iI`3`gAe9q7RE3Or1uBp-K|-kxp;;xYDr;7 zSYfk7y$9~VzJV5rNPX8K*RyD3f!RSCA-4;+cZIc`bxu-Z{aQ`W=Krj_q}v~cRjjtu z$wM>rPMKh^Xdc244`b@(E)>C{){AApSXdFwa3Yg}QRhQyIOl!1j zs^d9eG<)SeEmxE*t+rLB(XkG=FQ$L>h%Kd=>%RRxg=g7?KIetvR!d*s#g(naCoKuB z@IS?I&Se*S4$bCQu8QZJ&I`*l7jdhJvr@C-cDTMKulaR6(=}G2+ADLv8U}wRuT6*t zAQi8M-}B94<>N|rjGC|fDg7?`3PoR*A6HDE&WB4pm6qb-3*S~AtEAoyDL$z=8hChu z#28L{PFj{NySQZO%F^P#i?ds2+nOi0PAsQqC(Ygyml69SopoRUCX_P2X`CG1wz%6= z{J>&KQI_x8G>lDpUf9MGA@7hfA4y5NWjLdPuoWg^e?AkAufO(y z)-Cn|g#@Z*`XSf77=h=_DP#nSCKM$UDT>k-+vmmfo^5wOguyyB&;qy70!6ukWeCq> z(W#Ix8n-Xt5Inolr;%Y*l*Q=1xUEr>p22O*Y?c+YUO9x@knsJ3ffiZ0!itLthCG<_zw^5KrL^CHz{q($|f`T1qhmkxvg+_TRQ5OdYt6V@HFNwF`m>ghZB?>OWd zcj%C;-F4J_JAranklJQHAkB`u*!I-ijv1EyVV?9%r^9L5<5WGsBr4KLPSRE1I-9kv z+u#j7vp@Wv?+yiFJX-&Z@puLaq%j_ACVU)7g{4zpy87PN9A)1N{8%#EM%|X)*SBtV zuVw!@HnZxUG1}QU1^8LIK0}>(3Rgzt9+ht2H?hnMi*wb5^c?N1+4xj}=C`RcE7K&s zN;YhH;B4E9AV8;ob)Y~xpe)@%m(N6s_SS((z8u-jdfN<*U1Lh{R5irf4}^ieYnz?8 zQqSFU+0uQvLy;1gtXATRkv&1U9h=a5YwCxhydxL5bVtD1??9jv$M(US7QJx*7G+;A zu_$%0Bj6&ORWzT;KpmDTYn3kuU{%wl_scrQg0LkH$Zh{?V&QaGXRmoLQKPm@!>eI= zHfMYHXNI1zxEbktJmqO;_J$y<8?835M&-~uvVyO0up1jG$4$pi?ZQf*$=K?ON_;yKcujT+Vd%*bWICe%^ z%9wPU$I|^7L{e=#l@gL8N&7Nw%Hsi#-o^w`i{+bS#pxI3XQro5F2;0`*-)B}_KGi1 zxO|{gQyw_Ga<=W=Rc zVZpk_CRwF(@)Fz{n}A%q=f?g7kp+*TL<^zGa6HzCi`U>@~!c)l)Gmf@u)Vr@Er{k2jH0Om!X@OO|J%vGd57WQG?a?%TnE|m*WD+*BvgDL`$%=8Q?!@%yg1E zliXLhgJ#t$GS04mRU)d|tX|iQ-uBH3^Sxx;Cx3V_@8L#d8?LFuCBq(vq!t%NN%lT4 z+m#zq(lC%CnHREgjZ<4pOou71yd({!NQVnJ)sQP8bS^UFNZ7G#bgnV|?)BK!*dd9o z8%UA3do-yAT+^hld0n^dP+C>1t(uuO7t1I8wl`+AYGydyrIb5L+Lja&{p0{vk0}`~ z{yAHqaQ8WV_LG670r%rZiXF@XB`#?Dc)+G#oV8q1Z1XG*X(QK3d6w9SC!#4l5QCaF z4>KZ#2h(wn=w5i7*e$*rEyVdTV!5mN;La-tW8=n{FC8@TZ6s|0CRD0(^TGa02bH|} zeNv;~%vFCSjInaPEwlD%4k3uIhG`s5r2pGTdy!3BF}w8uES9RY3+`7#Smo9frO3$t z0Y*O65we@dT9Bf0F=f^1E)Cit_O7rvz4nh>6(1Sf%xkro8~4}7Ih$#Wz7wMh+Ul@i zNN(UnIj0_{as4#B!B|gsUycjxt*A=9i0t+FO>Un9Y%IHj=6=+3K-$@OP-_W>j^7ke zH7�t=YS`3w+)yd42V`&Ib?nzj@HSm0;Fp3Fcqu*`$n@c1!u~wCS`h;Lk783~mLgWB4s5O#?|>uZj=sF6_wm z^wxTwleOi0dK~K4(t2w-&cpwsT^PQx^7mD899ofwivy}W|f~ilk^X#7aUw$Iz%VgRQHTE+4 z&o4^82xyjfgpg$R=3r9pV{TsTseDfn0RJ?O32e8s?jq%rc$OVBs2g;TdF^(K$`n?b8cL!SIw(c)CK^fFzaMEpa)Y z>)qTl_bJVv9zch7uAwEUCASy#o?*MNU!5)|@9v}Hi&%Ov?PD!3tmB1ec>$sRPF`^F z!ltDNysbqr5Q1|i@M&qQE+9G{i6W6YQb)2xx_Qn)<~KF3qY+G~+kd5nnZSg} z(JLaDwD~53P-o#brQ1vvVH0}l9m~k&h|yuCI%Ei$k;cka{Y59#t1IqjkV162Omt(x zsqJ886`Vs|g{KNR1wbvrM$7A`e%XQxAg$lZ)?GP(3EQXn&EFiza!AoPaSoljO42{N z%wCZP1gGzH^aod)6A-`S7M@d;f2&ISwgR~y-~Fay3*~*8AW(6Pw#d^8IxZy!BE<>P z`L=X0$_=nqvI?YqMG8YxYc2eQ>dN+Rf9}U{+S@mf z7`U~W_8w+XOW9i08rY5l$gOSQzAktAVFY}c&vXW#KZ(=lQ>rD$kYfuMKbes0u|jaT zg^fFyEJT`8C~|5M$yInB0Zl)#M_jJ>fS i0Z1uDeCSnVV$uov@Bj`j12+BNbbQb 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP8266/bootloader.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/Hello-world/ESP8266/bootloader.bin index abb6213d2c5a6eb482d4f8d0c5c1150c311f0209..9ab4d4016d444fc2f482bb7002cb00c408b2d073 100644 GIT binary patch delta 5701 zcmZ8F3sh5Aw&&b@s5dD!W!c1@jXYuh({t1}I;P<_QU=(2CLBZ|~%)oP3ASRu*1Z=ah; zJCC(C=bU}^@9eYB-aB{y+M~YoYdXeWpfkA;GP&Awy3_fTCw{I}wE~2?x)<|-L74p! zU~D;Z-GOmtP^l^aSO$;;Yt*h(ZG!o3fF-bg9>zBSJ_Z;Ahyo;aDpi>P1psycCx8oJ z6#z1$21F1-?Fg-f^&WtO07n6CbSi-=({oBy^(Ev|^ANJad@DdZKrg^qfbFBmHS>88 z2G9P=p?6_@0pKct>4mtlP8b^ix&ZzNaHR{53ggEBHvq^!Dg)ta829Yk z0;hq=#{l%Szpq8;9?X}$s8oIZwW`*_xCbD2C2}FyKMeCh02QoN)hd8T0Rm_QaNuE( zJEkJUy7qXHOAm^d0PL1Ozz-N-gW1Pj@;CTk8EV)+3oaxNxibGPFn2MD47 zLjdOht^$k!So+421&R*E3O1F9{mqysOd+3ID4Gf_Sw2qf)FWSBf<8Av zKTDPJRe@9aUR`h(FzDEVGO;(g$T4q(Hw$xAHotw9mFZ=WFOzEYS=3G)@=aHbfHA9` zppmFjmMWMv36Eoj(}g+4(q~E=L*Nz0uX8gxkzrhHnddu%Q{`HHPJm>QpPK}hFot*0 zDdr#}VO5AI;I5zGwy2Q?;_2@cUrdo=%1|XsP1}N{2%Qtrumux_ml)4RY{TFu8xDT0 z+DKCK3I92trH=)@h-yw2xG_cgR$-Tg#9oBYDj|gWzf-%IwsHBoK4bGq?!5UFGprB( z2H8j`4J8RDxN~OBaE-g|i*id=6O->7R-}uHa8coVaqwY0kOW6QuSkDWg!5o=a3l8W zk^ij1*0IuG72zx;Gt|qA3~Z)h2f9#KPoz&3;e-N)ufxP5KVq6G-!+;7>?q59qJU*$ zBNhe}Zb0$$pkd~M+kaf~9ap5|if|0%_pgD|c6yP!&m@B2y@(C7UE|W96yZ(SH9QEr zMhNO#Zz$3S%2<`=t5sO~FQqaAG_Jy40UcdpF4ZrtndZhV)(wT+Ybav6ybgYVH%jWY#yt!n7 z(_g_mn=3?qL17Nh?<#EGuXLtTd4-m|u9iZcZGJ)VPNQPdLCoCdPGtaswYftvrZA}a zIR(O}xn2H^F(>exBD8?(bipc|Gia5H4l~|C)t2VjholZg*g@U56x_#fGs0Z<87^y- z%N*yXTlyN(#w>kD8UOUK-*U!p9`&2pGc3=eY{m@lM`~5d%d$(2n{`r)B0Nm*s{->! zUNKg}u?;_?&Rp-t+vn5=(xgU3sG|hs8o@#|+RKhS$W}5oj2o%jR;P;>OxHR52wm7n ze><|`CZ^Qd(Zm#4Z4kphRs;#`3_5VzxN#mRkm?no5-=W--XRMZc-g^SD7y~xeXL;@ z>IyrtwWItUYzyd8d2gz={{+hJK|F_2dF`PCWpD?|{x?7+@nQPxthT{%BSaw*ZH3rP ztrX}rt_?E^G3AZf88%%LYLp$5_9pyi$EVa{@fGmmm6OJ6PZUMTt2N!gt= zbJ1Vao6P$0WT{vYQmLqU*js>5XbB7VFc%l&3bWPRHC~wkFK&>Mx~JKQ=M#BC_CHp`gP6A!7A^T-8lI<2{hz21`(2|FQG}Z@!h>k9k(!&V2-jke1Lk0N z?-0@1GVn<`mNc8EDTHT4-T~KY_)tv};>iUeVIsCzBo^tOyfbA+%AlKAAf6Cmv|PBjwd{U)+GL%I|bhN%r^+(>i{Tg&*~lx^>% zk3GstpT~s10zVVXkael0xKp;L&V1sNm@T8f9u?!mJ$sp*X&~TuO!x?l4klw`3KTuJ zS@?5og`-;MBrb=&g5>aCcvE;tl*+}+qZjqDbgQ{&=^-mldi%tobKO@v?loKb?1_{G z6(A$*Pd|V9THnOm!}8J8tibUQ$y!Y+@d)4UsYM4{>N7wuxxP+%H72|QdJPzJFULAF zPDyS?VCOIbGTt6I$re?;>vz_?<6B zyx-u=t&m>)W^=~s^h#p&8*T&f`tfOC2b+0N9Q+6#;_jI66KeTwblM*qmS)S6LFhkyq^&{z39gkc#m&qdc9xT z6ccJ=Q1Wh~7A~`qOB$-xyE*;HQr7D8TvUe{TbewSo*nq7L;;6l$63*zbV@IVA>N68 zv)*3!Y^}Yu;!x_PO8t=dtbM3e?ESVvs?>*IVQ;PPs4b9Lww29ims=QbHLB0z7RNTc zlU10PB2~nM66%jDX!H=HWteyz6MQ8a0zY?H1G-|ea?{3cTK=5f20MaB(n8L^y*ka= zZ6*ExLmy2`Y9le^GTYvn)s)A0OVC~hDo8<0$fUQ{e-U*;X0ehN`Qq;3bYnUiT5Vpj zitjTOV=`^~q58K!UFPhzr3FW*sIbx6{i4X9Vxf|klvapC0UL}~_hPZ4J7<_Dh9XynRor=vDZ9`rH8IAM8HDj>K!B0#Gbpr)mCi(kzfgt~z`*NhCC?e$H2%pu z?bg17qBIy4PQb3o%mxR5KsO-Qq~t(Dp!G1ldRAoH#trWyxh8p`k>crvr#VDJABGEiqO7$f{HT6ByPUW5Ov_CHVfEuC*>q*tTDL7+AKH!`X!N%!gy znG2bnETH~EWa;UbqC;m)eJ@8tVN=&8?pM*0VUmlz)HQ@gb%<@n2k44>!4W0XMK|KQ zqb0U@3v(4G5@fsyYLD^^0tetl8pGZw(aC?x$O&{rg@2*WI0{w4n~spHHZyx2cCBTl ze~k*e>6P}s1zVla6d*h7EyVVRSn27g@EF}Q{DJNvb=JRq;O z{IouWiVuFKLLorVdD7FJRT(bz`|LZy_@{;aMm7Xb9xr({IH{89n-~KO29jAxZ2JCT z72*}c0+YJ_&(umn+#Y%6^f>{;O;tD?f#yhhGqPMR>ifv&e0v|vSSZL4@>%i@J(1~INS+Lu3Dsdpb)y29hy_H2WL9dzU#FF!C1 z9DIW@CL?$Z!hr|~HC$8&#|Jc*aZg7eT0MarH0XwjVH5b{esR>U!?!OIVo|lB)Yz~L zf(F$X?uygqyYCi=Pz%YOP$zZAhn>KH@kdN>blT6 z^TYfKK9%=9MM(qI2LDr$hGiyAgKu|&{VjD0^>`fR-$AL^0%}UJ;ckAK;f5-0iwN5y z&^9&wz<6ORWw7epZ>cVxisiQ;u0g{=+o1~UOi86i5*Rl#sI5ut{1!qiJg=seboD(9y2FpoGP z!Va4H@2R0u7T%n^IV%rW$a}Nqr#?UhLAfEgL_U_~4CHEpGc+rhV$9_vW@auqG2=J` zo!w)Kc22Vjc)rGfD9Xu5rijZyPg23aziOuKz1p~w<4YkWVo$7vyOWec*Er>LdXnk@ zBQQWiMbuCpCsXU7?u2t)qYR)TGU-a7ggcYcJ&LWNys&i_w&L2ks}yf#ipKB2Ps;2b zy>v@s*ZamMK_dJXNabBThO!7`#d_hiMy~S(E>G4bu7dLGg)b-Vyh+SO_BdAWO-8~% zoLCx}jNf&!PWU{5IzNTtiTQ9?Iv3YkcLagfRDMd|dkOl}K(Cpgqk;z~15~TdeFScw z9vdXTnV>xJ1IbArj!NOUWZ&_r^ECY6Jg+3UKAe(o&2=)|2NYewP+bQS6z@;T75*?8 zN~Y?iw*V)P&BzQquPI@CzXv68#{$2T@x4x!YN7};BAR_KOg`+W*8^gsE{7M1$zCU| zT(*J#!l!A0*LH9c-qDc5oaz{JV0)P+%P?R=Gj=|~6H|7hk=q$pCG|{QZ-@=hOKqLH zRH;L=SugCHgwzFm+BL!(zwcJf7^!J;g@aIIY7)jkFU$YkruSMPt#J<}^z8Y89;&8g zYRzp=kTeITaN4n@9aC$G*P-{^%J4W%o(eP_l_4*Vkh2u!J7vU2UlB~*Y; z+=}=xrv9NO4Rel3Cx#6O?gu8FTzpnJ=`_b@#ac8>FoV0`nU&FpZ+H*BSzssvVJ_u| zy*S4vEM7ikAl1i6%U~V9H?3nAq_}~0`_t~;z2#-!2$d8;b5Y{c2UH_SGfh2ua>fu- z^^h+5W&Lb+%YsR~fLf5$9RFa^_78TRofzQ<-{TL}84#;=?<4EX&4rT>Z>Tr0RtffV znwBrR)OMTAkN;k%M`Km3ub_tQzuW(1(a^isxu{Bh3+k;5TPoRk`OVq0{E+IJbSX~W zDpufPGjw%rSC-2uPPesATPHycC@-7g<_nh}GtYNGKrI%l^R12=AofCmfQ(gawqhqV zLG*JD{cV*#d0rM_7lT8wmG4c(-vj{cv=1g3WIq=TX7D||Knjm?jBJku?_Gy%QW1xG>v3j#bFx!@K0Sqj>dL<@oB^xQ(` z4v`n-E?6kqS6BZGcAbf_EHV1ltXm6cwCw&^vj&N)-KY#ekYCPSX`O)YvlK2T#;^Y0 zcoWvQ0pu&WMbpY`TOVs_eMX)=$DXoiahZK_nG=M|ZF7E^x^CBwT~GdW7wg}>Tb?m@ zVgA$cHCnS)qBzv#-_rVI%QM=%&dYA~xB8DgHP_F`SGd{otDOJXeEuYs&$92zck=HY L`{lf+^jP{ofN+ex delta 6201 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

K@Ls?e?EeHUQcTTj7~?z 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 literal 195984 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 diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/RAM_APP/ESP32_P4/app.bin b/esp_flasher/lib/esp-serial-flasher/examples/binaries/RAM_APP/ESP32_P4/app.bin new file mode 100644 index 0000000000000000000000000000000000000000..b1c97a6201c11051d876899629edccd3c12b354d GIT binary patch literal 109760 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%0Do*^%p8p(~3n3APMV1(bB_`wbi}LK z58A8}B|~^5_+Duhg8QQMEB>a)3qwm}B}QnPAXm7Dbrap?tcr+Cil?xMU5NAs?94ey zB9SAKn_o*5zjv0!EZ;&MdJ?)C{871Pv4p zboBGmEz*ygi(6wARfza#{Q*Skn7usJSDE<>6#=}*e0TOqdZZ&BATqT7g+N1hJ%jiX zaz|DUx6sj;sdB5RTqGT1br#WWQ%DP&lgQe#pS1|0;mZPTTA)D)`O3*ZMWoo{#%Fb| zZ%W^6JN0o#o;ItItF;l-Y&Li`k5-EHhA$7Ha?g`hxSYei$ByZFAClXU?dwdv?9`Yx zd()q}zaz6^Tl3UYjSOJhyaKEDH&VNJ?ON=fK=XGd-m;gECiK#^KttbB9&Z!_;opv^ zW{LoY;&F(N$N_m!6F(zlK8QqEq~`ZtW7_h~to3U_Tm+)rmS}p zl}fC(c;8vR=gU|Am7X{MvwP3cC2}cQw}3LD;f&@p;biZ==NmUIj_qg=ARgj{KSg96 z;Cij5D>AV+HkB|D-2NffHPD}SVp81rYp3~r*82f4H{wq5ldCMg6jVt^HKtwOo)|^e z7nx%O{Oa!h)i*BXD5Ciy=5b;JN;Er_ckP?kn#hV3o5`FnXn%6W$ZF+j(;LXU-H&MX zDI3X_Le_3`0>5_46Z>8P)!E<_(U{h8DA1CJyaGl*(fc}ZbOovRTI;vPc1rpvX1t}s zciJ^IvXP{a(#x-Y!o_>S+8hdk*D|u9q-{3lso9NRQ*jZD+9-)D=Vkt6kC7P~dFR8k zameTuSB~{TG<>-;<`z++Ft?V8m|H%lVxFNfJN2S)h(X9wQW3%Ccpuc=qZm3+=o@Kq zoEAsxyJj1i5VDWnzKhxJvacq6l8EMdty+|6Ux3Ii+&(W!R5Kc!g;rOUym=7CR60eu zsurhx_+_Dk2O#cA8VjKTi}UoIZ+zI+AjXICVUD9X;_j0y_$ zmN6i2?JAYCku@;Xg6z$kjHowgx!5ph=%T~9hCq`=O{{5grmY=O(>8?_6}U!5z3or0 zcsl@}KzxGn8IDgFKH>O`qO0^f2 zuVkeGMq~nGc`M5Z<_lG$G7#|H{tAr<7)(l?sK5_>^=vxS6Mz>oXrdq z8~O&aPD~#%3yF?dxNL}m)h+8*Ad6HF#;zai-(;7w}q%W7(H;1p``&=0A> zK}#s=PQ)Fj2Qd$1t&>~5+v3_#oFfN(K+yCK()1 zAQ}8}g=BExDaqiW*Cd039!TyD8itdm0RBzK9tS>iXeW^E(M5-l# z&FrV9Bm<0;c|Zjv@n>kWznYdPjI>!%K~sw&7C9}6St46Dd6{>7T)YH#pZR6ANHWAI zG7qT`Ndg(h9H?d_uNWEgD;11nC?hrxRf{FB8pY;UE5wo@Mq&<9OC+xuCFa*EB>F*& z6Sx>kU?8w1F;M-(7P6u(2+;z7Z;0{hEaIOrls}%aB1XplHn#h(1@!RulacXQ5K;TDFvH%PYpLEkM`;LE2mVRtULygdOmuMMJHOP!+b4SMfO*V21~7JeCn z{}aA+t++QR?aLVapZ%q4&AmZ;zKp3M`-ktNqKWj8WF$C5*M`n*8mSn%-B}S-=sYBw z{BpV!bEyZ!*O*~XK#bq6rO?DCON=8Z8B%9km==Bi8&OTehpgZG>Wc>@9R|d z{*8=-*t5w8Z+y2=xXp!PD#R(OcXC%XCR|2-R~Kr+n>Q0!=e4vc`9}Dqgd0oR`sTM4 zQLpdh$DVl2lw33XQi6O*3`JKk>cz4_%X>ii%z5n&-L`rHop1m{4OKf$|NlDvPceR; z`r&;;NN%G*L!Kch33REM^X4GmEXemsAx1bAGB1kGZ^)#)OX5lzvm3#o(s;jMBY#4Z zd?(S+OOjjw-RT zEggG#;>D@w=bW1R)BNL~9<||pqipvI{f;pTP_64F9xr=mP(%ll;5E(3!->`yKco?r zdSnrNmwlK%W!eEB44N0d=AHTbGS<%buMWp;niwT_-nZYHl>RZ$hf!LGi>d2uz~ zrJuoioDoc`5a_&XgxW1MqV#C@(%uylb;R?Y(Zd>1bV{ILt_d1tsW+HwTMe!Pl_mzh z0IO)e-};}36@g;sP~lu+%`3QWNwJZZ+^gn54|$8S``FrG?QZy0aK$FvAr&fi{)*C> zLfGLWpTl?=JbeVhfl?u%H!d6fEfvK>y*tO0&8V3a$iwQ#GG{?x}l4r zk(zybzcMJISJcDl^Jko!5&iDIcLU=##5vD=7#m>xTg1n}1md6YadDiQSP1ae;N-rx zG~zzb-rfFmCUD{lhB%yP`=th}w5fMQMCKu6YA}Yf04DCT|G?cIZQ-kFb2@wiWLo|o#{ z6AX_Y*qoxea|Bs6#CD3V@ST!wzc}PC_-EbQEYmP=3(mb6i9YtnRnH>^m*cl3C?Co_MsflNc&~x?WcfNdjbLRj!d7t#vbI zT6&FD5+Ne7ipi7SH;_qEFf<~)f_wi@!cn{*@a1@gCpgc}{^~h6P8I}x47v*QQVCiv zKTl2kKKd8yahQ|U>&%NNZ!yCMH^{K4k&}xgz-M6HHR=o^%GOigtJn$kuG1z@IV#*G zqO9veX$3Mfx{ha0ik%il5@^$tGppj1{lAKvmU-Y$aI5(;&ZIeL>a-TqN^ z%rp}DKIL%tS=fDs%tHTc?0NJhKwp6-yU&B>P0E7POSG)9fts#mH^VLuH4%X*8#alw zeU-FbxQn4uk`>vo$fHB9o_MI=m zZyS^E+;gnF-{B6jcC*W4i`{R)o&wn;6Su-2IaF>`eSPDb&eePgmNaBFy@W)IE6gT( zcOr{Wcot9!T&x@ys*>vdxQ=l6J%$ZGsHfaItF>#J=Xa?w76z5i;QBBuez~5_{|s?-luE<)sai)f>6gc2D_gd zLB%Iz1OvWNxyL|uLOe(a#P9;W2M;X6TH=FKgIo}1gV+(3yQ!l(Ccxb$r{s6l_o6=}ATo-!hC< zE~>Z(3H}yZlaBMg;-0t?76<;*-@!=5jAn~^(VLJ{xDmLdni^Q&6cq8EqUs+PP?tA% zec!x;$c)7Bq5#)uxigZ?qkcz~BHg|$)M`lFnhwwWXMYKaX}`cATIUT-X2N;oDm-`F!^oHuJGj2xg*_=&LE_+TF?Ud9LcW=VW< zA~!5&GMbLyo-Fw@*)>G+LQV}5F%L7@jU$C!yf~{k9lbHg0Ps5FRF0dkAN)_a+VvkL zlo*s2&T^aJniSS%mMVVDrNs{1$pP*-#@BW){>{VSxy6;&-bAdgzMYt$-a)K7MrZw3o?+xiqhzfvK7@8- z@?Abu&057SUPec+LJXZqQN-j(wta_x;Trb5L2=F)VB%}MH{Dm6gX~?~Gki<9X#NY}`G z(I!E@TY*w;?oUN$kvj-*nC~kA9eTz^>6z|Age}d0J6?_mz?eBwnovav#%G|n%R4=(3i~l zRi_2sSfd%}FW+=pAjrry*dw!>ZxwaUF|^#y(|=^gT%gEWl5#6Z8D;jRvqf{d`g_AS z;;JFvZ01IF6{Cv(k;E<_mV8d z#@jD<+EV9@ao7lA$COj-Uw^0c89!63c_~fSOt69Qe#rSME`=O1n8fTn6Mk;g11X1lU0c4>_Nyn@R4oEp600!KDHfj3$ccRK(`fw79y6na70<$FEgXo}a7n(PbLy7k=&5d#Yl($YuOZ8p-^ zg0#)INL~flOs-^&J6z)?5ZJot+LVJAv?&Kj9u3MVZu|x9_Ka1d&t6Fv**6UAh=YCZ zAuTZPXx#W!qZ2DY0jG^T8WYKX+k7NuJpZlZuxlLuZT8_9$G74`LzVoqmk#L%mG^SI zKd2vMaD3lf8#B#Ozs7g65fa5te@BiZGlQbRt%!N5K4L7gJxQPN^lD?;?lpX_I(|%n zB+EwH0&5Oha%9<{UMuUrsJ2=-#EHr|w7vF3x#`G}%DS?1C9^KgxiI(K{4<}{4M)tO zgi(kL1+OFI5wY0z5sxhAWRgGF_6_puS%z2Rq}d2gy6M}U(Z<;9Xk(f(&|+mY)T$EK zQF6}+Dr}u=86(QvDHmsp*~AK0_QOI%P%aU%2^Av5Bown>RS5L3n7}hJyQad~`m3uz zE*(Vm&6bO05_V;U6Ye32eR<&{xmYP7Il|GBniG1jotImZ+Z=Mk$Uk!R+ThR zE*=kyQ2b67`!iC+9%zp?CdSgSZBr9t=$LKMdNo6h(u97G`^c$!OVB#~I5BcM#0eQ` zey@YnsCECfPN)%6?SJbZ39HU8ntKZm^`h*bRR88Ip0!RkN?;<;eT=?c=?ON#CyrkU z2*vFDLIEsae~0{}_e>4@*Fp-p&A+O2mahvyzEy=^A)Q$qx*dIrEAJ*Td27>D0+U=k zOib!pjTNn=-UN+(Zs8+F6XID&+4}Z@M6vIRJ1J{#S*L8LtPiFLSSu4SB1v5rKQ%qp zzNYfw8l|;w1TrIJiLY#sn@m(%N!qBBqZmB-V`jQ3Q5yxEmzJ;g6tFUC;TwpXbF zo3#y3{^s^#{8YQOvU!a%F;;HUa5b%1DdexkO0`Y>q`*gGXA6I^f$s-&zsc9VN)g$~ zDy6lz2SwIYV9a8!WXg?3YGuhv)ge{bI;XOjvi~v|i{wT%o~^aF;I!6l|E^%9j{im~63oT5+s?nIq zv0Os^TCU~GQ<%10Y9TPe-b;J|HZ5)T zo3$50dKC#6X^7hq>Y|OjBhSey+kdS+$4GH1;8}Xv2@9Fo(5-jI?OW?_>^oL2)IVf@ z+9k4@d?@(;RG6rIvqfo?R%}x zDFkf#p{kL>SLu=ZS4+b&vQeNr9lcg`@V)-mFYz|L*FkEC*4n&-W;3q~gkHZ;tXd)v z0#0}<{DND|uM@_<{j+&$u$s^p$b#@<;JK{gHl4!nj;AAP&!hc^$TzvL)CIhhyx&>D zMZtN&K|u{2Bd8S|*^s=Vaz(k|q~OwuGQqjT*!|VpljIVdXjRULF~O!aIE5HCDA`pT z1UGex?2Yh!NTzZ!!Y`iF_1A83F-pSEv+uT0!D^Wg>EG`IyC);Ix|F({(4o{ht`++N zzXYMx+>hGI&`!54@iPQBw% zqw}`n@M=1?OnbK2YA$8>S6Y{f1kqY(RAhcE>*0p-)J(Sg2L2|@SS^K($Xn}W`N%pU z{8m~o+!a-SJ4ud+67Sd4{DXnWQElcWZ_mp=5Gf0w+u7?>bkB+?c!(wBw6|FP z0b*AamuUxSNh#RjwXvU{24usQjDjwGh{o#bMGex1FckuDv28}z@U{A?M;)Y`{fpD> zuqqMQH#Rhp_SgeEKC9Kn_hoet1brB*gu$pnAZ5@GX6nQ1=2m}d&eQEnv7eIM&WDF} zc%A%%2hIX{E?u#OIM)gY&KMY=v zb)Wo5M{k4m$|)OG$mvEttsSD-rVWu)3Cc9qRjzGD@$l-o8Tv!bn03^?f4UvIdVzh- zqemRv)eSSO(v}V;R`sL&0|WJOewkKCR#K86X1!aeGA&w#R4KgLi1#AVw~ybKINphrXt(nDN=-Sk>(N?h*5r~_6vqwmL6EAADq!4-9 zByW+m52{gQSJf}V+P_cchUWLtwF4~U=ER=5A?~?%5Wf&GhFcgdJ4;IC56`CaC4Q<9 z%W0)md`uAHmaW>#9CxxxY0vz*uhQ&fXJE?svDWzeEtzG&nX#+~c|ye+HLQs2frYWy zWh0-&P%^gHE(>1;_ph2z%#H5iEsXBTT}&X^R@|(M*JQy8SNJX2S!Tq(W0luI)p=2U zFiL_cYh=SSf{{OP#}#BetIxzpEr`7+qSKGEv|Atc#0^=`mKj7~6p4->U|rk6Uhi&li+igAKys5T9IK=G=USb+W2$}|PUP)T_4@6Wdf|>5%}eGh8?&-CVRQ_9OCDj!_NX&)p%r& zoTg6XXX$v`6MMPmsNS@F0Zb)3(R(zjX%@&$WFNYY4z4M@gxmvKvLB~uSITlT@U5O? zaavP#rs`sm>*(>L3om(Sr)h5$uoTXWW8}=}+6jo=Qy*SS_ColP+etmodID)`E@+(E zI8_CYnU~2q@$CA`ipY7_G3LdXIPoyR&iI$){)cliCLzR1(E%@2w5fB z3HU#eT~>hD7h=}@NQ}QCb{+Yfz{qhkZx!EhBDb>@)}G{cX3uK-2CJ=1KdLcdWPPrI z^bsPTdLsFJFW%=0;?F~efRS1sIm=T@S+3SjttW0_PpkA{M}Q^#*r*eN zsjH{XG2S+I)(cvd>u4i;Szr?XRQaEQrteIj8m~G^CHysC5=#>rgOLWV+S?17>JT$^4IOG#Oz{W(o+wMjQ zF8GirOdtMGe8OVnG6M*ARsl}4XPGJ7M4)uE_ZiVtJPC2hr))naNdBMwC|2woB-FG~ z(WgjXxj6rtJHk)ttC~AleN~`boF-&fR|V>|-%?vso7+QNGnF^h)@G~)BNJK84?4mR z%Ud4xrZw!k?bJIG5=o!YD5xvWa!@J+uZ-H1R5`&dJR78C$G5y?72k0#G!9YAorZ}+ zuI~^GH^VMeEEaC58#+j@9`1Q&qZnBzgTYl@gA`xl?tl|Tv&Gu*L&(jc(LcorU~b8sW6RcGoX?x;eTKbAytdTrUdUd1qW{B%}d- z`j4G4721FL<`hOOHzrf|(tpM&a(kyEsE97w>gaWFMp$3Fa*4AQg7Lzh;XI8+ZM2-Lybbm(r5D^L1>pn?TCd zTnG&tsV99-J=tJVFJUyPSEt1;bwaEx5gAQ>3K`8FhTyd-lJFK;ku$&}{7%iE%1Eqa zH0tjsDRO?K^Rhm@NFe$Sqv?WZ;Q-Qd{X3-P5Vu%p{<4|U*#41~+8Mf=n3dlFmE43@ z4t_g9k@F2bJZnB$$3X4nZ~Zmqr*d-L6l z^hC#9cEqv!vqRmle0qwUm$^Fo9b20fH_Y%;ii8HLqL{!$>exM79}$|-ic+ksMbNVi zzffrf@>4)29Dewwc7N8QVmWHsy>Ce2W5_1_O|JS&i6o@IqpDV$^uFj`xHH1-;wXFx>0O3J%buY z{TfgJZHVX3Q2>uA@jQ+aPm|?wlz2n^qT;+u?_;zg+KoWs!JcUC)16v^wS@x`M05d_ zsye{BfjYe0`Xu%5D5a3KP?qASA)UR;o6rN#f%MA11ZgZduVuyZ&qaO%F8m=3R14Kw z@H7lBZTX*q;pw(#Z^TLzJ#Tz91%I>>pllFJ7b{VOl_=`si7E(BBw|nAc!K`wCQra! zKx+x-2Fha3Qc=!WQn*P+P=ZJWUse07)0e z(+s{c9Xw4`Cr{JMO~zin(W^U+M_}Z6nwn?xG#8)4)6`!!31>d$X)g5OCQyrx8e;3> zCpeCV21gV7JdUQc*b0tj@3T3Y!-P9|dfrmog|Ucv>)>*Gz<@dhT^vnYbMGkI(=9A` zNM?S-bGeyUxf$=|XV|gN<7TAA`!9{Kfs>H}56(SFhm$$Joiu=W^yn3ypj9E2g4YhH z)%}%-yylu9xtRYnWJj9_WLLUz@LiNSX;J+cGC4Rcc5E|vTtbcS<4%qBvV9rD!N2dg z^1f}~r3nNwS3q{@NyzkH6UYc&vg4e^Bzkm!G2u!Rp6r45R)Cx{Ue>fKG+TR(!AZp9UsHK_=EIYdCw5J8>`f z;BPT{UQWkomplWm*DiMMrq(~)O*I^Z|IThw6&GHDyqlL0P>>KDf1ZTk-`!1($N#(C zlv_2;hhpeNS(`6nlhlk;^O`;ruLZuZYRXt|r4P#)jbdu#74eXXK9 zeL-itTU*?ebj(-}ZZntOxXS zUwkbMOhI%fv&vSel`n0h+C0KDgj&eKXU2kl{TcD^YUq$p0RQwTP{Xg%A9pOE(wHL# zyN^V~th9?oBDotSeAULLx_++cmEN12y0?=EewH$doEPXIaBu9yBLbe+*mtCnN}C89 z;ZMKN5^m`upZ;UzE35jHMykAWlNU5KZdQpEIWBZC_#5`vKOMD@_ih~Qedd!IfA-1Z zI4o6UY5(s~WB0C7)cBDePHMdS&rU9n8WzKPG9NAU=^v@;pNDb_zJV@B%<3}6O^p1E z<0D2H_c`XtZ}I!LaC`M5oEH4la()N5(4TsaW(Rsez(0rZN;kD^CC?kPUr9Vo+EKbK zE{ebZ-d?6teD{0%P2E0+c8Ks?-E>3L!cnX@GmErf6+P-;$ESIO?gAeih3pLS{?UY2 zdxf44YTXK+k3F0TP18nd-nkL)e6qD8ItI_6f(ZDhz0epl>v7UT5C9&!}E_G&*8$Cu|5%`XO&Ms zb7Jw>BzDrD=s8L3G^KEcZekYUr5Vir7@Ft9AzwKEm=CAY1_D2nqz|Hxp`$~RqEzf8 zC1d;hopCCXmsXw?OQZuEF$X+f&uU}kq_yE2CU)}m-P?PKb!YxW+QYf63`u%}UV9+) z+dJd3V)9cAI9CqKSLoPCKX*2=NtSPhaPgj&4o?DZI^;H42mf`EYd%bh`U45nIpFkTRYayp@G0DkaZj%o@c7P; z`xg%Pu<92(ab{m_BPCv8#W3MD}1I)*|eDUb6kCUmtej zdiIytf8Jyqs^S?sBP1muDss+4LYAdv&o?}t$%MaP z{XFE-QWt_Z1Eh+ft>i=tYVCQV&FIv2r@w~v=|gIC*EhhAAdEsI@~aYLb3JL) z+RvNYY+v6Qhx5fyj`Ia`h1PHCAbAs8C^jaHK9WKDB6F3c9d5Dz)bMaZaj8V%AH_Xm z&vefGqCo?00n2=bTb2}e%}r@BC$Tg%DDATnzUO+1LQj3NqHvO7cF9T2Mq32L9w2Ou zKQ|)#^p-+?MFzcU7czxciJrdxvN2e_-`Kct!Owu)NO1iX?)(NOoo#i@|A0Y@TDjHp zh_zi+L+idU^~w*0IL#Ua=NHr$C-SWxR(x_6?IqM|iNz>;vW>!Nw)%^y#3DsDD!2|b z^yFsl8LxHe(thSmg=P?1j0N?(S4AV*JE?sOC68t{Pl;Cxa~Vo*Qd8_?Sm@R7&a^T_ zOP9xK6^Z^Cx>G;x6}(xKlahILL49K$w3@w6H(4}C3@ml}k=*kvEngZB>fs$~y9u13 zFyxc%pdCg~A<&I(P5rqY9`xiu@B;d;l!lur#INtxiwc-iuT z`i>2>!&?GbL=3@|BtAe6Z0Pbdca;GqF3;|jFllpzzOVABMJf4VHl5Po6P6p~YKe~B+0eklAT;BX2*7G5Vf(|D}C zkYw2#>I6IRW6R-h!bZbK48M3B_S@oK+BR9QQwd;oB7)5%tQ|Z36f{#BkNxc*uziui z_C*G(7v#f${flhE`zsRu=Pdn_U-*BPe*cQ4pQ-=<-z@!%ivKH?ekDW-QqTU2mVR7m z>iz#)mVToL{Xa`T-U@WtUSEyMo%rbl8!`_fFVc15VS+3P@G;^2dua9HV%W@8D1u%e zp%|(ffs-x_CtVoMxGPj8MG%KAtZcf#)Oee1yVp%Lql#-q663;dLa>niRft znRc`etG{S5Z}nIE*y=BdX*_ltR)4h)t3PMDph2KMVa(vL!fzt6`XjYCtG_awd|^2G z!uqIj>V@I_3xn0)2w44%fYsj!;VbkASpB^PtG~Bk_4gL6{@&8RS{jNGyiKhB_+E+C zAL+H%uf*!F_6e)Mn+~hL=qIfHNa>&(c~b@Iv8EHoMp<@5U>ULc+kckuiqOObgdgL+ zxt2n+Y7W0%vZ5T;eU}6mt{Vi^f^tD6EdR<9W5W*}>2B+n)gTTrgsIr1FyVIiTf9M+ zl;mXWFJGsH=1gRi>@Qn6W1Xz%9+3W%vw`_*}yao0^37!I7mz7^p@qP;(bHogZIpnFxSPUJ_)v0!a z?_aHmY&Yh9{-8Zu0@w2uT*X;Ms8%` zx4+|#6l|5=5p09Sln0e!(^nCxLzi7&Nq=iHe0pHn_t>V-h1m4{{-jOcnufciCHCYF zj9ck(RR_Di$qvgnG9uXZ314CAFIhe{!=`VR%k2=C_f*89uc8RLL*XW$_5I%PUMQPoTIE0);wz3BnFF5x$l`Wv?4u<9cgeU@VVLD(3>n$K$Xq1d!vT!mFWu-fag z=2LoFq{N!=0bwWIZsXxNm@*(T(^um<=77J|o zx?BI@t0_YXk&0V9S>&H@i4&`ABOs%=;~2$)!Ki zQC+rtr@Gnl8Kv^CT-x*pTQScrZJ%Y>n;mw1>wf3$_)a!Z3#dKuayQuW#e9-4#JX`d ze4dEF1-nm?-*nD?PxT}J2G)C>Zv+LL_ys zItEm$)AZeMcz2GStkZm0OZ*6|in;rXrl5-X~ zWM#b}@ejNZT&Kvk)khTv*DZT&vv+msouh!viJf#&{6w2%PrOX_#HdxEPG=#0BVr(j zI3=h;T&tCG*z6HY(XG-_fxH*pI|Mrhath3nY?&N3dp>0gsHVRl%1RugVGXeQq!#`K z60g|KQStak#&s0Yr-U!7srMby_=``D%mGC~aWFlUgm7 zo5jH0ed~fR1Yv~Duq_f_*<}l=%j}fK_i~l7<1fm3j;~9%#w2(Xq_>F zO{3W(r(plt1$z)MY2P|B)9%0}n&^`SS9KE(u)Q&Y2?WEvW#n`vXR8ox-8LapgF^$} zx^I0y9t*l~Ahpa}b?34EyJzj=w%}*zzk}-tUL)sGM$iSKbzKHXK7OqKcJ*K*?sE>*7B!=>B=Ik z!TX)3gDXylSr>af`*bLU<{N9&^K{TX?{ql2R9#j3Jb>Q&=@wEgzACq8*T<^8 z^DmtY1F#?6i?2>)#aR1kPp|#$q%Cui&rYxCcU&MRI`0@lV}(^)G#7t-8lnY=Hw;Y{ zr%moLB0x0r4%Nd2Rs>z?JH&`Va)F+Qas z(j}@nDeR=7@b4wGT>1gV&AN0TGR~(Tkh)ppBb?ZEZlVyUZ&d6=im|~SPc_!Ma^*W& zW7mQ5^`N(FjIcd3P;6AMPs-LQazu1t`TjE4o*CG4%?=tEcYFb)j$d3i2sN(@w`ScLn^=U zx&ic<6PwWn>n^}NX%EwBL%1@$|JZeqcZ%o$jS-%GfVukn5A)53p+ETty}!J$EK7?F zZs$%vhPrVV(JEaxgt$V+Ju5+28k-e4N4pO2tS@nl`bY|U6{9vhbJUI7P=D@q1K|-q zhdg{BUCVI^SsDkI&~3D@ZG}|zgX;!pD?CN-v6H@`=O?e$o&(3QU7L82=OsW>WJ7B; zXGK|E%5?*@VTDgo9rer4>p}UBDCo3L=!pv#ePm^W3YSUHRXgdjq=89YPb4b8p-!SgCeDqdRG$ z|ATX{e&qgt@7xQnD|q_stH1oize*L^OHMuNe#3O9ia6_prrqnGUf0X{{JJh^8kfnf z?4@Vp1$2`cPpxg~AKhtaaZPX?@ZIWIUpL%qv!8db5gU|$<6f(uy|df;_N02bdky`s z>Y_UTyPNF~sb1Vt&!BqiU&1B1f)9c3HFD^+ zli?@$Q=1gbDcfjF5pk#Q70PfH&?5#^_fPbMsrPBxC_nisK%|2jBj=-yWAPE*o+U z?MAA6^9&RAg^0dU*=HpDjc7$xF>*PhuF6329?Lhw(ZbStteY! z>+IvD?>{-atoSOdkvla^vu^}X6~4mXES(yrkvI7JWjM#x5IIaRxSDy;5xw;D99@@w zX>(H^(Jvu(LYIDNc@wW+3a;yviGU;W8;rWkfALT8xr!6P%xLT@D^E%_ca!b<%6e%KwiORobhHmM6d)o`w?pT*T)-9Qupy+wW+SW~{#NE2}zyG05sbp*_B&*NRDZwhJ zH=;Ztf`)LLdF8Wyk$8bN5tZN%DRP@fNXtJEn@WtV98Jq}P2ZV=4eVbfOvpz&kQLNP zBtN63<$w8Yd60>fI|&Fj3%5(W^xL&w4%#5XD#?D7YYH-vc1T{531+!uaLGQzP_ap5 z32k2SU)dz}Baf$&cps}HhQk|*M2RAE?HiR4)fv}=#71NfnPu@Fa?gR3HAzi}BtiBo zRnz*x&eYg--lL3?KuiAQ76JP~i&*v1Sbg0}dTip@cyHkjCo0{^T^O=N0*CStX00GZ zk|FqPtyRa+AxjuKJVQVDK!<#mgeJL0@|z{J<*Vj(rF!_ZoEEG0WmqpsR3sx&ndIVE zilCp`?SJX_yYHx?Drov-2`W~@h*Wcr80$lgvzAUz*O?mz{fL^%_VW$yh&{IcO9G7`tMEkZ6u1Zkg{W zOGCWJB2W9THSLO*E!4-h^`oVDa>vX5Yb*EU3gRSRu`OB@ekpE(|EcKX6Aw>4IHN{< zI^d_VM`u;dshE3Ue(CK?ftACLgq_fw{0{MHMv*8r$;Mw)>c;U4+Viy4Ke^wqnp7Wg z(II=ujinzqj(_bJ#2}-(M|aNCUYN9Mbo${lql4A(d&p>@HdUM{g;myM@-*8{m!o0f+x{hea_wFo}bS>^@9d%k6%{N00;?}3p2c$c5z^3K#mSktaMiM@qWGs z=OVp#u*gGtctv(^*%kN0|<}tw+kGJ|%gQy~wq+ zqAZl)YJk~GA5i5r3s}eZLG^Rsus3kn+tIH#|ICbMRh`e|xyjMS?~?cu?|C?C`Jk2$ z|E%7Fc%02L);U`CljSCNmiLndt|BAsdRyYo&St1NjG+)Lwq8SPnZ z*g5u^SxDfvdi@E~U^DEM(ng;gJ!eYU6bBq`Tuee=!MS|P5S4XRYe(W3w$7C@j>%7c zTa_5YM!Py)-82WW13uGk)3R3^daczmQEXiUWV=-z;YaAG&$P(U{k-&^cY0_C-|9Iq+A?8)RG<%t5|DY{S7L2#?Hr?BtPM;GN=}Jp zty1ra#xT=%59-wDeMi(?%c zG+LWe$)mvJkfiS^_C<*&8L==x@`64<`@&e*k@DpdZp<*9Fd?3mqn@&XjmVxua@UZ& z^fTbM+Etdi&Z-#koEf9uE!45q66FXjt2V1hyIpuH+)1RWqiVyevA&ljL)q9puR?y% zd1JhQQNA!reL~Im?suhYB=23u89O5}nvPnn^G~vtw{*~Bg4NjNRFf-W#09WUF7TUt zg(h)D8mT=l!RlK49p;kqwYAxYN2T0S4EYWt6 z>-7+6g37wIwHpR>?Ji=A2s>6K51sNfnSHCpG8Z0@p0I^AO0c?a1@fgnl+QuocJ#L$ zc~G4B((l32NIu<1xkY-s_^RPk^WK812H1ANgSVxFtdZ4Z0=5-$J2_wSGqt~Dh3?t` zZuPgBJ@wnFJWrJKEtM3JHQ~P}9OX*vtn$(CF#F^tmDTRA=AUT$!8^8JP_lp0{_?WQ zS`y!mrx&Vo4>{`Akdvuv{Yq-DYZ>RMCPLM3?ftO*oQY&Z<;yCo*;q!VQP-)7mpK2d zq-yG8JX2O;b$m@)JN>XeKvT$_*^d6o$?sguR5YRz^Utym5R59YK^M%ylwD@h1}1-3 zy}!IW>^VtgNA@4;f?QbyFJ68OMNdNR2X8%Rp(5cSWzrg*N!#rDhvLv&g3(Ey`hZ%` zN)kPgtLyiDkGlKV$ZT1q2AX3}{h(UU8IIA_|Ink{_x4H53Bn5mM3Wrw`^tsdhaGn3 zmiB;E>YZ~n%^C-61*HF7HnOJY4Ek?0{e<6$`%Sc1T|KCrtWla1n&`(E=(oi&{@uBb zktz3(5_28D{Puol3N&pu!hVRKr#*<@CES{Np`Fdhk`nkFeddx{xyeDvj^BT0)!Ab5 zY}Vs*rGBUMn)M-kE7v=Vh+P=tI^h*qG*Zs6$u-kCI(C(0lpAQ^Z3M_NxgEl)LS!p{96->5>ByYCE~lNR|zwD-X+i zTihS0iUm5>RpNbD!)V!Yr#(F3yB`YrB|rx+OJQc}&7?~fP!sC?8~1N&q^PBV7WOMd z0gFqckC@q?{zP9l6YekH(yGi~^+-v4UsmXlamj;S;VdBge5wgM-YwTS2R*~$jVf7^ zYanBc9TIRTL_AZ)N@miWEgUu8CGZgGsgcTFn5WB4ViP69b755%ZlYrwsfE(dkY@x> z4?F`8YWix_LAgnoZ_MK{cl)&L z?eNYQ%AGwZ1$7_xnOXn1Y9J@|EgRM;N#e&&8-{UWCu5x1%L6UZMz*(`KtCu7HjCQ^ z=2~b%ck=gm(1NDaGdQc^WnV+R&Pc_`(2&j99QgugHAir!C;YWc8=WjC`w90v;?*td zN0C{RyFKbaOp&78RaQ4fIET9jnk2c&1m>WqPhfQb~V$)=V)ki$yx{nMl+`{r8@t@x{;+Ncv|EByDvlgR0T zy+xgN=66!xeeApSpyp6I`PL&VcxF<1#J)1^*53aMe*b2s6C3&t4Lp>n35Ko2IV0=! z3f*^LU~-^^aeYuUWN08p%VWogfq|9>wlXaf%}#2f!jt?r&|`Q=vtH%l^!vgdo!v}d zBi5APwvatfJ>K*7RoB}WG>uHM``*7#)|Tx1`_zJ_mn?)*SIv`F!MbFgKfHVQA(mp` z5W5ON`>MylGrc znKnf722IvWLD^`d)PAP*e&;y%`Uf7mQq0GAG_Ta}(Dp(Ut1Bw^Kf_MMy>{7@#9F;p zOl>L^s>R5#m`!o~qS^;OD}22vNa`!ZIJe*Fp)72=bL2v5@~XR%R@sE*3b-!P?o zr1Dp@5o1u0&OIHO8#i7NunYCB+UWQor;Of09> zZGAV5VwjK?8@SafL8(69TqPKrA)h9pKS?diu%4BG??oK3vUIUMW>6cOEEV}iu;W?< zG0Fg=k(u&lU=lZr+#b$$;UQdZmPJ|_#69k|ixcWe{PZCsCqfGoMUlLrikwgyf#Y8u zNZ(cZ!#0=1cPH8G3D-+9%UI1ODlBP`HXm8y_-OHCD}xN;BU2HPIS(UYz#Xt-Tc~K` zhxz}^AHS70ZN_FTc9N;JO6N=4Bm|e)+Q?ZK7Dl$7L3YFXupry)i%YcFl zfl0wg>5fsaeA=fn?k~CB5AFS(>m|2`G6jc>IRg&RZKVa^4&Wtgl#-eylF)UHH92bN z0Qt4Yy2d9I@8r-P=eow8iei{X!Q`MQfT9ieu#Hex^|?a4$QrX886Lou~J1=tA+`IR9(ure>XBxjg| zWI)IiRfRlI!ksB&jEWf}tnspag?M*eEwRIn(b_>wz}mg}+%=`bRTd&~?dyf}Ezq#C zb{NxtO^GsAvU6?EC~od;#$TSN^6tH0t!wuXrY5!JG45&~85g$_=hqImE^xbiit0&z zBq*XT#N2jhC!$#SVx?@Cg7JU-l7w^UA>X@XeGyL4ZR^40yenmjd-(r)UgEF(URIOi zf9H&(swaR3wui6-^88Yt@m=K z-)PO*+=Ef0mt{&TZq`ZGlwp6VPAR#fJ9XC|aSu39tSGh{QPt9W1a3GE zK5nm){OF#y8IrI4?W@VRS8h#}x!<@)Mj3^BNa#Iw=00C7dtWYzJbYa3IwMZCAtdrm zx-}|pzun20THJY3P~!L~{&SozaW`g<^D4CV=Z1k|d)#kSLB2Q z)=qMSj;0Waqtf;E9m&x(6Uw}gme9SzOAo68mS%@84en|0-{&B6WQB*%C-<;}rL6e6 zkL1eL@1fNuR?;(!oAWE9DDv*N;7!suQNCvR{&h7aj!!~!vxn#N$j??|=}7Zil}D_K zlunK@3Zs+k()zjwK^cf{I=9r^yoCKXrOgxl9oD^Dvba1-Xf z(&oO+eO3mo#dm2FqX^|Pns8silB_FN=^lBZoFWgG8@&pK7)hgX6wdHIJJI>a?9fP~ zcc8T|rFjTta^oXmbW^mu>i~CiLQ~h)d}GAs+zGkIRoJOCT`GFys(Flz9#m5)+b);j zw&kVN_dFTg(}41;N%a`=v?Oc|+N2^>@=TN@xaF}5yIP5VeyxObnYsm6pg&b)oR?JO z-Bzz(<2tJcc2r%@*s0N%)cwm`r_oO7IZ2SxzsEtzw{P_9?!jKdyz&Ng@%{=_GfEr# zE$5l+q7VBuzv-GE&Q#=GW%jLAr|x~@kny$0xWAHC$8TCC;oO|tjI*7;U0=0p=AqV# z{3fQk-`Zg3W0)@`J*(EL`xg}}Dl)&6tS_s{N2=hjl)0W!s{J9O-BpiG*O}t(p;fQB zU9O~E$d(nA%Ie?0D8;S=Q=#}sRdPO5JvE%0^ea=TuxBd1{za7?{=|0I{4ej_2{Qtl z*@V4I>~!Gfi|o(|Mxk!x5mAR|zqwF;a<%($*_PVY$ip$U?na+NyOTXfmhj*G9_(G_ zy>Qop+E(u5HtC091=!m*P4u6BmU*!VZT8kMNzS(1)@K#|y|*wG=g%`WMb?((9ytNH zQkwnX^S0pAwE({R3_J*pyHbZY{Lf=g86jsZr@c&dQFa&~(=XDg~io$ zPrY}wC+^|=v!7r1=CCJluL-ShDsW%-*G2x*x8cr$yG-CAzYve73K{>AS&TyN;aSMM zQ(cmK_Ol(UJvQMRNgge8Snk0VFoFhj>5Q8ZF~)?*P`s&!*9GQuZ%Upf6VC{=_| ze6L|ufAurcR!_U*b!AH@_m$)JxWf5Wix&*3+nM_mV|UK1dwoYi>C;}gQNX8gh%tqE zXZ-3((DEkn$@j@CEh-P)9JWTe;*Gs!T%1W-r}Qt(XUg;Ij9%Ei!pfRoU1V*y=1Ry@ zrJV^a?!43=J@$xrb3)|)sOpR1Ub)=@_!ii&O?Q)AO%{O8_iE|g| zg*(au%61sJ8%;Qe(N}_RoTT$i&!X}DN)~?E>Ql;Z>wnR z?Wwqkai`?`vnp3*sD%6SHuT(_XIcufPn4_~N;;y06rmMydzp$gd$H?x4qsrn)d{N} zy0c+#{)wvQeyfA8UZ5`w>vy*j-`&N~zlMKi@oxtH$FUz!L*tc4)^pK~>;z$Ge6gwAL*rC3H2J$P3hwlbWam9%NF|T)geb;)&Ps0cFj<4%l z@Ay=pkrpqAI{DHe8nJ06ia8#4^!dXHwMqNuRp;PDKzTv)4Xlf!-D5pAJ20zaX?946 ztcwhqTt3--%Bm^SsWeZ>-gkmF>dDMIPPkK)$-zB2SCr28xFl~S-H_sn+fc?^Z$l~E zr*eg+?0M~PLpiY3h+9T|FYWRwh&b47Qe0jc-!2-=H;>rdbTSAxoy4uH$c@EKCxayN z+IaIrfxYSiMsXqBrvDlcGVjfb{Gt4vAV>L|P70u7ew*53%N?flyku%|75*p4 z1%hWP-LA5(a!4Mfzj3=)!Hkw}lgRw~Ho7P1F2moOVY#`=V~YdRvWHF*0OeE*-Rxtb zxjoS1DPXj`fYI`NVywp?^;qa?AM3%!!wopCr-0M)0#3^lIISTckMTO}b10x5SX2A* zf)%)F=dCLx3Pygz_wh~T;Y$xJJ@&}epzx3BeELl2GaT+0j#*tk^BAx5+@+HKx5*DT zOgL9riGMx1)hK{}dav>DlH*H`lAiO%TP{|$ehg{OmrkVX{7u3? zja73?$I6;;8b!oE9Y1HrKOH6fQ+a4m=t}#G{)B&GhcxDH-oS?@edJG-hW73ruE+&en z9o@{>r<^CJHq=?LPnl-ylk~LwUFpXPEB5K5K0%>3zMAzn9{co_Q1e+|dmSff>rcQw z9c={msjegTNiJfaB+c@!uurPTN>;SPJ~q-0rjVO^iy_K&Iw!e)89IvpEf-V`soo{ z^izY9&$AW%B;=V#Kh@>YD(I(NS zGlp^XP9pXxOc0#lI<2#6GQD?3yWHpVAgzQ93-Y5V21tV4qBrt?xwb zkB~&eFIuoq^jA|p_Q`GEn(|s7yrBjARBypPz2Rt!eX_it1^cwj z(H7kxxc8%a>9c)+l=5uuF_hyTbt3kuv-~1d$#;Z(x@o~4;S^{`>=Sakqt*|(wZT3W zA{SPCgOCd)odWHchf_yH>=WM>+Lal??5VP*FJPZK#!+;TKjqt53_}U~bh9h$liN<@ z+=6|om+;u9t)%@k3++3G$3D5)VxQ{rO3wd|nX^nX^FTo1!E!g5&<=!Ah|2WTXT0`L zXo3}5wp*LP-_tH`H|yY5XZ} zIZFJc7D7L@_vKQCyM8+6Q&aAyK7spOI?v~i50%enEB)$2D@pg~u)o|V2TYmd^yeLO zFnq^9D+e9p)@^Z9-}$_&xBGU_{c2%nt$=(A-Q!okz@qtcYZ#DEH0oKAPnO;%%(x=* z31gr3iviMlqqVnDyU^gQa?X>Xgna6(x1pU>ug*ICk#`^KCM|wr^8Dt`OYE1ae1h9E9S{ku62bX=Bd|dxhpVF*^_z9)5(IcUq0=S zqlQ_3=P^%Rj8QM%XNmX}dASGy^OR~V%i=LCuAM1;XX1R^R)e~sB`$*?Ja3CW1d1Rn5W}k z95rK}gzw%PrW-qBGgQK){KrDqw_I8rzUGF0Od5yUh z%bo<{DNUx1d}~s#>F2_mtca(`SGanFH*_9;Bf=*&=F+NQw;Az-b%BU@I%@l_H#VSr z5*rEe)XR)`Y6`!wA^VuQG)}F@Jq8I&j>Z)>0`1h}lMde*4OQoIppCKT=R(i8+x9C1 zt>BkWX$+Bdj&{P=Q#rn#)~~>M^oAp!lBv1E+)_66@hZrk{G$c!gfZ_JSA?0xigvQJ zeqqcrhDkb(bqyPj3uE0up$B&IB}Ac5qX++yu?}b_eC>&2-7<`IFaDFpx`vH44;t&9 zXg}6XZG(0CpN(}58~^j+$2!0I6&***hS&EDQ1|I_yvw#3@7m#KWtJJf1hoKw3Q3^A7a)k9ZysaUgxsM(oa)ojgy zKQxOqw7zRov+dg9&iR6rE9KMq z4JfAzjp0k44g98JMGH_)mNDjJU3k!RNhBei>VR~r11>e-sDN}rs@C*8_fLGbrLYb&_b*x_EvN#yRB zC1j5P>Eztoqx;7WG(Xk>>7-dx1MClwPM8k}=_HK4LEqeHxU@g?YS44EKa?OKowf@| zr@wt-6XMc6^X%1dsR~FZtMB*VyMKAEx}1Cq^9={2lQ_CJw0<`1D&n0~^JsbQ0s-mt z5|B>+2~DSyaRz()z(|^H2l2BlcW9X%k96YatSc98Z!pKQ@e}CJ+fW{!gMZC4m}02-ZbB2I}#j z-17+or6UYf{-HXDuxl%>)rj#r!(=UO)_A%z%;^2in%cr<&2PAIlc8sJ&u9s8wj0k|@sPc> zbz%jHAH;vCZq{_=$AmP0e^W@OD?gM5a)(sgrY98~n17U;;}fIll7;Xu-=#AgWV7*e z->0=zaK5nFq`Cf~NplNy7bM+j(nNm%u<0&=;`*92XZx5me}UXABR=6HlV-cF@%ez_Kz{EG-#=!jurkoN zDxp4!Zvk~f{hQt^xaIs1Q70`?L|g~W{+Y4?~(^VvX?#;vGX6ZN=B zvj`+-O`7%KlOUtw_(iG)pm(ca!35yG|9j+->&n&21o0Z4Viq?!Fa@&?MfY|`vIY0@0OYSOHN`8LeCkl$*=JAsCr z65b&Rabh(H3!#tb% za;h#f)y!GFHa=aKYW6F5ibyrUurSTQW+oa~L-KsBZlQtIrLw`%&-xm&#CUc6hI0HLWF$$DMtd~K?M<>FIP*d)DfKKrcqd|jfJ-m7!>X%BFpYH_zM zm$djfT60xQa;PK&^3p|$23^}gG3u$zwCD(8OlQ}+{?== zG$uw91J0`1biOs}GPL@n6kR4732TT?f0>0pb}pJ>0%b8#OHGxUA|Ei26`HUmQ0Cm^ z6fLgk$Vg6|!*V(_ZR%4xJnehg0ZlZ1uI|rFI z=#%Hn(dtn!Y%GS7Bpo8nq%xo)OdpOH(x)R^iToR)&uS3_{w#4&VPp6}#vEC1meSUy zr_D;h@L)KN@od@AER!q0!?(*dJKkBLv<617Q`hE=8x3JwVkBUvygS~D%;IdB?qB2tr* zQqnMb`(5P5;K59Y7vFQuZ$F+&ndxj@0OioEmAD*0;G@R4x($fv-Bi>Qr z!+m&%;rirsF2mo?8}H?7Sj} z{4~9m;}gqWg>@0A8gv%a0QwEotpw|D&^XXc5asJt@C~5dqP-S;t~Nex78jqEK1&=6 zz)?($RZguJ0z6h3`nD+SAe)7X5~c(j|3cZ@ICXHN_~rD&m^9V9@NL6C!nZ{AuK&`g zqV0GInfWDjmP<5~C9Dwzzx3ZNMw0v@)rEcR3s$7#5?mVwfL2) z$j@lUTDIx!*&p_8z~ub3%7Rh zSGTjP+S!>+D5dI0vy>LOG^>|j|5^IgZ!{Wrc&dd_x{Z7U?Rn56N;?f`6T(+8XT1)d zWg~}?1vP*e#-{0_)iQDi{7{uX4#GoebOXtI;fMCFNIr^x7-rFiX3aNP&+OiB(tHBS z1-TtCX*PlUYEe#nqmwYb4w^KzWN-Iu{t|0~!}#_;0yiWYaMYv;gWr8vFZ_N?@IMZA zJGdvn?-cNcLnh5N$mVEMwfba^>H9O*7}te0MjqA`dqKBAw8qH7TEY+XyGdAMM1wQU z!Wu&k-hi<7Aal0NYYelU%7NaQMhhw&1&Brosz@prDl3}2oj_Db&Y*wqDG&{mC&@Uj+*WcFNVrI>cCp~71 zl`nN^`^YViC|C23q?1SR5X3*yP9Ab+EgAXWGpy|0tSJY%_iEPM0@;HcK~F*U9B7_v zv&IFqwNJAq7esb5k-RG+zqW3NMZ2whHNx)(Er**4{3~!hxINO{3G*V5%7({@<|S^( zi?2YdY|JE!vazp)dBP)tzi!|mqWQ7@&6+_ELFP0%X2C znl(FY(l^0Q>5<&p83dDWyN6n?Fk;-GF&j_yM1lLN1l}Opqk{$eZxiE#b=?Vu_#Z- zSB`Jiq=Lw9CX#nW2~y!5%fmDxVT% zHQR>m%uMOuY?r>5D2oy0AtDb9MO#Jsu}IVGM(Nj0gxx0nbFfodB!5s_6&s+?3_JP# zzwYjyihi6RtZVGwM!Q*qF|YK&)ONc=lhPyBw@q zzGuRJCe%q~(mL7lhd#h~uDf@jd3=Y{c>mGk21~Z zseS`}?@Y>E^8C1}^w%$H`Yg0xfUyI#6ZL1%HEULbuK{gI!<-1Z2H8r`V|x6T3x8xc z6UnW*CdvbJKR>o^lU{A>_rjk9`?zeYd}NN*Y#X*S zGo^pMUHYD)ELxNYi9FzyX3Z3&KM84?-6;K&27K$-q+bU+rA2c5GjZQXX>YHTg6!?> zl=e!%vMt}EVlcTq|KUnDnZ3On3=+Y>`w-n_av9v=6+bfG9lrks9*NXR?xe7jI9Uu% zPBKWG_{U-ptO|R0c2dIPK%q$JND|>O8)RmIyu zx!-s}es7q-14o-QGSuQLIO~C;X9C4=lSF>@MUqPx7t#HAh2ZZw(S5fVZyIl>7?>|A oKYGe#PsZh(xR*b8=UT&epRS6! +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_system.h" +#include "esp_spi_flash.h" + + +void app_main(void) +{ + while (true) { + printf("Hello world!\n"); + vTaskDelay(1000 / portTICK_PERIOD_MS); + } +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/sdkconfig.defaults new file mode 100644 index 0000000000..29bfc9b4e6 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/binaries/source_ESP8266/sdkconfig.defaults @@ -0,0 +1,3 @@ +CONFIG_COMPILER_OPTIMIZATION_CHECKS_SILENT=y +# CONFIG_ESP_ERR_TO_NAME_LOOKUP is not set +CONFIG_LOG_DEFAULT_LEVEL_NONE=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/common/bin2array.cmake b/esp_flasher/lib/esp-serial-flasher/examples/common/bin2array.cmake index 4210a0c251..680aa29080 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/common/bin2array.cmake +++ b/esp_flasher/lib/esp-serial-flasher/examples/common/bin2array.cmake @@ -14,7 +14,14 @@ function(create_resources dir output) file(READ ${bin} filedata HEX) # Convert hex data for C compatibility string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," filedata ${filedata}) + # Compute MD5 hash of the file + execute_process(COMMAND md5sum ${bin} OUTPUT_VARIABLE md5_output) + string(REGEX REPLACE " .*" "" md5_hash ${md5_output}) # Append data to output file - file(APPEND ${output} "const uint8_t ${filename}[] = {${filedata}};\nconst uint32_t ${filename}_size = sizeof(${filename});\n") + file(APPEND ${output} + "const uint8_t ${filename}[] = {${filedata}};\n" + "const uint32_t ${filename}_size = sizeof(${filename});\n" + "const uint8_t ${filename}_md5[] = \"${md5_hash}\";\n" + ) endforeach() -endfunction() \ No newline at end of file +endfunction() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.c b/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.c index d152a3916d..59bf1970e3 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.c @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ #include #include #include +#include #include "esp_loader_io.h" #include "esp_loader.h" #include "example_common.h" @@ -25,173 +26,248 @@ #ifndef SINGLE_TARGET_SUPPORT -// For esp8266, esp32, esp32s2 +// For esp32, esp32s2 #define BOOTLOADER_ADDRESS_V0 0x1000 -// For esp32s3 and later chips +// For esp8266, esp32s3 and later chips #define BOOTLOADER_ADDRESS_V1 0x0 +// For esp32c5 and esp32p4 +#define BOOTLOADER_ADDRESS_V2 0x2000 #define PARTITION_ADDRESS 0x8000 #define APPLICATION_ADDRESS 0x10000 extern const uint8_t ESP32_bootloader_bin[]; extern const uint32_t ESP32_bootloader_bin_size; +extern const uint8_t ESP32_bootloader_bin_md5[]; extern const uint8_t ESP32_hello_world_bin[]; extern const uint32_t ESP32_hello_world_bin_size; +extern const uint8_t ESP32_hello_world_bin_md5[]; extern const uint8_t ESP32_partition_table_bin[]; extern const uint32_t ESP32_partition_table_bin_size; +extern const uint8_t ESP32_partition_table_bin_md5[]; extern const uint8_t ESP32_S2_bootloader_bin[]; extern const uint32_t ESP32_S2_bootloader_bin_size; +extern const uint8_t ESP32_S2_bootloader_bin_md5[]; extern const uint8_t ESP32_S2_hello_world_bin[]; extern const uint32_t ESP32_S2_hello_world_bin_size; +extern const uint8_t ESP32_S2_hello_world_bin_md5[]; extern const uint8_t ESP32_S2_partition_table_bin[]; extern const uint32_t ESP32_S2_partition_table_bin_size; +extern const uint8_t ESP32_S2_partition_table_bin_md5[]; extern const uint8_t ESP32_S3_bootloader_bin[]; extern const uint32_t ESP32_S3_bootloader_bin_size; +extern const uint8_t ESP32_S3_bootloader_bin_md5[]; extern const uint8_t ESP32_S3_hello_world_bin[]; extern const uint32_t ESP32_S3_hello_world_bin_size; +extern const uint8_t ESP32_S3_hello_world_bin_md5[]; extern const uint8_t ESP32_S3_partition_table_bin[]; extern const uint32_t ESP32_S3_partition_table_bin_size; - - +extern const uint8_t ESP32_S3_partition_table_bin_md5[]; extern const uint8_t ESP8266_bootloader_bin[]; extern const uint32_t ESP8266_bootloader_bin_size; +extern const uint8_t ESP8266_bootloader_bin_md5[]; extern const uint8_t ESP8266_hello_world_bin[]; extern const uint32_t ESP8266_hello_world_bin_size; +extern const uint8_t ESP8266_hello_world_bin_md5[]; extern const uint8_t ESP8266_partition_table_bin[]; extern const uint32_t ESP8266_partition_table_bin_size; - -extern const uint8_t ESP32_H4_bootloader_bin[]; -extern const uint32_t ESP32_H4_bootloader_bin_size; -extern const uint8_t ESP32_H4_hello_world_bin[]; -extern const uint32_t ESP32_H4_hello_world_bin_size; -extern const uint8_t ESP32_H4_partition_table_bin[]; -extern const uint32_t ESP32_H4_partition_table_bin_size; +extern const uint8_t ESP8266_partition_table_bin_md5[]; extern const uint8_t ESP32_H2_bootloader_bin[]; extern const uint32_t ESP32_H2_bootloader_bin_size; +extern const uint8_t ESP32_H2_bootloader_bin_md5[]; extern const uint8_t ESP32_H2_hello_world_bin[]; extern const uint32_t ESP32_H2_hello_world_bin_size; +extern const uint8_t ESP32_H2_hello_world_bin_md5[]; extern const uint8_t ESP32_H2_partition_table_bin[]; extern const uint32_t ESP32_H2_partition_table_bin_size; +extern const uint8_t ESP32_H2_partition_table_bin_md5[]; extern const uint8_t ESP32_C2_bootloader_bin[]; extern const uint32_t ESP32_C2_bootloader_bin_size; +extern const uint8_t ESP32_C2_bootloader_bin_md5[]; extern const uint8_t ESP32_C2_hello_world_bin[]; extern const uint32_t ESP32_C2_hello_world_bin_size; +extern const uint8_t ESP32_C2_hello_world_bin_md5[]; extern const uint8_t ESP32_C2_partition_table_bin[]; extern const uint32_t ESP32_C2_partition_table_bin_size; +extern const uint8_t ESP32_C2_partition_table_bin_md5[]; extern const uint8_t ESP32_C3_bootloader_bin[]; extern const uint32_t ESP32_C3_bootloader_bin_size; +extern const uint8_t ESP32_C3_bootloader_bin_md5[]; extern const uint8_t ESP32_C3_hello_world_bin[]; extern const uint32_t ESP32_C3_hello_world_bin_size; +extern const uint8_t ESP32_C3_hello_world_bin_md5[]; extern const uint8_t ESP32_C3_partition_table_bin[]; extern const uint32_t ESP32_C3_partition_table_bin_size; +extern const uint8_t ESP32_C3_partition_table_bin_md5[]; extern const uint8_t ESP32_C6_bootloader_bin[]; extern const uint32_t ESP32_C6_bootloader_bin_size; +extern const uint8_t ESP32_C6_bootloader_bin_md5[]; extern const uint8_t ESP32_C6_hello_world_bin[]; extern const uint32_t ESP32_C6_hello_world_bin_size; +extern const uint8_t ESP32_C6_hello_world_bin_md5[]; extern const uint8_t ESP32_C6_partition_table_bin[]; extern const uint32_t ESP32_C6_partition_table_bin_size; +extern const uint8_t ESP32_C6_partition_table_bin_md5[]; + +extern const uint8_t ESP32_C5_bootloader_bin[]; +extern const uint32_t ESP32_C5_bootloader_bin_size; +extern const uint8_t ESP32_C5_bootloader_bin_md5[]; +extern const uint8_t ESP32_C5_hello_world_bin[]; +extern const uint32_t ESP32_C5_hello_world_bin_size; +extern const uint8_t ESP32_C5_hello_world_bin_md5[]; +extern const uint8_t ESP32_C5_partition_table_bin[]; +extern const uint32_t ESP32_C5_partition_table_bin_size; +extern const uint8_t ESP32_C5_partition_table_bin_md5[]; + +extern const uint8_t ESP32_P4_bootloader_bin[]; +extern const uint32_t ESP32_P4_bootloader_bin_size; +extern const uint8_t ESP32_P4_bootloader_bin_md5[]; +extern const uint8_t ESP32_P4_hello_world_bin[]; +extern const uint32_t ESP32_P4_hello_world_bin_size; +extern const uint8_t ESP32_P4_hello_world_bin_md5[]; +extern const uint8_t ESP32_P4_partition_table_bin[]; +extern const uint32_t ESP32_P4_partition_table_bin_size; +extern const uint8_t ESP32_P4_partition_table_bin_md5[]; void get_example_binaries(target_chip_t target, example_binaries_t *bins) { if (target == ESP8266_CHIP) { bins->boot.data = ESP8266_bootloader_bin; bins->boot.size = ESP8266_bootloader_bin_size; - bins->boot.addr = BOOTLOADER_ADDRESS_V0; + bins->boot.md5 = ESP8266_bootloader_bin_md5; + bins->boot.addr = BOOTLOADER_ADDRESS_V1; bins->part.data = ESP8266_partition_table_bin; bins->part.size = ESP8266_partition_table_bin_size; + bins->part.md5 = ESP8266_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP8266_hello_world_bin; bins->app.size = ESP8266_hello_world_bin_size; + bins->app.md5 = ESP8266_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; } else if (target == ESP32_CHIP) { bins->boot.data = ESP32_bootloader_bin; bins->boot.size = ESP32_bootloader_bin_size; + bins->boot.md5 = ESP32_bootloader_bin_md5; bins->boot.addr = BOOTLOADER_ADDRESS_V0; bins->part.data = ESP32_partition_table_bin; bins->part.size = ESP32_partition_table_bin_size; + bins->part.md5 = ESP32_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP32_hello_world_bin; bins->app.size = ESP32_hello_world_bin_size; + bins->app.md5 = ESP32_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; } else if (target == ESP32S2_CHIP) { bins->boot.data = ESP32_S2_bootloader_bin; bins->boot.size = ESP32_S2_bootloader_bin_size; + bins->boot.md5 = ESP32_S2_bootloader_bin_md5; bins->boot.addr = BOOTLOADER_ADDRESS_V0; bins->part.data = ESP32_S2_partition_table_bin; bins->part.size = ESP32_S2_partition_table_bin_size; + bins->part.md5 = ESP32_S2_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP32_S2_hello_world_bin; bins->app.size = ESP32_S2_hello_world_bin_size; + bins->app.md5 = ESP32_S2_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; - } else if (target == ESP32H4_CHIP){ - bins->boot.data = ESP32_H4_bootloader_bin; - bins->boot.size = ESP32_H4_bootloader_bin_size; - bins->boot.addr = BOOTLOADER_ADDRESS_V1; - bins->part.data = ESP32_H4_partition_table_bin; - bins->part.size = ESP32_H4_partition_table_bin_size; - bins->part.addr = PARTITION_ADDRESS; - bins->app.data = ESP32_H4_hello_world_bin; - bins->app.size = ESP32_H4_hello_world_bin_size; - bins->app.addr = APPLICATION_ADDRESS; - } else if (target == ESP32H2_CHIP){ + } else if (target == ESP32H2_CHIP) { bins->boot.data = ESP32_H2_bootloader_bin; bins->boot.size = ESP32_H2_bootloader_bin_size; + bins->boot.md5 = ESP32_H2_bootloader_bin_md5; bins->boot.addr = BOOTLOADER_ADDRESS_V1; bins->part.data = ESP32_H2_partition_table_bin; bins->part.size = ESP32_H2_partition_table_bin_size; + bins->part.md5 = ESP32_H2_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP32_H2_hello_world_bin; bins->app.size = ESP32_H2_hello_world_bin_size; + bins->app.md5 = ESP32_H2_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; - } else if (target == ESP32C2_CHIP){ + } else if (target == ESP32C2_CHIP) { bins->boot.data = ESP32_C2_bootloader_bin; bins->boot.size = ESP32_C2_bootloader_bin_size; + bins->boot.md5 = ESP32_C2_bootloader_bin_md5; bins->boot.addr = BOOTLOADER_ADDRESS_V1; bins->part.data = ESP32_C2_partition_table_bin; bins->part.size = ESP32_C2_partition_table_bin_size; + bins->part.md5 = ESP32_C2_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP32_C2_hello_world_bin; bins->app.size = ESP32_C2_hello_world_bin_size; + bins->app.md5 = ESP32_C2_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; - } else if (target == ESP32C3_CHIP){ + } else if (target == ESP32C3_CHIP) { bins->boot.data = ESP32_C3_bootloader_bin; bins->boot.size = ESP32_C3_bootloader_bin_size; + bins->boot.md5 = ESP32_C3_bootloader_bin_md5; bins->boot.addr = BOOTLOADER_ADDRESS_V1; bins->part.data = ESP32_C3_partition_table_bin; bins->part.size = ESP32_C3_partition_table_bin_size; + bins->part.md5 = ESP32_C3_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP32_C3_hello_world_bin; bins->app.size = ESP32_C3_hello_world_bin_size; + bins->app.md5 = ESP32_C3_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; - } else if (target == ESP32C6_CHIP){ + } else if (target == ESP32C6_CHIP) { bins->boot.data = ESP32_C6_bootloader_bin; bins->boot.size = ESP32_C6_bootloader_bin_size; + bins->boot.md5 = ESP32_C6_bootloader_bin_md5; bins->boot.addr = BOOTLOADER_ADDRESS_V1; bins->part.data = ESP32_C6_partition_table_bin; bins->part.size = ESP32_C6_partition_table_bin_size; + bins->part.md5 = ESP32_C6_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP32_C6_hello_world_bin; bins->app.size = ESP32_C6_hello_world_bin_size; + bins->app.md5 = ESP32_C6_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; - - } else if (target == ESP32S3_CHIP){ + } else if (target == ESP32S3_CHIP) { bins->boot.data = ESP32_S3_bootloader_bin; bins->boot.size = ESP32_S3_bootloader_bin_size; + bins->boot.md5 = ESP32_S3_bootloader_bin_md5; bins->boot.addr = BOOTLOADER_ADDRESS_V1; bins->part.data = ESP32_S3_partition_table_bin; bins->part.size = ESP32_S3_partition_table_bin_size; + bins->part.md5 = ESP32_S3_partition_table_bin_md5; bins->part.addr = PARTITION_ADDRESS; bins->app.data = ESP32_S3_hello_world_bin; bins->app.size = ESP32_S3_hello_world_bin_size; + bins->app.md5 = ESP32_S3_hello_world_bin_md5; bins->app.addr = APPLICATION_ADDRESS; - } - else { + } else if (target == ESP32C5_CHIP) { + bins->boot.data = ESP32_C5_bootloader_bin; + bins->boot.size = ESP32_C5_bootloader_bin_size; + bins->boot.md5 = ESP32_C5_bootloader_bin_md5; + bins->boot.addr = BOOTLOADER_ADDRESS_V2; + bins->part.data = ESP32_C5_partition_table_bin; + bins->part.size = ESP32_C5_partition_table_bin_size; + bins->part.md5 = ESP32_C5_partition_table_bin_md5; + bins->part.addr = PARTITION_ADDRESS; + bins->app.data = ESP32_C5_hello_world_bin; + bins->app.size = ESP32_C5_hello_world_bin_size; + bins->app.md5 = ESP32_C5_hello_world_bin_md5; + bins->app.addr = APPLICATION_ADDRESS; + } else if (target == ESP32P4_CHIP) { + bins->boot.data = ESP32_P4_bootloader_bin; + bins->boot.size = ESP32_P4_bootloader_bin_size; + bins->boot.md5 = ESP32_P4_bootloader_bin_md5; + bins->boot.addr = BOOTLOADER_ADDRESS_V2; + bins->part.data = ESP32_P4_partition_table_bin; + bins->part.size = ESP32_P4_partition_table_bin_size; + bins->part.md5 = ESP32_P4_partition_table_bin_md5; + bins->part.addr = PARTITION_ADDRESS; + bins->app.data = ESP32_P4_hello_world_bin; + bins->app.size = ESP32_P4_hello_world_bin_size; + bins->app.md5 = ESP32_P4_hello_world_bin_md5; + bins->app.addr = APPLICATION_ADDRESS; + } else { abort(); } } @@ -205,71 +281,101 @@ extern const uint8_t ESP32_C3_app_bin[]; extern const uint32_t ESP32_C3_app_bin_size; extern const uint8_t ESP32_H2_app_bin[]; extern const uint32_t ESP32_H2_app_bin_size; -extern const uint8_t ESP32_H4_app_bin[]; -extern const uint32_t ESP32_H4_app_bin_size; extern const uint8_t ESP32_S3_app_bin[]; extern const uint32_t ESP32_S3_app_bin_size; extern const uint8_t ESP32_C6_app_bin[]; extern const uint32_t ESP32_C6_app_bin_size; +extern const uint8_t ESP32_C5_app_bin[]; +extern const uint32_t ESP32_C5_app_bin_size; +extern const uint8_t ESP32_P4_app_bin[]; +extern const uint32_t ESP32_P4_app_bin_size; + void get_example_ram_app_binary(target_chip_t target, example_ram_app_binary_t *bin) { switch (target) { - case ESP32_CHIP: { - bin->ram_app.data = ESP32_app_bin; - bin->ram_app.size = ESP32_app_bin_size; - break; - } - case ESP32C2_CHIP: { - bin->ram_app.data = ESP32_C2_app_bin; - bin->ram_app.size = ESP32_C2_app_bin_size; - break; - } - case ESP32C3_CHIP: { - bin->ram_app.data = ESP32_C3_app_bin; - bin->ram_app.size = ESP32_C3_app_bin_size; - break; - } - case ESP32H2_CHIP: { - bin->ram_app.data = ESP32_H2_app_bin; - bin->ram_app.size = ESP32_H2_app_bin_size; - break; - } - case ESP32H4_CHIP: { - bin->ram_app.data = ESP32_H4_app_bin; - bin->ram_app.size = ESP32_H4_app_bin_size; - break; - } - case ESP32S3_CHIP: { - bin->ram_app.data = ESP32_S3_app_bin; - bin->ram_app.size = ESP32_S3_app_bin_size; - break; - } - case ESP32C6_CHIP: { - bin->ram_app.data = ESP32_C6_app_bin; - bin->ram_app.size = ESP32_C6_app_bin_size; - break; - } - default: { - abort(); - } + case ESP32_CHIP: { + bin->ram_app.data = ESP32_app_bin; + bin->ram_app.size = ESP32_app_bin_size; + break; + } + case ESP32C2_CHIP: { + bin->ram_app.data = ESP32_C2_app_bin; + bin->ram_app.size = ESP32_C2_app_bin_size; + break; + } + case ESP32C3_CHIP: { + bin->ram_app.data = ESP32_C3_app_bin; + bin->ram_app.size = ESP32_C3_app_bin_size; + break; + } + case ESP32H2_CHIP: { + bin->ram_app.data = ESP32_H2_app_bin; + bin->ram_app.size = ESP32_H2_app_bin_size; + break; + } + case ESP32S3_CHIP: { + bin->ram_app.data = ESP32_S3_app_bin; + bin->ram_app.size = ESP32_S3_app_bin_size; + break; + } + case ESP32C6_CHIP: { + bin->ram_app.data = ESP32_C6_app_bin; + bin->ram_app.size = ESP32_C6_app_bin_size; + break; + } + case ESP32C5_CHIP: { + bin->ram_app.data = ESP32_C5_app_bin; + bin->ram_app.size = ESP32_C5_app_bin_size; + break; + } + case ESP32P4_CHIP: { + bin->ram_app.data = ESP32_P4_app_bin; + bin->ram_app.size = ESP32_P4_app_bin_size; + break; + } + default: { + abort(); + } } } #endif +static const char *get_error_string(const esp_loader_error_t error) +{ + const char *mapping[ESP_LOADER_ERROR_INVALID_RESPONSE + 1] = { + "NONE", "UNKNOWN", "TIMEOUT", "IMAGE SIZE", + "INVALID MD5", "INVALID PARAMETER", "INVALID TARGET", + "UNSUPPORTED CHIP", "UNSUPPORTED FUNCTION", "INVALID RESPONSE" + }; + + assert(error <= ESP_LOADER_ERROR_INVALID_RESPONSE); + + return mapping[error]; +} + esp_loader_error_t connect_to_target(uint32_t higher_transmission_rate) { esp_loader_connect_args_t connect_config = ESP_LOADER_CONNECT_DEFAULT(); esp_loader_error_t err = esp_loader_connect(&connect_config); if (err != ESP_LOADER_SUCCESS) { - printf("Cannot connect to target. Error: %u\n", err); + printf("Cannot connect to target. Error: %s\n", get_error_string(err)); + + if (err == ESP_LOADER_ERROR_TIMEOUT) { + printf("Check if the host and the target are properly connected.\n"); + } else if (err == ESP_LOADER_ERROR_INVALID_TARGET) { + printf("You could be using an unsupported chip, or chip revision.\n"); + } else if (err == ESP_LOADER_ERROR_INVALID_RESPONSE) { + printf("Try lowering the transmission rate or using shorter wires to connect the host and the target.\n"); + } + return err; } printf("Connected to target\n"); -#ifdef SERIAL_FLASHER_INTERFACE_UART +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) if (higher_transmission_rate && esp_loader_get_target() != ESP8266_CHIP) { err = esp_loader_change_transmission_rate(higher_transmission_rate); if (err == ESP_LOADER_ERROR_UNSUPPORTED_FUNC) { @@ -284,15 +390,61 @@ esp_loader_error_t connect_to_target(uint32_t higher_transmission_rate) printf("Unable to change transmission rate."); return err; } - printf("Transmission rate changed changed\n"); + printf("Transmission rate changed.\n"); } } -#endif /* SERIAL_FLASHER_INTERFACE_UART */ +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ return ESP_LOADER_SUCCESS; } -#ifdef SERIAL_FLASHER_INTERFACE_UART +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) +esp_loader_error_t connect_to_target_with_stub(const uint32_t current_transmission_rate, + const uint32_t higher_transmission_rate) +{ + esp_loader_connect_args_t connect_config = ESP_LOADER_CONNECT_DEFAULT(); + + esp_loader_error_t err = esp_loader_connect_with_stub(&connect_config); + if (err != ESP_LOADER_SUCCESS) { + printf("Cannot connect to target. Error: %s\n", get_error_string(err)); + + if (err == ESP_LOADER_ERROR_TIMEOUT) { + printf("Check if the host and the target are properly connected.\n"); + } else if (err == ESP_LOADER_ERROR_INVALID_TARGET) { + printf("You could be using an unsupported chip, or chip revision.\n"); + } else if (err == ESP_LOADER_ERROR_INVALID_RESPONSE) { + printf("Try lowering the transmission rate or using shorter wires to connect the host and the target.\n"); + } + + return err; + } + printf("Connected to target\n"); + + if (higher_transmission_rate != current_transmission_rate) { + err = esp_loader_change_transmission_rate_stub(current_transmission_rate, + higher_transmission_rate); + + if (err == ESP_LOADER_ERROR_UNSUPPORTED_FUNC) { + printf("ESP8266 does not support change transmission rate command."); + return err; + } else if (err != ESP_LOADER_SUCCESS) { + printf("Unable to change transmission rate on target."); + return err; + } else { + err = loader_port_change_transmission_rate(higher_transmission_rate); + if (err != ESP_LOADER_SUCCESS) { + printf("Unable to change transmission rate."); + return err; + } + printf("Transmission rate changed.\n"); + } + } + + return ESP_LOADER_SUCCESS; +} +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ + +#ifndef SERIAL_FLASHER_INTERFACE_SPI esp_loader_error_t flash_binary(const uint8_t *bin, size_t size, size_t address) { esp_loader_error_t err; @@ -302,7 +454,12 @@ esp_loader_error_t flash_binary(const uint8_t *bin, size_t size, size_t address) printf("Erasing flash (this may take a while)...\n"); err = esp_loader_flash_start(address, size, sizeof(payload)); if (err != ESP_LOADER_SUCCESS) { - printf("Erasing flash failed with error %d.\n", err); + printf("Erasing flash failed with error: %s.\n", get_error_string(err)); + + if (err == ESP_LOADER_ERROR_INVALID_PARAM) { + printf("If using Secure Download Mode, double check that the specified " + "target flash size is correct.\n"); + } return err; } printf("Start programming\n"); @@ -316,7 +473,7 @@ esp_loader_error_t flash_binary(const uint8_t *bin, size_t size, size_t address) err = esp_loader_flash_write(payload, to_read); if (err != ESP_LOADER_SUCCESS) { - printf("\nPacket could not be written! Error %d.\n", err); + printf("\nPacket could not be written! Error %s.\n", get_error_string(err)); return err; } @@ -326,7 +483,6 @@ esp_loader_error_t flash_binary(const uint8_t *bin, size_t size, size_t address) int progress = (int)(((float)written / binary_size) * 100); printf("\rProgress: %d %%", progress); - fflush(stdout); }; printf("\nFinished programming\n"); @@ -337,7 +493,7 @@ esp_loader_error_t flash_binary(const uint8_t *bin, size_t size, size_t address) printf("ESP8266 does not support flash verify command."); return err; } else if (err != ESP_LOADER_SUCCESS) { - printf("MD5 does not match. err: %d\n", err); + printf("MD5 does not match. Error: %s\n", get_error_string(err)); return err; } printf("Flash verified\n"); @@ -345,7 +501,7 @@ esp_loader_error_t flash_binary(const uint8_t *bin, size_t size, size_t address) return ESP_LOADER_SUCCESS; } -#endif /* SERIAL_FLASHER_INTERFACE_UART */ +#endif /* SERIAL_FLASHER_INTERFACE_SPI */ esp_loader_error_t load_ram_binary(const uint8_t *bin) { @@ -357,9 +513,11 @@ esp_loader_error_t load_ram_binary(const uint8_t *bin) // Parse segments uint32_t seg; uint32_t *cur_seg_pos; - for (seg=0, cur_seg_pos = (uint32_t *)(&bin[BIN_FIRST_SEGMENT_OFFSET]); - seg < header->segments; - seg++) { + // ESP8266 does not have extended header + uint32_t offset = esp_loader_get_target() == ESP8266_CHIP ? BIN_HEADER_SIZE : BIN_HEADER_EXT_SIZE; + for (seg = 0, cur_seg_pos = (uint32_t *)(&bin[offset]); + seg < header->segments; + seg++) { segments[seg].addr = *cur_seg_pos++; segments[seg].size = *cur_seg_pos++; segments[seg].data = (uint8_t *)cur_seg_pos; @@ -367,22 +525,26 @@ esp_loader_error_t load_ram_binary(const uint8_t *bin) } // Download segments - for (seg=0; seg < header->segments; seg++) { + for (seg = 0; seg < header->segments; seg++) { printf("Downloading %"PRIu32" bytes at 0x%08"PRIx32"...\n", segments[seg].size, segments[seg].addr); err = esp_loader_mem_start(segments[seg].addr, segments[seg].size, ESP_RAM_BLOCK); if (err != ESP_LOADER_SUCCESS) { - printf("Loading ram start with error %d.\n", err); + printf("Loading to RAM could not be started. Error: %s.\n", get_error_string(err)); + + if (err == ESP_LOADER_ERROR_INVALID_PARAM) { + printf("Check if the chip has Secure Download Mode enabled.\n"); + } return err; } size_t remain_size = segments[seg].size; uint8_t *data_pos = segments[seg].data; - while(remain_size > 0) { + while (remain_size > 0) { size_t data_size = MIN(ESP_RAM_BLOCK, remain_size); err = esp_loader_mem_write(data_pos, data_size); if (err != ESP_LOADER_SUCCESS) { - printf("\nPacket could not be written! Error %d.\n", err); + printf("\nPacket could not be written! Error: %s.\n", get_error_string(err)); return err; } data_pos += data_size; @@ -392,11 +554,10 @@ esp_loader_error_t load_ram_binary(const uint8_t *bin) err = esp_loader_mem_finish(header->entrypoint); if (err != ESP_LOADER_SUCCESS) { - printf("\nLoad ram finish with Error %d.\n", err); + printf("\nLoading to RAM finished with error: %s.\n", get_error_string(err)); return err; } printf("\nFinished loading\n"); return ESP_LOADER_SUCCESS; } - diff --git a/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.h b/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.h index 6f1791beeb..a58857883a 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.h +++ b/esp_flasher/lib/esp-serial-flasher/examples/common/example_common.h @@ -15,7 +15,8 @@ #pragma once -#define BIN_FIRST_SEGMENT_OFFSET 0x18 +#define BIN_HEADER_SIZE 0x8 +#define BIN_HEADER_EXT_SIZE 0x18 // Maximum block sized for RAM and Flash writes, respectively. #define ESP_RAM_BLOCK 0x1800 @@ -23,6 +24,7 @@ typedef struct { const uint8_t *data; uint32_t size; uint32_t addr; + const uint8_t *md5; } partition_attr_t; typedef struct { @@ -59,5 +61,7 @@ typedef struct example_bin_segment { void get_example_binaries(target_chip_t target, example_binaries_t *binaries); void get_example_ram_app_binary(target_chip_t target, example_ram_app_binary_t *bin); esp_loader_error_t connect_to_target(uint32_t higher_transmission_rate); +esp_loader_error_t connect_to_target_with_stub(uint32_t current_transmission_rate, + uint32_t higher_transmission_rate); esp_loader_error_t flash_binary(const uint8_t *bin, size_t size, size_t address); esp_loader_error_t load_ram_binary(const uint8_t *bin); diff --git a/esp_flasher/lib/esp-serial-flasher/examples/conftest.py b/esp_flasher/lib/esp-serial-flasher/examples/conftest.py new file mode 100644 index 0000000000..7aa5848d34 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/conftest.py @@ -0,0 +1,86 @@ +import logging +import os +import sys +from datetime import datetime +from typing import List, Optional + +import pytest + + +def pytest_configure(config): + target = config.getoption("--target") + + if "stm32" in target: + config.option.embedded_services = "serial" + elif "raspberry" in target: + pass + elif "pi_pico" in target: + config.option.embedded_services = "serial" + elif "zephyr" in target: + config.option.embedded_services = "serial" + else: + config.option.embedded_services = "esp,idf" + + +def pytest_collection_modifyitems( + session: pytest.Session, config: pytest.Config, items: List[pytest.Item] +): + """Modify test collection based on selected target""" + target = config.getoption("--target") + + # Filter the test cases + filtered_items = [] + for item in items: + # filter by target + all_markers = [marker.name for marker in item.iter_markers()] + if target not in all_markers: + continue + + filtered_items.append(item) + items[:] = filtered_items + + +@pytest.fixture(scope="session", autouse=True) +def session_tempdir() -> str: + _tmpdir = os.path.join( + os.path.dirname(__file__), + "pytest_embedded_log", + datetime.now().strftime("%Y-%m-%d_%H-%M-%S"), + ) + os.makedirs(_tmpdir, exist_ok=True) + return _tmpdir + + +@pytest.fixture +def config(request: pytest.FixtureRequest) -> str: + return getattr(request, "param", None) + + +@pytest.fixture +def build_dir( + request: pytest.FixtureRequest, app_path: str, config: Optional[str] +) -> str: + """ + Check local build dir and return the valid one + + Returns: + valid build directory + """ + check_dirs = [] + build_folder = os.getenv("CI_BUILD_FOLDER", "build") + if config is not None: + check_dirs.append(f"{build_folder}_{config}") + check_dirs.append(build_folder) + + for check_dir in check_dirs: + binary_path = os.path.join(app_path, check_dir) + if os.path.isdir(binary_path): + logging.info(f"find valid binary path: {binary_path}") + return check_dir + + logging.warning( + "checking binary path: %s... missing... try another place", binary_path + ) + + logging.error("no build dir valid. Please build the binary and run pytest again.") + sys.exit(1) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/CMakeLists.txt index f824a70fe6..3a6a372bfa 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/CMakeLists.txt @@ -5,3 +5,14 @@ cmake_minimum_required(VERSION 3.5) set(EXTRA_COMPONENT_DIRS ../../) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(esp-serial-flasher) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/README.md index a07a26922f..59bde33c6a 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/README.md +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/README.md @@ -1,43 +1,46 @@ -# Flash multiple partitions example +# Flash Multiple Partitions Example ## Overview -Example demonstrates how to flash ESP32/ESP32-S2/ESP8266 from another (host) MCU using esp_serial_flash component API. In this case, ESP32 is also used as host MCU. Binaries to be flashed from host MCU to another Espressif SoC can be found in `binaries` folder and are converted into C-array during build process. +This example demonstrates how to flash an Espressif SoC (target) from another MCU (host) using `esp_serial_flasher`. Two ESP32 chips are used in this case. Binaries to be flashed from the host MCU to the Espressif SoC can be found in [binaries](../binaries/) folder and are converted into C-array during build process. -Following steps are performed in order to re-program target's memory: +The following steps are performed in order to re-program targets memory: -1. Filesystem is initialized and mounted. -2. UART1 through which new binary will be transfered is initialized. -3. Host puts slave device into boot mode tries to connect by calling `esp_loader_connect()`. -4. Binary file is opened and its size is acquired, as it has to be known before flashing. -5. Then `esp_loader_flash_start()` is called to enter flashing mode and erase amount of memory to be flashed. -6. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transfered. +1. UART1 through which the the new binary will be transferred is initialized. +2. The host puts the target device into the boot mode and tries to connect by calling `esp_loader_connect()`. +3. The binary file is opened and its size is acquired, as it has to be known before flashing. +4. Then `esp_loader_flash_start()` is called to enter the flashing mode and erase the amount of memory to be flashed. +5. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transfered. -Note: In addition, to steps mentioned above, `esp_loader_change_transmission_rate` is called after connection is established in order to increase flashing speed. This does not apply for ESP8266, as its bootloader does not support this command. However, ESP8266 is capable of detecting baud rate during connection phase, and can be changed before calling `esp_loader_connect`, if necessary. +**Note:** In addition to the steps mentioned above, `esp_loader_change_transmission_rate()` is called after the connection is established in order to increase the flashing speed. This does not apply for the ESP8266, as its bootloader does not support this command. However, the ESP8266 is capable of detecting the baud rate during connection phase and can be changed before calling `esp_loader_connect()`, if necessary. -## SPI pin initialization +## Connection Configuration -In majority of cases `ESP_LOADER_CONNECT_DEFAULT` helper macro is used in order to initialize `loader_connect_args_t` data structure passed to `esp_loader_connect`. Helper macro sets `spi_pin_config` field of the data structure to zero, thus, default SPI pins are used to connect to FLASH memory. In special cases, such as custom design in which FLASH is connected to different pins, `spi_pin_config` field has to be set accordingly. For more detailed information refer to [serial protocol](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/serial-protocol.html). +In the majority of cases `ESP_LOADER_CONNECT_DEFAULT` helper macro is used in order to initialize `loader_connect_args_t` data structure passed to `esp_loader_connect()`. Helper macro sets the maximum time to wait for a response and the number of retrials. For more detailed information refer to [serial protocol](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/serial-protocol.html). ## Hardware Required -* Two development boards with ESP32 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.). +* Two development boards with the ESP32 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.). + * One or two USB cables for power supply and programming. -## Hardware connection +* Cables to connect host to target according to table below. + +## Hardware Connection -Table below shows connection between two ESP32 devices. +Table below shows connection between the two ESP32 devices. -| ESP32 (host) | ESP32 (slave) | +| ESP32 (host) | ESP32 (target) | |:------------:|:-------------:| | IO26 | IO0 | | IO25 | RESET | | IO4 | RX0 | | IO5 | TX0 | -Note: interconnection is the same for all three targets (slaves). +> [!NOTE] +> Interconnection is the same for ESP32, ESP32-S2 and ESP8266 targets. -## Build and flash +## Build and Flash To run the example, type the following command: @@ -47,32 +50,48 @@ idf.py -p PORT flash monitor (To exit the serial monitor, type ``Ctrl-]``.) -See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. +See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html) for full steps to configure and use ESP-IDF to build projects. ## Configuration -For details about available configuration option, please refer to top level [README.md](../../README.md). -Compile definitions can be specified on command line when running `idf.py`, for example: +For details about available configuration options, please refer to the top level [README.md](../../README.md). +Compile definitions can be specified in the command line when running `idf.py`, for example: -``` +```bash idf.py build -DMD5_ENABLED=1 ``` -Binaries to be flashed are placed in separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. -## Example output +Binaries to be flashed are placed in a separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. + +## Example Output Here is the example's console output: -``` -... -I (342) example: Initializing SPIFFS -I (482) example: Image size: 144672 -I (902) example: Connected to target -I (1732) example: Start programming -I (1832) example: packet: 0 written: 1024 B -I (1932) example: packet: 1 written: 1024 B +```text ... -I (16052) example: packet: 140 written: 1024 B -I (16152) example: packet: 141 written: 288 B -I (16152) example: Finished programming +Connected to target +Transmission rate changed changed +I (2484) serial_flasher: Loading bootloader... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Flash verified +I (4074) serial_flasher: Loading partition table... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Flash verified +I (4284) serial_flasher: Loading app... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Flash verified +I (11934) serial_flasher: Done! +I (11273) serial_flasher: ******************************************** +I (11273) serial_flasher: *** Logs below are print from slave .... *** +I (11273) serial_flasher: ******************************************** +Hello world! ``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/CMakeLists.txt index 1045424197..2f67e282ae 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/CMakeLists.txt @@ -1,17 +1,9 @@ set(srcs main.c ../../common/example_common.c) set(include_dirs . ../../common) -if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.0") - idf_component_register(SRCS ${srcs} - INCLUDE_DIRS ${include_dirs}) - set(target ${COMPONENT_LIB}) -else() - # remove when dropping IDF 3.3 support - set(COMPONENT_SRCS ${srcs}) - set(COMPONENT_ADD_INCLUDEDIRS ${include_dirs}) - register_component() - set(target ${COMPONENT_TARGET}) -endif() +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs}) +set(target ${COMPONENT_LIB}) # Embed binaries into the app. # In ESP-IDF this can also be done using EMBED_FILES option of idf_component_register. diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/main.c index ced8a685bc..885d740bc2 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/main.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/main/main.c @@ -21,6 +21,24 @@ static const char *TAG = "serial_flasher"; #define HIGHER_BAUDRATE 230400 +// Max line size +#define BUF_LEN 128 +static uint8_t buf[BUF_LEN] = {0}; + +void slave_monitor(void *arg) +{ +#if (HIGHER_BAUDRATE != 115200) + uart_flush_input(UART_NUM_1); + uart_flush(UART_NUM_1); + uart_set_baudrate(UART_NUM_1, 115200); +#endif + while (1) { + int rxBytes = uart_read_bytes(UART_NUM_1, buf, BUF_LEN, 100 / portTICK_PERIOD_MS); + buf[rxBytes] = '\0'; + printf("%s", buf); + } +} + void app_main(void) { example_binaries_t bin; @@ -41,6 +59,19 @@ void app_main(void) if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) { + // Not necessary, just to demonstrate the erase functions + esp_loader_error_t err; + err = esp_loader_flash_erase(); + if (err != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "Failed to erase flash"); + return; + } + err = esp_loader_flash_erase_region(0, 0x1000); + if (err != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "Failed to erase flash region"); + return; + } + get_example_binaries(esp_loader_get_target(), &bin); ESP_LOGI(TAG, "Loading bootloader..."); @@ -50,5 +81,17 @@ void app_main(void) ESP_LOGI(TAG, "Loading app..."); flash_binary(bin.app.data, bin.app.size, bin.app.addr); ESP_LOGI(TAG, "Done!"); + esp_loader_reset_target(); + + // Delay for skipping the boot message of the targets + vTaskDelay(500 / portTICK_PERIOD_MS); + + // Forward slave's serial output + ESP_LOGI(TAG, "********************************************"); + ESP_LOGI(TAG, "*** Logs below are print from slave .... ***"); + ESP_LOGI(TAG, "********************************************"); + xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES - 1, NULL); + } -} \ No newline at end of file + vTaskDelete(NULL); +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/pytest_esp32_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/pytest_esp32_example.py new file mode 100644 index 0000000000..45a6bc358c --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/pytest_esp32_example.py @@ -0,0 +1,46 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +@pytest.mark.parametrize( + "config", + [None, "_md5_disabled"], + ids=["default", "md5_disabled"], + indirect=True, +) +def test_esp32_example(dut: Dut, config: str) -> None: + # Check initial connection + dut.expect("Connected to target") + dut.expect("Transmission rate changed") + + # Check bootloader programming + dut.expect("Loading bootloader...") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + if config is None: + dut.expect("Flash verified") + dut.expect("Loading partition table...") + else: + dut.expect("Loading partition table...", not_matching="Flash verified") + + # Check partition table programming + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + if config is None: + dut.expect("Flash verified") + dut.expect("Loading app...") + else: + dut.expect("Loading app...", not_matching="Flash verified") + + # Check app programming + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + if config is None: + dut.expect("Flash verified") + dut.expect("Hello world!") + else: + dut.expect("Hello world!", not_matching="Flash verified") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults index 4b0421e1ab..8bb77e7d3a 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults @@ -1 +1,3 @@ +CONFIG_IDF_TARGET="esp32" CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_SERIAL_FLASHER_MD5_ENABLED=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults_md5_disabled b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults_md5_disabled new file mode 100644 index 0000000000..6db69d11a3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_example/sdkconfig.defaults_md5_disabled @@ -0,0 +1,3 @@ +CONFIG_IDF_TARGET="esp32" +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_SERIAL_FLASHER_MD5_ENABLED=n diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/CMakeLists.txt new file mode 100644 index 0000000000..3a6a372bfa --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/CMakeLists.txt @@ -0,0 +1,18 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS ../../) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp-serial-flasher) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/README.md new file mode 100644 index 0000000000..9383bed8ca --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/README.md @@ -0,0 +1,80 @@ +# Flash Multiple Partitions If MD5 Mismatch Example + +## Overview + +This example demonstrates how to flash an Espressif SoC (target) from another MCU (host) using `esp_serial_flasher`. The process is optimized by checking the MD5 hash of each partition before flashing and only flashing the binaries if there is a mismatch, indicating that the binary is not already flashed. Two ESP32 chips are used in this case. Binaries to be flashed from the host MCU to the Espressif SoC can be found in [binaries](../binaries/) folder and are converted into C-array during the build process. + +The following steps are performed in order to re-program the target's memory: + +1. UART1 through which the new binary will be transferred is initialized. +2. The host puts the target device into boot mode and tries to connect by calling `esp_loader_connect()`. +3. The binary file is opened, its MD5 and size is acquired, as it has to be known before flashing. +4. Then `esp_loader_flash_start()` is called to enter the flashing mode and erase the amount of memory to be flashed. +5. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transferred, but only if the MD5 hash does not match the existing partition. + +**Note:** In addition to the steps mentioned above, `esp_loader_change_transmission_rate()` is called after the connection is established in order to increase the flashing speed. This does not apply to the ESP8266, as its bootloader does not support this command. However, the ESP8266 is capable of detecting the baud rate during the connection phase and can be changed before calling `esp_loader_connect()`, if necessary. + +## Connection Configuration + +In the majority of cases, the `ESP_LOADER_CONNECT_DEFAULT` helper macro is used to initialize the `loader_connect_args_t` data structure passed to `esp_loader_connect()`. This helper macro sets the maximum time to wait for a response and the number of retrials. For more detailed information, refer to the [serial protocol](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/serial-protocol.html). + +## Hardware Required + +* Two development boards with the ESP32 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.). +* One or two USB cables for power supply and programming. +* Cables to connect the host to the target according to the table below. + +## Hardware Connection + +The table below shows the connection between the two ESP32 devices. + +| ESP32 (host) | ESP32 (target) | +|:------------:|:-------------:| +| IO26 | IO0 | +| IO25 | RESET | +| IO4 | RX0 | +| IO5 | TX0 | + +> [!NOTE] +> The interconnection is the same for ESP32, ESP32-S2, and ESP8266 targets. + +## Build and Flash + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html) for full steps to configure and use ESP-IDF to build projects. + +## Configuration + +For details about available configuration options, please refer to the top-level [README.md](../../README.md). +Compile definitions can be specified on the command line when running `idf.py`, for example: + +```bash +idf.py build -DMD5_ENABLED=1 +``` + +Binaries to be flashed are placed in a separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. + +## Example Output + +Here is the example's console output: + +```text +... +Connected to target +Transmission rate changed. +I (1211) serial_flasher: Bootloader MD5 match, skipping... +I (1221) serial_flasher: Partition table MD5 match, skipping... +I (1401) serial_flasher: Application MD5 match, skipping... +I (1401) serial_flasher: Done! +I (2001) serial_flasher: ******************************************** +I (2001) serial_flasher: *** Logs below are print from slave .... *** +I (2001) serial_flasher: ******************************************** +Hello world! +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/CMakeLists.txt new file mode 100644 index 0000000000..2f67e282ae --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/CMakeLists.txt @@ -0,0 +1,14 @@ +set(srcs main.c ../../common/example_common.c) +set(include_dirs . ../../common) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs}) +set(target ${COMPONENT_LIB}) + +# Embed binaries into the app. +# In ESP-IDF this can also be done using EMBED_FILES option of idf_component_register. +# Here an external tool is used to make file embedding similar with other ports. +include(${CMAKE_CURRENT_LIST_DIR}/../../common/bin2array.cmake) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../../binaries/Hello-world ${CMAKE_BINARY_DIR}/binaries.c) +set_property(SOURCE ${CMAKE_BINARY_DIR}/binaries.c PROPERTY GENERATED 1) +target_sources(${target} PRIVATE ${CMAKE_BINARY_DIR}/binaries.c) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/main.c new file mode 100644 index 0000000000..e9b998c07c --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/main/main.c @@ -0,0 +1,98 @@ +/* Flash multiple partitions if MD5 mismatch example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include "esp_err.h" +#include "esp_log.h" +#include "driver/uart.h" +#include "driver/gpio.h" +#include "esp32_port.h" +#include "esp_loader.h" +#include "example_common.h" + +static const char *TAG = "serial_flasher"; + +#define HIGHER_BAUDRATE 230400 + +// Max line size +#define BUF_LEN 128 +static uint8_t buf[BUF_LEN] = {0}; + +void slave_monitor(void *arg) +{ +#if (HIGHER_BAUDRATE != 115200) + uart_flush_input(UART_NUM_1); + uart_flush(UART_NUM_1); + uart_set_baudrate(UART_NUM_1, 115200); +#endif + while (1) { + int rxBytes = uart_read_bytes(UART_NUM_1, buf, BUF_LEN, 100 / portTICK_PERIOD_MS); + buf[rxBytes] = '\0'; + printf("%s", buf); + } +} + +void app_main(void) +{ + example_binaries_t bin; + + const loader_esp32_config_t config = { + .baud_rate = 115200, + .uart_port = UART_NUM_1, + .uart_rx_pin = GPIO_NUM_5, + .uart_tx_pin = GPIO_NUM_4, + .reset_trigger_pin = GPIO_NUM_25, + .gpio0_trigger_pin = GPIO_NUM_26, + }; + + if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "serial initialization failed."); + return; + } + + if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) { + + get_example_binaries(esp_loader_get_target(), &bin); + + if (esp_loader_flash_verify_known_md5(bin.boot.addr, bin.boot.size, bin.boot.md5) != ESP_LOADER_SUCCESS) { + ESP_LOGI(TAG, "Bootloader MD5 mismatch, flashing..."); + flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + } else { + ESP_LOGI(TAG, "Bootloader MD5 match, skipping..."); + } + + if (esp_loader_flash_verify_known_md5(bin.part.addr, bin.part.size, bin.part.md5) != ESP_LOADER_SUCCESS) { + ESP_LOGI(TAG, "Partition table MD5 mismatch, flashing..."); + flash_binary(bin.part.data, bin.part.size, bin.part.addr); + } else { + ESP_LOGI(TAG, "Partition table MD5 match, skipping..."); + } + + if (esp_loader_flash_verify_known_md5(bin.app.addr, bin.app.size, bin.app.md5) != ESP_LOADER_SUCCESS) { + ESP_LOGI(TAG, "Application MD5 mismatch, flashing..."); + flash_binary(bin.app.data, bin.app.size, bin.app.addr); + } else { + ESP_LOGI(TAG, "Application MD5 match, skipping..."); + } + ESP_LOGI(TAG, "Done!"); + esp_loader_reset_target(); + + // Delay for skipping the boot message of the targets + vTaskDelay(500 / portTICK_PERIOD_MS); + + // Forward slave's serial output + ESP_LOGI(TAG, "********************************************"); + ESP_LOGI(TAG, "*** Logs below are print from slave .... ***"); + ESP_LOGI(TAG, "********************************************"); + xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES - 1, NULL); + + } + vTaskDelete(NULL); +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/partitions.csv b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/partitions.csv new file mode 100644 index 0000000000..60779941c3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/partitions.csv @@ -0,0 +1,4 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, , 1920K, diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/pytest_esp32_fast_reflash_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/pytest_esp32_fast_reflash_example.py new file mode 100644 index 0000000000..712f78b5eb --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/pytest_esp32_fast_reflash_example.py @@ -0,0 +1,12 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +def test_esp32_fast_reflash_example(dut: Dut) -> None: + dut.expect("Hello world!") + dut.serial.hard_reset() + dut.expect("Bootloader MD5 match, skipping...") + dut.expect("Partition table MD5 match, skipping...") + dut.expect("Application MD5 match, skipping...") + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/sdkconfig.defaults new file mode 100644 index 0000000000..c7c0373937 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_fast_reflash_example/sdkconfig.defaults @@ -0,0 +1,2 @@ +CONFIG_IDF_TARGET="esp32" +CONFIG_PARTITION_TABLE_CUSTOM=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/CMakeLists.txt new file mode 100644 index 0000000000..3a6a372bfa --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/CMakeLists.txt @@ -0,0 +1,18 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS ../../) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp-serial-flasher) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/README.md new file mode 100644 index 0000000000..cfce304586 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/README.md @@ -0,0 +1,79 @@ +# Get Target Info Example + +## Overview + +This example demonstrates how to get the target info including the flash chip size, the WIFI MAC address and security info of an Espressif SoC from another (host) MCU using `esp-serial-flasher`. In this case, an ESP32 is used as the host MCU. + +The following steps are performed: + +1. UART1 through which new binary will be transfered is initialized. +2. The host puts target device into the boot mode and tries to connect by calling `esp_loader_connect()`. +3. The host attempts to read the target flash size and the WIFI MAC and prints them out. +4. The host attempts to read the target security info and prints it out. + +**Note:** In addition, to steps mentioned above, `esp_loader_change_transmission_rate()` is called after connection is established in order to increase communication speed. This does not apply for the ESP8266, as its bootloader does not support this command. However, the ESP8266 is capable of detecting the baud rate during connection phase, and can be changed before calling `esp_loader_connect()`, if necessary. + +## Connection Configuration + +In the majority of cases `ESP_LOADER_CONNECT_DEFAULT` helper macro is used in order to initialize `loader_connect_args_t` data structure passed to `esp_loader_connect()`. Helper macro sets the maximum time to wait for a response and the number of retrials. For more detailed information refer to [serial protocol](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/serial-protocol.html). + +## Hardware Required + +* Two development boards with the ESP32 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.). +* One or two USB cables for power supply and programming. +* Cables to connect host to target according to table below. + +## Hardware Connection + +Table below shows connection between two ESP32 devices. + +| ESP32 (host) | ESP32 (target) | +|:------------:|:--------------:| +| IO26 | IO0 | +| IO25 | RESET | +| IO4 | RX0 | +| IO5 | TX0 | + +> [!NOTE] +> Interconnection is the same for ESP32, ESP32-S2 and ESP8266 targets. + +## Build and Flash + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html) for full steps to configure and use ESP-IDF to build projects. + +## Example Output + +Here is the example's console output: + +```text +... +Connected to target +Transmission rate changed. +I (726) serial_flasher: Target flash size [B]: 4194304 +I (726) serial_flasher: Target WIFI MAC: +I (726) serial_flasher: 70 04 1d 77 08 0c +I (736) serial_flasher: Target Security Information: +I (736) serial_flasher: Target chip: ESP32-C3 +I (746) serial_flasher: Eco version number: 3 +I (746) serial_flasher: Secure boot: DISABLED +I (756) serial_flasher: Secure boot agressive revoke: DISABLED +I (756) serial_flasher: Flash encryption: DISABLED +I (766) serial_flasher: Secure download mode: DISABLED +I (766) serial_flasher: Secure boot key 0 revoked: FALSE +I (776) serial_flasher: Secure boot key 1 revoked: FALSE +I (786) serial_flasher: Secure boot key 2 revoked: FALSE +I (786) serial_flasher: JTAG access: ENABLED +I (796) serial_flasher: USB access: ENABLED +I (796) serial_flasher: Flash encryption: DISABLED +I (806) serial_flasher: Data cache in UART download mode: ENABLED +I (806) serial_flasher: Instruction cache in UART download mode: ENABLED +I (816) main_task: Returned from app_main() +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/CMakeLists.txt new file mode 100644 index 0000000000..5d6232b1f9 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/CMakeLists.txt @@ -0,0 +1,6 @@ +set(srcs main.c ../../common/example_common.c) +set(include_dirs . ../../common) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs}) +set(target ${COMPONENT_LIB}) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/main.c new file mode 100644 index 0000000000..86e9977d76 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/main/main.c @@ -0,0 +1,118 @@ +/* Get target info example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include "esp_err.h" +#include "esp_log.h" +#include "driver/uart.h" +#include "driver/gpio.h" +#include "esp32_port.h" +#include "esp_loader.h" +#include "example_common.h" + +static const char *TAG = "serial_flasher"; + +#define HIGHER_BAUDRATE 230400 + +static const char *get_target_string(target_chip_t target) +{ + if (target >= ESP_MAX_CHIP) { + return "INVALID_TARGET"; + } + + const char *target_to_string_mapping[ESP_MAX_CHIP] = { + "ESP8266", "ESP32", "ESP32-S2", + "ESP32-C3", "ESP32-S3", "ESP32-C2", + "ESP32-C5", "ESP32-H2", "ESP32-C6" + }; + + return target_to_string_mapping[target]; +} + +void app_main(void) +{ + const loader_esp32_config_t config = { + .baud_rate = 115200, + .uart_port = UART_NUM_1, + .uart_rx_pin = GPIO_NUM_5, + .uart_tx_pin = GPIO_NUM_4, + .reset_trigger_pin = GPIO_NUM_25, + .gpio0_trigger_pin = GPIO_NUM_26, + }; + + if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "serial initialization failed."); + return; + } + + if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) { + + uint32_t flash_size = 0; + if (esp_loader_flash_detect_size(&flash_size) == ESP_LOADER_SUCCESS) { + ESP_LOGI(TAG, "Target flash size [B]: %u", (unsigned int)flash_size); + } else { + ESP_LOGE(TAG, "Could not read flash size!"); + } + + uint8_t mac[6] = {0}; + if (esp_loader_read_mac(mac) == ESP_LOADER_SUCCESS) { + ESP_LOGI(TAG, "Target WIFI MAC:"); + ESP_LOG_BUFFER_HEX(TAG, mac, sizeof(mac)); + } else { + ESP_LOGE(TAG, "Could not read WIFI MAC!"); + } + + esp_loader_target_security_info_t security_info; + esp_loader_error_t err = esp_loader_get_security_info(&security_info); + if (err == ESP_LOADER_SUCCESS) { + ESP_LOGI(TAG, "Target Security Information:"); + ESP_LOGI(TAG, "Target chip: %s", get_target_string(security_info.target_chip)); + if (security_info.target_chip != ESP32S2_CHIP) { + ESP_LOGI(TAG, "Eco version number: %lu", (unsigned long)security_info.eco_version); + } + + ESP_LOGI(TAG, "Secure boot: %s", + security_info.secure_boot_enabled ? "ENABLED" : "DISABLED"); + ESP_LOGI(TAG, "Secure boot agressive revoke: %s", + security_info.secure_boot_enabled ? "ENABLED" : "DISABLED"); + ESP_LOGI(TAG, "Flash encryption: %s", + security_info.flash_encryption_enabled ? "ENABLED" : "DISABLED"); + ESP_LOGI(TAG, "Secure download mode: %s", + security_info.secure_download_mode_enabled ? "ENABLED" : "DISABLED"); + for (size_t key = 0; key < sizeof(security_info.secure_boot_revoked_keys); key++) { + ESP_LOGI(TAG, "Secure boot key %d revoked: %s", key, + security_info.secure_boot_revoked_keys[key] ? "TRUE" : "FALSE"); + } + + const char *jtag_status_string; + if (security_info.jtag_hardware_disabled) { + jtag_status_string = "PERMANENTLY DISABLED"; + } else if (security_info.jtag_software_disabled) { + jtag_status_string = "DISABLED IN SOFTWARE"; + } else { + jtag_status_string = "ENABLED"; + } + ESP_LOGI(TAG, "JTAG access: %s", jtag_status_string); + + ESP_LOGI(TAG, "USB access: %s", + !security_info.usb_disabled ? "ENABLED" : "DISABLED"); + ESP_LOGI(TAG, "Flash encryption: %s", + security_info.flash_encryption_enabled ? "ENABLED" : "DISABLED"); + ESP_LOGI(TAG, "Data cache in UART download mode: %s", + !security_info.dcache_in_uart_download_disabled ? "ENABLED" : "DISABLED"); + ESP_LOGI(TAG, "Instruction cache in UART download mode: %s", + !security_info.icache_in_uart_download_disabled ? "ENABLED" : "DISABLED"); + + } else { + ESP_LOGE(TAG, "Could not get security info!\n\ + Note that the ESP32 and ESP8266 do not support this command"); + } + } +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/pytest_esp32_get_target_info_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/pytest_esp32_get_target_info_example.py new file mode 100644 index 0000000000..3646e28f74 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/pytest_esp32_get_target_info_example.py @@ -0,0 +1,32 @@ +import re +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +def test_esp32_get_target_info_example(dut: Dut) -> None: + dut.expect(re.compile(r"Target flash size \[B\]: \d+")) + + dut.expect("Target WIFI MAC:") + dut.expect(re.compile(r"([0-9A-Fa-f]{2} ){5}[0-9A-Fa-f]{2}")) + + dut.expect("Target Security Information:") + dut.expect(re.compile(r"Target chip: ESP32-[A-Z0-9]+")) + dut.expect(re.compile(r"Eco version number: \d+")) + + dut.expect(re.compile(r"Secure boot: (ENABLED|DISABLED)")) + dut.expect(re.compile(r"Secure boot agressive revoke: (ENABLED|DISABLED)")) + dut.expect(re.compile(r"Flash encryption: (ENABLED|DISABLED)")) + dut.expect(re.compile(r"Secure download mode: (ENABLED|DISABLED)")) + + dut.expect(re.compile(r"Secure boot key 0 revoked: (TRUE|FALSE)")) + dut.expect(re.compile(r"Secure boot key 1 revoked: (TRUE|FALSE)")) + dut.expect(re.compile(r"Secure boot key 2 revoked: (TRUE|FALSE)")) + + dut.expect(re.compile(r"JTAG access: (ENABLED|DISABLED)")) + dut.expect(re.compile(r"USB access: (ENABLED|DISABLED)")) + + dut.expect(re.compile(r"Data cache in UART download mode: (ENABLED|DISABLED)")) + dut.expect( + re.compile(r"Instruction cache in UART download mode: (ENABLED|DISABLED)") + ) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/sdkconfig.defaults new file mode 100644 index 0000000000..2a43df1a39 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_get_target_info_example/sdkconfig.defaults @@ -0,0 +1 @@ +CONFIG_IDF_TARGET="esp32" diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/CMakeLists.txt index d72541be8d..5d823f4aff 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/CMakeLists.txt @@ -5,3 +5,14 @@ cmake_minimum_required(VERSION 3.5) set(EXTRA_COMPONENT_DIRS ../../) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(esp32-serial-ram-loader) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/README.md new file mode 100644 index 0000000000..fee8ef2dbf --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/README.md @@ -0,0 +1,87 @@ +# Load Program Into RAM Example + +## Overview + +This example demonstrates how to load a program into an Espressif SoC (target) RAM from another MCU (host) using `esp_serial_flasher`. An ESP32 is also used as the host MCU in this case. Binaries to be loaded from the host MCU to the Espressif SoC can be found in [binaries](../binaries/) folder and are converted into C-array during build process. + +The following steps are performed in order to re-program targets memory: + +1. UART1 through which the new binary will be transfered is initialized. +2. The host puts target device into the boot mode and tries to connect by calling `esp_loader_connect()`. +3. The binary file is opened and its size is acquired, as it has to be known before flashing. +4. Then `esp_loader_mem_start()` is called for each segment in RAM. +5. `esp_loader_mem_finish()` is called with the binary entrypoint, telling the chip to start the uploaded program. +6. UART2 is initialized for the connection to the target. +7. Target output is continually read and printed out. + +**Note:** In addition to the steps mentioned above, `esp_loader_change_transmission_rate()` is called after connection is established in order to increase flashing speed. This does not apply for the ESP8266, as its bootloader does not support this command. However, the ESP8266 is capable of detecting the baud rate during connection phase and can be changed before calling `esp_loader_connect()`, if necessary. + +## Connection Configuration + +In the majority of cases `ESP_LOADER_CONNECT_DEFAULT` helper macro is used in order to initialize `loader_connect_args_t` data structure passed to `esp_loader_connect()`. Helper macro sets the maximum time to wait for a response and the number of retrials. For more detailed information refer to [serial protocol](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/serial-protocol.html). + +## Hardware Required + +* Two development boards with the ESP32-series chip (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.). + +* One or two USB cables for power supply and programming. + +* Cables to connect host to target according to table below. + +## Hardware Connection + +Table below shows connection between two ESP32 devices. + +| ESP32 (host) | ESP32 (target) | +|:------------:|:-------------:| +| IO26 | IO0 | +| IO25 | RESET | +| IO4 | RX0 | +| IO5 | TX0 | + +> [!NOTE] +> Interconnection is the same for ESP32, ESP32-S2 and ESP8266 targets. + +## Build and Flash + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html) for full steps to configure and use ESP-IDF to build projects. + +Binaries to be flashed are placed in a separate folder (binaries.c) for each possible target and converted to C-array. + +## Example Output + +Here is the example's console output: + +```text +... +Connected to target +Transmission rate changed. +I (1063) serial_ram_loader: Loading app to RAM ... +Start loading +Downloading 13628 bytes at 0x3ffb0000... +Downloading 512 bytes at 0x3ffb3c50... +Downloading 97108 bytes at 0x40080000... +... +Downloading 20 bytes at 0x40097b54... + +Finished loading +I (11273) serial_ram_loader: ******************************************** +I (11273) serial_ram_loader: *** Logs below are print from slave .... *** +I (11273) serial_ram_loader: ******************************************** +Hello world! +Hello world! +Hello world! +Hello world! +Hello world! +Hello world! +Hello world! +... +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/main/main.c index 4cff3af80b..a144a5cae0 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/main/main.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/main/main.c @@ -71,10 +71,10 @@ void app_main(void) ESP_LOGI(TAG, "********************************************"); ESP_LOGI(TAG, "*** Logs below are print from slave .... ***"); ESP_LOGI(TAG, "********************************************"); - xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES, NULL); + xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES - 1, NULL); } else { ESP_LOGE(TAG, "Loading to ram failed ..."); } } vTaskDelete(NULL); -} \ No newline at end of file +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/pytest_esp32_load_ram_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/pytest_esp32_load_ram_example.py new file mode 100644 index 0000000000..21a983828c --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/pytest_esp32_load_ram_example.py @@ -0,0 +1,17 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +def test_esp32_load_ram_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + + # Check RAM loading process + dut.expect("Loading app to RAM") + dut.expect("Start loading") + dut.expect("Downloading") # This may appear multiple times + dut.expect("Finished loading") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/sdkconfig.defaults new file mode 100644 index 0000000000..2a43df1a39 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_load_ram_example/sdkconfig.defaults @@ -0,0 +1 @@ +CONFIG_IDF_TARGET="esp32" diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/CMakeLists.txt new file mode 100644 index 0000000000..3a6a372bfa --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/CMakeLists.txt @@ -0,0 +1,18 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS ../../) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp-serial-flasher) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/README.md new file mode 100644 index 0000000000..5e789938a0 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/README.md @@ -0,0 +1,80 @@ +# Read From Target Flash Example + +## Overview + +This example demonstrates how to read from target flash. + +The following steps are performed to demonstrate the flash reading functionality: + +1. UART1 through which the the new binary will be transferred is initialized. +2. The host puts the target device into the boot mode and tries to connect by calling `esp_loader_connect()`. +3. `esp_loader_flash_start()` is called to enter the flashing mode and erase the amount of memory to be flashed. +4. `esp_loader_flash_write()` function is called repeatedly until the whole example data is transfered. +5. `esp_loader_flash_read()` is called to read back the data programmed into the target flash +6. Data is compared to verify successful reading + +**Note:** In addition to the steps mentioned above, `esp_loader_change_transmission_rate()` is called after the connection is established in order to increase the flashing and reading speed. This does not apply for the ESP8266, as its bootloader does not support this command. However, the ESP8266 is capable of detecting the baud rate during connection phase and can be changed before calling `esp_loader_connect()`, if necessary. + +## Connection Configuration + +In the majority of cases `ESP_LOADER_CONNECT_DEFAULT` helper macro is used in order to initialize `loader_connect_args_t` data structure passed to `esp_loader_connect()`. Helper macro sets the maximum time to wait for a response and the number of retrials. For more detailed information refer to [serial protocol](https://docs.espressif.com/projects/esptool/en/latest/esp32s3/advanced-topics/serial-protocol.html). + +## Hardware Required + +* Two development boards with the ESP32 SoC (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.). + +* One or two USB cables for power supply and programming. + +* Cables to connect host to target according to table below. + +## Hardware Connection + +Table below shows connection between the two ESP32 devices. + +| ESP32 (host) | ESP32 (target) | +|:------------:|:-------------:| +| IO26 | IO0 | +| IO25 | RESET | +| IO4 | RX0 | +| IO5 | TX0 | + +> [!NOTE] +> Interconnection is the same for ESP32, ESP32-S2 and ESP8266 targets. + +## Build and Flash + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/index.html) for full steps to configure and use ESP-IDF to build projects. + +## Configuration + +For details about available configuration options, please refer to the top level [README.md](../../README.md). +Compile definitions can be specified in the command line when running `idf.py`, for example: + +```bash +idf.py build -DMD5_ENABLED=1 +``` + +## Example Output + +Here is the example's console output: + +```text +... +Connected to target +Transmission rate changed. +I (703) serial_flasher: Loading example data +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Flash verified +I (1013) serial_flasher: Flash contents match example data +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/CMakeLists.txt new file mode 100644 index 0000000000..5d6232b1f9 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/CMakeLists.txt @@ -0,0 +1,6 @@ +set(srcs main.c ../../common/example_common.c) +set(include_dirs . ../../common) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs}) +set(target ${COMPONENT_LIB}) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/main.c new file mode 100644 index 0000000000..f451d53f31 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/main/main.c @@ -0,0 +1,81 @@ +/* Flash multiple partitions example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include "esp_err.h" +#include "esp_log.h" +#include "driver/uart.h" +#include "driver/gpio.h" +#include "esp32_port.h" +#include "esp_loader.h" +#include "example_common.h" + +static const char *TAG = "serial_flasher"; +static const char example_data[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " + "Donec pretium sem et condimentum tincidunt.n " + "Quisque tristique in enim elementum aliquet. " + "Integer consequat sodales bibendum. " + "Nam enim quam, tristique id dui ut, fermentum porta felis. " + "Phasellus vulputate sem quis ligula egestas, sed ullamcorper eros tincidunt. " + "Donec imperdiet ac urna in placerat. " + "Praesent ultrices velit nulla, eu rutrum nisi maximus in." + "Donec non ligula molestie, blandit massa vel, auctor ipsum. " + "Nunc consectetur mi nulla, a ultricies odio vehicula a. " + "Praesent hendrerit tellus nunc, a interdum lectus mollis eget. " + "Nullam in felis vitae diam posuere dignissim quis non urna. " + "Quisque elementum ante at sapien condimentum, sit amet ultricies tortor feugiat. " + "Aliquam id mi at purus maximus lobortis. " + "Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. " + "Nunc consequat lorem turpis, vitae dignissim leo fringilla eget. " + "In ornare convallis finibus. " + "Morbi libero neque, pretium et mollis non, dictum eget felis. " + "Ut mattis vitae urna id vulputate. " + "Nam porttitor dolor diam, eu rutrum tortor auctor id..."; +static uint8_t read_buf[sizeof(example_data)]; + +#define HIGHER_BAUDRATE 230400 + +void app_main(void) +{ + const loader_esp32_config_t config = { + .baud_rate = 115200, + .uart_port = UART_NUM_1, + .uart_rx_pin = GPIO_NUM_5, + .uart_tx_pin = GPIO_NUM_4, + .reset_trigger_pin = GPIO_NUM_25, + .gpio0_trigger_pin = GPIO_NUM_26, + }; + + if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "serial initialization failed."); + return; + } + + if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) { + + ESP_LOGI(TAG, "Loading example data"); + flash_binary((const uint8_t *)example_data, sizeof(example_data), 0x00000000); + + if (esp_loader_flash_read(read_buf, 0x00000000, sizeof(read_buf)) == ESP_LOADER_SUCCESS) { + if (!memcmp(example_data, read_buf, sizeof(read_buf))) { + ESP_LOGI(TAG, "Flash contents match example data"); + } else { + ESP_LOGE(TAG, "Flash contents do not match example data"); + ESP_LOG_BUFFER_HEXDUMP("Programmed data: ", example_data, sizeof(read_buf), ESP_LOG_ERROR); + ESP_LOG_BUFFER_HEXDUMP("Read data: ", read_buf, sizeof(read_buf), ESP_LOG_ERROR); + } + } else { + ESP_LOGE(TAG, "Could not read from flash!"); + } + + + } + vTaskDelete(NULL); +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/pytest_esp32_read_flash_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/pytest_esp32_read_flash_example.py new file mode 100644 index 0000000000..00e76ae23b --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/pytest_esp32_read_flash_example.py @@ -0,0 +1,10 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +def test_esp32_read_flash_example(dut: Dut) -> None: + dut.expect("Loading example data") + dut.expect("Start programming") + dut.expect("Finished programming", not_matching="Error") + dut.expect("Flash contents match example data") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/sdkconfig.defaults new file mode 100644 index 0000000000..2a43df1a39 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_read_flash_example/sdkconfig.defaults @@ -0,0 +1 @@ +CONFIG_IDF_TARGET="esp32" diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/CMakeLists.txt new file mode 100644 index 0000000000..3a6a372bfa --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/CMakeLists.txt @@ -0,0 +1,18 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS ../../) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp-serial-flasher) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/README.md new file mode 100644 index 0000000000..92c3e75fcb --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/README.md @@ -0,0 +1,99 @@ +# Example of flashing through SDIO + +## Overview + +This example demonstrates how to flash an Espressif MCU (target) with SDIO download support from another MCU (host) using the `esp_serial_flasher`. In this case, another Espressif MCU is used as the host. Binaries to be flashed from the host MCU to the target Espressif SoC can be found in `binaries` folder and are converted into C-array during build process. + +The following steps are performed in order to re-program the targets memory: + +1. SDIO interface in slot 1 through which the binary will be transferred is initialized. +2. The host puts the slave device into joint download mode and tries to connect by calling `esp_loader_connect()`. +3. The binary file is opened and its size is acquired, as it has to be known before flashing. +4. Then `esp_loader_flash_start()` is called to enter the flashing mode and erase the amount of memory to be flashed. +5. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transferred. + +## Hardware Required + +* Two development boards, one with an Espressif SoC with an SDMMC peripheral (only ESP32-P4 is supported for now) and one Espressif SoC with SDIO download support (only ESP32-C6 is supported as the target MCU for now). + +* One or two USB cables for power supply and programming. + +> **Note:** Please check if your board has [possible issues](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/sd_pullup_requirements.html) regarding SDIO requirements. + +## Hardware Connection + +Table below shows connection between two Espressif MCUs. + +| Host (ESP32-P4) | Target | +|:---------------:|:-------------:| +| IO_54 | RESET | +| IO_4 | BOOT | +| IO_14 | D0 | +| IO_15 | D1 | +| IO_16 | D2 | +| IO_17 | D3 | +| IO_18 | CLK | +| IO_19 | CMD | +| IO_5 | UART0_RX | +| IO_6 | UART0_TX | + +You can find the target SDIO pins for each target [here](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/sdio_slave.html). + +SDIO pins CMD and DAT0-3 must be pulled up with adequate values, please take a look at the [SD Pull-up Requirements](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/sd_pullup_requirements.html) for more info. + +> **Note:** For the ESP32 used as a reference, it is not possible to reassign SDIO pins, due to GPIO matrix limitations + +## Build and Flash + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Configuration + +For details about available configuration options, please refer to the top level [README.md](../../README.md). +Compile definitions can be specified in the command line when running `idf.py`, for example: + +```bash +idf.py build -DMD5_ENABLED=1 +``` + +Binaries to be flashed are placed in a separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. + +## Example output + +Here is the example's console output: + +``` +Connected to target +I (1866) sdio_ram_loader: Loading bootloader... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Flash verified +I (2226) sdio_ram_loader: Loading partition table... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Flash verified +I (2276) sdio_ram_loader: Loading app... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Flash verified +I (2906) sdio_ram_loader: Done! +I (3506) sdio_ram_loader: ******************************************** +I (3506) sdio_ram_loader: *** Logs below are print from slave .... *** +I (3506) sdio_ram_loader: ******************************************** +Hello world! +... +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/CMakeLists.txt new file mode 100644 index 0000000000..2f67e282ae --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/CMakeLists.txt @@ -0,0 +1,14 @@ +set(srcs main.c ../../common/example_common.c) +set(include_dirs . ../../common) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs}) +set(target ${COMPONENT_LIB}) + +# Embed binaries into the app. +# In ESP-IDF this can also be done using EMBED_FILES option of idf_component_register. +# Here an external tool is used to make file embedding similar with other ports. +include(${CMAKE_CURRENT_LIST_DIR}/../../common/bin2array.cmake) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../../binaries/Hello-world ${CMAKE_BINARY_DIR}/binaries.c) +set_property(SOURCE ${CMAKE_BINARY_DIR}/binaries.c PROPERTY GENERATED 1) +target_sources(${target} PRIVATE ${CMAKE_BINARY_DIR}/binaries.c) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/main.c new file mode 100644 index 0000000000..54e7af9cb0 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/main/main.c @@ -0,0 +1,100 @@ +/* Example of flashing the program through SDIO + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include "esp_err.h" +#include "esp_log.h" +#include "driver/uart.h" +#include "esp32_sdio_port.h" +#include "esp_loader.h" +#include "example_common.h" +#include "freertos/FreeRTOS.h" + +static const char *TAG = "sdio_ram_loader"; + +// Max line size +#define BUF_LEN 128 +static uint8_t buf[BUF_LEN] = {0}; + +void slave_monitor(void *arg) +{ + // Initialize UART + uart_config_t uart_config = { + .baud_rate = 115200, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, +#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) + .source_clk = UART_SCLK_DEFAULT, +#endif + }; + + ESP_ERROR_CHECK(uart_param_config(UART_NUM_2, &uart_config)); + + ESP_ERROR_CHECK(uart_set_pin(UART_NUM_2, GPIO_NUM_5, GPIO_NUM_6, + UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)); + + ESP_ERROR_CHECK(uart_driver_install(UART_NUM_2, BUF_LEN * 4, BUF_LEN * 4, 0, NULL, 0)); + + while (1) { + int rxBytes = uart_read_bytes(UART_NUM_2, buf, BUF_LEN, 100 / portTICK_PERIOD_MS); + buf[rxBytes] = '\0'; + printf("%s", buf); + } +} + +void app_main(void) +{ + example_binaries_t bin; + + const loader_esp32_sdio_config_t config = { + .slot = SDMMC_HOST_SLOT_1, + .max_freq_khz = SDMMC_FREQ_DEFAULT, + .reset_trigger_pin = GPIO_NUM_54, + .boot_pin = GPIO_NUM_4, + .sdio_d0_pin = GPIO_NUM_14, + .sdio_d1_pin = GPIO_NUM_15, + .sdio_d2_pin = GPIO_NUM_16, + .sdio_d3_pin = GPIO_NUM_17, + .sdio_clk_pin = GPIO_NUM_18, + .sdio_cmd_pin = GPIO_NUM_19, + }; + + if (loader_port_esp32_sdio_init(&config) != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, " SDIO initialization failed."); + abort(); + } + + if (connect_to_target(0) == ESP_LOADER_SUCCESS) { + + get_example_binaries(esp_loader_get_target(), &bin); + + ESP_LOGI(TAG, "Loading bootloader..."); + flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + ESP_LOGI(TAG, "Loading partition table..."); + flash_binary(bin.part.data, bin.part.size, bin.part.addr); + ESP_LOGI(TAG, "Loading app..."); + flash_binary(bin.app.data, bin.app.size, bin.app.addr); + ESP_LOGI(TAG, "Done!"); + esp_loader_reset_target(); + + // Delay for skipping the boot message of the targets + vTaskDelay(500 / portTICK_PERIOD_MS); + + // Forward slave's serial output + ESP_LOGI(TAG, "********************************************"); + ESP_LOGI(TAG, "*** Logs below are print from slave .... ***"); + ESP_LOGI(TAG, "********************************************"); + xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES - 1, NULL); + + } + vTaskDelete(NULL); +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/partitions.csv b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/partitions.csv new file mode 100644 index 0000000000..60779941c3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/partitions.csv @@ -0,0 +1,4 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, , 1920K, diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/pytest_esp32_sdio_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/pytest_esp32_sdio_example.py new file mode 100644 index 0000000000..8edc9e11ce --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/pytest_esp32_sdio_example.py @@ -0,0 +1,32 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32p4 +def test_esp32_sdio_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + + # Check bootloader programming + dut.expect("Loading bootloader") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check partition table programming + dut.expect("Loading partition table") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check app programming + dut.expect("Loading app") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/sdkconfig.defaults new file mode 100644 index 0000000000..c32ef58f51 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_example/sdkconfig.defaults @@ -0,0 +1,3 @@ +CONFIG_IDF_TARGET="esp32p4" +CONFIG_SERIAL_FLASHER_INTERFACE_SDIO=y +CONFIG_PARTITION_TABLE_CUSTOM=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/CMakeLists.txt new file mode 100644 index 0000000000..95d644cc64 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/CMakeLists.txt @@ -0,0 +1,18 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +set(EXTRA_COMPONENT_DIRS ../../) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp32-sdio-ram-loader) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/README.md new file mode 100644 index 0000000000..651147d75d --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/README.md @@ -0,0 +1,76 @@ +# Example of Loading the Program into RAM Through SDIO + +## Overview + +This example demonstrates how to upload an app to RAM of an Espressif MCU (target) with SDIO download support from another MCU (host) using the `esp_serial_flasher`. In this case, another Espressif MCU is used as the host. Binaries to be uploaded to RAM from the host MCU to the target Espressif SoC can be found in `binaries/RAM_APP` folder and are converted into C-array during build process. + +The following steps are performed in order to re-program the targets memory: + +1. SDIO interface in slot 1 through which the binary will be transfered is initialized. +2. The host puts the slave device into joint download mode and tries to connect by calling `esp_loader_connect()`. +3. Then `esp_loader_mem_start()` is called for each segment in RAM. +4. `esp_loader_mem_write()` function is called repeatedly for every segment until the whole binary image is transfered. +5. `esp_loader_mem_finish()` is called with the binary entrypoint, telling the chip to start the uploaded program. +6. UART2 is initialized for the connection to the target. +7. Target output is continually read and printed out. + +## Hardware Required + +* Two development boards, one with an Espressif SoC with an SDMMC peripheral (only ESP32-P4 is supported for now) and one Espressif SoC with SDIO download support (only ESP32-C6 is supported as the target MCU for now). +* One or two USB cables for power supply and programming. + +> **Note:** Please check if your board has [possible issues](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/sd_pullup_requirements.html) regarding SDIO requirements. + +## Hardware Connection + +Table below shows connection between two Espressif MCUs. + +| Host (ESP32-P4) | Target | +|:---------------:|:-------------:| +| IO_54 | RESET | +| IO_4 | BOOT | +| IO_14 | D0 | +| IO_15 | D1 | +| IO_16 | D2 | +| IO_17 | D3 | +| IO_18 | CLK | +| IO_19 | CMD | +| IO_5 | UART0_RX | +| IO_6 | UART0_TX | + +You can find the target SDIO pins for each target [here](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/sdio_slave.html). + +SDIO pins CMD and DAT0-3 must be pulled up with adequate values, please take a look at the [SD Pull-up Requirements](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/sd_pullup_requirements.html) for more info. + +> **Note:** For the ESP32 used as a reference, it is not possible to reassign SDIO pins, due to GPIO matrix limitations + +## Build and Flash + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Example Output + +Here is the example's console output: + +```text +Connected to target +I (701) sdio_ram_loader: Loading app to RAM ... +Start loading +Downloading 52296 bytes at 0x40800000... +Downloading 312 bytes at 0x4080d990... + +Finished loading +I (741) sdio_ram_loader: ******************************************** +I (741) sdio_ram_loader: *** Logs below are print from slave .... *** +I (751) sdio_ram_loader: ******************************************** +Hello world! +... +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/CMakeLists.txt new file mode 100644 index 0000000000..02db4febc9 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/CMakeLists.txt @@ -0,0 +1,14 @@ +set(srcs main.c ../../common/example_common.c) +set(include_dirs . ../../common) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs}) +set(target ${COMPONENT_LIB}) + +# Embed binaries into the app. +# In ESP-IDF this can also be done using EMBED_FILES option of idf_component_register. +# Here an external tool is used to make file embedding similar with other ports. +include(${CMAKE_CURRENT_LIST_DIR}/../../common/bin2array.cmake) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../../binaries/RAM_APP ${CMAKE_BINARY_DIR}/binaries.c) +set_property(SOURCE ${CMAKE_BINARY_DIR}/binaries.c PROPERTY GENERATED 1) +target_sources(${target} PRIVATE ${CMAKE_BINARY_DIR}/binaries.c) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/main.c new file mode 100644 index 0000000000..6da3284532 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/main/main.c @@ -0,0 +1,92 @@ +/* Example of loading the program into RAM through SDIO + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include "esp_err.h" +#include "esp_log.h" +#include "driver/uart.h" +#include "esp32_sdio_port.h" +#include "esp_loader.h" +#include "example_common.h" +#include "freertos/FreeRTOS.h" + +static const char *TAG = "sdio_ram_loader"; + +// Max line size +#define BUF_LEN 128 +static uint8_t buf[BUF_LEN] = {0}; + +void slave_monitor(void *arg) +{ + // Initialize UART + uart_config_t uart_config = { + .baud_rate = 115200, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, +#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) + .source_clk = UART_SCLK_DEFAULT, +#endif + }; + + ESP_ERROR_CHECK(uart_param_config(UART_NUM_2, &uart_config)); + + ESP_ERROR_CHECK(uart_set_pin(UART_NUM_2, GPIO_NUM_5, GPIO_NUM_6, + UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)); + + ESP_ERROR_CHECK(uart_driver_install(UART_NUM_2, BUF_LEN * 4, BUF_LEN * 4, 0, NULL, 0)); + + while (1) { + int rxBytes = uart_read_bytes(UART_NUM_2, buf, BUF_LEN, 100 / portTICK_PERIOD_MS); + buf[rxBytes] = '\0'; + printf("%s", buf); + } +} + +void app_main(void) +{ + example_ram_app_binary_t bin; + + const loader_esp32_sdio_config_t config = { + .slot = SDMMC_HOST_SLOT_1, + .max_freq_khz = SDMMC_FREQ_DEFAULT, + .reset_trigger_pin = GPIO_NUM_54, + .boot_pin = GPIO_NUM_4, + .sdio_d0_pin = GPIO_NUM_14, + .sdio_d1_pin = GPIO_NUM_15, + .sdio_d2_pin = GPIO_NUM_16, + .sdio_d3_pin = GPIO_NUM_17, + .sdio_clk_pin = GPIO_NUM_18, + .sdio_cmd_pin = GPIO_NUM_19, + }; + + if (loader_port_esp32_sdio_init(&config) != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, " SDIO initialization failed."); + abort(); + } + + if (connect_to_target(0) == ESP_LOADER_SUCCESS) { + get_example_ram_app_binary(esp_loader_get_target(), &bin); + ESP_LOGI(TAG, "Loading app to RAM ..."); + esp_loader_error_t err = load_ram_binary(bin.ram_app.data); + loader_port_esp32_sdio_deinit(); + if (err == ESP_LOADER_SUCCESS) { + // Forward slave's serial output + ESP_LOGI(TAG, "********************************************"); + ESP_LOGI(TAG, "*** Logs below are print from slave .... ***"); + ESP_LOGI(TAG, "********************************************"); + xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES - 1, NULL); + } else { + ESP_LOGE(TAG, "Loading to RAM failed ..."); + } + } + vTaskDelete(NULL); +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/partitions.csv b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/partitions.csv new file mode 100644 index 0000000000..60779941c3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/partitions.csv @@ -0,0 +1,4 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, , 1920K, diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/pytest_esp32_sdio_load_ram_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/pytest_esp32_sdio_load_ram_example.py new file mode 100644 index 0000000000..b2d1b9397c --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/pytest_esp32_sdio_load_ram_example.py @@ -0,0 +1,17 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32p4 +def test_esp32_sdio_load_ram_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + + # Check RAM loading process + dut.expect("Loading app to RAM") + dut.expect("Start loading") + dut.expect("Downloading") # This may appear multiple times + dut.expect("Finished loading") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/sdkconfig.defaults new file mode 100644 index 0000000000..c32ef58f51 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_sdio_load_ram_example/sdkconfig.defaults @@ -0,0 +1,3 @@ +CONFIG_IDF_TARGET="esp32p4" +CONFIG_SERIAL_FLASHER_INTERFACE_SDIO=y +CONFIG_PARTITION_TABLE_CUSTOM=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/CMakeLists.txt index 4ab2b8452d..c892317f23 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/CMakeLists.txt @@ -5,3 +5,14 @@ cmake_minimum_required(VERSION 3.16) set(EXTRA_COMPONENT_DIRS ../../) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(esp32-spi-ram-loader) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/README.md index 985ccb8d40..145346821f 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/README.md +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/README.md @@ -1,53 +1,55 @@ -# Example of loading the program into RAM through SPI +# Example of Loading the Program into RAM Through SPI ## Overview -This example demonstrates how to upload an app to RAM of an Espressif MCU with SPI download support from another (host) MCU using the `esp_serial_flash` component API. In this case, another Espressif MCU is used as the host. Binaries to be uploaded to RAM from host MCU to the target MCU can be found in `binaries/RAM_APP` folder and are converted into C-array during build process. +This example demonstrates how to upload an app to RAM of an Espressif MCU (target) with SPI download support from another MCU (host) using the `esp_serial_flasher`. In this case, another Espressif MCU is used as the host. Binaries to be uploaded to RAM from the host MCU to the target Espressif SoC can be found in `binaries/RAM_APP` folder and are converted into C-array during build process. -Following steps are performed in order to re-program the target's memory: +The following steps are performed in order to re-program the targets memory: 1. SPI2 through which the binary will be transfered is initialized. -2. Host puts slave device into SPI download mode tries to connect by calling `esp_loader_connect()`. +2. The host puts the slave device into the SPI download mode tries to connect by calling `esp_loader_connect()`. 3. Then `esp_loader_mem_start()` is called for each segment in RAM. 4. `esp_loader_flash_write()` function is called repeatedly for every segment until the whole binary image is transfered. 5. `esp_loader_mem_finish()` is called with the binary entrypoint, telling the chip to start the uploaded program. -6. UART2 is initialized for the connection to the target -7. Target output is continually read and printed +6. UART2 is initialized for the connection to the target. +7. Target output is continually read and printed out. ## Hardware Required * Two development boards, one with any Espressif MCU (e.g., ESP32-DevKitC, ESP-WROVER-KIT, etc.) and one with an Espressif MCU with SPI download support. Here is a short list of supported MCUs: + 1. ESP32-C3 2. ESP32-C2 3. ESP32-S3 4. ESP32-S2 5. ESP32-H2 + * One or two USB cables for power supply and programming. -## Hardware connection +## Hardware Connection Table below shows connection between two Espressif MCUs. -| Host | Slave | -| IO_5 | RESET | -| IO_12 | CLK | -| IO_10 | CS | -| IO_13 | MISO | -| IO_11 | MOSI | -| IO_14 | QUADWP | -| IO_9 | QUADHD | -| IO_13 | STRAP_B0 | -| IO_2 | STRAP_B1 | -| IO_3 | STRAP_B2 | -| IO_4 | STRAP_B3 | -| IO_6 | UART0_RX | -| IO_7 | UART0_TX | - -> Note 1: Strapping bit pins are documented in the TRM for each respective chip - -> Note 2: For achieving highest speeds, check which pins go through the IO MUX bypassing the GPIO matrix and use those. Pins chosen here are IO MUX pins for ESP32S3 and ESP32S2 chips. - -## Build and flash +| Host (ESP32-S3) | Target | +|:---------------:|:-------------:| +| IO_5 | RESET | +| IO_12 | CLK | +| IO_10 | CS | +| IO_13 | MISO | +| IO_11 | MOSI | +| IO_14 | QUADWP | +| IO_9 | QUADHD | +| IO_13 | STRAP_B0 | +| IO_2 | STRAP_B1 | +| IO_3 | STRAP_B2 | +| IO_4 | STRAP_B3 | +| IO_6 | UART0_RX | +| IO_7 | UART0_TX | + +> **Note 1:** Strapping bit pins are documented in the TRM for each respective chip. +> **Note 2:** For achieving the highest speeds, check which pins go through the IO MUX bypassing the GPIO matrix and use those. Pins chosen here are IO MUX pins for ESP32-S3 and ESP32-S2 chips. + +## Build and Flash To run the example, type the following command: @@ -59,11 +61,11 @@ idf.py -p PORT flash monitor See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. -## Example output +## Example Output Here is the example's console output: -``` +```text Connected to target I (682) spi_ram_loader: Loading app to RAM ... Start loading @@ -77,4 +79,4 @@ I (812) spi_ram_loader: ******************************************** Hello world! Hello world! ... -``` \ No newline at end of file +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/main/main.c index e4de83ac3f..96aae22775 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/main/main.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/main/main.c @@ -88,10 +88,10 @@ void app_main(void) ESP_LOGI(TAG, "********************************************"); ESP_LOGI(TAG, "*** Logs below are print from slave .... ***"); ESP_LOGI(TAG, "********************************************"); - xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES, NULL); + xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES - 1, NULL); } else { ESP_LOGE(TAG, "Loading to RAM failed ..."); } } vTaskDelete(NULL); -} \ No newline at end of file +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/pytest_esp32_spi_load_ram_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/pytest_esp32_spi_load_ram_example.py new file mode 100644 index 0000000000..80bafcc0f1 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/pytest_esp32_spi_load_ram_example.py @@ -0,0 +1,17 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32s3 +def test_esp32_spi_load_ram_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + + # Check RAM loading process + dut.expect("Loading app to RAM") + dut.expect("Start loading") + dut.expect("Downloading") # This may appear multiple times with different addresses + dut.expect("Finished loading") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/sdkconfig.defaults index 387b3cc869..568ecf767d 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/sdkconfig.defaults +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_spi_load_ram_example/sdkconfig.defaults @@ -1,4 +1,2 @@ -# This file was generated using idf.py save-defconfig. It can be edited manually. -# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration -# +CONFIG_IDF_TARGET="esp32s3" CONFIG_SERIAL_FLASHER_INTERFACE_SPI=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/CMakeLists.txt new file mode 100644 index 0000000000..3a6a372bfa --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/CMakeLists.txt @@ -0,0 +1,18 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +set(EXTRA_COMPONENT_DIRS ../../) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp-serial-flasher) + +# There are issues with ESP-IDF 4.4 and -Wunused-parameter +if ("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER "4.4") + idf_component_get_property(flasher esp-serial-flasher COMPONENT_LIB) + + target_compile_options(${flasher} + PRIVATE + -Wunused-parameter + -Wshadow + ) +endif() diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/README.md new file mode 100644 index 0000000000..f0a0c28cef --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/README.md @@ -0,0 +1,99 @@ +# Flashing Multiple Partitions While Using the Flasher Stub Example + +## Overview + +This example demonstrates how to flash an Espressif SoC from another Espressif SoC using `esp-serial-flasher` and the flasher stub. Binaries to be flashed from the host to the Espressif SoC can be found in the `binaries` folder and are converted into C arrays during build process. + +The following steps are performed in order to re-program the target's memory: + +1. UART1 through which the new binary will be transferred is initialized. +2. The host puts the slave device into boot mode and tries to connect and then upload the flasher stub by calling `esp_loader_connect_with_stub()`. +3. `esp_loader_flash_start()` is called to enter flashing mode and erase amount of memory to be flashed. +4. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transferred. + +## Hardware Required + +* One ESP32-series Espressif SoC for the host +* Any Espressif SoC for the target +* One or two USB cables for power supply and programming. + +## Building and Flashing + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Configuration + +For details about available configuration options, please refer to top level [README.md](../../README.md). +Compile definitions can be specified on command line when running `idf.py`, for example: + +```bash +idf.py build -DMD5_ENABLED=1 +``` + +Binaries to be flashed are placed in separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. + +## Pulling Newer Stub Binaries + +The stub binaries are embedded into `esp_stubs.c` from a fixed release of [esp-flasher-stub](https://github.com/esp-rs/esp-flasher-stub). + +If a new [esp-flasher-stub](https://github.com/esp-rs/esp-flasher-stub) version is available, you can obtain binaries by passing a CMake cache variable to `idf.py` like so: + +```bash +idf.py -DSERIAL_FLASHER_STUB_PULL_VERSION= build +``` + +Additionally, it is possible to override the stub sources by either providing a custom url: + +```bash +idf.py -DSERIAL_FLASHER_STUB_PULL_SOURCE= -DSERIAL_FLASHER_STUB_PULL_VERSION= build +``` + +where the following schema is required: `/v/esp32xx.json`, +or a custom local folder: + +```bash +idf.py -DSERIAL_FLASHER_STUB_PULL_OVERRIDE_PATH= build +``` + +containing stub `.json` files. + +> [!NOTE] +> If overriding with custom stub sources, please check that the license under which the they are released fits your usecase. + +## Example Output + +Here is the example's console output: + +```text +... +I (541) main_task: Calling app_main() +Connected to target +I (1121) serial_stub_flasher: Loading bootloader... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +I (1681) serial_stub_flasher: Loading partition table... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +I (1771) serial_stub_flasher: Loading app... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +I (5011) serial_stub_flasher: Done! +I (5095) serial_stub_flasher: ******************************************** +I (5095) serial_stub_flasher: *** Logs below are print from slave .... *** +I (5096) serial_stub_flasher: ******************************************** +Hello world! +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/CMakeLists.txt new file mode 100644 index 0000000000..2f67e282ae --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/CMakeLists.txt @@ -0,0 +1,14 @@ +set(srcs main.c ../../common/example_common.c) +set(include_dirs . ../../common) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs}) +set(target ${COMPONENT_LIB}) + +# Embed binaries into the app. +# In ESP-IDF this can also be done using EMBED_FILES option of idf_component_register. +# Here an external tool is used to make file embedding similar with other ports. +include(${CMAKE_CURRENT_LIST_DIR}/../../common/bin2array.cmake) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../../binaries/Hello-world ${CMAKE_BINARY_DIR}/binaries.c) +set_property(SOURCE ${CMAKE_BINARY_DIR}/binaries.c PROPERTY GENERATED 1) +target_sources(${target} PRIVATE ${CMAKE_BINARY_DIR}/binaries.c) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/main.c new file mode 100644 index 0000000000..72dc4a9206 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/main/main.c @@ -0,0 +1,94 @@ +/* Flash multiple partitions example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include "esp_err.h" +#include "esp_log.h" +#include "driver/uart.h" +#include "driver/gpio.h" +#include "esp32_port.h" +#include "esp_loader.h" +#include "example_common.h" + +static const char *TAG = "serial_stub_flasher"; + +// Max line size +#define BUF_LEN 128 +static uint8_t buf[BUF_LEN] = {0}; + +void slave_monitor(void *arg) +{ +#if (HIGHER_BAUDRATE != 115200) + uart_flush_input(UART_NUM_1); + uart_flush(UART_NUM_1); + uart_set_baudrate(UART_NUM_1, 115200); +#endif + while (1) { + int rxBytes = uart_read_bytes(UART_NUM_1, buf, BUF_LEN, 100 / portTICK_PERIOD_MS); + buf[rxBytes] = '\0'; + printf("%s", buf); + } +} + +void app_main(void) +{ + example_binaries_t bin; + + const loader_esp32_config_t config = { + .baud_rate = 115200, + .uart_port = UART_NUM_1, + .uart_rx_pin = GPIO_NUM_5, + .uart_tx_pin = GPIO_NUM_4, + .reset_trigger_pin = GPIO_NUM_25, + .gpio0_trigger_pin = GPIO_NUM_26, + }; + + if (loader_port_esp32_init(&config) != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "serial initialization failed."); + return; + } + + if (connect_to_target_with_stub(115200, 230400) == ESP_LOADER_SUCCESS) { + + // Not necessary, just to demonstrate the erase functions + esp_loader_error_t err; + err = esp_loader_flash_erase(); + if (err != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "Failed to erase flash"); + return; + } + err = esp_loader_flash_erase_region(0, 0x1000); + if (err != ESP_LOADER_SUCCESS) { + ESP_LOGE(TAG, "Failed to erase flash region"); + return; + } + + get_example_binaries(esp_loader_get_target(), &bin); + + ESP_LOGI(TAG, "Loading bootloader..."); + flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + ESP_LOGI(TAG, "Loading partition table..."); + flash_binary(bin.part.data, bin.part.size, bin.part.addr); + ESP_LOGI(TAG, "Loading app..."); + flash_binary(bin.app.data, bin.app.size, bin.app.addr); + ESP_LOGI(TAG, "Done!"); + esp_loader_reset_target(); + + // Delay for skipping the boot message of the targets + vTaskDelay(500 / portTICK_PERIOD_MS); + + // Forward slave's serial output + ESP_LOGI(TAG, "********************************************"); + ESP_LOGI(TAG, "*** Logs below are print from slave .... ***"); + ESP_LOGI(TAG, "********************************************"); + xTaskCreate(slave_monitor, "slave_monitor", 2048, NULL, configMAX_PRIORITIES - 1, NULL); + } + vTaskDelete(NULL); +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/partitions.csv b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/partitions.csv new file mode 100644 index 0000000000..60779941c3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/partitions.csv @@ -0,0 +1,4 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, , 1920K, diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/pytest_esp32_stub_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/pytest_esp32_stub_example.py new file mode 100644 index 0000000000..601cf742cc --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/pytest_esp32_stub_example.py @@ -0,0 +1,32 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32 +def test_esp32_stub_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + + # Check bootloader programming + dut.expect("Loading bootloader") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check partition table programming + dut.expect("Loading partition table") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check app programming + dut.expect("Loading app") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/sdkconfig.defaults new file mode 100644 index 0000000000..c7c0373937 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_stub_example/sdkconfig.defaults @@ -0,0 +1,2 @@ +CONFIG_IDF_TARGET="esp32" +CONFIG_PARTITION_TABLE_CUSTOM=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/CMakeLists.txt new file mode 100644 index 0000000000..d86b41d689 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/CMakeLists.txt @@ -0,0 +1,9 @@ +# For more information about build system see +# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html +# The following five lines of boilerplate have to be in your project's +# CMakeLists in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.16) + +set(EXTRA_COMPONENT_DIRS ../../) +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(esp32_usb_cdc_acm_example) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/README.md new file mode 100644 index 0000000000..a8b19cdb36 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/README.md @@ -0,0 +1,87 @@ +# Flashing Multiple Partitions over USB CDC ACM Interface + +## Overview + +This example demonstrates how to flash an ESP32-S3 (target) from another ESP32-S3 or an ESP32-S2 MCU (host) using the `esp_serial_flasher`. Binaries to be flashed from the host MCU to the Espressif SoC can be found in [binaries](../binaries/) folder and are converted into C-array during build process. + +> **Note:** The `esp32_usb_cdc_acm` port requires ESP-IDF v4.4 or newer to build. + +The following steps are performed in order to re-program memory: + +1. The system is started. +2. The USB CDC ACM driver is initialized and a task to handle USB events is created. +3. As soon as an ESP32-S3 is connected to the bus, a connection is opened with it using `loader_port_esp32_usb_cdc_acm_init()`. If the target USB Serial/JTAG peripheral is not active (e.g the device firmware is using the USB OTG peripheral), it is necessary to manually put it in download mode. +4. The flasher connection is started with the connected ESP32-S3 by calling `esp_loader_connect()`. +5. The binary file is opened and its size is acquired, as it has to be known before flashing. +6. Then `esp_loader_flash_start()` is called to enter the flashing mode and erase amount of the memory to be flashed. +7. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transferred. +8. After completion, the device can be manually reset and another ESP32-S3 can be connected to perform the flashing. + +> **Note:** The USB CDC ACM device of the ESP32-S3 does not support changing the baudrate, so the argument to `esp_loader_connect()` is irrelevant. + +## USB Host Driver Usage + +This example makes use of the Espressif [USB Host Driver](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/usb_host.html). +In addition to initializing the host driver, a FreeRTOS task needs to be created to handle host usb events. + +A binary semaphore is used as a lock for the connected device and a callback is registered with the loader port which releases the lock, so that a new device can be connected only after disconnection. + +## Hardware Required + +* One ESP32-S3 target board and one ESP32-S3 or ESP32-S2 board, with each board having USB connections +* An USB OTG adapter for the host board +* One or two USB cables for power supply and programming. + +> **Note:** The USB connector on most of the ESP32-S3 and ESP32-S2 boards cannot supply power to the target, so a separate power connection is required. + +## Building and Flashing + +To run the example, type the following command: + +```CMake +idf.py -p PORT flash monitor +``` + +(To exit the serial monitor, type ``Ctrl-]``.) + +See the Getting Started Guide for full steps to configure and use ESP-IDF to build projects. + +## Configuration + +For details about available configuration option, please refer to the top level [README.md](../../README.md). +Compile definitions can be specified in the command line when running `idf.py`, for example: + +```bash +idf.py build -DMD5_ENABLED=1 +``` + +Binaries to be flashed are placed in a separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. + +## Example Output + +Here is the example's console output: + +```text +... +I (541) main_task: Calling app_main() +I (541) usb_flasher: Installing USB Host +I (571) usb_flasher: Installing the USB CDC-ACM driver +I (571) usb_flasher: Opening CDC ACM device 0x303A:0x1001... +Connected to target +I (1121) usb_flasher: Loading bootloader... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +I (1681) usb_flasher: Loading partition table... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +I (1771) usb_flasher: Loading app... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +I (5011) usb_flasher: Done! +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/CMakeLists.txt new file mode 100644 index 0000000000..1a36a142c3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/CMakeLists.txt @@ -0,0 +1,16 @@ +set(srcs main.c ../../common/example_common.c) +set(include_dirs . ../../common) + +idf_component_register(SRCS ${srcs} + INCLUDE_DIRS ${include_dirs} + PRIV_REQUIRES esp-serial-flasher usb + ) +set(target ${COMPONENT_LIB}) + +# Embed binaries into the app. +# In ESP-IDF this can also be done using EMBED_FILES option of idf_component_register. +# Here an external tool is used to make file embedding similar with other ports. +include(${CMAKE_CURRENT_LIST_DIR}/../../common/bin2array.cmake) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../../binaries/Hello-world ${CMAKE_BINARY_DIR}/binaries.c) +set_property(SOURCE ${CMAKE_BINARY_DIR}/binaries.c PROPERTY GENERATED 1) +target_sources(${target} PRIVATE ${CMAKE_BINARY_DIR}/binaries.c) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/idf_component.yml b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/idf_component.yml new file mode 100644 index 0000000000..294f0e00d6 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/idf_component.yml @@ -0,0 +1,4 @@ +## IDF Component Manager Manifest File +dependencies: + usb_host_cdc_acm: "^2" + idf: ">=4.4" diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/main.c b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/main.c new file mode 100644 index 0000000000..1eee121b73 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/main/main.c @@ -0,0 +1,117 @@ +/* Flashing multiple partitions over USB CDC ACM interface + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include "esp_log.h" +#include "esp_err.h" +#include "esp_loader.h" +#include "esp32_usb_cdc_acm_port.h" +#include "example_common.h" + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" + +#include "usb/usb_host.h" +#include "usb/cdc_acm_host.h" + +#define ESPRESSIF_VID 0x303a +#define ESP_SERIAL_JTAG_PID 0x1001 + +static const char *TAG = "usb_flasher"; +static SemaphoreHandle_t device_disconnected_sem; + +/** + * @brief USB Host library handling task + * + * @param arg Unused + */ +static void usb_lib_task(void *arg) +{ + while (1) { + /* Start handling system events */ + uint32_t event_flags; + usb_host_lib_handle_events(portMAX_DELAY, &event_flags); + if (event_flags & USB_HOST_LIB_EVENT_FLAGS_NO_CLIENTS) { + ESP_ERROR_CHECK(usb_host_device_free_all()); + } + if (event_flags & USB_HOST_LIB_EVENT_FLAGS_ALL_FREE) { + ESP_LOGI(TAG, "USB: All devices freed"); + /* Continue handling USB events to allow device reconnection */ + } + } +} + +static void device_disconnected_callback(void) +{ + xSemaphoreGive(device_disconnected_sem); +} + +/** + * @brief Main application + * + * Here we open a connection with any ESP32-S3 device connected and try flashing it + */ +void app_main(void) +{ + /* Install USB Host driver. Should only be called once in entire application */ + ESP_LOGI(TAG, "Installing USB Host"); + const usb_host_config_t host_config = { + .skip_phy_setup = false, + .intr_flags = ESP_INTR_FLAG_LEVEL1, + }; + ESP_ERROR_CHECK(usb_host_install(&host_config)); + + /* Create a task that will handle USB library events */ + BaseType_t task_created = xTaskCreate(usb_lib_task, + "usb_lib", + 4096, + xTaskGetCurrentTaskHandle(), + 20, + NULL); + assert(task_created == pdTRUE); + + ESP_LOGI(TAG, "Installing the USB CDC-ACM driver"); + ESP_ERROR_CHECK(cdc_acm_host_install(NULL)); + + while (true) { + const loader_esp32_usb_cdc_acm_config_t config = { + .device_vid = ESPRESSIF_VID, + .device_pid = ESP_SERIAL_JTAG_PID, + .connection_timeout_ms = 1000, + .out_buffer_size = 4096, + .device_disconnected_callback = device_disconnected_callback, + }; + + ESP_LOGI(TAG, "Opening CDC ACM device 0x%04X:0x%04X...", config.device_vid, config.device_pid); + if (loader_port_esp32_usb_cdc_acm_init(&config) != ESP_LOADER_SUCCESS) { + continue; + } + + device_disconnected_sem = xSemaphoreCreateBinary(); + assert(device_disconnected_sem); + + /* The ESP32-S3 ignores the line coding set commands, + so we don't set the higher baudrate argument */ + if (connect_to_target(0) == ESP_LOADER_SUCCESS) { + example_binaries_t bin; + get_example_binaries(esp_loader_get_target(), &bin); + + ESP_LOGI(TAG, "Loading bootloader..."); + flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + ESP_LOGI(TAG, "Loading partition table..."); + flash_binary(bin.part.data, bin.part.size, bin.part.addr); + ESP_LOGI(TAG, "Loading app..."); + flash_binary(bin.app.data, bin.app.size, bin.app.addr); + ESP_LOGI(TAG, "Done!"); + } + + /* Wait for device disconnection and start over */ + xSemaphoreTake(device_disconnected_sem, portMAX_DELAY); + } +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/partitions.csv b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/partitions.csv new file mode 100644 index 0000000000..60779941c3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/partitions.csv @@ -0,0 +1,4 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, , 0x6000, +phy_init, data, phy, , 0x1000, +factory, app, factory, , 1920K, diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/pytest_esp32_usb_cdc_acm_example.py b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/pytest_esp32_usb_cdc_acm_example.py new file mode 100644 index 0000000000..d3a76976ce --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/pytest_esp32_usb_cdc_acm_example.py @@ -0,0 +1,29 @@ +import pytest +from pytest_embedded import Dut + + +@pytest.mark.esp32s3 +def test_esp32_usb_cdc_acm_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + + # Check bootloader programming + dut.expect("Loading bootloader") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check partition table programming + dut.expect("Loading partition table") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check app programming + dut.expect("Loading app") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/sdkconfig.defaults b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/sdkconfig.defaults new file mode 100644 index 0000000000..dee259b721 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/esp32_usb_cdc_acm_example/sdkconfig.defaults @@ -0,0 +1,3 @@ +CONFIG_IDF_TARGET="esp32s3" +CONFIG_SERIAL_FLASHER_INTERFACE_USB=y +CONFIG_PARTITION_TABLE_CUSTOM=y diff --git a/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/CMakeLists.txt new file mode 100644 index 0000000000..5549719732 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.13) + +include(pico_sdk_import.cmake) +project(pi_pico_example C CXX ASM) + +set(CMAKE_C_STANDARD 11) + +pico_sdk_init() + +include(${CMAKE_CURRENT_LIST_DIR}/../common/bin2array.cmake) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../binaries/Hello-world binaries.c) + +add_executable(${PROJECT_NAME} + ../common/example_common.c + binaries.c + main.c +) + +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ../common) + +pico_enable_stdio_uart(${PROJECT_NAME} 1) +pico_enable_stdio_usb(${PROJECT_NAME} 1) + +pico_add_extra_outputs(${PROJECT_NAME}) + +set(PORT PI_PICO) +set(FLASHER_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) +add_subdirectory(${FLASHER_DIR} ${CMAKE_BINARY_DIR}/flasher) + +target_link_libraries(${PROJECT_NAME} PRIVATE flasher) +target_link_libraries(${PROJECT_NAME} PRIVATE pico_stdlib) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/README.md new file mode 100644 index 0000000000..3b0b46fade --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/README.md @@ -0,0 +1,95 @@ +# Raspberry Pi Pico Example + +## Overview + +This example demonstrates how to flash an Espressif SoC (target) from a Raspberry Pi Pico Series MCU (host) using `esp_serial_flasher`. +`uart1` is dedicated for communication with the Espressif SoC, whereas, either `uart0` or USB can be used for debug output. + +The following steps are performed in order to re-program the targets memory: + +1. Peripherals are initialized. +2. Host puts the slave device into boot mode and tries to connect by calling `esp_loader_connect()`. +3. Then `esp_loader_flash_start()` is called to enter the flashing mode and erase the amount of memory to be flashed. +4. The `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transferred. + +In addition to the steps mentioned above, `esp_loader_change_transmission_rate()` is called after connection is established in order to increase the flashing speed. +The bootloader is also capable of detecting the baud rate during connection phase, however, it is recommended to start at lower speed and then use dedicated command to increase the baud rate. +This does not apply for the ESP8266, as its bootloader does not support this command, therefore, baud rate can only be changed before the connection phase in this case. + +## Hardware Required + +* A Raspberry Pi Pico Board with 2MB of flash or more. +* A development board with an Espressif SoC (e.g. ESP-WROVER-KIT, ESP32-DevKitC, etc.). +* Jumper cables to connect the boards. +* One or two USB cables for power supply and programming. + +## Hardware Connection + +The table below shows the connection between the Raspberry Pi Pico board and the ESP32. + +| Pi Pico (host) | ESP32 (slave) | +|:--------------:|:-------------:| +| 18 | IO0 | +| 19 | RST | +| 20 | RX0 | +| 21 | TX0 | + +## Build and Flash + +First, either export the SDK location in your shell: + +```bash +export PICO_SDK_PATH= +``` + +or set the `PICO_SDK_FETCH_FROM_GIT` CMake variable for the SDK to be pulled from GitHub. + +Create and navigate to the example `build` directory: + +```bash +mkdir build && cd build +``` + +Run CMake (with appropriate parameters) and build: + +```bash +cmake .. && cmake --build . +``` + +> [!NOTE] +> CMake 3.13 or later is required. + +Binaries to be flashed are placed in the `binaries.c` file for each possible target and converted to C arrays. Flash integrity verification is enabled by default. + +For more details regarding `esp_serial_flasher` configuration and Raspberry Pi Pico support, please refer to the top level [README.md](../../README.md). + +Finally, flash the board by connecting your Raspberry Pi Pico board to your PC, with the `BOOTSEL` button pressed and copy over the `.uf2` file from the example `build` directory to the Mass Storage Device the Pico presents itself as. + +To see the debug output, connect to the boards virtual com port with a serial monitor (e.g. using minicom): + +```bash +minicom -b 115200 -o -D /dev/ttyACM0 +``` + +Here is the example's console output: + +```text +Connected to target +Transmission rate changed changed +Loading bootloader... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Loading partition table... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Loading app... +Erasing flash (this may take a while)... +Start programming +Progress: 100 % +Finished programming +Done! +``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/main.c b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/main.c new file mode 100644 index 0000000000..cd27de03d3 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/main.c @@ -0,0 +1,83 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "pico/stdlib.h" +#include "hardware/uart.h" +#include "pi_pico_port.h" +#include "esp_loader.h" +#include "example_common.h" + +#define HIGHER_BAUDRATE 230400 + +int main(void) +{ + example_binaries_t bin; + + const loader_pi_pico_config_t config = { + .uart_inst = uart1, + .baudrate = 115200, + .uart_rx_pin_num = 21, + .uart_tx_pin_num = 20, + .reset_trigger_pin_num = 19, + .boot_pin_num = 18, + }; + + stdio_init_all(); + + loader_port_pi_pico_init(&config); + + // delay for the test to have time to connect to the device + sleep_ms(500); + + if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) { + + get_example_binaries(esp_loader_get_target(), &bin); + + printf("Loading bootloader..."); + flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + printf("Loading partition table..."); + flash_binary(bin.part.data, bin.part.size, bin.part.addr); + printf("Loading app..."); + flash_binary(bin.app.data, bin.app.size, bin.app.addr); + printf("Done!"); + + esp_loader_reset_target(); + loader_port_pi_pico_deinit(); + + // Delay for skipping the boot message of the targets + sleep_ms(500); + uart_init(uart1, 115200); + gpio_set_function(20, GPIO_FUNC_UART); + gpio_set_function(21, GPIO_FUNC_UART); + + printf("********************************************\n"); + printf("*** Logs below are print from slave .... ***\n"); + printf("********************************************\n"); + char ch; + while (true) { + if (uart_is_readable(uart1)) { + ch = uart_getc(uart1); + printf("%c", ch); + } else { + tight_loop_contents(); + } + } + } + + while (true) { + tight_loop_contents(); + } +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pico_sdk_import.cmake b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pico_sdk_import.cmake new file mode 100644 index 0000000000..65f8a6f7db --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pico_sdk_import.cmake @@ -0,0 +1,73 @@ +# This is a copy of /external/pico_sdk_import.cmake + +# This can be dropped into an external project to help locate this SDK +# It should be include()ed prior to project() + +if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH)) + set(PICO_SDK_PATH $ENV{PICO_SDK_PATH}) + message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT)) + set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT}) + message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')") +endif () + +if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH)) + set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH}) + message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')") +endif () + +set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK") +set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable") +set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK") + +if (NOT PICO_SDK_PATH) + if (PICO_SDK_FETCH_FROM_GIT) + include(FetchContent) + set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR}) + if (PICO_SDK_FETCH_FROM_GIT_PATH) + get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}") + endif () + # GIT_SUBMODULES_RECURSE was added in 3.17 + if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0") + FetchContent_Declare( + pico_sdk + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG master + GIT_SUBMODULES_RECURSE FALSE + ) + else () + FetchContent_Declare( + pico_sdk + GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk + GIT_TAG master + ) + endif () + + if (NOT pico_sdk) + message("Downloading Raspberry Pi Pico SDK") + FetchContent_Populate(pico_sdk) + set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR}) + endif () + set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE}) + else () + message(FATAL_ERROR + "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git." + ) + endif () +endif () + +get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}") +if (NOT EXISTS ${PICO_SDK_PATH}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found") +endif () + +set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake) +if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE}) + message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK") +endif () + +set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE) + +include(${PICO_SDK_INIT_CMAKE_FILE}) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pytest_pi_pico_example.py b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pytest_pi_pico_example.py new file mode 100644 index 0000000000..ef609b052d --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/pi_pico_example/pytest_pi_pico_example.py @@ -0,0 +1,57 @@ +import pytest +from pytest_embedded import Dut +import serial +import time +import os + + +@pytest.fixture(autouse=True) +def flash_pico(build_dir: str, port: str) -> None: + try: + with serial.Serial(port, baudrate=1200): + pass + except serial.SerialException: + print(f"Could not open {port}, Raspberry Pi Pico already in bootloader mode") + + while not os.path.exists("/dev/sda1"): + time.sleep(0.1) + file_info = os.stat(f"examples/pi_pico_example/{build_dir}/pi_pico_example.uf2") + size = file_info.st_size + # Writing using dd, because mounting did not work in the docker, nor in base system + os.system( + f"dd if=examples/pi_pico_example/{build_dir}/pi_pico_example.uf2 of=/dev/sda1 bs={size}" + ) + + while not os.path.exists(port): + time.sleep(0.01) + + +@pytest.mark.pi_pico +def test_pi_pico_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + dut.expect("Transmission rate changed") + + # Check bootloader programming + dut.expect("Loading bootloader") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check partition table programming + dut.expect("Loading partition table") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check app programming + dut.expect("Loading app") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/CMakeLists.txt index 0777ee4c2f..50c580d6bb 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/CMakeLists.txt @@ -4,14 +4,22 @@ set(FLASHER_DIR ${CMAKE_CURRENT_LIST_DIR}/../..) set(PORT RASPBERRY_PI) project(raspberry_flasher) - -add_executable(${CMAKE_PROJECT_NAME} Src/main.c ../common/example_common.c) -target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ../common/) +add_compile_definitions(SERIAL_FLASHER_INTERFACE_UART) + +include(${CMAKE_CURRENT_LIST_DIR}/../common/bin2array.cmake) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../binaries/Hello-world Src/binaries_flash.c) +create_resources(${CMAKE_CURRENT_LIST_DIR}/../binaries/RAM_APP Src/binaries_ram.c) + +add_executable(${CMAKE_PROJECT_NAME} ../common/example_common.c Src/main.c Src/binaries_flash.c Src/binaries_ram.c) +target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ../common) add_subdirectory(${FLASHER_DIR} ${CMAKE_BINARY_DIR}/flasher) -target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE flasher) +target_compile_options(flasher +PRIVATE + -Wunused-parameter + -Wshadow +) -# This example only supports one target (ESP32) and uses specific binary to be flashed. -target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE -DSINGLE_TARGET_SUPPORT=1) \ No newline at end of file +target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE flasher) diff --git a/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/README.md index 9c06a383e4..0c3655d825 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/README.md +++ b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/README.md @@ -1,30 +1,30 @@ -# Raspberry Pi example +# Raspberry Pi Example ## Overview -Example demonstrates how to flash ESP32 from Raspberry Pi 4 (Model B) using esp_serial_flash component API. AT command firmware to be flashed from Raspberry Pi to ESP32 can be found in `binaries`. USART0 is dedicated for communication with ESP32. +This example demonstrates how to flash an Espressif SoC (target) from a Raspberry Pi 4 (Model B) using `esp_serial_flasher`. AT command firmware to be flashed from a Raspberry Pi to ESP32 can be found in [binaries](../binaries/). USART0 is dedicated for the communication with the Espressif SoC. -Following steps are performed in order to re-program target's memory: +The following steps are performed in order to re-program targets memory: 1. Peripherals are initialized. -2. Host puts slave device into boot mode tries to connect by calling `esp_loader_connect()`. -3. Then `esp_loader_flash_start()` is called to enter flashing mode and erase amount of memory to be flashed. +2. The host puts slave device into the boot mode and tries to connect by calling `esp_loader_connect()`. +3. Then `esp_loader_flash_start()` is called to enter the flashing mode and erase amount of the memory to be flashed. 4. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transfered. -5. At the end, `loader_port_reset_target()` is called to restart ESP32 and execute updated firmware. +5. At the end, `loader_port_reset_target()` is called to restart the target and execute the updated firmware. -Note: In addition, to steps mentioned above, `esp_loader_change_transmission_rate` is called after connection is established in order to increase flashing speed. Bootloader is also capable of detecting baud rate during connection phase, and can be changed before calling `esp_loader_connect`. However, it is recommended to start at lower speed and then use dedicated command to increase baud rate. This does not apply for ESP8266, as its bootloader does not support this command, therefore, baud rate can only be changed before connection phase in this case. +**Note:** In addition to the steps mentioned above, `esp_loader_change_transmission_rate()` is called after connection is established in order to increase the flashing speed. Bootloader is also capable of detecting baud rate during connection phase and can be changed before calling `esp_loader_connect()`. However, it is recommended to start at lower speed and then use dedicated command to increase baud rate. This does not apply for ESP8266, as its bootloader does not support this command, therefore, baud rate can only be changed before connection phase in this case. ## Hardware Required -* Raspberry Pi 4 Model B. -* A development board with ESP32 SoC (e.g. ESP-WROVER-KIT, ESP32-DevKitC, etc.). +* Raspberry Pi 4 Model B. +* A development board with the ESP32 SoC (e.g. ESP-WROVER-KIT, ESP32-DevKitC, etc.). * USB cable in case ESP32 board is powered from USB. ESP32 can be powered by Raspberry Pi as well. -## Hardware connection +## Hardware Connection Table below shows connection between Raspberry Pi and ESP32. -| Raspberry Pi (host) | ESP32 (slave) | +| Raspberry Pi (host) | ESP32 (target) | |:-------------------:|:-------------------:| | GPIO3 | IO0 | | GPIO2 | RST | @@ -36,22 +36,27 @@ Optionally, UART-to-USB bridge can be connected to PD5(RX) and PD6(TX) for debug ## Installation -### GPIO library +### GPIO Library + Raspberry Pi makes use of [pigpio](http://abyz.me.uk/rpi/pigpio/) library in order to simplify controlling GPIO pins. Some distributions of 'Raspberry Pi OS' may come with `pigpio` already installed. Presence of the library in the system can checked by running command: -``` + +```bash pigpiod -v ``` -If not present, run following commands to install the library. -``` +If not present, run following commands to install the library. + +```bash sudo apt-get update sudo apt-get install pigpio ``` ### Enable UART + On Raspberry Pi 4, primary UART (UART0) is connected to the On-board Bluetooth module by default. In order to enable serial communication on this UART, run following command in terminal: -``` + +```bash sudo raspi-config ``` @@ -60,16 +65,19 @@ sudo raspi-config * After that, it will ask for enabling Hardware Serial port, select **Yes**. * Reboot the Raspberry Pi. -## Build and run +## Build and Run To compile the example: Create and navigate to `build` directory: -``` + +```bash mkdir build && cd build ``` -Run cmake, build example and run example: -``` + +Run cmake, build example and run example: + +```bash cmake .. && cmake --build . && ./raspberry_flasher ``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/Src/main.c b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/Src/main.c index bdd4424f64..849fdda246 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/Src/main.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/Src/main.c @@ -1,81 +1,81 @@ -/* Flash multiple partitions example - - This example code is in the Public Domain (or CC0 licensed, at your option.) - - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ - -#include -#include -#include -#include -#include -#include "esp_loader.h" -#include "example_common.h" -#include "raspberry_port.h" - -#define TARGET_RST_Pin 2 -#define TARGET_IO0_Pin 3 - -#define DEFAULT_BAUD_RATE 115200 -#define HIGHER_BAUD_RATE 460800 -#define SERIAL_DEVICE "/dev/ttyS0" - -#define BINARY_PATH "../../binaries/ESP32_AT_Firmware/Firmware.bin" - - -static void upload_file(const char *path, size_t address) -{ - char *buffer = NULL; - - FILE *image = fopen(path, "r"); - if (image == NULL) { - printf("Error:Failed to open file %s\n", path); - return; - } - - fseek(image, 0L, SEEK_END); - size_t size = ftell(image); - rewind(image); - - printf("File %s opened. Size: %u bytes\n", path, size); - - buffer = (char *)malloc(size); - if (buffer == NULL) { - printf("Error: Failed allocate memory\n"); - goto cleanup; - } - - // copy file content to buffer - size_t bytes_read = fread(buffer, 1, size, image); - if (bytes_read != size) { - printf("Error occurred while reading file"); - goto cleanup; - } - - flash_binary(buffer, size, address); - -cleanup: - fclose(image); - free(buffer); -} - -int main(void) -{ - const loader_raspberry_config_t config = { - .device = SERIAL_DEVICE, - .baudrate = DEFAULT_BAUD_RATE, - .reset_trigger_pin = TARGET_RST_Pin, - .gpio0_trigger_pin = TARGET_IO0_Pin, - }; - - loader_port_raspberry_init(&config); - - if (connect_to_target(HIGHER_BAUD_RATE) == ESP_LOADER_SUCCESS) { - upload_file(BINARY_PATH, 0); - } - - loader_port_reset_target(); -} \ No newline at end of file +/* Flash multiple partitions example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ + +#include +#include +#include +#include +#include +#include +#include "raspberry_port.h" +#include "esp_loader.h" +#include "example_common.h" + +#define TARGET_RST_Pin 2 +#define TARGET_IO0_Pin 3 + +#define DEFAULT_BAUD_RATE 115200 +#define HIGHER_BAUD_RATE 460800 +#define SERIAL_DEVICE "/dev/ttyS0" + + + +int main(void) +{ + example_binaries_t bin; + + const loader_raspberry_config_t config = { + .device = SERIAL_DEVICE, + .baudrate = DEFAULT_BAUD_RATE, + .reset_trigger_pin = TARGET_RST_Pin, + .gpio0_trigger_pin = TARGET_IO0_Pin, + }; + + loader_port_raspberry_init(&config); + + if (connect_to_target(HIGHER_BAUD_RATE) == ESP_LOADER_SUCCESS) { + + get_example_binaries(esp_loader_get_target(), &bin); + + printf("Loading bootloader...\n"); + flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + printf("Loading partition table...\n"); + flash_binary(bin.part.data, bin.part.size, bin.part.addr); + printf("Loading app...\n"); + flash_binary(bin.app.data, bin.app.size, bin.app.addr); + printf("Done!\n"); + esp_loader_reset_target(); + loader_port_deinit(); + + + if (gpioInitialise() < 0) { + fprintf(stderr, "pigpio initialization failed\n"); + return 1; + } + + int serial = serOpen(SERIAL_DEVICE, DEFAULT_BAUD_RATE, 0); + if (serial < 0) { + printf("Serial port could not be opened!\n"); + } + + printf("********************************************\n"); + printf("*** Logs below are print from slave .... ***\n"); + printf("********************************************\n"); + + // Delay for skipping the boot message of the targets + gpioDelay(500000); + while (1) { + int byte = serReadByte(serial); + if (byte != PI_SER_READ_NO_DATA) { + printf("%c", byte); + } + } + } + +} diff --git a/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/pytest_raspberry_example.py b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/pytest_raspberry_example.py new file mode 100644 index 0000000000..481e6d08bf --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/raspberry_example/pytest_raspberry_example.py @@ -0,0 +1,38 @@ +import pytest +import pexpect + + +@pytest.mark.raspberry +def test_raspberry_example(): + with pexpect.spawn( + "./examples/raspberry_example/build/raspberry_flasher", + timeout=10, + encoding="utf-8", + ) as p: + # Check initial connection + p.expect("Connected to target") + p.expect("Transmission rate changed") + + # Check bootloader programming + p.expect("Loading bootloader") + p.expect("Erasing flash") + p.expect("Start programming") + p.expect("Finished programming") + p.expect("Flash verified") + + # Check partition table programming + p.expect("Loading partition table") + p.expect("Erasing flash") + p.expect("Start programming") + p.expect("Finished programming") + p.expect("Flash verified") + + # Check app programming + p.expect("Loading app") + p.expect("Erasing flash") + p.expect("Start programming") + p.expect("Finished programming") + p.expect("Flash verified") + + # Check target output + p.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/CMakeLists.txt index 4328b49bce..328f429017 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/CMakeLists.txt @@ -29,6 +29,12 @@ set(STM32_CHIP STM32H743VI) set(CORE_USED M7) add_subdirectory(${FLASHER_DIR} ${CMAKE_BINARY_DIR}/flasher) +target_compile_options(flasher +PRIVATE + -Wunused-parameter + -Wshadow +) + target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE HAL::STM32::H7::M7::PWREx diff --git a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/libc_compat.c b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/libc_compat.c index 2cb06194fd..8d36a37d6a 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/libc_compat.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/libc_compat.c @@ -38,7 +38,7 @@ #endif extern uint32_t __get_MSP(void); -extern UART_HandleTypeDef huart2; +extern UART_HandleTypeDef huart1; extern uint64_t virtualTimer; #undef errno @@ -148,7 +148,7 @@ int _read(int file, char *ptr, int len) switch (file) { case STDIN_FILENO: - HAL_UART_Receive(&huart2, (uint8_t *)ptr, 1, HAL_MAX_DELAY); + HAL_UART_Receive(&huart1, (uint8_t *)ptr, 1, HAL_MAX_DELAY); return 1; default: errno = EBADF; @@ -184,10 +184,10 @@ int _write(int file, char *ptr, int len) switch (file) { case STDOUT_FILENO: /*stdout*/ - HAL_UART_Transmit(&huart2, (uint8_t*)ptr, len, HAL_MAX_DELAY); + HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, HAL_MAX_DELAY); break; case STDERR_FILENO: /* stderr */ - HAL_UART_Transmit(&huart2, (uint8_t*)ptr, len, HAL_MAX_DELAY); + HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, HAL_MAX_DELAY); break; default: errno = EBADF; diff --git a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/main.c b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/main.c index 470fcebe2f..097c7c8a65 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/main.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/main.c @@ -38,6 +38,7 @@ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ #define HIGHER_BAUDRATE 230400 +#define BUF_LEN 128 /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ @@ -76,6 +77,7 @@ int main(void) { /* USER CODE BEGIN 1 */ example_binaries_t bin; + static uint8_t buf[BUF_LEN] = {0}; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ @@ -101,7 +103,7 @@ int main(void) /* USER CODE BEGIN 2 */ loader_stm32_config_t config = { - .huart = &huart1, + .huart = &huart2, .port_io0 = TARGET_IO0_GPIO_Port, .pin_num_io0 = TARGET_IO0_Pin, .port_rst = TARGET_RESET_GPIO_Port, @@ -114,9 +116,35 @@ int main(void) get_example_binaries(esp_loader_get_target(), &bin); + printf("Loading bootloader...\n"); flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + printf("Loading partition table...\n"); flash_binary(bin.part.data, bin.part.size, bin.part.addr); + printf("Loading app...\n"); flash_binary(bin.app.data, bin.app.size, bin.app.addr); + esp_loader_reset_target(); + +#if (HIGHER_BAUDRATE != 115200) + HAL_UART_DeInit(&huart2); + huart2.Init.BaudRate = 115200; + if (HAL_UART_Init(&huart2) != HAL_OK) { + Error_Handler(); + } +#endif + + // Delay for skipping the boot message of the targets + HAL_Delay(500); + + printf("********************************************\n"); + printf("*** Logs below are print from slave .... ***\n"); + printf("********************************************\n"); + while (1) + { + HAL_UART_Receive(&huart2, (uint8_t *)buf, BUF_LEN - 1, 100); + printf("%s", buf); + memset(buf, 0, BUF_LEN); + } + } /* USER CODE END 2 */ @@ -124,6 +152,7 @@ int main(void) /* USER CODE BEGIN WHILE */ while (1) { + /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ diff --git a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/stm32h7xx_hal_msp.c b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/stm32h7xx_hal_msp.c index b8346e4448..8392930521 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/stm32h7xx_hal_msp.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/Core/Src/stm32h7xx_hal_msp.c @@ -104,17 +104,17 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart) /* Peripheral clock enable */ __HAL_RCC_USART1_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); /**USART1 GPIO Configuration - PB14 ------> USART1_TX - PB15 ------> USART1_RX + PA9 ------> USART1_TX + PA10 ------> USART1_RX */ - GPIO_InitStruct.Pin = GPIO_PIN_14|GPIO_PIN_15; + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF4_USART1; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN USART1_MspInit 1 */ @@ -177,7 +177,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) PB14 ------> USART1_TX PB15 ------> USART1_RX */ - HAL_GPIO_DeInit(GPIOB, GPIO_PIN_14|GPIO_PIN_15); + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_9|GPIO_PIN_10); /* USER CODE BEGIN USART1_MspDeInit 1 */ diff --git a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/README.md index 02811da289..dc0a591a26 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/README.md +++ b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/README.md @@ -1,25 +1,25 @@ -# STM32 example +# STM32 Example ## Overview -Example demonstrates how to flash ESP32 from another STM32 (host MCU) using esp_serial_flash component API. WeActStudio [MiniSTM32H7xx](https://github.com/WeActStudio/MiniSTM32H7xx) board is used in this example, as STM32H743VIT has FLASH memory large enough to fit all the example binaries to be flashed from host MCU to ESP32 which can be found in `binaries` directory and converted into C-arrays during build process. USART1 is dedicated for communication with ESP32, whereas, USART2 can be used for debug purposes by attaching UART-to-USB bridge. +This example demonstrates how to flash an Espressif SoC (target) from STM32 MCU (host) using `esp_serial_flasher`. WeActStudio [MiniSTM32H7xx](https://github.com/WeActStudio/MiniSTM32H7xx) board is used in this example, as STM32H743VIT has FLASH memory large enough to fit all the example binaries to be flashed from the host MCU to the Espressif SoC which can be found in [binaries](../binaries/) directory and converted into C-arrays during build process. USART1 is dedicated for communication with the Espressif SoC, whereas, USART2 can be used for debug purposes by attaching UART-to-USB bridge. -Following steps are performed in order to re-program target's memory: +The following steps are performed in order to re-program targets memory: 1. Peripherals are initialized. 2. Host puts slave device into boot mode tries to connect by calling `esp_loader_connect()`. 3. Then `esp_loader_flash_start()` is called to enter flashing mode and erase amount of memory to be flashed. 4. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transfered. -Note: In addition, to steps mentioned above, `esp_loader_change_transmission_rate` is called after connection is established in order to increase flashing speed. Bootloader is also capable of detecting baud rate during connection phase, and can be changed before calling `esp_loader_connect`. However, it is recommended to start at lower speed and then use dedicated command to increase baud rate. This does not apply for ESP8266, as its bootloader does not support this command, therefore, baud rate can only be changed before connection phase in this case. +**Note:** In addition to the steps mentioned above, `esp_loader_change_transmission_rate()` is called after connection is established in order to increase the flashing speed. Bootloader is also capable of detecting the baud rate during connection phase. The baud rate can be changed before calling `esp_loader_connect()`. However, it is recommended to start at lower speed and then use dedicated command to increase the baud rate. This does not apply for ESP8266, as its bootloader does not support this command, therefore, baud rate can only be changed before connection phase in this case. ## Hardware Required -* WeActStudio [MiniSTM32H7xx](https://github.com/WeActStudio/MiniSTM32H7xx) board with the STM32H743VIT chip -* A development board with ESP32 SoC (e.g. ESP-WROVER-KIT, ESP32-DevKitC, etc.). +* WeActStudio [MiniSTM32H7xx](https://github.com/WeActStudio/MiniSTM32H7xx) board with the STM32H743VIT chip. +* A development board with the ESP32 SoC (e.g. ESP-WROVER-KIT, ESP32-DevKitC, etc.). * One or two USB cables for power supply and programming. -## Hardware connection +## Hardware Connection Table below shows connection between STM32 and ESP32. @@ -27,26 +27,30 @@ Table below shows connection between STM32 and ESP32. |:------------:|:-------------:| | PB12 | IO0 | | PB13 | RST | -| PB14 | RX0 | -| PB15 | TX0 | +| PA2 | RX0 | +| PA3 | TX0 | -Optionally, UART-to-USB bridge can be connected to PA3(RX) and PA2(TX) for debug purposes. +Optionally, UART-to-USB bridge can be connected to PA9(TX) and PA10 (RX) for the debug purposes (same pins can be used to flash STM32 in bootloader). -## Build and flash +## Build and Flash To compile the example: Create and navigate to `build` directory: -``` + +```bash mkdir build && cd build ``` -Run cmake (with appropriate parameters) and build: -``` + +Run CMake (with appropriate parameters) and build: + +```bash cmake -DSTM32_TOOLCHAIN_PATH="path_to_toolchain" -DSTM32_CUBE_H7_PATH="path_to_cube_libraries" .. && cmake --build . ``` -Binaries to be flashed are placed in separate folder (binaries.c) for each possible target and converted to C-array. Flash integrity verification is enabled by default. +Binaries to be flashed are placed in the separate folder (binaries.c) for each possible target and converted to C-array. Flash integrity verification is enabled by default. -For more details regarding to esp_serial_flasher configuration and STM32 support, please refer to top level [README.md](../../README.md). +For more details regarding to esp_serial_flasher configuration and STM32 support, please refer to the top level [README.md](../../README.md). -> Note: CMake 3.16 or later is required. +> [!NOTE] +> CMake 3.16 or later is required. diff --git a/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/pytest_stm32_example.py b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/pytest_stm32_example.py new file mode 100644 index 0000000000..0cffc3ab56 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/stm32_example/pytest_stm32_example.py @@ -0,0 +1,52 @@ +import pytest +from pytest_embedded import Dut +import subprocess +import serial + + +@pytest.fixture(autouse=True) +def flash_stm32(build_dir: str, port: str) -> None: + # Flush input buffer, because there is some data left from previous bootloader communication (cannot enter bootloader mode otherwise) + with serial.Serial(port, 115200) as ser: + ser.reset_input_buffer() + + subprocess.run( + [f"stm32loader --port {port} --erase --write stm32_flasher.bin"], + cwd=f"./examples/stm32_example/{build_dir}/", + shell=True, + check=True, + ) + + +@pytest.mark.stm32 +def test_stm32_example(dut: Dut) -> None: + # Set DTR to false to unset the reset pin of the STM32 + dut.serial.proc.setDTR(False) + + # Check initial connection + dut.expect("Connected to target") + dut.expect("Transmission rate changed") + + # Check bootloader programming + dut.expect("Loading bootloader") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check partition table programming + dut.expect("Loading partition table") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check app programming + dut.expect("Loading app") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/README.md b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/README.md index b91108d712..f16ad6483d 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/README.md +++ b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/README.md @@ -1,86 +1,105 @@ -# ESP32 Zephyr example +# ESP32 Zephyr Example ## Overview -This sample code demonstrates how to flash an Espressif SoC from another (host) MCU using -esp_serial_flash component API. In this case, the ESP32 is used as host MCU. -Binaries to be flashed from host MCU to another Espressif SoC can be found in `binaries` folder +This sample code demonstrates how to flash an Espressif SoC (target) from another MCU (host) using +`esp_serial_flasher`. In this case, the ESP32 is used as the host MCU. +Binaries to be flashed from the host MCU to another Espressif SoC can be found in [binaries](../binaries/) folder and are converted into C-array during build process. -Following steps are performed in order to re-program target's memory: +## How the Example Works -1. Peripherals are initialized (GPIO for BOOT and EN pins and UART). -2. UART1 (can be changed) through which new binary will be transfered is initialized. -3. Host puts target device into boot mode tries to connect by calling `esp_loader_connect()`. -4. Binary file is opened and its size is acquired, as it has to be known before flashing. -5. Then `esp_loader_flash_start()` is called to enter flashing mode and erase amount of memory to be flashed. -6. `esp_loader_flash_write()` function is called repeatedly until the whole binary image is transfered. +The example performs the following steps to flash the target device: -Note: In addition, to steps mentioned above, `esp_loader_change_transmission_rate` is called after connection -is established in order to increase flashing speed. This does not apply for ESP8266, as its bootloader -does not support this command. However, ESP8266 is capable of detecting baud rate during connection -phase, and can be changed before calling `esp_loader_connect`, if necessary. +1. Initialization: Sets up the required peripherals (GPIO for BOOT and EN pins, and UART) +2. Target Reset: Puts the target into bootloader mode using the BOOT and EN pins +3. Connection: Establishes communication with the target bootloader using esp_loader_connect() +4. Baud Rate Change: Increases the transmission speed for faster flashing (except for ESP8266) +5. Flashing Process: + - Calls esp_loader_flash_start() to begin flashing and erase the required memory + - Repeatedly calls esp_loader_flash_write() to transfer the binary + - Verifies the flash integrity if MD5 checking is enabled + +**Note:** In addition, to steps mentioned above, `esp_loader_change_transmission_rate()` is called after connection is established in order to increase the flashing speed. This does not apply for ESP8266, as its bootloader does not support this command. However, ESP8266 is capable of detecting the baud rate during connection phase and can be changed before calling `esp_loader_connect()`, if necessary. ## Hardware Required -* Any supported Espressif SoC board for the target -* An ESP32-DevKitC board for the host -* One or two USB cables for power supply and programming. +- ESP32-DevKitC board or another compatible ESP32 development board as a host +- Any supported Espressif SoC development board as a target +- One or two USB cables for power supply and programming +- Cables to connect the host to the target according to the table below. -## Hardware connection +## Hardware Connection Table below shows connection between the two devices: | ESP32 (host) | Espressif SoC (target) | |:------------:|:----------------------:| -| IO4 | IO0 | -| IO2 | RESET | -| IO9 | TX0 | -| IO10 | RX0 | +| IO26 | IO0 | +| IO25 | RESET | +| IO4 | RX0 | +| IO5 | TX0 | + +> [!NOTE] +> Pin assignments can be modified in the device tree overlay. + +## Prerequisites -## Build and flash +Before building the example, you need to set up the Zephyr development environment as stated in [Zephyr's Getting Started Guide](https://docs.zephyrproject.org/latest/develop/getting_started/index.html). After this step, you can proceed to building and flashing the example. + +## Build and Flash To run the example, type the following commands: -```c +```bash +# Initialize west workspace if not done already west init + +# Update Zephyr modules west update -west build -p -b + +# Build the example with esp-serial-flasher module +west build -p -b path/to/esp-serial-flasher/examples/zephyr_example -D ZEPHYR_EXTRA_MODULES=/path/to/esp-serial-flasher + west flash west espressif monitor ``` ->**Note:** You can find the supported boards in the boards folder. -(To exit the serial monitor, type ``ctrl-c``.) - -For more information, check [Zephyr's Getting Started](https://docs.zephyrproject.org/latest/develop/getting_started/index.html) +> [!NOTE] +> Instead of using the `-D ZEPHYR_EXTRA_MODULES` parameter, you can add the esp-serial-flasher module to your `west.yml` file. ## Configuration For details about available configuration option, please refer to top level [README.md](../../README.md). Compile definitions can be specified in `prj.conf` file. -Binaries to be flashed are placed in separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. +Binaries to be flashed are placed in a separate folder (binaries.c) for each possible target and converted to C-array. Without explicitly enabling MD5 check, flash integrity verification is disabled by default. -## Example output +## Example Output Here is the example's console output: -``` -*** Booting Zephyr OS build zephyr-v3.2.0-3548-ga1bb9c9d1736 *** +``` text Running ESP Flasher from Zephyr Connected to target -Baudrate changed +Transmission rate changed. Erasing flash (this may take a while)... Start programming Progress: 100 % Finished programming +Flash verified Erasing flash (this may take a while)... Start programming Progress: 100 % Finished programming +Flash verified Erasing flash (this may take a while)... Start programming Progress: 100 % Finished programming +Flash verified +******************************************** +*** Logs below are print from slave .... *** +******************************************** +Hello world! ``` diff --git a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wroom.overlay b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wroom.overlay deleted file mode 100644 index c028c9d05e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wroom.overlay +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include - -/ { - aliases { - en = &en_button; - boot = &boot_button; - uart = &uart1; - }; - - gpio_keys { - compatible = "gpio-keys"; - en_button: en_button { - gpios = <&gpio0 2 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>; - }; - boot_button: boot_button { - gpios = <&gpio0 4 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>; - }; - }; -}; - -&uart1 { - status = "okay"; - current-speed = <115200>; - pinctrl-0 = <&uart1_default>; - pinctrl-names = "default"; -}; diff --git a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wrover.overlay b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wrover.overlay deleted file mode 100644 index c028c9d05e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/boards/esp32_devkitc_wrover.overlay +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. - * - * SPDX-License-Identifier: Apache-2.0 - */ - -#include -#include -#include - -/ { - aliases { - en = &en_button; - boot = &boot_button; - uart = &uart1; - }; - - gpio_keys { - compatible = "gpio-keys"; - en_button: en_button { - gpios = <&gpio0 2 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>; - }; - boot_button: boot_button { - gpios = <&gpio0 4 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>; - }; - }; -}; - -&uart1 { - status = "okay"; - current-speed = <115200>; - pinctrl-0 = <&uart1_default>; - pinctrl-names = "default"; -}; diff --git a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/pytest_zephyr_example.py b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/pytest_zephyr_example.py new file mode 100644 index 0000000000..45b26aca38 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/pytest_zephyr_example.py @@ -0,0 +1,65 @@ +import pytest +from pytest_embedded import Dut +from esptool.cmds import detect_chip + +FLASH_ADDRESS = 0x1000 +BIN_FILE = "/zephyr/zephyr.bin" + + +# This fixture is used to specify the path to the Zephyr app as it is not in the examples directory. +# It is used by conftest.py to find the app path to build directory. +@pytest.fixture +def app_path() -> str: + return "zephyrproject-rtos/zephyr/" + + +@pytest.fixture(autouse=True) +def flash_zephyr(app_path: str, build_dir: str, port: str) -> None: + with detect_chip(port) as esp: + esp = esp.run_stub() + path = app_path + build_dir + BIN_FILE + with open(path, "rb") as binary: + binary_data = binary.read() + total_size = len(binary_data) + + esp.flash_begin(total_size, FLASH_ADDRESS) + for i in range(0, total_size, esp.FLASH_WRITE_SIZE): + block = binary_data[i : i + esp.FLASH_WRITE_SIZE] + # Pad the last block + block = block + bytes([0xFF]) * (esp.FLASH_WRITE_SIZE - len(block)) + esp.flash_block(block, i + FLASH_ADDRESS) + esp.flash_finish() + print("Flashed successfully") + + esp.hard_reset() + + +@pytest.mark.zephyr +def test_zephyr_example(dut: Dut) -> None: + # Check initial connection + dut.expect("Connected to target") + dut.expect("Transmission rate changed") + + # Check bootloader programming + dut.expect("Loading bootloader") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check partition table programming + dut.expect("Loading partition table") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check app programming + dut.expect("Loading app") + dut.expect("Erasing flash") + dut.expect("Start programming") + dut.expect("Finished programming") + dut.expect("Flash verified") + + # Check target output + dut.expect("Hello world!") diff --git a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/socs/esp32_procpu.overlay b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/socs/esp32_procpu.overlay new file mode 100644 index 0000000000..c6573c5f3b --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/socs/esp32_procpu.overlay @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2024 Espressif Systems (Shanghai) Co., Ltd. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/ { + aliases { + en = &en_button; + boot = &boot_button; + uart = &uart1; + }; + + gpio_keys { + compatible = "gpio-keys"; + en_button: en_button { + gpios = <&gpio0 25 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>; + }; + boot_button: boot_button { + gpios = <&gpio0 26 (GPIO_PULL_UP | GPIO_ACTIVE_HIGH)>; + }; + }; +}; + +&pinctrl { + uart1_example: uart1_example { + group1 { + pinmux = ; + input-enable; + }; + group2 { + pinmux = ; + output-enable; + }; + }; +}; + +&uart1 { + status = "okay"; + pinctrl-0 = <&uart1_example>; + pinctrl-names = "default"; +}; diff --git a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/src/main.c b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/src/main.c index fd49fa6074..84fa7556f1 100644 --- a/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/src/main.c +++ b/esp_flasher/lib/esp-serial-flasher/examples/zephyr_example/src/main.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -33,49 +34,66 @@ static const struct gpio_dt_spec esp_boot_spec = GPIO_DT_SPEC_GET(DT_ALIAS(boot) int main(void) { - example_binaries_t bin; - - const loader_zephyr_config_t config = { - .uart_dev = esp_uart_dev, - .enable_spec = esp_enable_spec, - .boot_spec = esp_boot_spec - }; - - printk("Running ESP Flasher from Zephyr\r\n"); - - if (!device_is_ready(esp_uart_dev)) { - printk("ESP UART not ready"); - return; - } - - if (!device_is_ready(esp_boot_spec.port)) { - printk("ESP boot GPIO not ready"); - return; - } - - if (!device_is_ready(esp_enable_spec.port)) { - printk("Bluetooth Enable GPIO not ready"); - return; - } - - gpio_pin_configure_dt(&esp_boot_spec, GPIO_OUTPUT_ACTIVE); - gpio_pin_configure_dt(&esp_enable_spec, GPIO_OUTPUT_INACTIVE); - - if (loader_port_zephyr_init(&config) != ESP_LOADER_SUCCESS) { - printk("ESP loader init failed"); - return; - } - - if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) { - - get_example_binaries(esp_loader_get_target(), &bin); - - flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); - flash_binary(bin.part.data, bin.part.size, bin.part.addr); - flash_binary(bin.app.data, bin.app.size, bin.app.addr); - } - - esp_loader_reset_target(); - - return 0; + example_binaries_t bin; + + const loader_zephyr_config_t config = { + .uart_dev = esp_uart_dev, + .enable_spec = esp_enable_spec, + .boot_spec = esp_boot_spec + }; + + printk("Running ESP Flasher from Zephyr\r\n"); + + if (!device_is_ready(esp_uart_dev)) { + printk("ESP UART not ready"); + return -ENODEV; + } + + if (!device_is_ready(esp_boot_spec.port)) { + printk("ESP boot GPIO not ready"); + return -ENODEV; + } + + if (!device_is_ready(esp_enable_spec.port)) { + printk("ESP enable GPIO not ready"); + return -ENODEV; + } + + gpio_pin_configure_dt(&esp_boot_spec, GPIO_OUTPUT_ACTIVE); + gpio_pin_configure_dt(&esp_enable_spec, GPIO_OUTPUT_INACTIVE); + + if (loader_port_zephyr_init(&config) != ESP_LOADER_SUCCESS) { + printk("ESP loader init failed"); + return -EIO; + } + + if (connect_to_target(HIGHER_BAUDRATE) == ESP_LOADER_SUCCESS) { + + get_example_binaries(esp_loader_get_target(), &bin); + + printk("Loading bootloader...\n"); + flash_binary(bin.boot.data, bin.boot.size, bin.boot.addr); + printk("Loading partition table...\n"); + flash_binary(bin.part.data, bin.part.size, bin.part.addr); + printk("Loading app...\n"); + flash_binary(bin.app.data, bin.app.size, bin.app.addr); + } + + esp_loader_reset_target(); + + if (loader_port_change_transmission_rate(DEFAULT_BAUDRATE) == ESP_LOADER_SUCCESS) { + // Delay for skipping the boot message of the targets + k_msleep(500); + + printk("********************************************\n"); + printk("*** Logs below are print from slave .... ***\n"); + printk("********************************************\n"); + while (1) { + uint8_t c; + if (uart_poll_in(esp_uart_dev, &c) == 0) { + printk("%c", c); + } + } + } + return 0; } diff --git a/esp_flasher/lib/esp-serial-flasher/idf_component.yml b/esp_flasher/lib/esp-serial-flasher/idf_component.yml index 80fe52c360..851873e619 100644 --- a/esp_flasher/lib/esp-serial-flasher/idf_component.yml +++ b/esp_flasher/lib/esp-serial-flasher/idf_component.yml @@ -1,3 +1,10 @@ -version: "0.5.0" -description: Serial flasher component provides portable library for flashing or loading ram loadble app to Espressif SoCs from other host microcontroller +version: "1.8.0" +description: esp-serial-flasher is a portable C library for flashing or loading apps to RAM of Espressif SoCs from other host microcontrollers url: https://github.com/espressif/esp-serial-flasher +dependencies: + idf: ">=4.3" + usb_host_cdc_acm: + version: "^2" + rules: + - if: "idf_version >=4.4" + - if: "target in [esp32s2, esp32s3]" diff --git a/esp_flasher/lib/esp-serial-flasher/include/esp_loader.h b/esp_flasher/lib/esp-serial-flasher/include/esp_loader.h index f44fe457f4..cb0a611fcd 100644 --- a/esp_flasher/lib/esp-serial-flasher/include/esp_loader.h +++ b/esp_flasher/lib/esp-serial-flasher/include/esp_loader.h @@ -62,22 +62,23 @@ typedef enum { ESP32C3_CHIP = 3, ESP32S3_CHIP = 4, ESP32C2_CHIP = 5, - ESP32H4_CHIP = 6, + ESP32C5_CHIP = 6, ESP32H2_CHIP = 7, ESP32C6_CHIP = 8, - ESP_MAX_CHIP = 9, - ESP_UNKNOWN_CHIP = 9 + ESP32P4_CHIP = 9, + ESP_MAX_CHIP = 10, + ESP_UNKNOWN_CHIP = 10 } target_chip_t; /** * @brief Application binary header */ typedef struct { - uint8_t magic; - uint8_t segments; - uint8_t flash_mode; - uint8_t flash_size_freq; - uint32_t entrypoint; + uint8_t magic; + uint8_t segments; + uint8_t flash_mode; + uint8_t flash_size_freq; + uint32_t entrypoint; } esp_loader_bin_header_t; /** @@ -89,6 +90,21 @@ typedef struct { uint8_t *data; } esp_loader_bin_segment_t; +typedef struct { + target_chip_t target_chip; + uint32_t eco_version; // Not present on ESP32-S2 + bool secure_boot_enabled; + bool secure_boot_aggressive_revoke_enabled; + bool secure_download_mode_enabled; + bool secure_boot_revoked_keys[3]; + bool jtag_software_disabled; + bool jtag_hardware_disabled; + bool usb_disabled; + bool flash_encryption_enabled; + bool dcache_in_uart_download_disabled; + bool icache_in_uart_download_disabled; +} esp_loader_target_security_info_t; + /** * @brief Connection arguments */ @@ -126,13 +142,51 @@ esp_loader_error_t esp_loader_connect(esp_loader_connect_args_t *connect_args); target_chip_t esp_loader_get_target(void); +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) +/** + * @brief Connects to the target while using the flasher stub + * + * @param connect_args[in] Timing parameters to be used for connecting to target. + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_TIMEOUT Timeout + * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + */ +esp_loader_error_t esp_loader_connect_with_stub(esp_loader_connect_args_t *connect_args); + #ifdef SERIAL_FLASHER_INTERFACE_UART +/** + * @brief Connects to the target running in secure download mode + * + * Secure download mode is a special mode in which the commands accepted by the boot ROM + * are limited to a safe subset. It is enabled by burning an efuse on the target. + * Read more about it here: + * https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/kconfig.html#config-secure-uart-rom-dl-mode + * + * @param connect_args[in] Timing parameters to be used for connecting to target. + * @param flash_size Flash size of the target chip. + * @param target_chip Target chip. Used for the ESP32 and ESP8266, which do not support the + * GET_SECURITY_INFO command required to identify the target in secure + * download mode. Leave as ESP_UNKNOWN_CHIP for autodetection of newer chips. + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_TIMEOUT Timeout + * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + */ +esp_loader_error_t esp_loader_connect_secure_download_mode(esp_loader_connect_args_t *connect_args, + uint32_t flash_size, target_chip_t target_chip); +#endif /* SERIAL_FLASHER_INTERFACE_UART */ +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ + +#ifndef SERIAL_FLASHER_INTERFACE_SPI /** * @brief Initiates flash operation * - * @param offset[in] Address from which flash operation will be performed. - * @param image_size[in] Size of the whole binary to be loaded into flash. - * @param block_size[in] Size of buffer used in subsequent calls to esp_loader_flash_write. + * @param offset[in] Address from which flash operation will be performed. Must be 4 byte aligned. + * @param image_size[in] Size of the whole binary to be loaded into flash. Must be 4 byte aligned. + * @param block_size[in] Size of buffer used in subsequent calls to esp_loader_flash_write. * * @note image_size is size of the whole image, whereas, block_size is chunk of data sent * to the target, each time esp_loader_flash_write function is called. @@ -173,7 +227,103 @@ esp_loader_error_t esp_loader_flash_write(void *payload, uint32_t size); * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error */ esp_loader_error_t esp_loader_flash_finish(bool reboot); -#endif /* SERIAL_FLASHER_INTERFACE_UART */ + +/** + * @brief Detects the size of the flash chip used by target + * + * @param flash_size[out] Flash size detected in bytes + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_UNSUPPORTED_CHIP The target flash chip is not known + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target chip is running in secure download mode + */ +esp_loader_error_t esp_loader_flash_detect_size(uint32_t *flash_size); +#endif /* SERIAL_FLASHER_INTERFACE_SPI */ + +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) +/** + * @brief Reads from the target flash. + * + * @param buf[out] Buffer to read into + * @param address[in] Flash address to read from. + * @param length[in] Read length in bytes. + * + * @note Higher read speeds can be achieved by using the flasher stub. + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_UNSUPPORTED_CHIP The target flash chip is not known + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target chip is running in secure download mode + */ +esp_loader_error_t esp_loader_flash_read(uint8_t *buf, uint32_t address, uint32_t length); + +/** + * @brief Erase the whole flash chip + * + * @note When using ROM-based approach (without stub), this function is experimental + * and not fully tested in all scenarios. Use with caution. When using the stub, + * this function is fully supported. + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_TIMEOUT Timeout + * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + */ +esp_loader_error_t esp_loader_flash_erase(void); + +/** + * @brief Erase a region of the flash + * + * @note When using ROM-based approach (without stub), this function is experimental + * and not fully tested in all scenarios. Use with caution. When using the stub, + * this function is fully supported. + * + * @param offset[in] The offset of the region to erase (must be 4096 byte aligned) + * @param size[in] The size of the region to erase (must be 4096 byte aligned) + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_TIMEOUT Timeout + * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_INVALID_PARAM Invalid parameter + */ +esp_loader_error_t esp_loader_flash_erase_region(uint32_t offset, uint32_t size); + +/** + * @brief Change baud rate of the stub running on the target + * + * @note Baud rate has to be also adjusted accordingly on host MCU, as + * target's baud rate is changed upon return from this function. + * + * @param old_transmission_rate[in] The baudrate to be changed + * @param new_transmission_rate[in] The new baud rate to be set. + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_TIMEOUT Timeout + * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The stub is not running + */ +esp_loader_error_t esp_loader_change_transmission_rate_stub(uint32_t old_transmission_rate, + uint32_t new_transmission_rate); + +/** + * @brief Get the security info of the target chip + * + * @note The ESP32 and ESP8266 do not support this command. + * + * @param security_info[out] The security info structure + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_TIMEOUT Either a timeout event or the target chip responded with + * a different command code, due to not supporting the command. + * - ESP_LOADER_ERROR_INVALID_RESPONSE The target reply is malformed. + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target chip does not support this command. + */ +esp_loader_error_t esp_loader_get_security_info(esp_loader_target_security_info_t *security_info); +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ /** @@ -190,6 +340,7 @@ esp_loader_error_t esp_loader_flash_finish(bool reboot); * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target is running in secure download mode */ esp_loader_error_t esp_loader_mem_start(uint32_t offset, uint32_t size, uint32_t block_size); @@ -208,6 +359,7 @@ esp_loader_error_t esp_loader_mem_start(uint32_t offset, uint32_t size, uint32_t * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target is running in secure download mode */ esp_loader_error_t esp_loader_mem_write(const void *payload, uint32_t size); @@ -222,9 +374,22 @@ esp_loader_error_t esp_loader_mem_write(const void *payload, uint32_t size); * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target is running in secure download mode */ esp_loader_error_t esp_loader_mem_finish(uint32_t entrypoint); +/** + * @brief Reads te MAC of the connected chip. + * + * @param mac[out] 6 byte MAC address of the chip + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_TIMEOUT Timeout + * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target is running in secure download mode + */ +esp_loader_error_t esp_loader_read_mac(uint8_t *mac); /** * @brief Writes register. @@ -236,6 +401,7 @@ esp_loader_error_t esp_loader_mem_finish(uint32_t entrypoint); * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target is running in secure download mode */ esp_loader_error_t esp_loader_write_register(uint32_t address, uint32_t reg_value); @@ -249,9 +415,11 @@ esp_loader_error_t esp_loader_write_register(uint32_t address, uint32_t reg_valu * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC The target is running in secure download mode */ esp_loader_error_t esp_loader_read_register(uint32_t address, uint32_t *reg_value); +#ifndef SERIAL_FLASHER_INTERFACE_SDIO /** * @brief Change baud rate. * @@ -264,9 +432,28 @@ esp_loader_error_t esp_loader_read_register(uint32_t address, uint32_t *reg_valu * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error - * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC Unsupported on the target + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC Either the target is running in secure download + * mode or the stub is running on the target. */ esp_loader_error_t esp_loader_change_transmission_rate(uint32_t transmission_rate); +#endif /* SERIAL_FLASHER_INTERFACE_SDIO */ + +#if MD5_ENABLED +/** + * @brief Verify target's flash integrity by checking with a known MD5 checksum + * for a specified offset and length. + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_INVALID_MD5 MD5 does not match + * - ESP_LOADER_ERROR_TIMEOUT Timeout + * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error + * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC Unsupported on the target + * - ESP_LOADER_ERROR_IMAGE_SIZE Flash region specified is beyond the flash end + */ +esp_loader_error_t esp_loader_flash_verify_known_md5(uint32_t address, + uint32_t size, + const uint8_t *expected_md5); /** * @brief Verify target's flash integrity by checking MD5. @@ -283,10 +470,11 @@ esp_loader_error_t esp_loader_change_transmission_rate(uint32_t transmission_rat * - ESP_LOADER_ERROR_TIMEOUT Timeout * - ESP_LOADER_ERROR_INVALID_RESPONSE Internal error * - ESP_LOADER_ERROR_UNSUPPORTED_FUNC Unsupported on the target + * - ESP_LOADER_ERROR_IMAGE_SIZE Flash region specified is beyond the flash end */ -#if MD5_ENABLED esp_loader_error_t esp_loader_flash_verify(void); -#endif +#endif /* MD5_ENABLED */ + /** * @brief Toggles reset pin. */ diff --git a/esp_flasher/lib/esp-serial-flasher/include/esp_loader_io.h b/esp_flasher/lib/esp-serial-flasher/include/esp_loader_io.h index 2ff99b4f9e..afd0e781ea 100644 --- a/esp_flasher/lib/esp-serial-flasher/include/esp_loader_io.h +++ b/esp_flasher/lib/esp-serial-flasher/include/esp_loader_io.h @@ -13,7 +13,7 @@ * limitations under the License. */ - #pragma once +#pragma once #include #include "esp_loader.h" @@ -22,10 +22,12 @@ extern "C" { #endif +#ifndef SERIAL_FLASHER_INTERFACE_SDIO /** * @brief Changes the transmission rate of the used peripheral. */ esp_loader_error_t loader_port_change_transmission_rate(uint32_t transmission_rate); +#endif /** * @brief Writes data over the io interface. @@ -38,7 +40,12 @@ esp_loader_error_t loader_port_change_transmission_rate(uint32_t transmission_ra * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout elapsed */ +#ifndef SERIAL_FLASHER_INTERFACE_SDIO esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_t timeout); +#else +esp_loader_error_t loader_port_write(uint32_t function, uint32_t addr, const uint8_t *data, + uint16_t size, uint32_t timeout); +#endif /** * @brief Reads data from the io interface. @@ -51,7 +58,12 @@ esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_ * - ESP_LOADER_SUCCESS Success * - ESP_LOADER_ERROR_TIMEOUT Timeout elapsed */ +#ifndef SERIAL_FLASHER_INTERFACE_SDIO esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeout); +#else +esp_loader_error_t loader_port_read(uint32_t function, uint32_t addr, uint8_t *data, + uint16_t size, uint32_t timeout); +#endif /** * @brief Delay in milliseconds. @@ -107,6 +119,10 @@ void loader_port_debug_print(const char *str); void loader_port_spi_set_cs(uint32_t level); #endif /* SERIAL_FLASHER_INTERFACE_SPI */ +#ifdef SERIAL_FLASHER_INTERFACE_SDIO +esp_loader_error_t loader_port_sdio_card_init(void); +#endif /* SERIAL_FLASHER_INTERFACE_SDIO */ + #ifdef __cplusplus } #endif diff --git a/esp_flasher/lib/esp-serial-flasher/include/serial_io.h b/esp_flasher/lib/esp-serial-flasher/include/serial_io.h index e349393008..aaec967739 100644 --- a/esp_flasher/lib/esp-serial-flasher/include/serial_io.h +++ b/esp_flasher/lib/esp-serial-flasher/include/serial_io.h @@ -14,7 +14,7 @@ */ #warning Please replace serial_io.h with esp_loader_io.h and change the function names \ - to match the new API +to match the new API /* Defines used to avoid breaking existing ports */ #define loader_port_change_baudrate loader_port_change_transmission_rate diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_port.c b/esp_flasher/lib/esp-serial-flasher/port/esp32_port.c index c211aff179..5a04866d36 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/esp32_port.c +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_port.c @@ -21,7 +21,7 @@ #include "esp_idf_version.h" #include -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) { static bool write_prev = false; @@ -41,6 +41,7 @@ static int64_t s_time_end; static int32_t s_uart_port; static int32_t s_reset_trigger_pin; static int32_t s_gpio0_trigger_pin; +static bool s_peripheral_needs_deinit; esp_loader_error_t loader_port_esp32_init(const loader_esp32_config_t *config) { @@ -49,30 +50,40 @@ esp_loader_error_t loader_port_esp32_init(const loader_esp32_config_t *config) s_gpio0_trigger_pin = config->gpio0_trigger_pin; // Initialize UART - uart_config_t uart_config = { - .baud_rate = config->baud_rate, - .data_bits = UART_DATA_8_BITS, - .parity = UART_PARITY_DISABLE, - .stop_bits = UART_STOP_BITS_1, - .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, + if (!config->dont_initialize_peripheral) { + uart_config_t uart_config = { + .baud_rate = config->baud_rate, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) - .source_clk = UART_SCLK_DEFAULT, + .source_clk = UART_SCLK_DEFAULT, #endif - }; - - int rx_buffer_size = config->rx_buffer_size ? config->rx_buffer_size : 400; - int tx_buffer_size = config->tx_buffer_size ? config->tx_buffer_size : 400; - QueueHandle_t *uart_queue = config->uart_queue ? config->uart_queue : NULL; - int queue_size = config->queue_size ? config->queue_size : 0; - - if ( uart_param_config(s_uart_port, &uart_config) != ESP_OK ) { - return ESP_LOADER_ERROR_FAIL; - } - if ( uart_set_pin(s_uart_port, config->uart_tx_pin, config->uart_rx_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE) != ESP_OK ) { - return ESP_LOADER_ERROR_FAIL; - } - if ( uart_driver_install(s_uart_port, rx_buffer_size, tx_buffer_size, queue_size, uart_queue, 0) != ESP_OK ) { - return ESP_LOADER_ERROR_FAIL; + }; + + int rx_buffer_size = config->rx_buffer_size ? config->rx_buffer_size : 400; + int tx_buffer_size = config->tx_buffer_size ? config->tx_buffer_size : 400; + QueueHandle_t *uart_queue = config->uart_queue ? config->uart_queue : NULL; + int queue_size = config->queue_size ? config->queue_size : 0; + + // Sets pin current strength to 40 mA, because some pins default to 10 mA, + // which is not enough when USB-UART is also present on the UART lines (at least 20 mA should be sufficient). + if ( gpio_set_drive_capability(config->uart_tx_pin, GPIO_DRIVE_CAP_3) != ESP_OK ) { + return ESP_LOADER_ERROR_FAIL; + } + + if ( uart_param_config(s_uart_port, &uart_config) != ESP_OK ) { + return ESP_LOADER_ERROR_FAIL; + } + if ( uart_set_pin(s_uart_port, config->uart_tx_pin, config->uart_rx_pin, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE) != ESP_OK ) { + return ESP_LOADER_ERROR_FAIL; + } + if ( uart_driver_install(s_uart_port, rx_buffer_size, tx_buffer_size, queue_size, uart_queue, 0) != ESP_OK ) { + return ESP_LOADER_ERROR_FAIL; + } + + s_peripheral_needs_deinit = true; } // Initialize boot pin selection pins @@ -89,17 +100,19 @@ esp_loader_error_t loader_port_esp32_init(const loader_esp32_config_t *config) void loader_port_esp32_deinit(void) { - uart_driver_delete(s_uart_port); + if (s_peripheral_needs_deinit) { + uart_driver_delete(s_uart_port); + } } esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_t timeout) { uart_write_bytes(s_uart_port, (const char *)data, size); - esp_err_t err = uart_wait_tx_done(s_uart_port, timeout); + esp_err_t err = uart_wait_tx_done(s_uart_port, pdMS_TO_TICKS(timeout)); if (err == ESP_OK) { -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, size, true); #endif return ESP_LOADER_SUCCESS; @@ -113,17 +126,17 @@ esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_ esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeout) { - int read = uart_read_bytes(s_uart_port, data, size, timeout); + int read = uart_read_bytes(s_uart_port, data, size, pdMS_TO_TICKS(timeout)); if (read < 0) { return ESP_LOADER_ERROR_FAIL; } else if (read < size) { -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, read, false); #endif return ESP_LOADER_ERROR_TIMEOUT; } else { -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, read, false); #endif return ESP_LOADER_SUCCESS; @@ -131,22 +144,20 @@ esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeo } -// Set GPIO0 LOW, then -// assert reset pin for 50 milliseconds. void loader_port_enter_bootloader(void) { - gpio_set_level(s_gpio0_trigger_pin, 0); + gpio_set_level(s_gpio0_trigger_pin, SERIAL_FLASHER_BOOT_INVERT ? 1 : 0); loader_port_reset_target(); loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS); - gpio_set_level(s_gpio0_trigger_pin, 1); + gpio_set_level(s_gpio0_trigger_pin, SERIAL_FLASHER_BOOT_INVERT ? 0 : 1); } void loader_port_reset_target(void) { - gpio_set_level(s_reset_trigger_pin, 0); + gpio_set_level(s_reset_trigger_pin, SERIAL_FLASHER_RESET_INVERT ? 1 : 0); loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS); - gpio_set_level(s_reset_trigger_pin, 1); + gpio_set_level(s_reset_trigger_pin, SERIAL_FLASHER_RESET_INVERT ? 0 : 1); } @@ -178,4 +189,4 @@ esp_loader_error_t loader_port_change_transmission_rate(uint32_t baudrate) { esp_err_t err = uart_set_baudrate(s_uart_port, baudrate); return (err == ESP_OK) ? ESP_LOADER_SUCCESS : ESP_LOADER_ERROR_FAIL; -} \ No newline at end of file +} diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_port.h b/esp_flasher/lib/esp-serial-flasher/port/esp32_port.h index c098762d25..7f096cf161 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/esp32_port.h +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_port.h @@ -13,7 +13,7 @@ * limitations under the License. */ - #pragma once +#pragma once #include "esp_loader_io.h" #include "freertos/FreeRTOS.h" @@ -23,19 +23,21 @@ extern "C" { #endif -typedef struct -{ - uint32_t baud_rate; /*!< Initial baud rate, can be changed later */ - uint32_t uart_port; /*!< UART port */ - uint32_t uart_rx_pin; /*!< This pin will be configured as UART Rx pin */ - uint32_t uart_tx_pin; /*!< This pin will be configured as UART Tx pin */ - uint32_t reset_trigger_pin; /*!< This pin will be used to reset target chip */ - uint32_t gpio0_trigger_pin; /*!< This pin will be used to toggle set IO0 of target chip */ - uint32_t rx_buffer_size; /*!< Set to zero for default RX buffer size */ - uint32_t tx_buffer_size; /*!< Set to zero for default TX buffer size */ - uint32_t queue_size; /*!< Set to zero for default UART queue size */ - QueueHandle_t *uart_queue; /*!< Set to NULL, if UART queue handle is not +typedef struct { + uint32_t baud_rate; /*!< Initial baud rate, can be changed later */ + uint32_t uart_port; /*!< UART port */ + uint32_t uart_rx_pin; /*!< This pin will be configured as UART Rx pin */ + uint32_t uart_tx_pin; /*!< This pin will be configured as UART Tx pin */ + uint32_t reset_trigger_pin; /*!< This pin will be used to reset target chip */ + uint32_t gpio0_trigger_pin; /*!< This pin will be used to toggle set IO0 of target chip */ + uint32_t rx_buffer_size; /*!< Set to zero for default RX buffer size */ + uint32_t tx_buffer_size; /*!< Set to zero for default TX buffer size */ + uint32_t queue_size; /*!< Set to zero for default UART queue size */ + QueueHandle_t *uart_queue; /*!< Set to NULL, if UART queue handle is not necessary. Otherwise, it will be assigned here */ + bool dont_initialize_peripheral; /* Use if the peripheral has already been initialized, + useful when using the peripheral for multiple + purposes (e.g. monitoring) */ } loader_esp32_config_t; /** diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.c b/esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.c new file mode 100644 index 0000000000..46d4a26b0a --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.c @@ -0,0 +1,225 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "esp32_sdio_port.h" +#include "driver/gpio.h" +#include "sdmmc_cmd.h" +#include "esp_timer.h" +#include + +#define WORD_ALIGNED(ptr) ((size_t)ptr % sizeof(size_t) == 0) + +#if SERIAL_FLASHER_DEBUG_TRACE +static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) +{ + static bool write_prev = false; + + if (write_prev != write) { + write_prev = write; + printf("\n--- %s ---\n", write ? "WRITE" : "READ"); + } + + for (uint32_t i = 0; i < size; i++) { + printf("%02x ", data[i]); + } +} +#endif + +static sdmmc_card_t s_card; +static sdmmc_host_t s_card_config; +static int64_t s_time_end; +static uint32_t s_reset_trigger_pin; +static uint32_t s_boot_pin; +static bool host_driver_needs_deinit; + +esp_loader_error_t loader_port_esp32_sdio_init(const loader_esp32_sdio_config_t *config) +{ + /* Initialize the global static variables*/ + s_reset_trigger_pin = config->reset_trigger_pin; + s_boot_pin = config->boot_pin; + s_card_config = (sdmmc_host_t)SDMMC_HOST_DEFAULT(); + s_card_config.flags = SDMMC_HOST_FLAG_4BIT; + s_card_config.max_freq_khz = config->max_freq_khz; + s_card_config.slot = config->slot; + +#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE + /* + The buffer and lenght of the data passed to SDMMC Host Driver needs to be aligned. + The new L1 cache requires 64 bytes aligning of a buffer, + this flag ensures that SDMMC Driver allocates custom aligned buffer and memcpy the data to it. + This should be reworked when the new sdmmc driver-ng comes out as it would not need same alignment for size and buffer. + */ + s_card_config.flags = SDMMC_HOST_FLAG_ALLOC_ALIGNED_BUF; +#endif + + if (!config->dont_initialize_host_driver) { + if (sdmmc_host_init() != ESP_OK) { + return ESP_LOADER_ERROR_FAIL; + } + + sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT(); + slot_config.width = 4; +#if SOC_SDMMC_USE_GPIO_MATRIX + slot_config.clk = config->sdio_clk_pin; + slot_config.cmd = config->sdio_cmd_pin; + slot_config.d0 = config->sdio_d0_pin; + slot_config.d1 = config->sdio_d1_pin; + slot_config.d2 = config->sdio_d2_pin; + slot_config.d3 = config->sdio_d3_pin; +#endif + + if (sdmmc_host_init_slot(config->slot, &slot_config) != ESP_OK) { + return ESP_LOADER_ERROR_FAIL; + } + + host_driver_needs_deinit = true; + } + + gpio_reset_pin(s_reset_trigger_pin); + gpio_set_pull_mode(s_reset_trigger_pin, GPIO_PULLUP_ONLY); + gpio_set_direction(s_reset_trigger_pin, GPIO_MODE_OUTPUT); + + gpio_reset_pin(s_boot_pin); + gpio_set_pull_mode(s_boot_pin, GPIO_PULLUP_ONLY); + gpio_set_direction(s_boot_pin, GPIO_MODE_OUTPUT); + + return ESP_LOADER_SUCCESS; +} + + +void loader_port_esp32_sdio_deinit(void) +{ + if (host_driver_needs_deinit) { +#if SOC_CACHE_INTERNAL_MEM_VIA_L1CACHE + free(s_card.host.dma_aligned_buffer); +#endif + sdmmc_host_deinit(); + host_driver_needs_deinit = false; + } + gpio_reset_pin(s_reset_trigger_pin); + gpio_reset_pin(s_boot_pin); +} + + +esp_loader_error_t loader_port_write(const uint32_t function, const uint32_t addr, + const uint8_t *data, const uint16_t size, + const uint32_t timeout) +{ + (void) timeout; // Unused, there is a global timeout in the ESP-IDF driver + + if (data == NULL || !WORD_ALIGNED(data)) { + return ESP_LOADER_ERROR_INVALID_PARAM; + } + + esp_err_t err = sdmmc_io_write_bytes(&s_card, function, addr, data, (size_t)size); + + if (err == ESP_OK) { +#if SERIAL_FLASHER_DEBUG_TRACE + transfer_debug_print(data, size, true); +#endif + return ESP_LOADER_SUCCESS; + } else if (err == ESP_ERR_TIMEOUT) { + return ESP_LOADER_ERROR_TIMEOUT; + } else { + return ESP_LOADER_ERROR_FAIL; + } +} + + +esp_loader_error_t loader_port_read(const uint32_t function, const uint32_t addr, uint8_t *data, + const uint16_t size, const uint32_t timeout) +{ + (void) timeout; // Unused, there is a global timeout in the ESP-IDF driver + + if (data == NULL || !WORD_ALIGNED(data)) { + return ESP_LOADER_ERROR_INVALID_PARAM; + } + + esp_err_t err = sdmmc_io_read_bytes(&s_card, function, addr, data, (size_t)size); + + if (err == ESP_OK) { +#if SERIAL_FLASHER_DEBUG_TRACE + transfer_debug_print(data, size, false); +#endif + return ESP_LOADER_SUCCESS; + } else if (err == ESP_ERR_TIMEOUT) { + return ESP_LOADER_ERROR_TIMEOUT; + } else { + return ESP_LOADER_ERROR_FAIL; + } +} + +void loader_port_enter_bootloader(void) +{ + gpio_set_level(s_boot_pin, 0); + loader_port_reset_target(); + loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS); + gpio_set_level(s_boot_pin, 1); +} + + +esp_loader_error_t loader_port_sdio_card_init(void) +{ + const esp_loader_error_t err = sdmmc_card_init(&s_card_config, &s_card); + + if (err == ESP_OK) { + return ESP_LOADER_SUCCESS; + } else if (err == ESP_ERR_TIMEOUT) { + return ESP_LOADER_ERROR_TIMEOUT; + } else { + return ESP_LOADER_ERROR_FAIL; + } +} + +void loader_port_reset_target(void) +{ + gpio_set_level(s_reset_trigger_pin, 0); + loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS); + gpio_set_level(s_reset_trigger_pin, 1); +} + + +void loader_port_delay_ms(const uint32_t ms) +{ + usleep(ms * 1000); +} + + +void loader_port_start_timer(const uint32_t ms) +{ + s_time_end = esp_timer_get_time() + ms * 1000; +} + + +uint32_t loader_port_remaining_time(void) +{ + int64_t remaining = (s_time_end - esp_timer_get_time()) / 1000; + return (remaining > 0) ? (uint32_t)remaining : 0; +} + + +void loader_port_debug_print(const char *str) +{ + printf("DEBUG: %s\n", str); +} + +esp_loader_error_t loader_port_wait_int(uint32_t timeout) +{ + if (sdmmc_io_wait_int(&s_card, timeout) == ESP_OK) { + return ESP_LOADER_SUCCESS; + } else { + return ESP_LOADER_ERROR_TIMEOUT; + } +} diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.h b/esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.h new file mode 100644 index 0000000000..4c27299277 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_sdio_port.h @@ -0,0 +1,70 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "esp_loader_io.h" +#include "driver/sdmmc_host.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + /* The SDIO slot to use, changes the pin mapping when SOC_SDMMC_USE_IOMUX is used. */ + int slot; + /* Valid frequencies: round divisors of 40MHz. + The frequency is limited by the GPIO matrix if it is used. */ + uint32_t max_freq_khz; + /* + SDIO pin values are used only when SOC_SDMMC_USE_GPIO_MATRIX is used. + Otherwise, when using the IOMUX signal routing, they are predefined. + */ + uint8_t sdio_clk_pin; + uint8_t sdio_d0_pin; + uint8_t sdio_d1_pin; + uint8_t sdio_d2_pin; + uint8_t sdio_d3_pin; + uint8_t sdio_cmd_pin; + /* Reset and strapping pins */ + uint8_t reset_trigger_pin; + uint8_t boot_pin; + /* Use when you want to initialize and deinitialize the host driver yourself, + for instance when you have multiple devices on the bus. + All configuration values except reset and strapping pins are unused if set.*/ + bool dont_initialize_host_driver; +} loader_esp32_sdio_config_t; + +/** + * @brief Initializes the SDIO interface. + * + * @param config[in] Configuration structure + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_FAIL Initialization failure + */ +esp_loader_error_t loader_port_esp32_sdio_init(const loader_esp32_sdio_config_t *config); + +/** + * @brief Deinitializes the SDIO interface. + */ +void loader_port_esp32_sdio_deinit(void); + +esp_loader_error_t loader_port_wait_int(uint32_t timeout); + +#ifdef __cplusplus +} +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.c b/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.c index 55e8f3e571..324850d3c0 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.c +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.c @@ -21,8 +21,6 @@ #include "esp_idf_version.h" #include -// #define SERIAL_DEBUG_ENABLE - #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 3, 0) #define DMA_CHAN SPI_DMA_CH_AUTO #else @@ -31,8 +29,7 @@ #define WORD_ALIGNED(ptr) ((size_t)ptr % sizeof(size_t) == 0) -#ifdef SERIAL_DEBUG_ENABLE - +#if SERIAL_FLASHER_DEBUG_TRACE static void dec_to_hex_str(const uint8_t dec, uint8_t hex_str[3]) { static const uint8_t dec_to_hex[] = { @@ -50,19 +47,16 @@ static void serial_debug_print(const uint8_t *data, uint16_t size, bool write) static bool write_prev = false; uint8_t hex_str[3]; - if(write_prev != write) { + if (write_prev != write) { write_prev = write; printf("\n--- %s ---\n", write ? "WRITE" : "READ"); } - for(uint32_t i = 0; i < size; i++) { + for (uint32_t i = 0; i < size; i++) { dec_to_hex_str(data[i], hex_str); printf("%s ", hex_str); } } - -#else -static void serial_debug_print(const uint8_t *data, uint16_t size, bool write) { } #endif static spi_host_device_t s_spi_bus; @@ -76,6 +70,7 @@ static uint32_t s_strap_bit1_pin; static uint32_t s_strap_bit2_pin; static uint32_t s_strap_bit3_pin; static uint32_t s_spi_cs_pin; +static bool s_bus_needs_deinit; esp_loader_error_t loader_port_esp32_spi_init(const loader_esp32_spi_config_t *config) { @@ -89,15 +84,19 @@ esp_loader_error_t loader_port_esp32_spi_init(const loader_esp32_spi_config_t *c s_spi_cs_pin = config->spi_cs_pin; /* Configure and initialize the SPI bus*/ - s_spi_config.mosi_io_num = config->spi_mosi_pin; - s_spi_config.miso_io_num = config->spi_miso_pin; - s_spi_config.sclk_io_num = config->spi_clk_pin; - s_spi_config.quadwp_io_num = config->spi_quadwp_pin; - s_spi_config.quadhd_io_num = config->spi_quadhd_pin; - s_spi_config.max_transfer_sz = 4096 * 4; - - if (spi_bus_initialize(s_spi_bus, &s_spi_config, DMA_CHAN) != ESP_OK) { - return ESP_LOADER_ERROR_FAIL; + if (!config->dont_initialize_bus) { + s_spi_config.mosi_io_num = config->spi_mosi_pin; + s_spi_config.miso_io_num = config->spi_miso_pin; + s_spi_config.sclk_io_num = config->spi_clk_pin; + s_spi_config.quadwp_io_num = config->spi_quadwp_pin; + s_spi_config.quadhd_io_num = config->spi_quadhd_pin; + s_spi_config.max_transfer_sz = 4096 * 4; + + if (spi_bus_initialize(s_spi_bus, &s_spi_config, DMA_CHAN) != ESP_OK) { + return ESP_LOADER_ERROR_FAIL; + } + + s_bus_needs_deinit = true; } /* Configure and add the device */ @@ -131,25 +130,26 @@ void loader_port_esp32_spi_deinit(void) gpio_reset_pin(s_reset_trigger_pin); gpio_reset_pin(s_spi_cs_pin); spi_bus_remove_device(s_device_h); - spi_bus_free(s_spi_bus); + if (s_bus_needs_deinit) { + spi_bus_free(s_spi_bus); + } } -void loader_port_spi_set_cs(const uint32_t level) { +void loader_port_spi_set_cs(const uint32_t level) +{ gpio_set_level(s_spi_cs_pin, level); } esp_loader_error_t loader_port_write(const uint8_t *data, const uint16_t size, const uint32_t timeout) { - /* Due to the fact that the SPI driver uses DMA for larger transfers, - and the DMA requirements, the buffer must be word aligned */ - if (data == NULL || !WORD_ALIGNED(data)) { + (void) timeout; + + if (data == NULL) { return ESP_LOADER_ERROR_INVALID_PARAM; } - serial_debug_print(data, size, true); - spi_transaction_t transaction = { .tx_buffer = data, .rx_buffer = NULL, @@ -160,7 +160,9 @@ esp_loader_error_t loader_port_write(const uint8_t *data, const uint16_t size, c esp_err_t err = spi_device_transmit(s_device_h, &transaction); if (err == ESP_OK) { - serial_debug_print(data, size, false); +#if SERIAL_FLASHER_DEBUG_TRACE + serial_debug_print(data, size, true); +#endif return ESP_LOADER_SUCCESS; } else if (err == ESP_ERR_TIMEOUT) { return ESP_LOADER_ERROR_TIMEOUT; @@ -172,14 +174,13 @@ esp_loader_error_t loader_port_write(const uint8_t *data, const uint16_t size, c esp_loader_error_t loader_port_read(uint8_t *data, const uint16_t size, const uint32_t timeout) { - /* Due to the fact that the SPI driver uses DMA for larger transfers, - and the DMA requirements, the buffer must be word aligned */ + (void) timeout; + + /* The rx data buffer must be aligned to 32 bits due to DMA requirements */ if (data == NULL || !WORD_ALIGNED(data)) { return ESP_LOADER_ERROR_INVALID_PARAM; } - serial_debug_print(data, size, true); - spi_transaction_t transaction = { .tx_buffer = NULL, .rx_buffer = data, @@ -189,7 +190,9 @@ esp_loader_error_t loader_port_read(uint8_t *data, const uint16_t size, const ui esp_err_t err = spi_device_transmit(s_device_h, &transaction); if (err == ESP_OK) { +#if SERIAL_FLASHER_DEBUG_TRACE serial_debug_print(data, size, false); +#endif return ESP_LOADER_SUCCESS; } else if (err == ESP_ERR_TIMEOUT) { return ESP_LOADER_ERROR_TIMEOUT; diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.h b/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.h index 72304c5df4..c9cbde1bcd 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.h +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_spi_port.h @@ -13,7 +13,7 @@ * limitations under the License. */ - #pragma once +#pragma once #include "esp_loader_io.h" #include "driver/spi_master.h" @@ -22,8 +22,7 @@ extern "C" { #endif -typedef struct -{ +typedef struct { spi_host_device_t spi_bus; uint32_t frequency; uint32_t spi_clk_pin; @@ -37,6 +36,8 @@ typedef struct uint32_t strap_bit1_pin; uint32_t strap_bit2_pin; uint32_t strap_bit3_pin; + bool dont_initialize_bus; /* Use if the bus has already been initialized, + useful when sharing the bus with other devices. */ } loader_esp32_spi_config_t; /** diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.c b/esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.c new file mode 100644 index 0000000000..5df1e4bafb --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.c @@ -0,0 +1,297 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include "esp_log.h" +#include "esp_timer.h" +#include "esp32_usb_cdc_acm_port.h" + +#define ESP_SERIAL_JTAG_PID 0x1001 + +static const char *TAG = "usb_cdc_acm_port"; + +static cdc_acm_dev_hdl_t s_acm_device; +static StreamBufferHandle_t s_rx_stream_buffer; +static bool s_is_usb_serial_jtag; +static loader_port_esp32_usb_cdc_acm_callback_t s_acm_host_error_callback; +static loader_port_esp32_usb_cdc_acm_callback_t s_device_disconnected_callback; +static loader_port_esp32_usb_cdc_acm_callback_t s_acm_host_serial_state_callback; + +#if SERIAL_FLASHER_DEBUG_TRACE +static void transfer_debug_print(const uint8_t *data, const uint16_t size, const bool write) +{ + static bool write_prev = false; + + if (write_prev != write) { + write_prev = write; + printf("\n--- %s ---\n", write ? "WRITE" : "READ"); + } + + for (uint32_t i = 0; i < size; i++) { + printf("%02x ", data[i]); + } +} +#endif + +static bool handle_usb_data(const uint8_t *data, size_t data_len, void *arg) +{ + return xStreamBufferSend(s_rx_stream_buffer, data, data_len, 0) == data_len; +} + +static void handle_usb_event(const cdc_acm_host_dev_event_data_t *event, void *user_ctx) +{ + switch (event->type) { + case CDC_ACM_HOST_ERROR: + ESP_LOGE(TAG, "CDC-ACM error has occurred, err_no = %i", event->data.error); + if (s_acm_host_error_callback != NULL) { + s_acm_host_error_callback(); + } + break; + + case CDC_ACM_HOST_DEVICE_DISCONNECTED: + ESP_LOGI(TAG, "Device disconnected"); + if (s_device_disconnected_callback != NULL) { + s_device_disconnected_callback(); + } + esp_loader_error_t deinit_status = loader_port_esp32_usb_cdc_acm_deinit(); + assert(deinit_status == ESP_LOADER_SUCCESS); + break; + + case CDC_ACM_HOST_SERIAL_STATE: + ESP_LOGI(TAG, "Serial state notif 0x%04X", event->data.serial_state.val); + if (s_acm_host_serial_state_callback != NULL) { + s_acm_host_serial_state_callback(); + } + break; + + default: + ESP_LOGW(TAG, "Unsupported CDC event: %i", event->type); + break; + } +} + +static void usb_serial_jtag_reset_target(void) +{ + xStreamBufferReset(s_rx_stream_buffer); + cdc_acm_host_set_control_line_state(s_acm_device, false, true); + loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS); + cdc_acm_host_set_control_line_state(s_acm_device, false, false); +} + +static void usb_serial_jtag_enter_booloader(void) +{ + cdc_acm_host_set_control_line_state(s_acm_device, true, false); + + loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS); + + cdc_acm_host_set_control_line_state(s_acm_device, true, true); + usb_serial_jtag_reset_target(); +} + +static void usb_serial_converter_reset_target(void) +{ + xStreamBufferReset(s_rx_stream_buffer); + cdc_acm_host_set_control_line_state(s_acm_device, true, true); + loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS); + cdc_acm_host_set_control_line_state(s_acm_device, true, false); +} + +static void usb_serial_converter_enter_bootloader(void) +{ + cdc_acm_host_set_control_line_state(s_acm_device, true, false); + + usb_serial_converter_reset_target(); + + loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS); + cdc_acm_host_set_control_line_state(s_acm_device, false, false); +} + +static uint32_t s_time_end; + +esp_loader_error_t loader_port_write(const uint8_t *data, const uint16_t size, + const uint32_t timeout) +{ + assert(data != NULL); + assert(s_acm_device != NULL && s_rx_stream_buffer != NULL); + + esp_err_t err = cdc_acm_host_data_tx_blocking(s_acm_device, + (uint8_t *)data, + size, + timeout); + + if (err == ESP_OK) { +#if SERIAL_FLASHER_DEBUG_TRACE + transfer_debug_print(data, size, true); +#endif + return ESP_LOADER_SUCCESS; + } else if (err == ESP_ERR_TIMEOUT) { + return ESP_LOADER_ERROR_TIMEOUT; + } else { + return ESP_LOADER_ERROR_FAIL; + } +} + + +esp_loader_error_t loader_port_read(uint8_t *data, const uint16_t size, const uint32_t timeout) +{ + assert(data != NULL); + assert(s_acm_device != NULL && s_rx_stream_buffer != NULL); + + size_t received = xStreamBufferReceive(s_rx_stream_buffer, data, size, pdMS_TO_TICKS(timeout)); + + if (received == size) { +#if SERIAL_FLASHER_DEBUG_TRACE + transfer_debug_print(data, size, false); +#endif + return ESP_LOADER_SUCCESS; + } else { + return ESP_LOADER_ERROR_TIMEOUT; + } +} + + +esp_loader_error_t loader_port_esp32_usb_cdc_acm_init(const loader_esp32_usb_cdc_acm_config_t *config) +{ + s_acm_host_error_callback = config->acm_host_error_callback; + s_device_disconnected_callback = config->device_disconnected_callback; + s_acm_host_serial_state_callback = config->acm_host_serial_state_callback; + + /* Different reset and enter bootloader sequences are needed depending on whether the target + * device is connected via internal USB Serial/JTAG or an USB to serial converter which + * connects to target UART and BOOT/RST pins. See pages 1207 and 1208 of the ESP32-S3 TRM */ + s_is_usb_serial_jtag = config->device_pid == ESP_SERIAL_JTAG_PID; + + s_rx_stream_buffer = xStreamBufferCreate(1024, 1); + + if (s_rx_stream_buffer == NULL) { + ESP_LOGE(TAG, "Could not create the stream buffer for USB data reception"); + return ESP_LOADER_ERROR_FAIL; + } + + const cdc_acm_host_device_config_t dev_config = { + .connection_timeout_ms = config->connection_timeout_ms, + .out_buffer_size = config->out_buffer_size, + .in_buffer_size = 512, + .event_cb = handle_usb_event, + .data_cb = handle_usb_data + }; + + esp_err_t err = cdc_acm_host_open(config->device_vid, + config->device_pid, + 0, + &dev_config, + &s_acm_device); + + if (err != ESP_OK) { + ESP_LOGE(TAG, "Failed to open the USB device"); + esp_loader_error_t deinit_status = loader_port_esp32_usb_cdc_acm_deinit(); + assert(deinit_status == ESP_LOADER_SUCCESS); + return ESP_LOADER_ERROR_FAIL; + } + + return ESP_LOADER_SUCCESS; +} + + +esp_loader_error_t loader_port_esp32_usb_cdc_acm_deinit(void) +{ + s_acm_host_error_callback = NULL; + s_device_disconnected_callback = NULL; + s_acm_host_serial_state_callback = NULL; + s_is_usb_serial_jtag = false; + + if (s_rx_stream_buffer != NULL) { + vStreamBufferDelete(s_rx_stream_buffer); + s_rx_stream_buffer = NULL; + } + + if (s_acm_device != NULL) { + if (cdc_acm_host_close(s_acm_device) != ESP_OK) { + ESP_LOGE(TAG, "Could not close device"); + return ESP_LOADER_ERROR_FAIL; + } + s_acm_device = NULL; + } + + return ESP_LOADER_SUCCESS; +} + + +void loader_port_enter_bootloader(void) +{ + assert(s_acm_device != NULL && s_rx_stream_buffer != NULL); + + if (s_is_usb_serial_jtag) { + usb_serial_jtag_enter_booloader(); + } else { + usb_serial_converter_enter_bootloader(); + } +} + + +void loader_port_reset_target(void) +{ + assert(s_acm_device != NULL && s_rx_stream_buffer != NULL); + + if (s_is_usb_serial_jtag) { + usb_serial_jtag_reset_target(); + } else { + usb_serial_converter_reset_target(); + } +} + + +void loader_port_delay_ms(const uint32_t ms) +{ + usleep(ms * 1000); +} + + +void loader_port_start_timer(const uint32_t ms) +{ + s_time_end = esp_timer_get_time() + ms * 1000; +} + + +uint32_t loader_port_remaining_time(void) +{ + int64_t remaining = (s_time_end - esp_timer_get_time()) / 1000; + return (remaining > 0) ? (uint32_t)remaining : 0; +} + + +void loader_port_debug_print(const char *str) +{ + printf("DEBUG: %s\n", str); +} + +esp_loader_error_t loader_port_change_transmission_rate(const uint32_t baudrate) +{ + assert(s_acm_device != NULL && s_rx_stream_buffer != NULL); + + cdc_acm_line_coding_t line_coding; + if (cdc_acm_host_line_coding_get(s_acm_device, &line_coding) != ESP_OK) { + return ESP_LOADER_ERROR_FAIL; + } + + line_coding.dwDTERate = baudrate; + + if (cdc_acm_host_line_coding_set(s_acm_device, &line_coding) != ESP_OK) { + return ESP_LOADER_ERROR_FAIL; + } + + return ESP_LOADER_SUCCESS; +} diff --git a/esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.h b/esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.h new file mode 100644 index 0000000000..c59742c4ff --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/port/esp32_usb_cdc_acm_port.h @@ -0,0 +1,47 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "esp_loader_io.h" +#include "usb/usb_host.h" +#include "usb/cdc_acm_host.h" +#include "freertos/stream_buffer.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*loader_port_esp32_usb_cdc_acm_callback_t) (void); + +typedef struct { + uint16_t device_vid; + uint16_t device_pid; + uint32_t connection_timeout_ms; + uint32_t out_buffer_size; /* Must be larger than max packet size */ + /* Only set needed callbacks, NULLed ones are ignored .The callbacks are called from + the usb library task, so ensure operations done within are thread-safe */ + loader_port_esp32_usb_cdc_acm_callback_t acm_host_error_callback; + loader_port_esp32_usb_cdc_acm_callback_t device_disconnected_callback; + loader_port_esp32_usb_cdc_acm_callback_t acm_host_serial_state_callback; +} loader_esp32_usb_cdc_acm_config_t; + +esp_loader_error_t loader_port_esp32_usb_cdc_acm_init(const loader_esp32_usb_cdc_acm_config_t *config); + +esp_loader_error_t loader_port_esp32_usb_cdc_acm_deinit(void); + +#ifdef __cplusplus +} +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.c b/esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.c new file mode 100644 index 0000000000..a85d8113b7 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.c @@ -0,0 +1,201 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "hardware/gpio.h" +#include "pico/time.h" +#include "pi_pico_port.h" + +static uart_inst_t *s_uart_inst; +static uint s_uart_rx_pin_num; +static uint s_uart_tx_pin_num; +static uint s_reset_trigger_pin_num; +static uint s_boot_pin_num; +static bool s_peripheral_needs_deinit; + +#if SERIAL_FLASHER_DEBUG_TRACE +static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) +{ + static bool write_prev = false; + + if (write_prev != write) { + write_prev = write; + printf("\n--- %s ---\n", write ? "WRITE" : "READ"); + } + + for (uint32_t i = 0; i < size; i++) { + printf("%02x ", data[i]); + } +} +#endif + +static uint32_t s_time_end; + +// The driver returns a baudrate it managed to achieve which might not be the +// exact baudrate we asked for. This is fine as long as the tolerance is low. +// We are setting it at 1%. +static bool baud_is_within_tolerance(const uint requested_baudrate, const uint got_baudrate) +{ + const float baudrate_error = ((float)((int)requested_baudrate - (int)got_baudrate) + / (float)requested_baudrate + ) * 100.0f; + + return (baudrate_error < 1.0f) ? true : false; +} + +esp_loader_error_t loader_port_write(const uint8_t *data, const uint16_t size, const uint32_t timeout) +{ + const uint32_t deadline_ms = to_ms_since_boot(get_absolute_time()) + timeout; + + size_t pos = 0; + while (pos < size) { + if (to_ms_since_boot(get_absolute_time()) > deadline_ms) { + break; + } + + if (uart_is_writable(s_uart_inst)) { + uart_putc_raw(s_uart_inst, data[pos]); + pos++; + } + } + +#if SERIAL_FLASHER_DEBUG_TRACE + transfer_debug_print(data, pos, true); +#endif + + return (pos == size) ? ESP_LOADER_SUCCESS : ESP_LOADER_ERROR_TIMEOUT; +} + + +esp_loader_error_t loader_port_read(uint8_t *data, const uint16_t size, const uint32_t timeout) +{ + const uint32_t deadline_ms = to_ms_since_boot(get_absolute_time()) + timeout; + + size_t pos = 0; + while (pos < size) { + if (to_ms_since_boot(get_absolute_time()) > deadline_ms) { + break; + } + + if (uart_is_readable(s_uart_inst)) { + data[pos] = uart_getc(s_uart_inst); + pos++; + } + } + +#if SERIAL_FLASHER_DEBUG_TRACE + transfer_debug_print(data, pos, false); +#endif + + return (pos == size) ? ESP_LOADER_SUCCESS : ESP_LOADER_ERROR_TIMEOUT; +} + + +esp_loader_error_t loader_port_pi_pico_init(const loader_pi_pico_config_t *config) +{ + if (!config->dont_initialize_peripheral) { + const uint got_baudrate = uart_init(config->uart_inst, config->baudrate); + + if (!baud_is_within_tolerance(config->baudrate, got_baudrate)) { + return ESP_LOADER_ERROR_FAIL; + } + + gpio_set_function(config->uart_rx_pin_num, GPIO_FUNC_UART); + gpio_set_function(config->uart_tx_pin_num, GPIO_FUNC_UART); + s_peripheral_needs_deinit = true; + } + + gpio_init(config->reset_trigger_pin_num); + gpio_set_dir(config->reset_trigger_pin_num, GPIO_OUT); + + gpio_init(config->boot_pin_num); + gpio_set_dir(config->boot_pin_num, GPIO_OUT); + + s_uart_inst = config->uart_inst; + s_uart_rx_pin_num = config->uart_rx_pin_num; + s_uart_tx_pin_num = config->uart_tx_pin_num; + s_reset_trigger_pin_num = config->reset_trigger_pin_num; + s_boot_pin_num = config->boot_pin_num; + + return ESP_LOADER_SUCCESS; +} + + +void loader_port_pi_pico_deinit(void) +{ + if (s_peripheral_needs_deinit) { + uart_deinit(s_uart_inst); + gpio_deinit(s_uart_rx_pin_num); + gpio_deinit(s_uart_tx_pin_num); + s_peripheral_needs_deinit = false; + } + + gpio_deinit(s_reset_trigger_pin_num); + gpio_deinit(s_boot_pin_num); +} + +void loader_port_enter_bootloader(void) +{ + gpio_put(s_boot_pin_num, SERIAL_FLASHER_BOOT_INVERT ? 1 : 0); + + loader_port_reset_target(); + loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS); + + gpio_put(s_boot_pin_num, SERIAL_FLASHER_BOOT_INVERT ? 0 : 1); +} + + +void loader_port_reset_target(void) +{ + gpio_put(s_reset_trigger_pin_num, SERIAL_FLASHER_RESET_INVERT ? 1 : 0); + loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS); + gpio_put(s_reset_trigger_pin_num, SERIAL_FLASHER_RESET_INVERT ? 0 : 1); +} + + +void loader_port_delay_ms(const uint32_t ms) +{ + sleep_ms(ms); +} + + +void loader_port_start_timer(const uint32_t ms) +{ + s_time_end = to_ms_since_boot(get_absolute_time()) + ms; +} + + +uint32_t loader_port_remaining_time(void) +{ + int32_t remaining = s_time_end - to_ms_since_boot(get_absolute_time()); + return (remaining > 0) ? (uint32_t)remaining : 0; +} + + +void loader_port_debug_print(const char *str) +{ + printf("DEBUG: %s\n", str); +} + +esp_loader_error_t loader_port_change_transmission_rate(const uint32_t baudrate) +{ + const uint got_baudrate = uart_set_baudrate(s_uart_inst, baudrate); + + if (!baud_is_within_tolerance(baudrate, got_baudrate)) { + return ESP_LOADER_ERROR_FAIL; + } + + return ESP_LOADER_SUCCESS; +} diff --git a/esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.h b/esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.h new file mode 100644 index 0000000000..408d60c33b --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/port/pi_pico_port.h @@ -0,0 +1,55 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include "esp_loader_io.h" +#include "hardware/uart.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + uart_inst_t *uart_inst; + uint baudrate; + uint uart_rx_pin_num; + uint uart_tx_pin_num; + uint reset_trigger_pin_num; + uint boot_pin_num; + bool dont_initialize_peripheral; /* Use if the peripheral has already been initialized, + useful when using the peripheral for multiple + purposes (e.g. monitoring) */ +} loader_pi_pico_config_t; + +/** + * @brief Initializes the serial interface. + * + * @param config[in] Port configuration data + * + * @return + * - ESP_LOADER_SUCCESS Success + * - ESP_LOADER_ERROR_FAIL Initialization failure + */ +esp_loader_error_t loader_port_pi_pico_init(const loader_pi_pico_config_t *config); + +/** + * @brief Deinitialize serial interface. + */ +void loader_port_pi_pico_deinit(void); + +#ifdef __cplusplus +} +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.c b/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.c index d733db702f..e0722b728c 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.c +++ b/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.c @@ -33,7 +33,7 @@ #include #include -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) { static bool write_prev = false; @@ -58,37 +58,37 @@ static int32_t s_gpio0_trigger_pin; static speed_t convert_baudrate(int baud) { switch (baud) { - case 50: return B50; - case 75: return B75; - case 110: return B110; - case 134: return B134; - case 150: return B150; - case 200: return B200; - case 300: return B300; - case 600: return B600; - case 1200: return B1200; - case 1800: return B1800; - case 2400: return B2400; - case 4800: return B4800; - case 9600: return B9600; - case 19200: return B19200; - case 38400: return B38400; - case 57600: return B57600; - case 115200: return B115200; - case 230400: return B230400; - case 460800: return B460800; - case 500000: return B500000; - case 576000: return B576000; - case 921600: return B921600; - case 1000000: return B1000000; - case 1152000: return B1152000; - case 1500000: return B1500000; - case 2000000: return B2000000; - case 2500000: return B2500000; - case 3000000: return B3000000; - case 3500000: return B3500000; - case 4000000: return B4000000; - default: return -1; + case 50: return B50; + case 75: return B75; + case 110: return B110; + case 134: return B134; + case 150: return B150; + case 200: return B200; + case 300: return B300; + case 600: return B600; + case 1200: return B1200; + case 1800: return B1800; + case 2400: return B2400; + case 4800: return B4800; + case 9600: return B9600; + case 19200: return B19200; + case 38400: return B38400; + case 57600: return B57600; + case 115200: return B115200; + case 230400: return B230400; + case 460800: return B460800; + case 500000: return B500000; + case 576000: return B576000; + case 921600: return B921600; + case 1000000: return B1000000; + case 1152000: return B1152000; + case 1500000: return B1500000; + case 2000000: return B2000000; + case 2500000: return B2500000; + case 3000000: return B3000000; + case 3500000: return B3500000; + case 4000000: return B4000000; + default: return -1; } } @@ -109,7 +109,7 @@ static int serialOpen (const char *device, uint32_t baudrate) tcgetattr (fd, &options); speed_t baud = convert_baudrate(baudrate); - if(baud < 0) { + if (baud < 0) { printf("Invalid baudrate!\n"); return -1; } @@ -148,7 +148,7 @@ static esp_loader_error_t change_baudrate(int file_desc, int baudrate) struct termios options; speed_t baud = convert_baudrate(baudrate); - if(baud < 0) { + if (baud < 0) { return ESP_LOADER_ERROR_INVALID_PARAM; } @@ -221,6 +221,11 @@ esp_loader_error_t loader_port_raspberry_init(const loader_raspberry_config_t *c return ESP_LOADER_SUCCESS; } +void loader_port_deinit(void) +{ + close(serial); + gpioTerminate(); +} esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_t timeout) { @@ -229,12 +234,12 @@ esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_ if (written < 0) { return ESP_LOADER_ERROR_FAIL; } else if (written < size) { -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, written, true); #endif return ESP_LOADER_ERROR_TIMEOUT; } else { -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, written, true); #endif return ESP_LOADER_SUCCESS; @@ -246,7 +251,7 @@ esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeo { RETURN_ON_ERROR( read_data(data, size) ); -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, size, false); #endif @@ -257,18 +262,18 @@ esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeo // Set GPIO0 LOW, then assert reset pin for 50 milliseconds. void loader_port_enter_bootloader(void) { - gpioWrite(s_gpio0_trigger_pin, 0); + gpioWrite(s_gpio0_trigger_pin, SERIAL_FLASHER_BOOT_INVERT ? 1 : 0); loader_port_reset_target(); loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS); - gpioWrite(s_gpio0_trigger_pin, 1); + gpioWrite(s_gpio0_trigger_pin, SERIAL_FLASHER_BOOT_INVERT ? 0 : 1); } void loader_port_reset_target(void) { - gpioWrite(s_reset_trigger_pin, 0); + gpioWrite(s_reset_trigger_pin, SERIAL_FLASHER_RESET_INVERT ? 1 : 0); loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS); - gpioWrite(s_reset_trigger_pin, 1); + gpioWrite(s_reset_trigger_pin, SERIAL_FLASHER_RESET_INVERT ? 0 : 1); } @@ -299,4 +304,4 @@ void loader_port_debug_print(const char *str) esp_loader_error_t loader_port_change_transmission_rate(uint32_t baudrate) { return change_baudrate(serial, baudrate); -} \ No newline at end of file +} diff --git a/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.h b/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.h index 803ab72ddb..91a382c2fb 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.h +++ b/esp_flasher/lib/esp-serial-flasher/port/raspberry_port.h @@ -30,6 +30,7 @@ typedef struct { } loader_raspberry_config_t; esp_loader_error_t loader_port_raspberry_init(const loader_raspberry_config_t *config); +void loader_port_deinit(void); #ifdef __cplusplus } diff --git a/esp_flasher/lib/esp-serial-flasher/port/stm32_port.c b/esp_flasher/lib/esp-serial-flasher/port/stm32_port.c index 716c9c91b0..c9b2c67a72 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/stm32_port.c +++ b/esp_flasher/lib/esp-serial-flasher/port/stm32_port.c @@ -21,10 +21,10 @@ #include "stm32_port.h" static UART_HandleTypeDef *uart; -static GPIO_TypeDef* gpio_port_io0, *gpio_port_rst; +static GPIO_TypeDef *gpio_port_io0, *gpio_port_rst; static uint16_t gpio_num_io0, gpio_num_rst; -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) { static bool write_prev = false; @@ -47,7 +47,7 @@ esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_ HAL_StatusTypeDef err = HAL_UART_Transmit(uart, (uint8_t *)data, size, timeout); if (err == HAL_OK) { -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, size, true); #endif return ESP_LOADER_SUCCESS; @@ -64,7 +64,7 @@ esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeo HAL_StatusTypeDef err = HAL_UART_Receive(uart, data, size, timeout); if (err == HAL_OK) { -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, size, false); #endif return ESP_LOADER_SUCCESS; @@ -89,18 +89,18 @@ void loader_port_stm32_init(loader_stm32_config_t *config) // assert reset pin for 100 milliseconds. void loader_port_enter_bootloader(void) { - HAL_GPIO_WritePin(gpio_port_io0, gpio_num_io0, GPIO_PIN_RESET); + HAL_GPIO_WritePin(gpio_port_io0, gpio_num_io0, SERIAL_FLASHER_BOOT_INVERT ? GPIO_PIN_SET : GPIO_PIN_RESET); loader_port_reset_target(); HAL_Delay(SERIAL_FLASHER_BOOT_HOLD_TIME_MS); - HAL_GPIO_WritePin(gpio_port_io0, gpio_num_io0, GPIO_PIN_SET); + HAL_GPIO_WritePin(gpio_port_io0, gpio_num_io0, SERIAL_FLASHER_BOOT_INVERT ? GPIO_PIN_RESET : GPIO_PIN_SET); } void loader_port_reset_target(void) { - HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_RESET); + HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, SERIAL_FLASHER_RESET_INVERT ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_Delay(SERIAL_FLASHER_RESET_HOLD_TIME_MS); - HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_SET); + HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, SERIAL_FLASHER_RESET_INVERT ? GPIO_PIN_RESET : GPIO_PIN_SET); } @@ -125,14 +125,14 @@ uint32_t loader_port_remaining_time(void) void loader_port_debug_print(const char *str) { - printf("DEBUG: %s", str); + printf("DEBUG: %s\n", str); } esp_loader_error_t loader_port_change_transmission_rate(uint32_t baudrate) { uart->Init.BaudRate = baudrate; - if( HAL_UART_Init(uart) != HAL_OK ) { + if ( HAL_UART_Init(uart) != HAL_OK ) { return ESP_LOADER_ERROR_FAIL; } diff --git a/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.c b/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.c index 7440bcfc9d..5eeda3baa4 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.c +++ b/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.c @@ -26,7 +26,7 @@ static struct tty_serial tty; static char tty_rx_buf[CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE]; static char tty_tx_buf[CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE]; -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) { static bool write_prev = false; @@ -45,8 +45,8 @@ static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) esp_loader_error_t configure_tty() { if (tty_init(&tty, uart_dev) < 0 || - tty_set_rx_buf(&tty, tty_rx_buf, sizeof(tty_rx_buf)) < 0 || - tty_set_tx_buf(&tty, tty_tx_buf, sizeof(tty_tx_buf)) < 0) { + tty_set_rx_buf(&tty, tty_rx_buf, sizeof(tty_rx_buf)) < 0 || + tty_set_tx_buf(&tty, tty_tx_buf, sizeof(tty_tx_buf)) < 0) { return ESP_LOADER_ERROR_FAIL; } @@ -65,12 +65,12 @@ esp_loader_error_t loader_port_read(uint8_t *data, const uint16_t size, const ui tty_set_rx_timeout(&tty, timeout); while (remaining > 0) { const uint16_t chunk_size = remaining < CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE ? - remaining : CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE; + remaining : CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE; ssize_t read = tty_read(&tty, &data[total_read], chunk_size); if (read < 0) { return ESP_LOADER_ERROR_TIMEOUT; } -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, read, false); #endif total_read += read; @@ -92,12 +92,12 @@ esp_loader_error_t loader_port_write(const uint8_t *data, const uint16_t size, c tty_set_tx_timeout(&tty, timeout); while (remaining > 0) { const uint16_t chunk_size = remaining < CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE ? - remaining : CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE; + remaining : CONFIG_ESP_SERIAL_FLASHER_UART_BUFSIZE; ssize_t written = tty_write(&tty, &data[total_written], chunk_size); if (written < 0) { return ESP_LOADER_ERROR_TIMEOUT; } -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, written, true); #endif total_written += written; @@ -117,17 +117,17 @@ esp_loader_error_t loader_port_zephyr_init(const loader_zephyr_config_t *config) void loader_port_reset_target(void) { - gpio_pin_set_dt(&enable_spec, false); + gpio_pin_set_dt(&enable_spec, SERIAL_FLASHER_RESET_INVERT ? true : false); loader_port_delay_ms(CONFIG_SERIAL_FLASHER_RESET_HOLD_TIME_MS); - gpio_pin_set_dt(&enable_spec, true); + gpio_pin_set_dt(&enable_spec, SERIAL_FLASHER_RESET_INVERT ? false : true); } void loader_port_enter_bootloader(void) { - gpio_pin_set_dt(&boot_spec, false); + gpio_pin_set_dt(&boot_spec, SERIAL_FLASHER_BOOT_INVERT ? true : false); loader_port_reset_target(); loader_port_delay_ms(CONFIG_SERIAL_FLASHER_BOOT_HOLD_TIME_MS); - gpio_pin_set_dt(&boot_spec, true); + gpio_pin_set_dt(&boot_spec, SERIAL_FLASHER_BOOT_INVERT ? false : true); } void loader_port_delay_ms(uint32_t ms) diff --git a/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.h b/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.h index 0b104e3756..a6e8e7f148 100644 --- a/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.h +++ b/esp_flasher/lib/esp-serial-flasher/port/zephyr_port.h @@ -36,4 +36,3 @@ esp_loader_error_t loader_port_zephyr_init(const loader_zephyr_config_t *config) #ifdef __cplusplus } #endif - diff --git a/esp_flasher/lib/esp-serial-flasher/private_include/esp_stubs.h b/esp_flasher/lib/esp-serial-flasher/private_include/esp_stubs.h new file mode 100644 index 0000000000..db0efb00c1 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/private_include/esp_stubs.h @@ -0,0 +1,44 @@ +/* Copyright 2020-2025 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// auto-generated stubs from esp-flasher-stub v0.3.0 + +#pragma once + +#include +#include +#include "esp_loader.h" + +#ifdef __cplusplus +extern "C" { +#endif + +bool esp_stub_get_running(void); +void esp_stub_set_running(bool stub_status); + +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) + +typedef struct { + esp_loader_bin_header_t header; + esp_loader_bin_segment_t segments[2]; +} esp_stub_t; + +extern const esp_stub_t esp_stub[ESP_MAX_CHIP]; + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/private_include/esp_targets.h b/esp_flasher/lib/esp-serial-flasher/private_include/esp_targets.h index cf8af91fa8..e9ab954503 100644 --- a/esp_flasher/lib/esp-serial-flasher/private_include/esp_targets.h +++ b/esp_flasher/lib/esp-serial-flasher/private_include/esp_targets.h @@ -29,5 +29,10 @@ typedef struct { } target_registers_t; esp_loader_error_t loader_detect_chip(target_chip_t *target, const target_registers_t **regs); +esp_loader_error_t loader_read_mac(target_chip_t target_code, uint8_t *mac); +bool encryption_in_begin_flash_cmd(target_chip_t target); + +#ifndef SERIAL_FLASHER_INTERFACE_SDIO esp_loader_error_t loader_read_spi_config(target_chip_t target_chip, uint32_t *spi_config); -bool encryption_in_begin_flash_cmd(target_chip_t target); \ No newline at end of file +target_chip_t target_from_chip_id(uint32_t chip_id); +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/private_include/md5_hash.h b/esp_flasher/lib/esp-serial-flasher/private_include/md5_hash.h index eb5738c8b0..3292b0a6f9 100644 --- a/esp_flasher/lib/esp-serial-flasher/private_include/md5_hash.h +++ b/esp_flasher/lib/esp-serial-flasher/private_include/md5_hash.h @@ -14,9 +14,9 @@ extern "C" { #endif struct MD5Context { - uint32_t buf[4]; - uint32_t bits[2]; - uint8_t in[64]; + uint32_t buf[4]; + uint32_t bits[2]; + uint8_t in[64]; }; void MD5Init(struct MD5Context *context); @@ -25,4 +25,4 @@ void MD5Final(unsigned char digest[16], struct MD5Context *context); #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/private_include/protocol.h b/esp_flasher/lib/esp-serial-flasher/private_include/protocol.h index fb8b086fd4..386ae71812 100644 --- a/esp_flasher/lib/esp-serial-flasher/private_include/protocol.h +++ b/esp_flasher/lib/esp-serial-flasher/private_include/protocol.h @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,27 +29,50 @@ extern "C" { #define READ_DIRECTION 1 #define WRITE_DIRECTION 0 -#define MD5_SIZE 32 +#define MD5_SIZE_ROM 32 +#define MD5_SIZE_STUB 16 + +// Maximum block sized for RAM and Flash writes, respectively. +#define ESP_RAM_BLOCK 0x1800 + +#ifndef MAX +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#endif + +#ifndef MIN +#define MIN(a, b) (((int32_t)(a)) < ((int32_t)(b)) ? ((int32_t)(a)) : ((int32_t)(b))) +#endif + +#ifndef ROUNDUP +#define ROUNDUP(a, b) ((((unsigned)a + (unsigned)b - 1) / (unsigned)b) * (unsigned)b) +#endif + +#define MAX_RESP_DATA_SIZE 64 +#define READ_FLASH_ROM_DATA_SIZE 64 typedef enum __attribute__((packed)) { FLASH_BEGIN = 0x02, - FLASH_DATA = 0x03, - FLASH_END = 0x04, - MEM_BEGIN = 0x05, - MEM_END = 0x06, - MEM_DATA = 0x07, - SYNC = 0x08, - WRITE_REG = 0x09, - READ_REG = 0x0a, - - SPI_SET_PARAMS = 0x0b, - SPI_ATTACH = 0x0d, - CHANGE_BAUDRATE = 0x0f, + FLASH_DATA = 0x03, + FLASH_END = 0x04, + MEM_BEGIN = 0x05, + MEM_END = 0x06, + MEM_DATA = 0x07, + SYNC = 0x08, + WRITE_REG = 0x09, + READ_REG = 0x0a, + SPI_SET_PARAMS = 0x0b, + SPI_ATTACH = 0x0d, + READ_FLASH_ROM = 0x0e, + CHANGE_BAUDRATE = 0x0f, FLASH_DEFL_BEGIN = 0x10, - FLASH_DEFL_DATA = 0x11, - FLASH_DEFL_END = 0x12, - SPI_FLASH_MD5 = 0x13, + FLASH_DEFL_DATA = 0x11, + FLASH_DEFL_END = 0x12, + SPI_FLASH_MD5 = 0x13, + GET_SECURITY_INFO = 0x14, + ERASE_FLASH = 0xd0, + ERASE_REGION = 0xd1, + READ_FLASH_STUB = 0xd2, } command_t; typedef enum __attribute__((packed)) @@ -62,6 +85,18 @@ typedef enum __attribute__((packed)) FLASH_READ_ERR = 0x09, // SPI read failed READ_LENGTH_ERR = 0x0a, // SPI read request length is too long DEFLATE_ERROR = 0x0b, // ESP32 compressed uploads only + + STUB_BAD_DATA_LEN = 0xC0, + STUB_BAD_DATA_CHECKSUM = 0xC1, + STUB_BAD_BLOCKSIZE = 0xC2, + STUB_INVALID_COMMAND = 0xC3, + STUB_FAILED_SPI_OP = 0xC4, + STUB_FAILED_SPI_UNLOCK = 0xC5, + STUB_NOT_IN_FLASH_MODE = 0xC6, + STUB_INFLATE_ERROR = 0xC7, + STUB_NOT_ENOUGH_DATA = 0xC8, + STUB_TOO_MUCH_DATA = 0xC9, + STUB_CMD_NOT_IMPLEMENTED = 0xFF, } error_code_t; typedef struct __attribute__((packed)) @@ -97,6 +132,34 @@ typedef struct __attribute__((packed)) uint32_t stay_in_loader; } flash_end_command_t; +typedef struct __attribute__((packed)) +{ + command_common_t common; + uint32_t address; + uint32_t size; +} flash_read_rom_cmd; + +typedef struct __attribute__((packed)) +{ + command_common_t common; + uint32_t address; + uint32_t total_size; + uint32_t packet_data_size; + uint32_t max_inflight_packets; +} flash_read_stub_cmd; + +typedef struct __attribute__((packed)) +{ + command_common_t common; +} flash_erase_chip_cmd; + +typedef struct __attribute__((packed)) +{ + command_common_t common; + uint32_t offset; + uint32_t size; +} flash_erase_region_cmd; + typedef struct __attribute__((packed)) { command_common_t common; @@ -157,6 +220,11 @@ typedef struct __attribute__((packed)) uint32_t reserved_1; } spi_flash_md5_command_t; +typedef struct __attribute__((packed)) +{ + command_common_t common; +} get_security_info_command_t; + typedef struct __attribute__((packed)) { uint8_t direction; @@ -171,19 +239,6 @@ typedef struct __attribute__((packed)) uint8_t error; } response_status_t; -typedef struct __attribute__((packed)) -{ - common_response_t common; - response_status_t status; -} response_t; - -typedef struct __attribute__((packed)) -{ - common_response_t common; - uint8_t md5[MD5_SIZE]; // ROM only - response_status_t status; -} rom_md5_response_t; - typedef struct __attribute__((packed)) { command_common_t common; @@ -195,23 +250,59 @@ typedef struct __attribute__((packed)) uint32_t status_mask; } write_spi_command_t; +#define GET_SECURITY_INFO_SECURE_BOOT_EN (1 << 0) +#define GET_SECURITY_INFO_SECURE_BOOT_AGGRESSIVE_REVOKE (1 << 1) +#define GET_SECURITY_INFO_SECURE_DOWNLOAD_ENABLE (1 << 2) +#define GET_SECURITY_INFO_SECURE_BOOT_KEY_REVOKE0 (1 << 3) +#define GET_SECURITY_INFO_SECURE_BOOT_KEY_REVOKE1 (1 << 4) +#define GET_SECURITY_INFO_SECURE_BOOT_KEY_REVOKE2 (1 << 5) +#define GET_SECURITY_INFO_SOFT_DIS_JTAG (1 << 6) +#define GET_SECURITY_INFO_HARD_DIS_JTAG (1 << 7) +#define GET_SECURITY_INFO_DIS_USB (1 << 8) +#define GET_SECURITY_INFO_DIS_DOWNLOAD_DCACHE (1 << 9) +#define GET_SECURITY_INFO_DIS_DOWNLOAD_ICACHE (1 << 10) + +typedef struct __attribute__((packed)) +{ + uint32_t flags; + uint8_t flash_crypt_cnt; + uint8_t key_purposes[7]; + uint32_t chip_id; + uint32_t eco_version; +} get_security_info_response_data_t; + esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_args); -#ifdef SERIAL_FLASHER_INTERFACE_UART esp_loader_error_t loader_flash_begin_cmd(uint32_t offset, uint32_t erase_size, uint32_t block_size, uint32_t blocks_to_write, bool encryption); esp_loader_error_t loader_flash_data_cmd(const uint8_t *data, uint32_t size); esp_loader_error_t loader_flash_end_cmd(bool stay_in_loader); +#ifndef SERIAL_FLASHER_INTERFACE_SPI +esp_loader_error_t loader_md5_cmd(uint32_t address, uint32_t size, uint8_t *md5_out); + +esp_loader_error_t loader_spi_parameters(uint32_t total_size); + +esp_loader_error_t loader_flash_erase_cmd(void); + +esp_loader_error_t loader_flash_erase_region_cmd(uint32_t offset, uint32_t size); +#endif /* SERIAL_FLASHER_INTERFACE_SPI */ + +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) +esp_loader_error_t loader_flash_read_rom_cmd(uint32_t address, uint8_t *data); + +esp_loader_error_t loader_flash_read_stub_cmd(uint32_t address, uint32_t size, uint32_t size_per_packet); + esp_loader_error_t loader_sync_cmd(void); esp_loader_error_t loader_spi_attach_cmd(uint32_t config); -esp_loader_error_t loader_md5_cmd(uint32_t address, uint32_t size, uint8_t *md5_out); +esp_loader_error_t loader_run_stub(target_chip_t target); -esp_loader_error_t loader_spi_parameters(uint32_t total_size); -#endif /* SERIAL_FLASHER_INTERFACE_UART */ +esp_loader_error_t loader_get_security_info_cmd(get_security_info_response_data_t *response, + uint32_t *response_recv_size); +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ esp_loader_error_t loader_mem_begin_cmd(uint32_t offset, uint32_t size, uint32_t blocks_to_write, uint32_t block_size); @@ -223,8 +314,12 @@ esp_loader_error_t loader_write_reg_cmd(uint32_t address, uint32_t value, uint32 esp_loader_error_t loader_read_reg_cmd(uint32_t address, uint32_t *reg); -esp_loader_error_t loader_change_baudrate_cmd(uint32_t baudrate); +#ifndef SERIAL_FLASHER_INTERFACE_SDIO + +esp_loader_error_t loader_change_baudrate_cmd(uint32_t new_baudrate, uint32_t old_baudrate); + +#endif /* SERIAL_FLASHER_INTERFACE_SDIO */ #ifdef __cplusplus } -#endif \ No newline at end of file +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/private_include/protocol_prv.h b/esp_flasher/lib/esp-serial-flasher/private_include/protocol_prv.h index 3b95756062..8ec88c2d0e 100644 --- a/esp_flasher/lib/esp-serial-flasher/private_include/protocol_prv.h +++ b/esp_flasher/lib/esp-serial-flasher/private_include/protocol_prv.h @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,11 +21,20 @@ #include "esp_loader.h" #include "protocol.h" -void log_loader_internal_error(error_code_t error); - -esp_loader_error_t send_cmd(const void *cmd_data, uint32_t size, uint32_t *reg_value); +typedef struct { + const void *cmd; + size_t cmd_size; + const void *data; // Set to NULL if the command has no data + size_t data_size; + void *resp_data; // Set to NULL if the response has no data + size_t resp_data_size; + uint32_t *resp_data_recv_size; /* Out parameter indicating actual size of the response read + for commands where response size can vary, in which + case resp_data_size is the maximum response data size allowed. + Set to NULL to require fixed response size of resp_data_size. */ + uint32_t *reg_value; // Out parameter for the READ_REG command, will return zero otherwise +} send_cmd_config; -esp_loader_error_t send_cmd_with_data(const void *cmd_data, size_t cmd_size, - const void *data, size_t data_size); +void log_loader_internal_error(error_code_t error); -esp_loader_error_t send_cmd_md5(const void *cmd_data, size_t cmd_size, uint8_t md5_out[MD5_SIZE]); +esp_loader_error_t send_cmd(const send_cmd_config *config); diff --git a/esp_flasher/lib/esp-serial-flasher/private_include/sip.h b/esp_flasher/lib/esp-serial-flasher/private_include/sip.h new file mode 100644 index 0000000000..9a07698a5a --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/private_include/sip.h @@ -0,0 +1,73 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define SIP_HDR_F_SYNC 0x4 +#define SIP_IFIDX_MASK 0xf0 +#define SIP_IFIDX_S 4 +#define SIP_TYPE_MASK 0x0f +#define SIP_TYPE_S 0 + +#define SIP_PACKET_SIZE 256 + +typedef enum { + SIP_PACKET_TYPE_CTRL = 0, + SIP_PACKET_TYPE_DATA, +} sip_packet_type_t; + +typedef enum { + SIP_CMD_ID_GET_VER = 0, + SIP_CMD_ID_WRITE_MEMORY = 1, + SIP_CMD_ID_BOOTUP = 5, +} sip_cmd_id_t; + +typedef struct __attribute__((packed)) +{ + uint8_t tid; + uint8_t ac; + uint8_t p2p: 1, + enc_flag: 7; + uint8_t hw_kid; +} sip_tx_data_info_t; + +typedef struct __attribute__((packed)) +{ + union { + uint32_t cmdid; + sip_tx_data_info_t dinfo; + } u; +} sip_tx_info_t; + +typedef struct __attribute__((packed)) +{ + uint8_t fc[2]; + uint16_t len; // Length of packet, including the header itself, must align to 4 + union { + uint32_t recycled_credits; + sip_tx_info_t tx_info; + } u; + uint32_t sequence_num; +} sip_header_t; + +typedef struct __attribute__((packed)) +{ + uint32_t addr; + uint32_t len; +} sip_cmd_write_memory; + +typedef struct __attribute__((packed)) +{ + uint32_t boot_addr; + uint32_t discard_link; +} sip_cmd_bootup; diff --git a/esp_flasher/lib/esp-serial-flasher/private_include/slip.h b/esp_flasher/lib/esp-serial-flasher/private_include/slip.h index 00f1f7d0d2..28a56265cb 100644 --- a/esp_flasher/lib/esp-serial-flasher/private_include/slip.h +++ b/esp_flasher/lib/esp-serial-flasher/private_include/slip.h @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,9 +19,7 @@ #include #include -esp_loader_error_t SLIP_receive_data(uint8_t *buff, size_t size); - -esp_loader_error_t SLIP_receive_packet(uint8_t *buff, size_t size); +esp_loader_error_t SLIP_receive_packet(uint8_t *buff, size_t max_size, size_t *recv_size); esp_loader_error_t SLIP_send(const uint8_t *data, size_t size); diff --git a/esp_flasher/lib/esp-serial-flasher/pytest.ini b/esp_flasher/lib/esp-serial-flasher/pytest.ini new file mode 100644 index 0000000000..97e5f2a2fb --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/pytest.ini @@ -0,0 +1,31 @@ +[pytest] +# only the files with prefix `pytest_` would be recognized as pytest test scripts. +python_files = pytest_*.py + +norecursedirs = managed_components + + +# set traceback to "short" to prevent the overwhelming tracebacks --embedded-services serial,esp,idf +addopts = + -s -vv + --tb short + --strict-markers + --skip-check-coredump y + --logfile-extension ".txt" + --check-duplicates y + +markers = + # target markers + esp32: support esp32 target + esp32s3: support esp32s3 target + esp32p4: support esp32p4 target + stm32: support stm32 target + raspberry: support raspberry target + pi_pico: support pi_pico target + zephyr: support zephyr target + +# log related +log_cli = True +log_cli_level = INFO +log_cli_format = %(asctime)s %(levelname)s %(message)s +log_cli_date_format = %Y-%m-%d %H:%M:%S diff --git a/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c b/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c index 9933f797c8..dc481f1587 100644 --- a/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c +++ b/esp_flasher/lib/esp-serial-flasher/src/esp_loader.c @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,26 +16,22 @@ #include "protocol.h" #include "esp_loader_io.h" #include "esp_loader.h" +#include "esp_stubs.h" #include "esp_targets.h" #include "md5_hash.h" +#include "slip.h" #include #include -#ifndef MAX -#define MAX(a, b) ((a) > (b)) ? (a) : (b) -#endif - -#ifndef MIN -#define MIN(a, b) ((a) < (b)) ? (a) : (b) -#endif +#define SHORT_TIMEOUT 100 +#define DEFAULT_TIMEOUT 1000 +#define DEFAULT_FLASH_TIMEOUT 3000 +#define LOAD_RAM_TIMEOUT_PER_MB 2000000 +#define MD5_TIMEOUT_PER_MB 8000 +#define ERASE_FLASH_TIMEOUT_PER_MB 10000 -#ifndef ROUNDUP -#define ROUNDUP(a, b) (((int)a + (int)b - 1) / (int)b) -#endif - -static const uint32_t DEFAULT_TIMEOUT = 1000; -static const uint32_t DEFAULT_FLASH_TIMEOUT = 3000; // timeout for most flash operations -static const uint32_t LOAD_RAM_TIMEOUT_PER_MB = 2000000; // timeout (per megabyte) for erasing a region +#define FLASH_SECTOR_SIZE 4096 +#define ROM_FLASH_BLOCK_SIZE 1024 typedef enum { SPI_FLASH_READ_ID = 0x9F @@ -44,9 +40,14 @@ typedef enum { static const target_registers_t *s_reg = NULL; static target_chip_t s_target = ESP_UNKNOWN_CHIP; +#ifndef SERIAL_FLASHER_INTERFACE_SPI +#define DEFAULT_FLASH_SIZE 2 * 1024 * 1024 +static uint32_t s_flash_write_size = 0; +static uint32_t s_target_flash_size = 0; +#endif + #if MD5_ENABLED -static const uint32_t MD5_TIMEOUT_PER_MB = 800; static struct MD5Context s_md5_context; static uint32_t s_start_address; static uint32_t s_image_size; @@ -68,15 +69,8 @@ static inline void md5_final(uint8_t digets[16]) MD5Final(digets, &s_md5_context); } -#else - -static inline void init_md5(uint32_t address, uint32_t size) { } -static inline void md5_update(const uint8_t *data, uint32_t size) { } -static inline void md5_final(uint8_t digets[16]) { } - #endif - static uint32_t timeout_per_mb(uint32_t size_bytes, uint32_t time_per_mb) { uint32_t timeout = time_per_mb * (size_bytes / 1e6); @@ -85,27 +79,26 @@ static uint32_t timeout_per_mb(uint32_t size_bytes, uint32_t time_per_mb) esp_loader_error_t esp_loader_connect(esp_loader_connect_args_t *connect_args) { - // if bootloader mode ever give issues, uncomment this function - // it shouldnt be needed because we enter bootloader mode before this function is called - // this function breaks bootloader mode for the Multi-fucc and Xeon - //loader_port_enter_bootloader(); + loader_port_enter_bootloader(); RETURN_ON_ERROR(loader_initialize_conn(connect_args)); RETURN_ON_ERROR(loader_detect_chip(&s_target, &s_reg)); -#ifdef SERIAL_FLASHER_INTERFACE_UART - esp_loader_error_t err; - uint32_t spi_config; +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) + s_target_flash_size = 0; + if (s_target == ESP8266_CHIP) { - err = loader_flash_begin_cmd(0, 0, 0, 0, s_target); + loader_port_start_timer(DEFAULT_TIMEOUT); + return loader_flash_begin_cmd(0, 0, 0, 0, s_target); } else { + uint32_t spi_config; RETURN_ON_ERROR( loader_read_spi_config(s_target, &spi_config) ); loader_port_start_timer(DEFAULT_TIMEOUT); - err = loader_spi_attach_cmd(spi_config); + return loader_spi_attach_cmd(spi_config); } - return err; -#endif /* SERIAL_FLASHER_INTERFACE_UART */ +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ + return ESP_LOADER_SUCCESS; } @@ -114,9 +107,55 @@ target_chip_t esp_loader_get_target(void) return s_target; } +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) +esp_loader_error_t esp_loader_connect_with_stub(esp_loader_connect_args_t *connect_args) +{ + s_target_flash_size = 0; + + loader_port_enter_bootloader(); + + RETURN_ON_ERROR(loader_initialize_conn(connect_args)); + + RETURN_ON_ERROR(loader_detect_chip(&s_target, &s_reg)); + + if (s_target == ESP32P4_CHIP || s_target == ESP32C5_CHIP) { + return ESP_LOADER_ERROR_UNSUPPORTED_CHIP; + } + + RETURN_ON_ERROR(loader_run_stub(s_target)); + + return ESP_LOADER_SUCCESS; +} + #ifdef SERIAL_FLASHER_INTERFACE_UART -static uint32_t s_flash_write_size = 0; +esp_loader_error_t esp_loader_connect_secure_download_mode(esp_loader_connect_args_t *connect_args, + const uint32_t flash_size, const target_chip_t target_chip) +{ + s_target_flash_size = flash_size; + s_target = target_chip; + + loader_port_enter_bootloader(); + + RETURN_ON_ERROR(loader_initialize_conn(connect_args)); + + if (s_target == ESP_UNKNOWN_CHIP) { + RETURN_ON_ERROR(loader_detect_chip(&s_target, &s_reg)); + } + + if (s_target == ESP8266_CHIP) { + loader_port_start_timer(DEFAULT_TIMEOUT); + return loader_flash_begin_cmd(0, 0, 0, 0, s_target); + } else { + loader_port_start_timer(DEFAULT_TIMEOUT); + return loader_spi_attach_cmd(0); + } + return ESP_LOADER_SUCCESS; +} +#endif /* SERIAL_FLASHER_INTERFACE_UART */ +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ + +#ifndef SERIAL_FLASHER_INTERFACE_SPI static esp_loader_error_t spi_set_data_lengths(size_t mosi_bits, size_t miso_bits) { if (mosi_bits > 0) { @@ -210,26 +249,10 @@ static esp_loader_error_t spi_flash_command(spi_flash_cmd_t cmd, void *data_tx, return ESP_LOADER_SUCCESS; } -static esp_loader_error_t detect_flash_size(size_t *flash_size) -{ - uint32_t flash_id = 0; - - RETURN_ON_ERROR( spi_flash_command(SPI_FLASH_READ_ID, NULL, 0, &flash_id, 24) ); - uint32_t size_id = flash_id >> 16; - - if (size_id < 0x12 || size_id > 0x18) { - return ESP_LOADER_ERROR_UNSUPPORTED_CHIP; - } - - *flash_size = 1 << size_id; - - return ESP_LOADER_SUCCESS; -} - static uint32_t calc_erase_size(const target_chip_t target, const uint32_t offset, const uint32_t image_size) { - if (target != ESP8266_CHIP) { + if (target != ESP8266_CHIP || esp_stub_get_running()) { return image_size; } else { /* Needed to fix a bug in the ESP8266 ROM */ @@ -251,29 +274,97 @@ static uint32_t calc_erase_size(const target_chip_t target, const uint32_t offse } } +esp_loader_error_t esp_loader_flash_detect_size(uint32_t *flash_size) +{ + typedef struct { + uint8_t id; + uint32_t size; + } size_id_size_pair_t; + + /* There is no rule manufacturers have to follow for assigning these parts of the flash ID, + these constants have been taken from esptool source code. */ + static const size_id_size_pair_t size_mapping[] = { + { 0x12, 256 * 1024 }, + { 0x13, 512 * 1024 }, + { 0x14, 1 * 1024 * 1024 }, + { 0x15, 2 * 1024 * 1024 }, + { 0x16, 4 * 1024 * 1024 }, + { 0x17, 8 * 1024 * 1024 }, + { 0x18, 16 * 1024 * 1024 }, + { 0x19, 32 * 1024 * 1024 }, + { 0x1A, 64 * 1024 * 1024 }, + { 0x1B, 128 * 1024 * 1024 }, + { 0x1C, 256 * 1024 * 1024 }, + { 0x20, 64 * 1024 * 1024 }, + { 0x21, 128 * 1024 * 1024 }, + { 0x22, 256 * 1024 * 1024 }, + { 0x32, 256 * 1024 }, + { 0x33, 512 * 1024 }, + { 0x34, 1 * 1024 * 1024 }, + { 0x35, 2 * 1024 * 1024 }, + { 0x36, 4 * 1024 * 1024 }, + { 0x37, 8 * 1024 * 1024 }, + { 0x38, 16 * 1024 * 1024 }, + { 0x39, 32 * 1024 * 1024 }, + { 0x3A, 64 * 1024 * 1024 }, + }; + + uint32_t flash_id = 0; + RETURN_ON_ERROR( spi_flash_command(SPI_FLASH_READ_ID, NULL, 0, &flash_id, 24) ); + uint8_t size_id = flash_id >> 16; + + // Try finding the size id within supported size ids + for (size_t i = 0; i < sizeof(size_mapping) / sizeof(size_mapping[0]); i++) { + if (size_id == size_mapping[i].id) { + *flash_size = size_mapping[i].size; + return ESP_LOADER_SUCCESS; + } + } + + return ESP_LOADER_ERROR_UNSUPPORTED_CHIP; +} + +static esp_loader_error_t init_flash_params(void) +{ + /* Flash size will be known in advance if we're in secure download mode or we already read it*/ + if (s_target_flash_size == 0) { + if (esp_loader_flash_detect_size(&s_target_flash_size) != ESP_LOADER_SUCCESS) { + loader_port_debug_print("Flash size detection failed, falling back to default"); + s_target_flash_size = DEFAULT_FLASH_SIZE; + } + } + +#ifndef SERIAL_FLASHER_INTERFACE_SDIO + loader_port_start_timer(DEFAULT_TIMEOUT); + RETURN_ON_ERROR(loader_spi_parameters(s_target_flash_size)); +#endif + + return ESP_LOADER_SUCCESS; +} + esp_loader_error_t esp_loader_flash_start(uint32_t offset, uint32_t image_size, uint32_t block_size) { s_flash_write_size = block_size; - size_t flash_size = 0; - if (detect_flash_size(&flash_size) == ESP_LOADER_SUCCESS) { - if (image_size > flash_size) { - return ESP_LOADER_ERROR_IMAGE_SIZE; - } - loader_port_start_timer(DEFAULT_TIMEOUT); - RETURN_ON_ERROR( loader_spi_parameters(flash_size) ); - } else { - loader_port_debug_print("Flash size detection failed, falling back to default"); + // Both the address and image size must be aligned to 4 bytes + if (offset % 4 != 0 || image_size % 4 != 0) { + return ESP_LOADER_ERROR_INVALID_PARAM; } + RETURN_ON_ERROR(init_flash_params()); + if (image_size + offset > s_target_flash_size) { + return ESP_LOADER_ERROR_IMAGE_SIZE; + } + +#if MD5_ENABLED init_md5(offset, image_size); +#endif - bool encryption_in_cmd = encryption_in_begin_flash_cmd(s_target); + bool encryption_in_cmd = encryption_in_begin_flash_cmd(s_target) && !esp_stub_get_running(); const uint32_t erase_size = calc_erase_size(esp_loader_get_target(), offset, image_size); const uint32_t blocks_to_write = (image_size + block_size - 1) / block_size; - const uint32_t erase_region_timeout_per_mb = 10000; - loader_port_start_timer(timeout_per_mb(erase_size, erase_region_timeout_per_mb)); + loader_port_start_timer(timeout_per_mb(erase_size, ERASE_FLASH_TIMEOUT_PER_MB)); return loader_flash_begin_cmd(offset, erase_size, block_size, blocks_to_write, encryption_in_cmd); } @@ -293,7 +384,9 @@ esp_loader_error_t esp_loader_flash_write(void *payload, uint32_t size) data[padding_index++] = padding_pattern; } +#if MD5_ENABLED md5_update(payload, (size + 3) & ~3); +#endif unsigned int attempt = 0; esp_loader_error_t result = ESP_LOADER_ERROR_FAIL; @@ -313,10 +406,266 @@ esp_loader_error_t esp_loader_flash_finish(bool reboot) return loader_flash_end_cmd(!reboot); } -#endif /* SERIAL_FLASHER_INTERFACE_UART */ + +esp_loader_error_t esp_loader_flash_erase(void) +{ + if (esp_stub_get_running()) { + RETURN_ON_ERROR(init_flash_params()); + + loader_port_start_timer(timeout_per_mb(s_target_flash_size, ERASE_FLASH_TIMEOUT_PER_MB)); + RETURN_ON_ERROR(loader_flash_erase_cmd()); + } else { + // erase using flash begin + uint32_t flash_size = 0; + RETURN_ON_ERROR(esp_loader_flash_detect_size(&flash_size)); + RETURN_ON_ERROR(esp_loader_flash_start(0, flash_size, ROM_FLASH_BLOCK_SIZE)); + } + return ESP_LOADER_SUCCESS; +} + +esp_loader_error_t esp_loader_flash_erase_region(uint32_t offset, uint32_t size) +{ + // Both offset and size must be aligned to flash sector size. + if (offset % FLASH_SECTOR_SIZE != 0 || size % FLASH_SECTOR_SIZE != 0) { + return ESP_LOADER_ERROR_INVALID_PARAM; + } + + if (esp_stub_get_running()) { + RETURN_ON_ERROR(init_flash_params()); + + loader_port_start_timer(timeout_per_mb(size, ERASE_FLASH_TIMEOUT_PER_MB)); + RETURN_ON_ERROR(loader_flash_erase_region_cmd(offset, size)); + } else { + // erase using flash begin + uint32_t flash_size = 0; + RETURN_ON_ERROR(esp_loader_flash_detect_size(&flash_size)); + if (offset + size > flash_size) { + return ESP_LOADER_ERROR_FAIL; + } + RETURN_ON_ERROR(esp_loader_flash_start(offset, size, ROM_FLASH_BLOCK_SIZE)); + } + return ESP_LOADER_SUCCESS; +} +#endif /* SERIAL_FLASHER_INTERFACE_SPI */ + +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) +esp_loader_error_t esp_loader_change_transmission_rate_stub(const uint32_t old_transmission_rate, + const uint32_t new_transmission_rate) +{ + if (s_target == ESP8266_CHIP || !esp_stub_get_running()) { + return ESP_LOADER_ERROR_UNSUPPORTED_FUNC; + } + + loader_port_start_timer(DEFAULT_TIMEOUT); + + esp_loader_error_t err = loader_change_baudrate_cmd(new_transmission_rate, old_transmission_rate); + + // Wait for the stub to be ready to receive data. + if (err == ESP_LOADER_SUCCESS) { + loader_port_delay_ms(25); + } + + return err; +} + +static uint32_t byte_popcnt(uint8_t byte) +{ + uint32_t cnt = 0; + for (uint32_t bit = 0; bit < 8; bit++) { + cnt += byte & 0x01; + byte >>= 1; + } + + return cnt; +} + +esp_loader_error_t esp_loader_get_security_info(esp_loader_target_security_info_t *security_info) +{ + loader_port_start_timer(SHORT_TIMEOUT); + + get_security_info_response_data_t resp; + uint32_t response_received_size = 0; + RETURN_ON_ERROR(loader_get_security_info_cmd(&resp, &response_received_size)); + + if (response_received_size == sizeof(get_security_info_response_data_t)) { + security_info->target_chip = target_from_chip_id(resp.chip_id); + security_info->eco_version = resp.eco_version; + } else if (response_received_size == sizeof(get_security_info_response_data_t) - 8) { + security_info->target_chip = ESP32S2_CHIP; + security_info->eco_version = 0; + } else { + return ESP_LOADER_ERROR_INVALID_RESPONSE; + } + + security_info->secure_boot_enabled = + (resp.flags & GET_SECURITY_INFO_SECURE_BOOT_EN) != 0; + security_info->secure_boot_aggressive_revoke_enabled = + (resp.flags & GET_SECURITY_INFO_SECURE_BOOT_AGGRESSIVE_REVOKE) != 0; + security_info->secure_download_mode_enabled = + (resp.flags & GET_SECURITY_INFO_SECURE_DOWNLOAD_ENABLE) != 0; + security_info->secure_boot_revoked_keys[0] = + (resp.flags & GET_SECURITY_INFO_SECURE_BOOT_KEY_REVOKE0) != 0; + security_info->secure_boot_revoked_keys[1] = + (resp.flags & GET_SECURITY_INFO_SECURE_BOOT_KEY_REVOKE1) != 0; + security_info->secure_boot_revoked_keys[2] = + (resp.flags & GET_SECURITY_INFO_SECURE_BOOT_KEY_REVOKE2) != 0; + security_info->jtag_software_disabled = + (resp.flags & GET_SECURITY_INFO_SOFT_DIS_JTAG) != 0; + security_info->jtag_hardware_disabled = + (resp.flags & GET_SECURITY_INFO_HARD_DIS_JTAG) != 0; + security_info->usb_disabled = (resp.flags & GET_SECURITY_INFO_DIS_USB) != 0; + + // If the number of set bits in key_purposes is odd, flash is encrypted + uint32_t key_purposes_bit_cnt = 0; + for (size_t byte = 0; byte < sizeof(resp.key_purposes); byte++) { + key_purposes_bit_cnt += byte_popcnt(resp.key_purposes[byte]); + } + security_info->flash_encryption_enabled = key_purposes_bit_cnt % 2; + + security_info->dcache_in_uart_download_disabled = + (resp.flags & GET_SECURITY_INFO_DIS_DOWNLOAD_DCACHE) != 0; + security_info->icache_in_uart_download_disabled = + (resp.flags & GET_SECURITY_INFO_DIS_DOWNLOAD_ICACHE) != 0; + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t flash_read_stub(uint8_t *dest, uint32_t address, uint32_t length) +{ + uint8_t buf[256]; // Hardcoded for now, decent tradeoff between speed and stack usage + size_t recv_size = 0; + struct MD5Context md5_context; + MD5Init(&md5_context); + + // The flasher stub requires reads to be aligned to 4 bytes. + // The solution is to read more than is needed and discard the unecessary bytes. + const uint32_t seek_back_len = address % 4; + address -= seek_back_len; + length += seek_back_len; + + const uint32_t overread_len = ROUNDUP(length, 4) - length; + length += overread_len; + + loader_port_start_timer(DEFAULT_TIMEOUT); + loader_flash_read_stub_cmd(address, length, sizeof(buf)); + + uint32_t copy_dest_start = 0; + int32_t remaining = length; + while (remaining > 0) { + loader_port_start_timer(DEFAULT_TIMEOUT); + const uint32_t to_receive = MIN(remaining, sizeof(buf)); + RETURN_ON_ERROR(SLIP_receive_packet(buf, to_receive, &recv_size)); + + if (recv_size != to_receive) { + return ESP_LOADER_ERROR_INVALID_RESPONSE; + } + + MD5Update(&md5_context, buf, recv_size); + + // Handle seek back and overread. + uint32_t copy_start = 0; + uint32_t copy_length = recv_size; + + const bool first_read = (uint32_t)remaining == length; + if (first_read) { + copy_start += seek_back_len; + copy_length -= seek_back_len; + } + + const bool last_read = remaining - recv_size <= 0; + if (last_read) { + copy_length -= overread_len; + } + + memcpy(&dest[copy_dest_start], &buf[copy_start], copy_length); + copy_dest_start += copy_length; + + remaining -= recv_size; + + // Ack by sending back total received byte count + const uint32_t bytes_recv = length - remaining; + loader_port_start_timer(DEFAULT_TIMEOUT); + RETURN_ON_ERROR(SLIP_send_delimiter()); + RETURN_ON_ERROR(SLIP_send((const uint8_t *)&bytes_recv, sizeof(bytes_recv))); + RETURN_ON_ERROR(SLIP_send_delimiter()); + } + + uint8_t md5_calc[16]; + MD5Final(md5_calc, &md5_context); + + loader_port_start_timer(DEFAULT_TIMEOUT); + uint8_t md5_recv[16]; + RETURN_ON_ERROR(SLIP_receive_packet(md5_recv, sizeof(md5_recv), &recv_size)); + + if (recv_size != sizeof(md5_recv) || memcmp(md5_calc, md5_recv, sizeof(md5_calc))) { + return ESP_LOADER_ERROR_INVALID_MD5; + } + + return ESP_LOADER_SUCCESS; +} + +esp_loader_error_t esp_loader_flash_read(uint8_t *dest, uint32_t address, uint32_t length) +{ + RETURN_ON_ERROR(init_flash_params()); + if (address + length >= s_target_flash_size) { + return ESP_LOADER_ERROR_IMAGE_SIZE; + } + + if (esp_stub_get_running()) { + RETURN_ON_ERROR(flash_read_stub(dest, address, length)); + } else { + // We read from the ROM in 64B chunks, if we want to read anything in the last 64B + // we need to ensure that the read is aligned to 64B, so we read more than necessary. + const uint32_t seek_back_len = address % READ_FLASH_ROM_DATA_SIZE; + address -= seek_back_len; + length += seek_back_len; + + uint32_t copy_dest_start = 0; + int32_t remaining = length; + while (remaining > 0) { + uint8_t buf[READ_FLASH_ROM_DATA_SIZE]; + + loader_port_start_timer(DEFAULT_TIMEOUT); + RETURN_ON_ERROR(loader_flash_read_rom_cmd(address + length - remaining, buf)); + + const bool first_read = (uint32_t)remaining == length; + size_t to_read = MIN(remaining, sizeof(buf)); + if (first_read) { + to_read -= seek_back_len; + memcpy(&dest[0], &buf[seek_back_len], to_read); + } else { + memcpy(&dest[copy_dest_start], &buf[0], to_read); + } + + remaining -= READ_FLASH_ROM_DATA_SIZE; + copy_dest_start += to_read; + } + } + + return ESP_LOADER_SUCCESS; +} +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ esp_loader_error_t esp_loader_mem_start(uint32_t offset, uint32_t size, uint32_t block_size) { +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) + if (esp_stub_get_running()) { + const esp_stub_t *stub = &esp_stub[s_target]; + + // check we're not going to overwrite a running stub with this data + const uint32_t load_start = offset; + const uint32_t load_end = offset + size; + for (uint32_t seg = 0; seg < sizeof(stub->segments) / sizeof(stub->segments[0]); seg++) { + const uint32_t stub_start = stub->segments[seg].addr; + const uint32_t stub_end = stub->segments[seg].addr + stub->segments[seg].size; + if (load_start < stub_end && load_end > stub_start) { + loader_port_debug_print("Software loader is resident at the requested address, can't load binary at overlapping address range"); + return ESP_LOADER_ERROR_INVALID_PARAM; + } + } + } +#endif + uint32_t blocks_to_write = ROUNDUP(size, block_size); loader_port_start_timer(timeout_per_mb(size, LOAD_RAM_TIMEOUT_PER_MB)); return loader_mem_begin_cmd(offset, size, blocks_to_write, block_size); @@ -326,7 +675,7 @@ esp_loader_error_t esp_loader_mem_start(uint32_t offset, uint32_t size, uint32_t esp_loader_error_t esp_loader_mem_write(const void *payload, uint32_t size) { const uint8_t *data = (const uint8_t *)payload; - + unsigned int attempt = 0; esp_loader_error_t result = ESP_LOADER_ERROR_FAIL; do { @@ -334,7 +683,7 @@ esp_loader_error_t esp_loader_mem_write(const void *payload, uint32_t size) result = loader_mem_data_cmd(data, size); attempt++; } while (result != ESP_LOADER_SUCCESS && attempt < SERIAL_FLASHER_WRITE_BLOCK_RETRIES); - + return result; } @@ -345,6 +694,14 @@ esp_loader_error_t esp_loader_mem_finish(uint32_t entrypoint) return loader_mem_end_cmd(entrypoint); } +esp_loader_error_t esp_loader_read_mac(uint8_t *mac) +{ + if (s_target == ESP8266_CHIP) { + return ESP_LOADER_ERROR_UNSUPPORTED_CHIP; + } + + return loader_read_mac(s_target, mac); +} esp_loader_error_t esp_loader_read_register(uint32_t address, uint32_t *reg_value) { @@ -353,7 +710,6 @@ esp_loader_error_t esp_loader_read_register(uint32_t address, uint32_t *reg_valu return loader_read_reg_cmd(address, reg_value); } - esp_loader_error_t esp_loader_write_register(uint32_t address, uint32_t reg_value) { loader_port_start_timer(DEFAULT_TIMEOUT); @@ -361,19 +717,20 @@ esp_loader_error_t esp_loader_write_register(uint32_t address, uint32_t reg_valu return loader_write_reg_cmd(address, reg_value, 0xFFFFFFFF, 0); } +#ifndef SERIAL_FLASHER_INTERFACE_SDIO esp_loader_error_t esp_loader_change_transmission_rate(uint32_t transmission_rate) { - if (s_target == ESP8266_CHIP) { + if (s_target == ESP8266_CHIP || esp_stub_get_running()) { return ESP_LOADER_ERROR_UNSUPPORTED_FUNC; } loader_port_start_timer(DEFAULT_TIMEOUT); - return loader_change_baudrate_cmd(transmission_rate); + return loader_change_baudrate_cmd(transmission_rate, 0); } +#endif /* SERIAL_FLASHER_INTERFACE_SDIO */ #if MD5_ENABLED - static void hexify(const uint8_t raw_md5[16], uint8_t hex_md5_out[32]) { static const uint8_t dec_to_hex[] = { @@ -386,37 +743,41 @@ static void hexify(const uint8_t raw_md5[16], uint8_t hex_md5_out[32]) } } - -esp_loader_error_t esp_loader_flash_verify(void) +esp_loader_error_t esp_loader_flash_verify_known_md5(uint32_t address, + uint32_t size, + const uint8_t *expected_md5) { - if (s_target == ESP8266_CHIP) { + if (s_target == ESP8266_CHIP && !esp_stub_get_running()) { return ESP_LOADER_ERROR_UNSUPPORTED_FUNC; } - uint8_t raw_md5[16] = {0}; + RETURN_ON_ERROR(init_flash_params()); - /* Zero termination and new line character require 2 bytes */ - uint8_t hex_md5[MD5_SIZE + 2] = {0}; - uint8_t received_md5[MD5_SIZE + 2] = {0}; + if (address + size >= s_target_flash_size) { + return ESP_LOADER_ERROR_IMAGE_SIZE; + } - md5_final(raw_md5); - hexify(raw_md5, hex_md5); + /* Zero termination require 1 byte */ + uint8_t received_md5[MAX(MD5_SIZE_ROM, MD5_SIZE_STUB) + 1] = {0}; - loader_port_start_timer(timeout_per_mb(s_image_size, MD5_TIMEOUT_PER_MB)); + loader_port_start_timer(timeout_per_mb(size, MD5_TIMEOUT_PER_MB)); - RETURN_ON_ERROR( loader_md5_cmd(s_start_address, s_image_size, received_md5) ); + RETURN_ON_ERROR(loader_md5_cmd(address, size, received_md5)); - bool md5_match = memcmp(hex_md5, received_md5, MD5_SIZE) == 0; + if (esp_stub_get_running()) { + // Convert the received MD5 to hex, because stub returns it as 16 raw data bytes + uint8_t rec_md5_hex[MAX(MD5_SIZE_ROM, MD5_SIZE_STUB) + 1] = {0}; + hexify(received_md5, rec_md5_hex); + memcpy(received_md5, rec_md5_hex, MD5_SIZE_ROM); + } + bool md5_match = memcmp(expected_md5, received_md5, MD5_SIZE_ROM) == 0; if (!md5_match) { - hex_md5[MD5_SIZE] = '\n'; - received_md5[MD5_SIZE] = '\n'; - - loader_port_debug_print("Error: MD5 checksum does not match:\n"); - loader_port_debug_print("Expected:\n"); + loader_port_debug_print("Error: MD5 checksum does not match"); + loader_port_debug_print("Expected:"); + loader_port_debug_print((char *)expected_md5); + loader_port_debug_print("Actual:"); loader_port_debug_print((char *)received_md5); - loader_port_debug_print("Actual:\n"); - loader_port_debug_print((char *)hex_md5); return ESP_LOADER_ERROR_INVALID_MD5; } @@ -424,9 +785,20 @@ esp_loader_error_t esp_loader_flash_verify(void) return ESP_LOADER_SUCCESS; } -#endif +esp_loader_error_t esp_loader_flash_verify(void) +{ + uint8_t raw_md5[16] = {0}; + /* Zero termination require 1 byte */ + uint8_t hex_md5[MAX(MD5_SIZE_ROM, MD5_SIZE_STUB) + 1] = {0}; + md5_final(raw_md5); + hexify(raw_md5, hex_md5); + + return esp_loader_flash_verify_known_md5(s_start_address, s_image_size, hex_md5); +} +#endif /* MD5_ENABLED */ void esp_loader_reset_target(void) { + esp_stub_set_running(false); loader_port_reset_target(); } diff --git a/esp_flasher/lib/esp-serial-flasher/src/esp_sdio_stubs.c b/esp_flasher/lib/esp-serial-flasher/src/esp_sdio_stubs.c new file mode 100644 index 0000000000..3585ef8240 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/src/esp_sdio_stubs.c @@ -0,0 +1,109 @@ +/* Copyright 2020-2025 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* +* This is a temporary solution for SDIO-based flashing functionality. +* The code is generated from custom built stub which is not publicly available. +* This implementation will be replaced once the SDIO flashing functionality +* is properly implemented in the new esp-flasher-stub. +*/ + +#include +#include +#include "esp_loader.h" + +static bool s_stub_running = false; + +bool esp_stub_get_running(void) +{ + return s_stub_running; +} + +void esp_stub_set_running(bool stub_status) +{ + s_stub_running = stub_status; +} + +#if __STDC_VERSION__ >= 201112L +_Static_assert(ESP8266_CHIP == 0, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32_CHIP == 1, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32S2_CHIP == 2, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C3_CHIP == 3, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32S3_CHIP == 4, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C2_CHIP == 5, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C5_CHIP == 6, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32H2_CHIP == 7, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C6_CHIP == 8, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32P4_CHIP == 9, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP_MAX_CHIP == 10, "Stub order matches target_chip_t enumeration"); +#endif + +typedef struct { + esp_loader_bin_header_t header; + esp_loader_bin_segment_t segments[3]; +} esp_stub_t; + +const esp_stub_t esp_stub[ESP_MAX_CHIP] = { + // placeholder + {}, + + // placeholder + {}, + + // placeholder + {}, + + // placeholder + {}, + + // placeholder + {}, + + // placeholder + {}, + + // placeholder + {}, + + // placeholder + {}, + + // image + { + .header = { + .entrypoint = 1082131156, + }, + .segments = { + { + .addr = 1082130432, + .size = 89024, + .data = (uint8_t[]){0x6f, 0x0, 0x20, 0x10, 0x6f, 0x0, 0x40, 0x1d, 0x6f, 0x0, 0x0, 0x1d, 0x6f, 0x0, 0xc0, 0x1c, 0x6f, 0x0, 0x80, 0x1c, 0x6f, 0x0, 0x40, 0x1c, 0x6f, 0x0, 0x0, 0x1c, 0x6f, 0x0, 0xc0, 0x1b, 0x6f, 0x0, 0x80, 0x1b, 0x6f, 0x0, 0x40, 0x1b, 0x6f, 0x0, 0x0, 0x1b, 0x6f, 0x0, 0xc0, 0x1a, 0x6f, 0x0, 0x80, 0x1a, 0x6f, 0x0, 0x40, 0x1a, 0x6f, 0x0, 0x0, 0x1a, 0x6f, 0x0, 0xc0, 0x19, 0x6f, 0x0, 0x80, 0x19, 0x6f, 0x0, 0x40, 0x19, 0x6f, 0x0, 0x0, 0x19, 0x6f, 0x0, 0xc0, 0x18, 0x6f, 0x0, 0x80, 0x18, 0x6f, 0x0, 0x40, 0x18, 0x6f, 0x0, 0x0, 0x18, 0x6f, 0x0, 0xc0, 0x17, 0x6f, 0x0, 0x20, 0xa, 0x6f, 0x0, 0xe0, 0x9, 0x6f, 0x0, 0x0, 0x17, 0x6f, 0x0, 0x60, 0x9, 0x6f, 0x0, 0x80, 0x16, 0x6f, 0x0, 0x40, 0x16, 0x6f, 0x0, 0x0, 0x16, 0x6f, 0x0, 0xc0, 0x15, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x71, 0x6, 0xc2, 0x12, 0xc8, 0x16, 0xca, 0x1a, 0xcc, 0x1e, 0xce, 0x22, 0xd0, 0x26, 0xd2, 0x2a, 0xd4, 0x2e, 0xd6, 0x32, 0xd8, 0x36, 0xda, 0x3a, 0xdc, 0x3e, 0xde, 0xc2, 0xc0, 0xc6, 0xc2, 0xca, 0xc4, 0xce, 0xc6, 0xd2, 0xc8, 0xd6, 0xca, 0xda, 0xcc, 0xde, 0xce, 0xe2, 0xd0, 0xe6, 0xd2, 0xea, 0xd4, 0xee, 0xd6, 0xf2, 0xd8, 0xf6, 0xda, 0xfa, 0xdc, 0xfe, 0xde, 0xe, 0xc6, 0x93, 0x2, 0x1, 0xa, 0x16, 0xc4, 0xf3, 0x22, 0x10, 0x34, 0x16, 0xc0, 0xf3, 0x22, 0x0, 0x30, 0x16, 0xc1, 0xf3, 0x22, 0x50, 0x30, 0x16, 0xc3, 0xf3, 0x22, 0x40, 0xf1, 0x16, 0xc9, 0xf3, 0x22, 0x30, 0x34, 0x16, 0xc7, 0x73, 0x24, 0x20, 0x34, 0x37, 0x3, 0x0, 0x80, 0x7d, 0x3, 0x33, 0x74, 0x64, 0x0, 0xa, 0x85, 0xa2, 0x85, 0xb7, 0x2, 0x0, 0x80, 0x63, 0xf5, 0x55, 0x0, 0x2e, 0xc5, 0xe5, 0x2b, 0x39, 0xa0, 0x93, 0xc2, 0xf2, 0xff, 0xb3, 0xf5, 0x55, 0x0, 0x2e, 0xc5, 0xd9, 0x2b, 0x82, 0x42, 0x73, 0x90, 0x12, 0x34, 0xb2, 0x41, 0x92, 0x40, 0x42, 0x42, 0xd2, 0x42, 0x62, 0x43, 0xf2, 0x43, 0x2, 0x54, 0x92, 0x54, 0x22, 0x55, 0xb2, 0x55, 0x42, 0x56, 0xd2, 0x56, 0x62, 0x57, 0xf2, 0x57, 0x6, 0x48, 0x96, 0x48, 0x26, 0x49, 0xb6, 0x49, 0x46, 0x4a, 0xd6, 0x4a, 0x66, 0x4b, 0xf6, 0x4b, 0x6, 0x5c, 0x96, 0x5c, 0x26, 0x5d, 0xb6, 0x5d, 0x46, 0x5e, 0xd6, 0x5e, 0x66, 0x5f, 0xf6, 0x5f, 0xd, 0x61, 0x73, 0x0, 0x20, 0x30, 0x19, 0x71, 0x6, 0xc2, 0x12, 0xc8, 0x16, 0xca, 0x1a, 0xcc, 0x1e, 0xce, 0x22, 0xd0, 0x26, 0xd2, 0x2a, 0xd4, 0x2e, 0xd6, 0x32, 0xd8, 0x36, 0xda, 0x3a, 0xdc, 0x3e, 0xde, 0xc2, 0xc0, 0xc6, 0xc2, 0xca, 0xc4, 0xce, 0xc6, 0xd2, 0xc8, 0xd6, 0xca, 0xda, 0xcc, 0xde, 0xce, 0xe2, 0xd0, 0xe6, 0xd2, 0xea, 0xd4, 0xee, 0xd6, 0xf2, 0xd8, 0xf6, 0xda, 0xfa, 0xdc, 0xfe, 0xde, 0xf3, 0x22, 0x10, 0x34, 0x16, 0xc0, 0xe, 0xc6, 0x8, 0x1, 0x2a, 0xc4, 0xef, 0x20, 0xa1, 0x65, 0x2a, 0x8a, 0xf3, 0x24, 0x20, 0x34, 0x73, 0x29, 0x0, 0x30, 0xb7, 0x12, 0x0, 0x20, 0x93, 0x82, 0x2, 0x9, 0x83, 0xa9, 0x2, 0x0, 0xfd, 0x43, 0x33, 0xf3, 0x74, 0x0, 0xa, 0x3, 0xb7, 0x13, 0x0, 0x20, 0xc1, 0x3, 0x1e, 0x93, 0x83, 0x23, 0x3, 0x0, 0x85, 0x3, 0x23, 0xa0, 0x72, 0x0, 0xf, 0x0, 0xf0, 0xf, 0x73, 0x60, 0x4, 0x30, 0xa, 0x85, 0xa6, 0x85, 0xfd, 0x42, 0xb3, 0xf5, 0x55, 0x0, 0xef, 0xd0, 0x80, 0x30, 0x73, 0x70, 0x4, 0x30, 0xb7, 0x12, 0x0, 0x20, 0x93, 0x82, 0x2, 0x9, 0x23, 0xa0, 0x32, 0x1, 0xf, 0x0, 0xf0, 0xf, 0x4a, 0x85, 0xd2, 0x85, 0xef, 0x20, 0xa1, 0x65, 0x73, 0x90, 0x24, 0x34, 0x73, 0x10, 0x5, 0x30, 0x82, 0x42, 0x73, 0x90, 0x12, 0x34, 0x92, 0x40, 0x42, 0x42, 0xd2, 0x42, 0x62, 0x43, 0xf2, 0x43, 0x2, 0x54, 0x92, 0x54, 0x22, 0x55, 0xb2, 0x55, 0x42, 0x56, 0xd2, 0x56, 0x62, 0x57, 0xf2, 0x57, 0x6, 0x48, 0x96, 0x48, 0x26, 0x49, 0xb6, 0x49, 0x46, 0x4a, 0xd6, 0x4a, 0x66, 0x4b, 0xf6, 0x4b, 0x6, 0x5c, 0x96, 0x5c, 0x26, 0x5d, 0xb6, 0x5d, 0x46, 0x5e, 0xd6, 0x5e, 0x66, 0x5f, 0xf6, 0x5f, 0x9, 0x61, 0x73, 0x0, 0x20, 0x30, 0xb7, 0x27, 0xc, 0x60, 0x93, 0x87, 0x47, 0x7, 0x9c, 0x43, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x89, 0x8b, 0x99, 0xcf, 0x61, 0x65, 0x13, 0x5, 0x5, 0x6a, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xd4, 0x61, 0x65, 0x13, 0x5, 0x5, 0x6a, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x0, 0xd4, 0x97, 0x61, 0x1, 0x0, 0x93, 0x81, 0xc1, 0xb, 0xb7, 0x7, 0x80, 0x40, 0x93, 0x87, 0x7, 0x0, 0x93, 0xe7, 0x17, 0x0, 0x73, 0x90, 0x57, 0x30, 0x1, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0xcf, 0xaa, 0x84, 0xb7, 0xb7, 0x81, 0x40, 0x37, 0xb5, 0x81, 0x40, 0x93, 0x87, 0x87, 0x6f, 0x13, 0x6, 0x5, 0x8d, 0x33, 0x86, 0xc7, 0x40, 0x81, 0x45, 0x13, 0x5, 0x5, 0x8d, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0x16, 0x95, 0x47, 0x63, 0x83, 0xf4, 0x2, 0x37, 0x5, 0x0, 0x50, 0xb7, 0x7, 0x0, 0x50, 0x13, 0x6, 0x5, 0x0, 0x93, 0x87, 0x7, 0x0, 0x33, 0x86, 0xc7, 0x40, 0x81, 0x45, 0x13, 0x5, 0x5, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xa0, 0x13, 0xef, 0xd0, 0x50, 0x3, 0xef, 0xd0, 0xc0, 0x7a, 0x93, 0x5, 0x0, 0x40, 0x1, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x40, 0x32, 0xef, 0x10, 0x10, 0x58, 0xef, 0xd0, 0xa0, 0x77, 0xef, 0x30, 0x40, 0x41, 0xef, 0x10, 0x70, 0x57, 0xef, 0xd0, 0xf0, 0x39, 0xef, 0xe0, 0x60, 0xe, 0xef, 0xd0, 0x60, 0x58, 0xef, 0x30, 0xa0, 0x42, 0xef, 0x30, 0x20, 0x55, 0xef, 0x40, 0xd0, 0x4f, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xac, 0xa7, 0x58, 0x23, 0xae, 0xb7, 0x58, 0x1, 0x44, 0x13, 0x9, 0xd0, 0x4, 0xa2, 0x85, 0x1, 0x46, 0x1, 0x45, 0x5, 0x4, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0x36, 0xe3, 0x18, 0x24, 0xff, 0xef, 0x0, 0xa0, 0x7d, 0xef, 0x0, 0xa0, 0x7d, 0x2a, 0x84, 0x1, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0xc9, 0x37, 0x45, 0x1e, 0x1c, 0x13, 0x5, 0xf5, 0xdf, 0x22, 0x95, 0x37, 0x46, 0x1e, 0x1c, 0x13, 0x6, 0x6, 0xe0, 0x81, 0x46, 0xb3, 0x35, 0x85, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0x5c, 0x19, 0xe1, 0xef, 0x90, 0x30, 0x64, 0xf1, 0x67, 0x93, 0x87, 0x7, 0x20, 0xb3, 0x87, 0xa7, 0x2, 0x12, 0x4, 0x37, 0x7, 0x0, 0x60, 0x93, 0x6, 0x7, 0x0, 0xfd, 0x75, 0x13, 0x7, 0x7, 0x0, 0x33, 0x54, 0xf4, 0x2, 0xdc, 0x4a, 0xed, 0x8f, 0x13, 0x16, 0x4, 0x1, 0x51, 0x82, 0xd1, 0x8f, 0xdc, 0xca, 0xdc, 0x4a, 0x37, 0x6, 0x10, 0xff, 0x3d, 0x88, 0x7d, 0x16, 0x52, 0x4, 0xf1, 0x8f, 0xc1, 0x8f, 0xdc, 0xca, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0xe3, 0xb, 0xf7, 0xfa, 0x37, 0x66, 0x9, 0x60, 0x13, 0x6, 0x6, 0x0, 0x5c, 0x42, 0xb7, 0x15, 0xf0, 0xff, 0xfd, 0x15, 0x3e, 0xc6, 0xb2, 0x46, 0x93, 0x7, 0xf5, 0xff, 0x93, 0xf7, 0xf7, 0xf, 0xb2, 0x7, 0xed, 0x8e, 0xd5, 0x8f, 0x3e, 0xc6, 0xb2, 0x47, 0x5c, 0xc2, 0x83, 0x27, 0x87, 0x9, 0x93, 0xe7, 0x17, 0x0, 0x23, 0x2c, 0xf7, 0x8, 0x83, 0x27, 0x87, 0x9, 0x85, 0x8b, 0xed, 0xff, 0x95, 0x47, 0x63, 0x94, 0xf4, 0x0, 0xef, 0x50, 0x20, 0x35, 0xef, 0x30, 0xd0, 0x0, 0xef, 0x10, 0x20, 0x68, 0xb7, 0xa7, 0x81, 0x40, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0x83, 0xa7, 0x7, 0xfa, 0x5, 0x61, 0x82, 0x87, 0x41, 0x11, 0xb7, 0x37, 0xb, 0x60, 0x6, 0xc6, 0x93, 0x87, 0x7, 0xc0, 0xd8, 0x4f, 0xb7, 0x6, 0x0, 0x80, 0x25, 0x45, 0x55, 0x8f, 0xd8, 0xcf, 0x25, 0x28, 0xef, 0xd0, 0x70, 0x66, 0x19, 0xc1, 0xef, 0x10, 0xf0, 0x8, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0xba, 0x1, 0xa0, 0x1, 0x11, 0xa, 0x85, 0x6, 0xce, 0xef, 0x50, 0xf0, 0x3a, 0x2, 0x47, 0x85, 0x47, 0x63, 0x17, 0xf7, 0x0, 0xef, 0x50, 0x30, 0x49, 0xa, 0x85, 0xef, 0x50, 0x90, 0x21, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xa1, 0x67, 0x63, 0x6a, 0xf5, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x90, 0x10, 0x5b, 0x93, 0x17, 0x5, 0x1, 0x37, 0x7, 0x0, 0x80, 0xc9, 0x8f, 0xd9, 0x8f, 0x37, 0x17, 0xb, 0x60, 0x1c, 0xcf, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0x64, 0x9, 0x60, 0x93, 0x7, 0x4, 0x0, 0x9c, 0x43, 0x6, 0xc6, 0x13, 0x4, 0x4, 0x0, 0x85, 0x8b, 0xfd, 0xe7, 0x5c, 0x44, 0x85, 0x8b, 0xf5, 0xef, 0xb7, 0xa7, 0xa, 0x60, 0x93, 0x87, 0x7, 0x80, 0x7d, 0x57, 0x98, 0xcb, 0x23, 0xa8, 0x7, 0x0, 0xb7, 0xf7, 0xa, 0x60, 0x93, 0x87, 0x7, 0x0, 0x3d, 0x47, 0xd8, 0xd3, 0x23, 0xa2, 0x7, 0x2, 0x37, 0x68, 0x9, 0x60, 0x83, 0x27, 0x88, 0x1, 0xb7, 0x68, 0x9, 0x60, 0x37, 0x65, 0x9, 0x60, 0x93, 0xe7, 0x27, 0x0, 0x23, 0x2c, 0xf8, 0x0, 0x83, 0xa7, 0x8, 0x0, 0xb7, 0x65, 0x9, 0x60, 0x37, 0x66, 0x9, 0x60, 0x93, 0xe7, 0x27, 0x0, 0x23, 0xa0, 0xf8, 0x0, 0x5c, 0x45, 0x13, 0x6, 0xc6, 0xb, 0xb7, 0x66, 0x9, 0x60, 0x93, 0xe7, 0x27, 0x0, 0x5c, 0xc5, 0xfc, 0x49, 0x93, 0x86, 0x6, 0xb, 0x37, 0x67, 0x9, 0x60, 0x93, 0xe7, 0x27, 0x0, 0xfc, 0xc9, 0x1c, 0x42, 0x13, 0x7, 0x87, 0x10, 0x93, 0xe7, 0x27, 0x0, 0x1c, 0xc2, 0x9c, 0x42, 0x93, 0xe7, 0x27, 0x0, 0x9c, 0xc2, 0x1c, 0x43, 0x93, 0xe7, 0x27, 0x0, 0x1c, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0xc7, 0x9, 0x3, 0xa3, 0x7, 0x0, 0x13, 0x63, 0x23, 0x0, 0x23, 0xa0, 0x67, 0x0, 0x3, 0x23, 0x88, 0x1, 0x13, 0x73, 0xd3, 0xff, 0x23, 0x2c, 0x68, 0x0, 0x3, 0xa8, 0x8, 0x0, 0x13, 0x78, 0xd8, 0xff, 0x23, 0xa0, 0x8, 0x1, 0x3, 0x28, 0xc5, 0x0, 0x13, 0x78, 0xd8, 0xff, 0x23, 0x26, 0x5, 0x1, 0xe8, 0x49, 0x75, 0x99, 0xe8, 0xc9, 0xc, 0x42, 0xf5, 0x99, 0xc, 0xc2, 0x90, 0x42, 0x75, 0x9a, 0x90, 0xc2, 0x14, 0x43, 0xb2, 0x40, 0x22, 0x44, 0xf5, 0x9a, 0x14, 0xc3, 0x98, 0x43, 0x75, 0x9b, 0x98, 0xc3, 0x41, 0x1, 0x82, 0x80, 0x1c, 0x40, 0x85, 0x83, 0x85, 0x8b, 0x99, 0xf7, 0x1, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x0, 0xa3, 0x9, 0xb7, 0x5c, 0x44, 0x85, 0x83, 0x85, 0x8b, 0x81, 0xf3, 0x5, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0xa1, 0xd5, 0xbd, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0xf3, 0x77, 0x4, 0x30, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x28, 0x0, 0xef, 0x40, 0x40, 0x14, 0xef, 0x50, 0x20, 0x79, 0x2a, 0x84, 0x28, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0xd1, 0x8d, 0x46, 0x22, 0x86, 0x81, 0x45, 0x28, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x80, 0xd0, 0x91, 0x46, 0x22, 0x86, 0x85, 0x45, 0x28, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x80, 0xcf, 0x85, 0x45, 0x28, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x80, 0xd0, 0x28, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xa0, 0xce, 0x85, 0x47, 0x3e, 0xc8, 0xb7, 0x87, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x8, 0x8, 0x3e, 0xca, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xcc, 0x8, 0x8, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x0, 0xcd, 0x8, 0x8, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xcb, 0x89, 0x47, 0x3e, 0xcc, 0xb7, 0x97, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x28, 0x8, 0x3e, 0xce, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0xca, 0x28, 0x8, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x40, 0xca, 0x28, 0x8, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0xc9, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0xf7, 0x21, 0x3d, 0xef, 0x50, 0xd0, 0x25, 0x1, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xa0, 0x96, 0x1, 0xa0, 0xb7, 0xb7, 0x81, 0x40, 0x5, 0x47, 0x23, 0x8a, 0xe7, 0x58, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa8, 0xa7, 0x58, 0x23, 0x20, 0x0, 0x0, 0x2, 0x90, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x10, 0xb0, 0x10, 0x9, 0xe5, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x10, 0xb0, 0xd, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xcd, 0x37, 0x32, 0x45, 0xf2, 0x40, 0x85, 0x45, 0x5, 0x61, 0x6f, 0x30, 0xd0, 0x29, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xf9, 0x37, 0x32, 0x45, 0xf2, 0x40, 0x81, 0x45, 0x5, 0x61, 0x6f, 0x30, 0x90, 0x28, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0xa8, 0x4b, 0x59, 0x81, 0xd, 0x89, 0x82, 0x80, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0xa8, 0x4b, 0x49, 0x81, 0x3d, 0x89, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x5a, 0x91, 0xc3, 0x82, 0x87, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0xaa, 0x84, 0x2e, 0x89, 0x6d, 0x24, 0x2a, 0x84, 0x9, 0xe9, 0x81, 0xc8, 0x37, 0xa6, 0x81, 0x40, 0x13, 0x6, 0x6, 0xf, 0xca, 0x85, 0x26, 0x85, 0xc1, 0x3f, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x83, 0xa7, 0xc1, 0x81, 0x7d, 0x57, 0x63, 0x96, 0xe7, 0x0, 0x89, 0x65, 0x93, 0x85, 0x5, 0x80, 0x7d, 0xbf, 0x41, 0x11, 0x26, 0xc2, 0x6, 0xc6, 0x22, 0xc4, 0xaa, 0x84, 0x63, 0xef, 0xa7, 0x0, 0x89, 0x65, 0x93, 0x85, 0x5, 0x80, 0x85, 0x24, 0x2a, 0x84, 0x11, 0xe1, 0x89, 0xec, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x85, 0x65, 0x93, 0x85, 0x5, 0x40, 0x99, 0x24, 0x2a, 0x84, 0x6d, 0xf5, 0x85, 0x65, 0x26, 0x85, 0x35, 0x2c, 0x2a, 0x84, 0x65, 0xf1, 0x37, 0xa6, 0x81, 0x40, 0x13, 0x6, 0x46, 0xd, 0x85, 0x65, 0x26, 0x85, 0x95, 0x37, 0xc1, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0xae, 0x84, 0x32, 0x89, 0x5, 0x24, 0x2a, 0x84, 0x9, 0xe9, 0x81, 0xc8, 0x37, 0xa6, 0x81, 0x40, 0x13, 0x6, 0x46, 0xa, 0xca, 0x85, 0x26, 0x85, 0x3d, 0x3f, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x83, 0xa7, 0xc1, 0x81, 0x7d, 0x57, 0x63, 0x96, 0xe7, 0x0, 0x9, 0x66, 0x13, 0x6, 0x6, 0x80, 0x7d, 0xbf, 0x41, 0x11, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x89, 0xae, 0x84, 0x63, 0xe0, 0xb7, 0x2, 0x9, 0x66, 0x13, 0x6, 0x6, 0x80, 0xc9, 0x2a, 0x2a, 0x84, 0x11, 0xe1, 0x91, 0xec, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x5, 0x66, 0x13, 0x6, 0x6, 0x40, 0x5d, 0x2a, 0x2a, 0x84, 0x65, 0xf5, 0x5, 0x66, 0xa6, 0x85, 0x4a, 0x85, 0x6d, 0x22, 0x2a, 0x84, 0x71, 0xfd, 0x37, 0xa6, 0x81, 0x40, 0x13, 0x6, 0x86, 0xb, 0x85, 0x65, 0x26, 0x85, 0xe9, 0x35, 0xf1, 0xb7, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x6, 0xce, 0x2a, 0x89, 0xae, 0x84, 0xb2, 0x89, 0xa5, 0x24, 0x2a, 0x84, 0x11, 0xe9, 0x89, 0xc8, 0x33, 0x5, 0x99, 0x2, 0x37, 0xa6, 0x81, 0x40, 0x13, 0x6, 0x6, 0x9, 0xce, 0x85, 0x79, 0x3d, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x11, 0xc5, 0x13, 0x7, 0xf5, 0xff, 0xb3, 0x77, 0xa7, 0x0, 0x89, 0xcb, 0x81, 0x44, 0xb2, 0x40, 0x22, 0x44, 0x2, 0x49, 0x26, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x2e, 0x84, 0xfd, 0xd5, 0xb7, 0x7, 0x8, 0x0, 0x32, 0x89, 0x63, 0xfa, 0xb7, 0x0, 0x37, 0xa6, 0x81, 0x40, 0x13, 0x6, 0x86, 0x7, 0xca, 0x85, 0x22, 0x85, 0xb1, 0x35, 0xd1, 0xbf, 0x89, 0x28, 0xaa, 0x84, 0x61, 0xf9, 0x37, 0xa6, 0x81, 0x40, 0x13, 0x6, 0x86, 0x7, 0xca, 0x85, 0x22, 0x85, 0x1d, 0x3d, 0xc1, 0xb7, 0xd, 0xcd, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0xc7, 0x5a, 0xaa, 0x85, 0x89, 0xeb, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x90, 0xf0, 0x13, 0xc8, 0x4f, 0x19, 0xc5, 0xd8, 0x47, 0x63, 0xc5, 0xe5, 0x0, 0x98, 0x4b, 0x63, 0xc4, 0xe5, 0x0, 0x9c, 0x53, 0xf1, 0xbf, 0x17, 0x3, 0x80, 0xff, 0x67, 0x0, 0x43, 0xad, 0x82, 0x80, 0x79, 0x71, 0x2a, 0xc6, 0x2e, 0xc4, 0x32, 0xc2, 0x2c, 0x0, 0x50, 0x0, 0x68, 0x0, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0xef, 0x10, 0xa0, 0x5a, 0xa2, 0x47, 0x37, 0x7, 0x8, 0x0, 0x93, 0x86, 0xf7, 0xff, 0x63, 0xff, 0xe6, 0x2, 0x12, 0x47, 0x93, 0x76, 0x17, 0x0, 0x99, 0xc6, 0x93, 0x76, 0xc7, 0x0, 0x9d, 0xe6, 0x13, 0x67, 0x27, 0x0, 0x3a, 0xc2, 0x12, 0x47, 0x9, 0x8b, 0x1, 0xc7, 0x8d, 0x7, 0xf1, 0x9b, 0x3e, 0xc4, 0x81, 0x4a, 0x37, 0xb9, 0x81, 0x40, 0x91, 0x49, 0x8d, 0x44, 0x3, 0x24, 0xc9, 0x5a, 0x13, 0x9a, 0x2a, 0x0, 0x11, 0xe4, 0x85, 0xa, 0xe3, 0x9a, 0x9a, 0xfe, 0x1, 0x45, 0x25, 0xa8, 0x48, 0x4c, 0x19, 0xe1, 0x0, 0x50, 0xfd, 0xb7, 0xb3, 0x7, 0x44, 0x1, 0x12, 0x47, 0x9c, 0x43, 0xf9, 0x8f, 0xed, 0xdb, 0x54, 0x40, 0x1c, 0x40, 0xd5, 0x8f, 0x14, 0x44, 0xd5, 0x8f, 0xf9, 0x8f, 0xe3, 0x12, 0xf7, 0xfe, 0x32, 0x46, 0xa2, 0x45, 0x63, 0xe0, 0xc9, 0x2, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xa2, 0x61, 0xd9, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x81, 0x46, 0xef, 0x40, 0x40, 0x39, 0xdd, 0xb7, 0x2e, 0x86, 0xaa, 0x85, 0x11, 0x45, 0x3d, 0xbf, 0x79, 0x71, 0x26, 0xd2, 0x2e, 0xc6, 0x32, 0xc4, 0x91, 0x47, 0x6c, 0x0, 0xaa, 0x84, 0x30, 0x0, 0x68, 0x8, 0x6, 0xd6, 0x22, 0xd4, 0x4a, 0xd0, 0x3e, 0xce, 0xef, 0x10, 0x80, 0x4e, 0xb2, 0x45, 0x81, 0xec, 0x22, 0x46, 0x72, 0x45, 0x19, 0x3f, 0x2a, 0x84, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0x45, 0x61, 0x82, 0x80, 0x89, 0xe5, 0x26, 0x85, 0xd1, 0x35, 0x1, 0x44, 0xed, 0xb7, 0xb7, 0x7, 0x8, 0x0, 0xe3, 0xec, 0xb7, 0xfe, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa9, 0xc7, 0x5a, 0x63, 0x18, 0x9, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x90, 0xa0, 0x7f, 0x3, 0x25, 0xc9, 0x1, 0x9, 0xc9, 0x83, 0x27, 0xc9, 0x0, 0x63, 0xc6, 0xf4, 0x0, 0x83, 0x27, 0x9, 0x1, 0x63, 0xc5, 0xf4, 0x0, 0x3, 0x29, 0x9, 0x2, 0xd9, 0xbf, 0x3, 0x27, 0x49, 0x0, 0x83, 0x27, 0x9, 0x0, 0x3, 0x26, 0x89, 0x0, 0xf2, 0x46, 0xd9, 0x8f, 0x22, 0x47, 0xd1, 0x8f, 0xf9, 0x8f, 0x63, 0xd, 0xf7, 0x2, 0x22, 0x46, 0xb2, 0x45, 0x72, 0x45, 0x79, 0x3d, 0x2a, 0x84, 0x51, 0xdd, 0x3, 0x25, 0xc9, 0x1, 0xa6, 0x85, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x40, 0x93, 0x55, 0xd1, 0x32, 0x46, 0x63, 0x73, 0xc5, 0x0, 0x2a, 0x86, 0xa6, 0x85, 0x22, 0x85, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0x97, 0x26, 0x85, 0x1d, 0x3d, 0xb9, 0xbf, 0x91, 0x47, 0xe3, 0xe4, 0xd7, 0xfc, 0x2e, 0x86, 0xa6, 0x85, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0x93, 0x2a, 0x84, 0x21, 0xf5, 0x55, 0xbf, 0x33, 0x37, 0xb5, 0x2, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0x81, 0x44, 0x33, 0x4, 0xb5, 0x2, 0x1, 0xef, 0xb2, 0x85, 0x22, 0x85, 0xed, 0x3d, 0xaa, 0x84, 0x19, 0xc5, 0x22, 0x86, 0x81, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0x92, 0xb2, 0x40, 0x22, 0x44, 0x26, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x4a, 0xb2, 0x40, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x33, 0x5, 0xf5, 0x2, 0x41, 0x1, 0x82, 0x80, 0x6f, 0x50, 0x40, 0x62, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x50, 0xa0, 0x2a, 0xb2, 0x40, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x33, 0x5, 0xf5, 0x2, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x40, 0x41, 0xef, 0x90, 0x80, 0x1e, 0x11, 0xe4, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x90, 0xa0, 0x20, 0x83, 0x57, 0x4, 0x0, 0x85, 0x8b, 0x91, 0xeb, 0x5c, 0x40, 0x89, 0xc7, 0x9c, 0x43, 0x18, 0x44, 0xf9, 0x8f, 0x81, 0xc7, 0x5c, 0x44, 0x8, 0x48, 0x82, 0x97, 0x40, 0x48, 0xe1, 0xbf, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0xef, 0x90, 0xa0, 0x17, 0xef, 0x90, 0xc0, 0x1a, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa4, 0x87, 0x5b, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xc7, 0x7, 0x5b, 0x19, 0xc3, 0xef, 0x90, 0x60, 0x62, 0x5, 0x47, 0x23, 0x88, 0xe7, 0x5a, 0xb7, 0x17, 0x0, 0x20, 0x3, 0xa9, 0x7, 0x0, 0xf3, 0x74, 0x4, 0x30, 0x22, 0x85, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x0, 0xae, 0xa1, 0x88, 0xf3, 0xa4, 0x4, 0x30, 0x1, 0x45, 0xf1, 0x2a, 0x33, 0x74, 0x24, 0x1, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xaa, 0x87, 0x5a, 0xef, 0x90, 0xa0, 0x12, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0x90, 0x0, 0x18, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0xef, 0x90, 0x20, 0x11, 0xef, 0x90, 0x40, 0x14, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x47, 0x5b, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xc7, 0x7, 0x5b, 0x19, 0xe3, 0xef, 0x90, 0xe0, 0x5b, 0x23, 0x88, 0x7, 0x5a, 0x73, 0x74, 0x4, 0x30, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x0, 0xa8, 0x21, 0x88, 0x73, 0x24, 0x4, 0x30, 0x1, 0x45, 0x49, 0x22, 0xef, 0x90, 0xa0, 0xd, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x90, 0x40, 0x13, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x73, 0x74, 0x4, 0x30, 0x85, 0x47, 0x33, 0x95, 0xa7, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x0, 0xa5, 0x21, 0x88, 0x73, 0x24, 0x4, 0x30, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x2d, 0xc9, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x84, 0xef, 0x90, 0xc0, 0x9, 0xef, 0x90, 0xe0, 0xc, 0x5c, 0x40, 0x14, 0x40, 0x9d, 0xcb, 0x3, 0xd7, 0x7, 0x0, 0x79, 0x9b, 0x23, 0x90, 0xe7, 0x0, 0x8c, 0x43, 0xde, 0x5, 0x90, 0x42, 0xe1, 0x85, 0x13, 0x55, 0x6, 0x1, 0x5, 0x89, 0x63, 0xc1, 0x5, 0x2, 0x45, 0x82, 0x7d, 0x8a, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0xa1, 0xef, 0x90, 0x60, 0x6, 0xef, 0x90, 0x60, 0xc, 0x1, 0x45, 0x19, 0xa8, 0x8c, 0x42, 0x8a, 0x5, 0xd9, 0xbf, 0x19, 0xc9, 0xef, 0x90, 0x20, 0x5, 0xef, 0x90, 0x20, 0xb, 0x13, 0x5, 0x20, 0x10, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x45, 0x82, 0x13, 0x75, 0xf6, 0x1, 0xb5, 0x37, 0xc1, 0xbf, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x73, 0x74, 0x4, 0x30, 0x85, 0x47, 0x33, 0x95, 0xa7, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0x9b, 0x21, 0x88, 0x73, 0x24, 0x4, 0x30, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5d, 0xc1, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x84, 0xef, 0x80, 0xf0, 0x7f, 0xef, 0x90, 0x0, 0x3, 0x5c, 0x40, 0x10, 0x40, 0xb1, 0xcf, 0x3, 0xd7, 0x7, 0x0, 0x13, 0x67, 0x17, 0x0, 0x23, 0x90, 0xe7, 0x0, 0x9c, 0x43, 0x58, 0x42, 0xde, 0x7, 0xe1, 0x87, 0xbe, 0x85, 0x19, 0xe7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x90, 0x60, 0x51, 0x14, 0x43, 0xde, 0x6, 0xe1, 0x86, 0x63, 0x96, 0xf6, 0x0, 0x83, 0x56, 0x7, 0x0, 0x85, 0x8a, 0x85, 0xce, 0x58, 0x4b, 0x75, 0xf7, 0x63, 0xcb, 0x7, 0x2, 0x3, 0x55, 0x26, 0x0, 0x19, 0x46, 0x5, 0x89, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0x94, 0xef, 0x80, 0x30, 0x7a, 0xef, 0x90, 0x20, 0x0, 0x1, 0x45, 0x3d, 0xa0, 0x1c, 0x42, 0x8a, 0x7, 0x93, 0xd5, 0x87, 0x41, 0xe1, 0xbf, 0x45, 0x81, 0x7d, 0x89, 0xa9, 0x3f, 0xd5, 0xb7, 0xe3, 0xd1, 0x7, 0xfe, 0x8, 0x42, 0x93, 0x17, 0xf5, 0x0, 0xe3, 0xd7, 0x7, 0xfe, 0xef, 0x80, 0x70, 0x77, 0xef, 0x80, 0x70, 0x7d, 0x13, 0x5, 0x20, 0x10, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x82, 0x80, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2e, 0xc6, 0x32, 0xc4, 0x36, 0xc2, 0x3a, 0xc0, 0x2a, 0x84, 0xef, 0x80, 0x90, 0x74, 0xef, 0x80, 0xb0, 0x77, 0x2, 0x47, 0x92, 0x46, 0x22, 0x46, 0xb2, 0x45, 0x22, 0x85, 0xef, 0x10, 0x10, 0x6e, 0x2a, 0x84, 0xef, 0x80, 0x10, 0x73, 0xef, 0x80, 0x10, 0x79, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2e, 0xc6, 0x32, 0xc4, 0x36, 0xc2, 0x2a, 0x84, 0xef, 0x80, 0x10, 0x71, 0xef, 0x80, 0x30, 0x74, 0x92, 0x46, 0x22, 0x46, 0xb2, 0x45, 0x22, 0x85, 0xef, 0x10, 0x90, 0x72, 0xef, 0x80, 0xd0, 0x6f, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0x80, 0x70, 0x75, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x2e, 0xce, 0x32, 0xcc, 0x36, 0xca, 0x3a, 0xc8, 0x3e, 0xc6, 0x2a, 0x84, 0xef, 0x80, 0xd0, 0x6d, 0xef, 0x80, 0xf0, 0x70, 0xb2, 0x47, 0x42, 0x47, 0xd2, 0x46, 0x62, 0x46, 0xf2, 0x45, 0x22, 0x85, 0xef, 0x10, 0x30, 0x74, 0xef, 0x80, 0x50, 0x6c, 0x22, 0x54, 0xb2, 0x50, 0x45, 0x61, 0x6f, 0x80, 0xf0, 0x71, 0x99, 0xc9, 0x1c, 0x41, 0x9c, 0x43, 0xd8, 0x4b, 0x13, 0x67, 0x7, 0x40, 0xd8, 0xcb, 0xd8, 0x4b, 0x13, 0x67, 0x7, 0x20, 0xd8, 0xcb, 0x82, 0x80, 0x99, 0xc5, 0x1c, 0x41, 0x98, 0x43, 0x5c, 0x4b, 0x93, 0xe7, 0xf7, 0x1f, 0x5c, 0xcb, 0x82, 0x80, 0x1c, 0x41, 0xb7, 0x6, 0x0, 0xe0, 0x85, 0x89, 0x9c, 0x43, 0xfd, 0x16, 0x13, 0x96, 0xd5, 0x1, 0xd8, 0x43, 0x75, 0x8f, 0x51, 0x8f, 0xd8, 0xc3, 0xd8, 0x43, 0xb7, 0x6, 0x0, 0xfe, 0xfd, 0x16, 0x13, 0x96, 0x95, 0x1, 0x75, 0x8f, 0x51, 0x8f, 0xd8, 0xc3, 0xd8, 0x43, 0xb7, 0x6, 0x0, 0xfc, 0xfd, 0x16, 0x13, 0x96, 0xa5, 0x1, 0x75, 0x8f, 0x51, 0x8f, 0xd8, 0xc3, 0xd8, 0x43, 0xb7, 0x6, 0x0, 0xf8, 0xfd, 0x16, 0x13, 0x96, 0xb5, 0x1, 0x75, 0x8f, 0x51, 0x8f, 0xd8, 0xc3, 0xd8, 0x43, 0xb7, 0x6, 0x0, 0xf0, 0xfd, 0x16, 0x13, 0x96, 0xc5, 0x1, 0x75, 0x8f, 0x51, 0x8f, 0xd8, 0xc3, 0xd8, 0x43, 0xb7, 0x6, 0x0, 0xc0, 0xfd, 0x16, 0xfa, 0x5, 0x75, 0x8f, 0x4d, 0x8f, 0xd8, 0xc3, 0x82, 0x80, 0x1c, 0x41, 0x81, 0x76, 0x85, 0x89, 0x98, 0x43, 0xfd, 0x16, 0x13, 0x96, 0x15, 0x1, 0x5c, 0x4b, 0xca, 0x5, 0xf5, 0x8f, 0xd1, 0x8f, 0x5c, 0xcb, 0x5c, 0x4b, 0xb7, 0x6, 0xfc, 0xff, 0xfd, 0x16, 0xf5, 0x8f, 0xcd, 0x8f, 0x5c, 0xcb, 0x82, 0x80, 0x1c, 0x41, 0xb7, 0x6, 0x80, 0xff, 0x85, 0x89, 0x98, 0x43, 0xfd, 0x16, 0x13, 0x96, 0x75, 0x1, 0x5c, 0x43, 0xe2, 0x5, 0xf5, 0x8f, 0xd1, 0x8f, 0x5c, 0xc3, 0x5c, 0x43, 0xb7, 0x6, 0x0, 0xff, 0xfd, 0x16, 0xf5, 0x8f, 0xcd, 0x8f, 0x5c, 0xc3, 0x82, 0x80, 0x1c, 0x41, 0x85, 0x89, 0x86, 0x5, 0xd8, 0x43, 0x1c, 0x4f, 0xf5, 0x9b, 0xcd, 0x8f, 0x1c, 0xcf, 0x82, 0x80, 0x1c, 0x41, 0x85, 0x89, 0x8a, 0x5, 0xd8, 0x43, 0x1c, 0x4f, 0xed, 0x9b, 0xcd, 0x8f, 0x1c, 0xcf, 0x82, 0x80, 0x1c, 0x41, 0x37, 0x7, 0xc0, 0xff, 0x85, 0x89, 0x94, 0x43, 0x7d, 0x17, 0xda, 0x5, 0xdc, 0x42, 0xf9, 0x8f, 0xcd, 0x8f, 0xdc, 0xc2, 0x82, 0x80, 0x1c, 0x41, 0x93, 0x96, 0xf5, 0x1, 0x85, 0x89, 0x98, 0x43, 0xd6, 0x5, 0x5c, 0x43, 0x86, 0x7, 0x85, 0x83, 0xd5, 0x8f, 0x5c, 0xc3, 0x5c, 0x43, 0xb7, 0x6, 0xe0, 0xff, 0xfd, 0x16, 0xf5, 0x8f, 0xcd, 0x8f, 0x5c, 0xc3, 0x82, 0x80, 0x8, 0x41, 0x6f, 0x20, 0x80, 0x8, 0x8, 0x41, 0x6f, 0x20, 0xc0, 0x6, 0x13, 0x7, 0x50, 0x2, 0x63, 0xb, 0xe5, 0x4, 0xaa, 0x87, 0x63, 0x6c, 0xa7, 0x2, 0x13, 0x7, 0x30, 0x2, 0x63, 0x6, 0xe5, 0x4, 0x13, 0x7, 0x40, 0x2, 0x63, 0x5, 0xe5, 0x4, 0x13, 0x7, 0x10, 0x2, 0x63, 0x3, 0xe5, 0x4, 0x13, 0x7, 0x20, 0x2, 0x13, 0x5, 0x40, 0x1c, 0x63, 0x84, 0xe7, 0x4, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x90, 0x40, 0x26, 0x13, 0x7, 0x70, 0x2, 0x63, 0x4, 0xe5, 0x2, 0x13, 0x7, 0x80, 0x2, 0x63, 0x3, 0xe5, 0x2, 0x13, 0x7, 0x60, 0x2, 0x21, 0x45, 0xd9, 0xbf, 0x2d, 0x45, 0x82, 0x80, 0x13, 0x5, 0x40, 0x34, 0x82, 0x80, 0x11, 0x45, 0x82, 0x80, 0x13, 0x5, 0x40, 0x3, 0x82, 0x80, 0x13, 0x5, 0x0, 0x4, 0x82, 0x80, 0x5, 0x45, 0x82, 0x80, 0x13, 0x85, 0xc1, 0xd4, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x13, 0x7, 0xf5, 0xfd, 0x9d, 0x47, 0x63, 0xf8, 0xe7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x90, 0x40, 0x20, 0x2a, 0x89, 0xef, 0x80, 0x90, 0x4b, 0xc1, 0x3f, 0xef, 0x80, 0x90, 0x4e, 0x93, 0x84, 0x41, 0xd2, 0x1, 0x44, 0x29, 0x4a, 0xc9, 0x37, 0x8, 0x41, 0xa2, 0x85, 0xef, 0x10, 0x10, 0x73, 0xaa, 0x89, 0x5d, 0x3f, 0x90, 0x40, 0x8, 0x41, 0xa2, 0x85, 0x33, 0xe6, 0xc9, 0x0, 0x5, 0x4, 0xef, 0x10, 0xb0, 0x65, 0x91, 0x4, 0xe3, 0x10, 0x44, 0xff, 0xef, 0x80, 0x30, 0x48, 0x69, 0x3f, 0xef, 0x80, 0x10, 0x4e, 0x4a, 0x85, 0x29, 0x3f, 0x2a, 0x84, 0x79, 0x37, 0xaa, 0x89, 0xef, 0x80, 0xf0, 0x46, 0xef, 0x80, 0x10, 0x4a, 0x93, 0x84, 0xc9, 0x0, 0x1, 0x49, 0x19, 0xec, 0xef, 0x80, 0xf0, 0x45, 0xef, 0x80, 0xf0, 0x4b, 0xe3, 0x48, 0x9, 0xf8, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x93, 0x77, 0x14, 0x0, 0x89, 0xcf, 0x3, 0x99, 0x4, 0x0, 0x93, 0x7, 0x19, 0x0, 0x23, 0x90, 0xf4, 0x0, 0x63, 0x16, 0x9, 0x0, 0xdc, 0x40, 0x85, 0x45, 0x4e, 0x85, 0x82, 0x97, 0x5, 0x80, 0xa1, 0x4, 0xc1, 0xb7, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x93, 0x7, 0xf5, 0xfd, 0x1d, 0x47, 0x63, 0x78, 0xf7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x90, 0x60, 0x14, 0x45, 0x35, 0xaa, 0x84, 0x11, 0x3f, 0xaa, 0x89, 0xef, 0x80, 0x50, 0x3f, 0xef, 0x80, 0x70, 0x42, 0x13, 0x89, 0xc9, 0x0, 0x1, 0x44, 0x91, 0xec, 0xef, 0x80, 0x50, 0x3e, 0xef, 0x80, 0x50, 0x44, 0xe3, 0x4a, 0x4, 0xfc, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x93, 0xf7, 0x14, 0x0, 0x91, 0xcf, 0x3, 0x54, 0x9, 0x0, 0x7d, 0x14, 0x42, 0x4, 0x41, 0x84, 0x23, 0x10, 0x89, 0x0, 0x11, 0xe4, 0x83, 0x27, 0x49, 0x0, 0x81, 0x45, 0x4e, 0x85, 0x82, 0x97, 0x85, 0x80, 0x21, 0x9, 0xc1, 0xb7, 0x13, 0x85, 0x81, 0xdd, 0x82, 0x80, 0x0, 0x0, 0x73, 0x90, 0x2, 0x34, 0x97, 0x52, 0x1, 0x0, 0x93, 0x82, 0xc2, 0x9c, 0x83, 0xa2, 0x2, 0x0, 0x23, 0xa2, 0x12, 0x0, 0x23, 0xa4, 0x22, 0x0, 0x23, 0xa6, 0x32, 0x0, 0x23, 0xa8, 0x42, 0x0, 0x23, 0xac, 0x62, 0x0, 0x23, 0xae, 0x72, 0x0, 0x23, 0xa0, 0x82, 0x2, 0x23, 0xa2, 0x92, 0x2, 0x16, 0x85, 0x23, 0xa4, 0xa2, 0x2, 0x23, 0xa6, 0xb2, 0x2, 0x23, 0xa8, 0xc2, 0x2, 0x23, 0xaa, 0xd2, 0x2, 0x23, 0xac, 0xe2, 0x2, 0x23, 0xae, 0xf2, 0x2, 0x23, 0xa0, 0x2, 0x5, 0x23, 0xa2, 0x12, 0x5, 0x23, 0xa4, 0x22, 0x5, 0x23, 0xa6, 0x32, 0x5, 0x23, 0xa8, 0x42, 0x5, 0x23, 0xaa, 0x52, 0x5, 0x23, 0xac, 0x62, 0x5, 0x23, 0xae, 0x72, 0x5, 0x23, 0xa0, 0x82, 0x7, 0x23, 0xa2, 0x92, 0x7, 0x23, 0xa4, 0xa2, 0x7, 0x23, 0xa6, 0xb2, 0x7, 0x23, 0xa8, 0xc2, 0x7, 0x23, 0xaa, 0xd2, 0x7, 0x23, 0xac, 0xe2, 0x7, 0x23, 0xae, 0xf2, 0x7, 0x73, 0x23, 0x0, 0x30, 0x23, 0xa0, 0x62, 0x8, 0xf3, 0x23, 0x50, 0x30, 0x23, 0xa2, 0x72, 0x8, 0x73, 0x2e, 0x20, 0x34, 0x23, 0xa4, 0xc2, 0x9, 0x73, 0x23, 0x30, 0x34, 0x23, 0xa6, 0x62, 0x8, 0xf3, 0x23, 0x40, 0x30, 0x23, 0xa8, 0x72, 0x8, 0x73, 0x2e, 0x40, 0x34, 0x23, 0xaa, 0xc2, 0x9, 0x73, 0x23, 0x10, 0x34, 0x23, 0xa0, 0x62, 0x0, 0x71, 0x53, 0x83, 0xa3, 0x82, 0x9, 0xb3, 0x73, 0x73, 0x0, 0x93, 0xe3, 0x13, 0x0, 0x23, 0xac, 0x72, 0x8, 0x16, 0x8e, 0xf3, 0x22, 0x0, 0x34, 0x3, 0x23, 0x8e, 0x1, 0x83, 0x23, 0xce, 0x1, 0x3, 0x2e, 0xe, 0x7, 0x82, 0x80, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x1, 0x0, 0x97, 0x52, 0x1, 0x0, 0x93, 0x82, 0xe2, 0x8d, 0x83, 0xa2, 0x2, 0x0, 0x63, 0x82, 0x2, 0xc, 0x3, 0xa3, 0x82, 0x9, 0x13, 0x63, 0x33, 0x0, 0x23, 0xac, 0x62, 0x8, 0x83, 0xa3, 0x2, 0x0, 0x73, 0x90, 0x13, 0x34, 0x3, 0xae, 0x42, 0x9, 0x73, 0x10, 0x4e, 0x34, 0x3, 0xa3, 0x2, 0x9, 0x73, 0x10, 0x43, 0x30, 0x83, 0xa3, 0x2, 0x8, 0x73, 0x90, 0x3, 0x30, 0x3, 0xae, 0x42, 0x8, 0x73, 0x10, 0x5e, 0x30, 0x3, 0xa3, 0x82, 0x8, 0x73, 0x10, 0x23, 0x34, 0x83, 0xa3, 0xc2, 0x8, 0x73, 0x90, 0x33, 0x34, 0x83, 0xaf, 0xc2, 0x7, 0x3, 0xaf, 0x82, 0x7, 0x83, 0xae, 0x42, 0x7, 0x3, 0xae, 0x2, 0x7, 0x83, 0xad, 0xc2, 0x6, 0x3, 0xad, 0x82, 0x6, 0x83, 0xac, 0x42, 0x6, 0x3, 0xac, 0x2, 0x6, 0x83, 0xab, 0xc2, 0x5, 0x3, 0xab, 0x82, 0x5, 0x83, 0xaa, 0x42, 0x5, 0x3, 0xaa, 0x2, 0x5, 0x83, 0xa9, 0xc2, 0x4, 0x3, 0xa9, 0x82, 0x4, 0x83, 0xa8, 0x42, 0x4, 0x3, 0xa8, 0x2, 0x4, 0x83, 0xa7, 0xc2, 0x3, 0x3, 0xa7, 0x82, 0x3, 0x83, 0xa6, 0x42, 0x3, 0x3, 0xa6, 0x2, 0x3, 0x83, 0xa5, 0xc2, 0x2, 0x3, 0xa5, 0x82, 0x2, 0x83, 0xa4, 0x42, 0x2, 0x3, 0xa4, 0x2, 0x2, 0x83, 0xa3, 0xc2, 0x1, 0x3, 0xa3, 0x82, 0x1, 0x3, 0xa2, 0x2, 0x1, 0x83, 0xa1, 0xc2, 0x0, 0x3, 0xa1, 0x82, 0x0, 0x83, 0xa0, 0x42, 0x0, 0x83, 0xa2, 0x42, 0x1, 0x82, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x80, 0xd0, 0x1c, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x80, 0xb0, 0x1f, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x80, 0xd0, 0x1b, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x80, 0x90, 0x21, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0xc7, 0x5c, 0x95, 0xe3, 0xb7, 0x37, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0x23, 0x26, 0xf7, 0x5c, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x8, 0xf8, 0x5b, 0x13, 0x67, 0x17, 0x0, 0xf8, 0xdb, 0xf8, 0x5b, 0x75, 0x9b, 0xf8, 0xdb, 0x13, 0x85, 0xc1, 0x82, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2e, 0xc6, 0xef, 0x80, 0xb0, 0x1a, 0x1c, 0x40, 0x32, 0x45, 0x99, 0xe7, 0xef, 0x0, 0x91, 0x74, 0x19, 0xe1, 0xef, 0x80, 0xb0, 0x62, 0x8, 0xc0, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0x80, 0xd0, 0x1b, 0x1, 0xe9, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x6, 0xc6, 0xef, 0x80, 0xf0, 0x68, 0x82, 0x80, 0x39, 0x71, 0x22, 0xdc, 0x0, 0x41, 0x26, 0xda, 0x4a, 0xd8, 0x6, 0xde, 0x4e, 0xd6, 0xae, 0x84, 0x32, 0x89, 0x1d, 0xe8, 0xaa, 0x89, 0xef, 0x80, 0x20, 0x23, 0x85, 0x47, 0x63, 0x1a, 0xf5, 0x0, 0x1, 0x45, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x21, 0x61, 0x82, 0x80, 0xca, 0x85, 0x4e, 0x85, 0x41, 0x3f, 0x3, 0xa4, 0x9, 0x0, 0x19, 0xe4, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0x50, 0x64, 0xef, 0x80, 0x0, 0x20, 0x5, 0x47, 0xe3, 0x9, 0xe5, 0xfc, 0xb7, 0x17, 0x0, 0x20, 0x93, 0x87, 0x7, 0x9, 0x9c, 0x43, 0x63, 0x7b, 0xf7, 0x2, 0x91, 0x47, 0x63, 0x14, 0xf9, 0x0, 0xef, 0x80, 0x30, 0x5a, 0x70, 0x8, 0x81, 0x45, 0x22, 0x85, 0x2, 0xce, 0xef, 0x10, 0x41, 0x2f, 0x11, 0xe1, 0xfd, 0xf4, 0xf2, 0x47, 0x89, 0xc7, 0x2a, 0xc6, 0xef, 0x80, 0x30, 0x16, 0x32, 0x45, 0x7d, 0x15, 0x33, 0x35, 0xa0, 0x0, 0x33, 0x5, 0xa0, 0x40, 0x49, 0xbf, 0x91, 0x47, 0xa6, 0x85, 0x22, 0x85, 0x63, 0x15, 0xf9, 0x0, 0xef, 0x10, 0x41, 0x28, 0xdd, 0xb7, 0xef, 0x10, 0x21, 0x14, 0xc5, 0xb7, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0xaa, 0x84, 0x2e, 0x84, 0xef, 0x80, 0x40, 0x19, 0x5, 0x47, 0x63, 0xd, 0xe5, 0x2, 0x88, 0x40, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x80, 0x10, 0x5c, 0xb7, 0x17, 0x0, 0x20, 0x93, 0x87, 0x7, 0x9, 0x9c, 0x43, 0x63, 0x74, 0xf7, 0x2, 0x91, 0x47, 0x63, 0x14, 0xf4, 0x0, 0xef, 0x80, 0x90, 0x52, 0x6c, 0x0, 0x2, 0xc6, 0xef, 0x0, 0xf1, 0x73, 0xb2, 0x47, 0x99, 0xc3, 0xef, 0x80, 0x30, 0xf, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x91, 0x47, 0x63, 0x18, 0xf4, 0x0, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x5, 0x61, 0x6f, 0x0, 0xf1, 0x5c, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x5, 0x61, 0x6f, 0x0, 0x91, 0x43, 0x23, 0x20, 0x5, 0x0, 0x91, 0x45, 0x71, 0xbd, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0x26, 0xc2, 0x6, 0xc6, 0xef, 0x80, 0x50, 0x4, 0x4, 0x40, 0x85, 0xc0, 0x26, 0x85, 0xef, 0x0, 0xb1, 0x3b, 0x19, 0xc5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0xd0, 0x53, 0x26, 0x85, 0xef, 0x10, 0x81, 0x2b, 0x23, 0x20, 0x4, 0x0, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x6f, 0x80, 0x50, 0x4, 0x5, 0x46, 0xfd, 0x55, 0x59, 0xbd, 0x11, 0x46, 0xfd, 0x55, 0x41, 0xbd, 0x5, 0x46, 0x81, 0x45, 0x69, 0xb5, 0x11, 0x46, 0x81, 0x45, 0x51, 0xb5, 0x85, 0x45, 0x25, 0xb7, 0x91, 0x45, 0x15, 0xb7, 0x23, 0x20, 0x5, 0x0, 0x85, 0x45, 0x25, 0xbd, 0x23, 0x20, 0x5, 0x0, 0x91, 0x45, 0x5, 0xbd, 0x1, 0x11, 0x2a, 0xc6, 0x68, 0x0, 0x6, 0xce, 0x71, 0x37, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x2a, 0xc6, 0x68, 0x0, 0x6, 0xce, 0xb5, 0x3f, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2a, 0xc6, 0x3d, 0x35, 0x18, 0x40, 0xb7, 0xc7, 0x10, 0xbb, 0x93, 0x87, 0x37, 0x43, 0x63, 0x17, 0xf7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x23, 0x3e, 0xc6, 0x68, 0x0, 0x69, 0x37, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2a, 0xc6, 0xfd, 0x3b, 0x18, 0x40, 0xb7, 0xc7, 0x10, 0xbb, 0x93, 0x87, 0x37, 0x43, 0x63, 0x17, 0xf7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x1d, 0x3e, 0xc6, 0x68, 0x0, 0x85, 0x37, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2a, 0xc6, 0xf9, 0x33, 0x18, 0x40, 0xb7, 0xc7, 0x10, 0xbb, 0x93, 0x87, 0x37, 0x43, 0x63, 0x17, 0xf7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x23, 0x3e, 0xc6, 0x68, 0x0, 0x1d, 0x3f, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2a, 0xc6, 0x79, 0x3b, 0x18, 0x40, 0xb7, 0xc7, 0x10, 0xbb, 0x93, 0x87, 0x37, 0x43, 0x63, 0x17, 0xf7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x1d, 0x3e, 0xc6, 0x68, 0x0, 0x31, 0x37, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0x8d, 0x3b, 0x68, 0x0, 0xfd, 0x3d, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0x85, 0x33, 0x68, 0x0, 0xc5, 0x3d, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x13, 0x6, 0x0, 0xf, 0x81, 0x45, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xdb, 0x93, 0x87, 0x41, 0xc3, 0xd8, 0x43, 0xb2, 0x40, 0x58, 0xc0, 0x98, 0x47, 0x18, 0xc4, 0xd8, 0x47, 0x58, 0xc4, 0x98, 0x57, 0x9c, 0x4f, 0x18, 0xd4, 0x1c, 0xcc, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xbd, 0xcd, 0x1, 0x11, 0x22, 0xcc, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x5, 0xc4, 0x62, 0x6, 0xce, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x2e, 0x89, 0xbd, 0x3d, 0xef, 0x80, 0x10, 0x65, 0xaa, 0x84, 0x13, 0x5, 0xc4, 0x62, 0xae, 0x89, 0x61, 0x35, 0xef, 0x90, 0x0, 0x1, 0xaa, 0x94, 0x33, 0xb4, 0xa4, 0x0, 0xce, 0x95, 0x2e, 0x94, 0x37, 0x46, 0xf, 0x0, 0x13, 0x6, 0x6, 0x24, 0x81, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x26, 0x37, 0x46, 0xf, 0x0, 0x23, 0x20, 0xa9, 0x0, 0x23, 0x22, 0xb9, 0x0, 0x26, 0x85, 0xa2, 0x85, 0x13, 0x6, 0x6, 0x24, 0x81, 0x46, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x26, 0xf2, 0x40, 0x62, 0x44, 0x23, 0x24, 0xa9, 0x0, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x2e, 0x84, 0xaa, 0x84, 0xef, 0x70, 0xb0, 0x10, 0x89, 0x67, 0x93, 0x87, 0x7, 0x71, 0x33, 0x5, 0xf5, 0x2, 0x23, 0x26, 0x4, 0x0, 0x23, 0x24, 0x4, 0x0, 0x23, 0x20, 0x4, 0x0, 0x81, 0x47, 0x1, 0x48, 0x8a, 0x85, 0x1, 0x46, 0x3e, 0xc0, 0x42, 0xc2, 0x48, 0xc0, 0x26, 0x85, 0xa1, 0x37, 0xf2, 0x40, 0x62, 0x44, 0x2, 0x45, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x89, 0x20, 0x37, 0xb7, 0x81, 0x40, 0xaa, 0x87, 0x3, 0x25, 0x7, 0x66, 0x3, 0x27, 0x47, 0x66, 0xb2, 0x40, 0x3e, 0x95, 0xb3, 0x37, 0xf5, 0x0, 0xba, 0x95, 0xbe, 0x95, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x3, 0x81, 0x45, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x47, 0x28, 0x7c, 0x57, 0x93, 0xe7, 0x47, 0x0, 0x7c, 0xd7, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x66, 0x82, 0x87, 0x37, 0xb5, 0x81, 0x40, 0x41, 0x11, 0x93, 0x7, 0x45, 0x28, 0x22, 0xc4, 0xc0, 0x43, 0x81, 0x45, 0x13, 0x5, 0x45, 0x28, 0x6, 0xc6, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xb9, 0xa2, 0x87, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x87, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x85, 0x47, 0x63, 0xf8, 0xc7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0xd0, 0x26, 0xae, 0x84, 0x32, 0x84, 0x2a, 0x89, 0xef, 0x80, 0xc0, 0x51, 0xef, 0x80, 0xe0, 0x54, 0x93, 0x87, 0xc1, 0x99, 0xe, 0x4, 0x3e, 0x94, 0x23, 0x20, 0x24, 0x1, 0x44, 0xc0, 0xd8, 0x43, 0xd4, 0x47, 0x8c, 0x43, 0x90, 0x47, 0x63, 0x66, 0xd7, 0x0, 0x63, 0x96, 0xe6, 0x0, 0x63, 0xf4, 0xc5, 0x0, 0x2e, 0x86, 0xba, 0x86, 0x37, 0xb5, 0x81, 0x40, 0x89, 0x45, 0x13, 0x5, 0x45, 0x28, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xb2, 0xef, 0x80, 0xc0, 0x4d, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0x80, 0x20, 0x53, 0x37, 0xf7, 0x0, 0x60, 0x41, 0x11, 0x13, 0x7, 0x7, 0x0, 0x1c, 0x47, 0x26, 0xc2, 0x89, 0x46, 0x6, 0xc6, 0x22, 0xc4, 0x54, 0xcb, 0xb7, 0xb4, 0x81, 0x40, 0x3, 0xc7, 0x44, 0x68, 0x89, 0x8b, 0xb3, 0x36, 0xf0, 0x0, 0x63, 0x8b, 0xe6, 0x0, 0x37, 0xb4, 0x81, 0x40, 0x8d, 0xe3, 0x83, 0x27, 0x4, 0x68, 0x89, 0xcb, 0xfd, 0x17, 0x23, 0x20, 0xf4, 0x68, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xef, 0x40, 0xa0, 0x3f, 0x23, 0x82, 0x4, 0x68, 0xfd, 0xb7, 0xef, 0x40, 0x0, 0x3e, 0x85, 0x47, 0x23, 0x82, 0xf4, 0x68, 0x23, 0x20, 0x4, 0x68, 0xf9, 0xbf, 0x5, 0x45, 0x82, 0x80, 0x6f, 0x80, 0x80, 0x50, 0x6f, 0x10, 0x60, 0x7e, 0x6f, 0x10, 0x80, 0x79, 0x85, 0x65, 0x93, 0x85, 0xc5, 0x80, 0x6f, 0xe0, 0x5f, 0xe8, 0x6f, 0x40, 0xc0, 0x52, 0x6f, 0x0, 0x31, 0x33, 0x2e, 0x86, 0x81, 0x45, 0x6f, 0x0, 0xb1, 0x66, 0xb7, 0x7, 0xff, 0x0, 0xe9, 0x8f, 0x37, 0x7, 0x20, 0x0, 0x63, 0x91, 0xe7, 0x4, 0x13, 0x57, 0x85, 0x0, 0x13, 0x77, 0xf7, 0xf, 0x93, 0x6, 0x0, 0x4, 0x93, 0x77, 0xf5, 0xf, 0x63, 0x16, 0xd7, 0x0, 0xb5, 0x17, 0x13, 0xb5, 0xe7, 0x0, 0x82, 0x80, 0x93, 0x6, 0x10, 0x4, 0x63, 0x16, 0xd7, 0x0, 0xa5, 0x17, 0x13, 0xb5, 0xa7, 0x0, 0x82, 0x80, 0x93, 0x6, 0x0, 0x5, 0x1, 0x45, 0x63, 0x17, 0xd7, 0x0, 0xad, 0x17, 0x13, 0xb5, 0x27, 0x0, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x93, 0x8, 0x0, 0x2, 0x63, 0xfa, 0xe8, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x80, 0x50, 0x12, 0xe3, 0xe8, 0x8, 0xff, 0xb7, 0x32, 0x0, 0x60, 0x93, 0x88, 0x2, 0x0, 0x83, 0xaf, 0x88, 0x0, 0x3, 0xaf, 0x88, 0x1, 0x83, 0xae, 0xc8, 0x1, 0x3, 0xae, 0x8, 0x2, 0x23, 0xa4, 0x8, 0x0, 0x3, 0xa3, 0x88, 0x0, 0xb7, 0x3, 0x20, 0x0, 0x33, 0x63, 0x73, 0x0, 0x23, 0xa4, 0x68, 0x0, 0x3, 0xa3, 0x88, 0x1, 0xb7, 0x3, 0x0, 0x80, 0x33, 0x63, 0x73, 0x0, 0x23, 0xac, 0x68, 0x0, 0x3, 0xa3, 0x8, 0x2, 0xb7, 0x3, 0x0, 0x70, 0x12, 0x3, 0x13, 0x53, 0x43, 0x0, 0x33, 0x63, 0x73, 0x0, 0x23, 0xa0, 0x68, 0x2, 0x3, 0xa3, 0x8, 0x2, 0xc1, 0x73, 0x33, 0x73, 0x73, 0x0, 0x33, 0x65, 0xa3, 0x0, 0x23, 0xa0, 0xa8, 0x2, 0x3, 0xa5, 0x88, 0x1, 0xb7, 0x3, 0x0, 0xc0, 0x33, 0x33, 0xb0, 0x0, 0xfd, 0x13, 0x7a, 0x3, 0x33, 0x75, 0x75, 0x0, 0x33, 0x65, 0x65, 0x0, 0x23, 0xac, 0xa8, 0x0, 0x13, 0x85, 0xf5, 0xff, 0x83, 0xa5, 0xc8, 0x1, 0x6a, 0x5, 0x9a, 0x5, 0x99, 0x81, 0xc9, 0x8d, 0x23, 0xae, 0xb8, 0x0, 0x23, 0xa2, 0xc8, 0x0, 0x13, 0x86, 0x2, 0x0, 0x63, 0x9, 0x8, 0x0, 0xb7, 0x5, 0x88, 0x40, 0x83, 0xa5, 0xc5, 0xfe, 0x83, 0xc5, 0x95, 0x1, 0xae, 0x96, 0xc, 0x4e, 0xb7, 0x8, 0x0, 0xe0, 0x33, 0x35, 0xd0, 0x0, 0xfd, 0x18, 0x76, 0x5, 0xb3, 0xf5, 0x15, 0x1, 0xc9, 0x8d, 0xc, 0xce, 0x4c, 0x4e, 0xfd, 0x16, 0x93, 0xf6, 0xf6, 0x3, 0x93, 0xf5, 0x5, 0xfc, 0xcd, 0x8e, 0x54, 0xce, 0x14, 0x4e, 0x37, 0x5, 0x0, 0xf8, 0xb3, 0x35, 0xe0, 0x0, 0x7d, 0x15, 0xee, 0x5, 0xe9, 0x8e, 0xcd, 0x8e, 0x14, 0xce, 0x81, 0x46, 0x1, 0xc7, 0x7d, 0x17, 0x93, 0x76, 0xf7, 0x3f, 0x58, 0x52, 0x13, 0x77, 0x7, 0xc0, 0x55, 0x8f, 0x58, 0xd2, 0x3c, 0xce, 0x1c, 0x4e, 0xb7, 0x6, 0x0, 0xf0, 0x33, 0x37, 0x0, 0x1, 0xfd, 0x16, 0x72, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0x1c, 0xce, 0x1, 0x47, 0x63, 0x6, 0x8, 0x0, 0x13, 0x7, 0xf8, 0xff, 0x13, 0x77, 0xf7, 0x3f, 0x1c, 0x56, 0x93, 0xf7, 0x7, 0xc0, 0xd9, 0x8f, 0x1c, 0xd6, 0x1c, 0x42, 0x37, 0x7, 0x4, 0x0, 0xd9, 0x8f, 0x1c, 0xc2, 0x1c, 0x42, 0x13, 0x97, 0xd7, 0x0, 0xe3, 0x4d, 0x7, 0xfe, 0x23, 0x24, 0xf6, 0x1, 0x23, 0x2c, 0xe6, 0x1, 0x23, 0x2e, 0xd6, 0x1, 0x23, 0x20, 0xc6, 0x3, 0x28, 0x4e, 0x93, 0x7, 0x0, 0x2, 0x63, 0x8, 0xf8, 0x0, 0xfd, 0x57, 0xb3, 0x97, 0x7, 0x1, 0x93, 0xc7, 0xf7, 0xff, 0x7d, 0x8d, 0x82, 0x80, 0xae, 0x87, 0x32, 0x87, 0x36, 0x88, 0x1, 0x46, 0x81, 0x46, 0x81, 0x45, 0x8d, 0xbd, 0x1, 0x11, 0x4a, 0xc8, 0x37, 0x9, 0x88, 0x40, 0x3, 0x25, 0xc9, 0xfe, 0x4e, 0xc6, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x52, 0xc4, 0x56, 0xc2, 0x5a, 0xc0, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x5c, 0x83, 0x29, 0xc9, 0xfe, 0x37, 0x7, 0xff, 0x0, 0xb7, 0x6, 0x9d, 0x0, 0x83, 0xa7, 0x9, 0x0, 0x7d, 0x8f, 0x63, 0x6, 0xd7, 0x0, 0xb7, 0x6, 0xc2, 0x0, 0x63, 0x1c, 0xd7, 0x8, 0xa1, 0x46, 0x1, 0x46, 0x81, 0x45, 0x15, 0x45, 0x6d, 0x37, 0x13, 0x14, 0x5, 0x1, 0x13, 0x75, 0xc5, 0xb, 0x41, 0x80, 0x2d, 0xc5, 0x13, 0x74, 0x34, 0xf4, 0x42, 0x4, 0x41, 0x80, 0x21, 0x4b, 0x81, 0x44, 0x1, 0x4a, 0x4e, 0x85, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x58, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x19, 0x45, 0xb5, 0x3f, 0x81, 0x46, 0x5a, 0x86, 0xa2, 0x85, 0x5, 0x45, 0x8d, 0x3f, 0x63, 0x3, 0x9a, 0x2, 0x3, 0x25, 0xc9, 0xfe, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x55, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x19, 0x45, 0xa1, 0x3f, 0x81, 0x46, 0x21, 0x46, 0xa6, 0x85, 0x13, 0x5, 0x10, 0x3, 0xb1, 0x37, 0x3, 0x25, 0xc9, 0xfe, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x53, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x11, 0x45, 0x1d, 0x3f, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0xb7, 0x6, 0xc8, 0x0, 0x63, 0x18, 0xd7, 0x4, 0x41, 0x67, 0x13, 0x7, 0x7, 0xf0, 0x7d, 0x8f, 0x91, 0x66, 0x63, 0x11, 0xd7, 0x4, 0x93, 0xf7, 0xf7, 0xf, 0x55, 0x47, 0x63, 0x7c, 0xf7, 0x2, 0xa1, 0x46, 0x1, 0x46, 0x81, 0x45, 0x15, 0x45, 0xdd, 0x3d, 0x93, 0x1a, 0x5, 0x1, 0xa1, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x50, 0x3, 0xdd, 0x35, 0x93, 0xda, 0xa, 0x1, 0x13, 0x7a, 0xf5, 0xf, 0x93, 0x74, 0x25, 0x0, 0x21, 0x4b, 0x1, 0x44, 0xe3, 0x93, 0x8a, 0xf4, 0xe3, 0x12, 0x9a, 0xf6, 0x61, 0xbf, 0xa1, 0x46, 0x1, 0x46, 0x81, 0x45, 0x15, 0x45, 0xc9, 0x35, 0xaa, 0x84, 0xa1, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x50, 0x3, 0x55, 0x3d, 0x13, 0x14, 0x85, 0x0, 0x45, 0x8c, 0x93, 0x1a, 0x4, 0x1, 0x93, 0xda, 0xa, 0x1, 0x13, 0x74, 0x4, 0x20, 0x41, 0x4b, 0x81, 0x44, 0x1, 0x4a, 0xd9, 0xb7, 0x91, 0x47, 0x63, 0xfa, 0xb7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x80, 0xc0, 0x63, 0x8e, 0x5, 0x2a, 0x86, 0x13, 0xf8, 0x85, 0xf, 0x81, 0x47, 0x1, 0x47, 0xa1, 0x46, 0xe1, 0x45, 0x13, 0x5, 0xa0, 0x5, 0x6f, 0xf0, 0xdf, 0xce, 0x41, 0x11, 0xe1, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0xf0, 0x9, 0x6, 0xc6, 0xb1, 0x3d, 0x93, 0x17, 0x5, 0x1, 0x37, 0x7, 0xff, 0x0, 0xf9, 0x8f, 0x13, 0x57, 0x5, 0x1, 0x13, 0x77, 0xf7, 0xf, 0xb2, 0x40, 0xd9, 0x8f, 0x41, 0x67, 0x13, 0x7, 0x7, 0xf0, 0x79, 0x8d, 0x5d, 0x8d, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0x4, 0x88, 0x40, 0x83, 0x27, 0xc4, 0xfe, 0x6, 0xc6, 0x88, 0x43, 0xef, 0xf0, 0x5f, 0xc5, 0x11, 0xc5, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x85, 0x45, 0x41, 0x45, 0xad, 0x3f, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x7, 0x0, 0x2, 0xe3, 0x14, 0xf5, 0xfe, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0xb, 0xed, 0x3b, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x7, 0xfd, 0x33, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0xf0, 0xf, 0xcd, 0x33, 0x13, 0x5, 0x0, 0x7d, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x30, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0xb0, 0xa, 0xe9, 0x33, 0x51, 0x45, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x2e, 0x3, 0x24, 0xc4, 0xfe, 0x81, 0x3f, 0x8, 0xc0, 0xef, 0xf0, 0x5f, 0xbe, 0x7d, 0x15, 0x49, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x37, 0x34, 0x0, 0x60, 0x6, 0xc6, 0x13, 0x4, 0x4, 0x0, 0x1c, 0x48, 0x37, 0x6, 0x0, 0x80, 0x13, 0x7, 0xf6, 0xff, 0xf9, 0x8f, 0x1c, 0xc8, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x94, 0x4b, 0x81, 0x45, 0x15, 0x45, 0xf9, 0x8e, 0x94, 0xcb, 0x14, 0x48, 0xd1, 0x8e, 0x14, 0xc8, 0x94, 0x4b, 0xd1, 0x8e, 0x94, 0xcb, 0x14, 0x48, 0x1, 0x46, 0xf9, 0x8e, 0x14, 0xc8, 0x94, 0x4b, 0x75, 0x8f, 0x98, 0xcb, 0x81, 0x46, 0xef, 0xf0, 0x5f, 0xd6, 0x1c, 0x40, 0x7d, 0x55, 0xbd, 0x8b, 0x85, 0xe3, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x60, 0x6, 0xef, 0xf0, 0xff, 0xd4, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x9, 0xef, 0xf0, 0x1f, 0xd4, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x27, 0x0, 0x60, 0x98, 0x4f, 0x13, 0x67, 0x7, 0xc, 0x98, 0xcf, 0xb7, 0x27, 0x0, 0x60, 0x98, 0x4b, 0x13, 0x77, 0xf7, 0xc1, 0x98, 0xcb, 0x98, 0x4b, 0x1, 0x9b, 0x98, 0xcb, 0x82, 0x80, 0x83, 0x47, 0x35, 0x0, 0x9, 0x47, 0x11, 0x45, 0xbd, 0x8b, 0x63, 0x87, 0xe7, 0x0, 0x63, 0x6a, 0xf7, 0x0, 0x33, 0x35, 0xf0, 0x0, 0x9, 0x5, 0x81, 0x45, 0x17, 0xe3, 0x7f, 0xff, 0x67, 0x0, 0x43, 0x35, 0xc5, 0x17, 0x13, 0xb5, 0x17, 0x0, 0xc5, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0xaa, 0x85, 0x2a, 0x84, 0x75, 0x45, 0x6, 0xc6, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x8c, 0xa2, 0x85, 0x65, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x8b, 0xa2, 0x85, 0x79, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x8a, 0xa2, 0x85, 0x61, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x8a, 0xa2, 0x85, 0x71, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x89, 0xa2, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x69, 0x45, 0x41, 0x1, 0x17, 0xf3, 0x7f, 0xff, 0x67, 0x0, 0x23, 0x88, 0x6f, 0x10, 0x60, 0x8, 0x6f, 0xe0, 0xe0, 0x29, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x2e, 0x84, 0xb6, 0x84, 0x4a, 0xd0, 0x4e, 0xce, 0x2a, 0x89, 0xb2, 0x89, 0x61, 0x2a, 0x7c, 0x0, 0x26, 0x87, 0xce, 0x86, 0x22, 0x86, 0xca, 0x85, 0x1, 0x45, 0x2, 0xc6, 0xef, 0xd0, 0x30, 0x73, 0x93, 0x87, 0xf4, 0xff, 0x37, 0x7, 0x0, 0x42, 0xa2, 0x97, 0x63, 0x66, 0xe4, 0x0, 0x37, 0x7, 0x80, 0x42, 0x63, 0xe4, 0xe7, 0x0, 0xef, 0x80, 0x20, 0x38, 0xb7, 0x87, 0xc, 0x60, 0xd8, 0x43, 0xa6, 0x85, 0x22, 0x85, 0x79, 0x9b, 0xd8, 0xc3, 0xd8, 0x43, 0x75, 0x9b, 0xd8, 0xc3, 0x5d, 0x37, 0x22, 0x54, 0xb2, 0x50, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x35, 0xa2, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2e, 0xc6, 0x2a, 0x84, 0x35, 0x2a, 0x32, 0x46, 0xa2, 0x85, 0x1, 0x45, 0xef, 0xd0, 0x30, 0x7f, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x61, 0x39, 0xa2, 0xa5, 0xc1, 0x37, 0xb7, 0x81, 0x40, 0x13, 0x7, 0x87, 0x3c, 0x3, 0x23, 0x7, 0x0, 0x1, 0x46, 0x81, 0x46, 0x1, 0x48, 0x63, 0x1a, 0x66, 0x0, 0x13, 0x5, 0x50, 0x10, 0x63, 0x4, 0x8, 0x4, 0xdc, 0x4a, 0x1, 0x45, 0x9c, 0xc1, 0x82, 0x80, 0x83, 0x28, 0x47, 0x2, 0xc6, 0x87, 0x99, 0xe7, 0xb6, 0x87, 0x5, 0x6, 0x13, 0x7, 0x87, 0x2, 0xbe, 0x86, 0xe9, 0xbf, 0x63, 0x8e, 0x17, 0x1, 0x3, 0x2e, 0x87, 0x2, 0x3, 0x2e, 0x4e, 0x0, 0x3, 0x2e, 0xe, 0x0, 0x63, 0x6, 0xfe, 0x0, 0x3, 0xae, 0x87, 0x1, 0x63, 0x4, 0xae, 0x0, 0xdc, 0x53, 0xd1, 0xbf, 0x5, 0x48, 0xd1, 0xbf, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x0, 0x42, 0xb7, 0x7, 0xe, 0x0, 0xa1, 0x7, 0x4a, 0xd0, 0x56, 0xca, 0x6, 0xd6, 0x26, 0xd2, 0x4e, 0xce, 0x52, 0xcc, 0xe1, 0x8f, 0x3, 0xa9, 0x5, 0x0, 0x83, 0x2a, 0x5, 0x0, 0x99, 0xcf, 0xaa, 0x89, 0x2e, 0x8a, 0x22, 0x85, 0x6c, 0x0, 0xb2, 0x84, 0x2, 0xc6, 0xef, 0xc0, 0x40, 0x34, 0x19, 0xcd, 0x9c, 0x40, 0x37, 0x7, 0x0, 0x80, 0xd9, 0x8f, 0x9c, 0xc0, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x45, 0x61, 0x82, 0x80, 0xb2, 0x47, 0x63, 0xf3, 0x57, 0x1, 0xd6, 0x87, 0x3e, 0x99, 0x93, 0x56, 0x14, 0x1, 0x7d, 0x19, 0x33, 0x7, 0xf0, 0x40, 0x8d, 0x8a, 0x33, 0x77, 0x27, 0x1, 0x99, 0xc6, 0xb7, 0x6, 0xfa, 0xff, 0xfd, 0x16, 0x75, 0x8c, 0x13, 0x64, 0x84, 0x0, 0x93, 0x76, 0x4, 0x40, 0x91, 0xc2, 0x5d, 0x98, 0x23, 0x20, 0xea, 0x0, 0x23, 0xa0, 0xf9, 0x0, 0xb7, 0x7, 0xf8, 0xff, 0xfd, 0x17, 0x7d, 0x8c, 0x80, 0xc0, 0x75, 0xb7, 0x89, 0x45, 0x5, 0x45, 0x6f, 0xe0, 0x40, 0xe, 0x89, 0x45, 0x5, 0x45, 0x6f, 0xe0, 0xc0, 0xd, 0x41, 0x11, 0x6, 0xc6, 0xf5, 0x37, 0xef, 0xe0, 0xdf, 0xc4, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0xc0, 0xe0, 0x32, 0xf9, 0xbf, 0x89, 0x45, 0x5, 0x45, 0x6f, 0xe0, 0xa0, 0x9, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xc0, 0x80, 0x31, 0xef, 0xe0, 0x3f, 0xbc, 0xb2, 0x40, 0xb7, 0xb5, 0x81, 0x40, 0x93, 0x85, 0x85, 0x6a, 0x1, 0x45, 0x41, 0x1, 0xf9, 0xbf, 0x89, 0x45, 0x5, 0x45, 0x6f, 0xe0, 0xa0, 0xc, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0x2e, 0x84, 0x23, 0xa0, 0x5, 0x0, 0x2c, 0x0, 0xaa, 0x84, 0x2, 0xc4, 0x45, 0x35, 0x5, 0xe5, 0xa2, 0x47, 0x2, 0xc6, 0x78, 0x0, 0x85, 0x8b, 0x89, 0x46, 0x91, 0xe3, 0x85, 0x46, 0x5, 0x46, 0xa6, 0x85, 0xef, 0xd0, 0xf0, 0x45, 0xb2, 0x47, 0x5, 0x45, 0x1c, 0xc0, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x45, 0xd5, 0xbf, 0xa1, 0x67, 0x79, 0x71, 0xfd, 0x17, 0x61, 0x77, 0x22, 0xd4, 0x33, 0x84, 0xf5, 0x0, 0x26, 0xd2, 0x2a, 0x94, 0xb3, 0x74, 0xe5, 0x0, 0x5, 0x8c, 0x79, 0x8c, 0x4e, 0xce, 0x52, 0xcc, 0x6, 0xd6, 0x4a, 0xd0, 0x81, 0x49, 0x26, 0x94, 0x37, 0xa, 0x88, 0x40, 0x63, 0xf8, 0x84, 0x0, 0x83, 0x27, 0xca, 0xfe, 0xdc, 0x43, 0x63, 0xec, 0xf4, 0x0, 0x81, 0x49, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0x62, 0x4a, 0x4e, 0x85, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x6c, 0x0, 0x26, 0x85, 0xbd, 0x37, 0x2a, 0x89, 0x19, 0xc5, 0x32, 0x45, 0x9, 0xc5, 0xa1, 0x65, 0xef, 0xe0, 0xc0, 0x2, 0xca, 0x89, 0xa1, 0x67, 0xbe, 0x94, 0xd1, 0xb7, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x1c, 0x45, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x91, 0xeb, 0x8, 0x40, 0x1c, 0x41, 0x9c, 0x43, 0x82, 0x97, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x9c, 0x43, 0xf5, 0xd7, 0x48, 0x45, 0x82, 0x97, 0x7d, 0xd1, 0xfd, 0xb7, 0x1c, 0x45, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2e, 0x84, 0x91, 0xe7, 0x22, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xdc, 0x43, 0xf5, 0xdb, 0x48, 0x45, 0x82, 0x97, 0x7d, 0xf4, 0xfd, 0xb7, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x6, 0xd6, 0x2e, 0x84, 0xaa, 0x84, 0xb6, 0x85, 0x3a, 0x89, 0xb7, 0x99, 0x81, 0x40, 0x15, 0xe2, 0x83, 0xa7, 0x49, 0x53, 0x36, 0xc6, 0x9c, 0x43, 0x82, 0x97, 0xb2, 0x45, 0x19, 0xc9, 0x11, 0xe0, 0x2a, 0x84, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x88, 0x40, 0x1c, 0x41, 0xfc, 0x43, 0x89, 0xef, 0xa2, 0x85, 0x83, 0xa7, 0x49, 0x53, 0x22, 0x54, 0xb2, 0x50, 0x2, 0x59, 0xf2, 0x49, 0xdc, 0x43, 0x26, 0x85, 0x92, 0x54, 0x45, 0x61, 0x82, 0x87, 0x4a, 0x86, 0x82, 0x97, 0xaa, 0x85, 0x6d, 0xf0, 0xcd, 0xb7, 0x48, 0x41, 0x33, 0x35, 0xa0, 0x0, 0x82, 0x80, 0xaa, 0x87, 0x8, 0x41, 0x19, 0xe5, 0x37, 0xb7, 0x81, 0x40, 0x3, 0x25, 0x7, 0x6b, 0x88, 0xc3, 0x1, 0xcd, 0x41, 0x11, 0x6, 0xc6, 0xcd, 0x37, 0x81, 0x47, 0x19, 0xe1, 0x99, 0x67, 0x8d, 0x7, 0xb2, 0x40, 0x3e, 0x85, 0x41, 0x1, 0x82, 0x80, 0x99, 0x67, 0x8d, 0x7, 0x3e, 0x85, 0x82, 0x80, 0x1, 0x11, 0x26, 0xca, 0x52, 0xc4, 0x83, 0xa4, 0x81, 0x83, 0x3, 0x2a, 0x85, 0x1, 0x22, 0xcc, 0x4e, 0xc6, 0x6, 0xce, 0x4a, 0xc8, 0x2a, 0x84, 0xb7, 0x99, 0x81, 0x40, 0x3, 0xa9, 0x4, 0x0, 0x22, 0x85, 0x5d, 0x37, 0xaa, 0x87, 0x63, 0x5, 0x9, 0x4, 0x19, 0xc1, 0x1, 0x45, 0xd, 0xa8, 0x83, 0xa7, 0x49, 0x53, 0x23, 0x22, 0x24, 0x1, 0x22, 0x85, 0x9c, 0x43, 0x82, 0x97, 0xd, 0xe1, 0x5c, 0x40, 0xd2, 0x85, 0x22, 0x85, 0x9c, 0x47, 0x82, 0x97, 0x19, 0xc1, 0x23, 0x22, 0x4, 0x0, 0x83, 0xa7, 0x49, 0x53, 0x81, 0x45, 0x22, 0x85, 0xdc, 0x43, 0x91, 0x4, 0x82, 0x97, 0x5d, 0xdd, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x13, 0x5, 0x50, 0x10, 0xf5, 0xd7, 0x5d, 0xbf, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x52, 0xcc, 0x56, 0xca, 0x6, 0xd6, 0x4e, 0xce, 0x2a, 0x84, 0xae, 0x84, 0x32, 0x8a, 0xb7, 0x9a, 0x81, 0x40, 0x1d, 0x3f, 0x83, 0xa7, 0x4a, 0x53, 0x2a, 0x89, 0x22, 0x85, 0x9c, 0x43, 0x82, 0x97, 0x31, 0xed, 0x63, 0x8, 0x9, 0x0, 0x5c, 0x40, 0xa2, 0x89, 0x3, 0xa9, 0x7, 0x6, 0x63, 0x18, 0x9, 0x0, 0x83, 0x29, 0x4, 0x0, 0x83, 0xa7, 0x9, 0x0, 0x3, 0xa9, 0x87, 0x0, 0xa6, 0x85, 0x4e, 0x85, 0x2, 0x99, 0xaa, 0x85, 0x63, 0xe, 0xa, 0x0, 0x1, 0xed, 0x6c, 0x0, 0x4e, 0x85, 0x2, 0x99, 0xaa, 0x85, 0x19, 0xe5, 0x98, 0x40, 0xb2, 0x47, 0x63, 0x4, 0xf7, 0x0, 0x99, 0x65, 0x8d, 0x5, 0x83, 0xa7, 0x4a, 0x53, 0x22, 0x85, 0x22, 0x54, 0xb2, 0x50, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0xdc, 0x43, 0x45, 0x61, 0x82, 0x87, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x26, 0xd2, 0xb7, 0x94, 0x81, 0x40, 0x83, 0xa7, 0x44, 0x53, 0x22, 0xd4, 0x6, 0xd6, 0x9c, 0x47, 0x2a, 0xc6, 0x68, 0x0, 0x2e, 0x84, 0x82, 0x97, 0x29, 0xe1, 0xb2, 0x47, 0x19, 0x65, 0x15, 0x5, 0xd8, 0x43, 0x18, 0x4b, 0x1d, 0xcb, 0x13, 0x5, 0x20, 0x10, 0x5, 0xc8, 0x3, 0xa7, 0x44, 0x53, 0x3e, 0x85, 0x18, 0x43, 0x2, 0x97, 0x15, 0xe1, 0x32, 0x45, 0x6c, 0x8, 0x5c, 0x41, 0x9c, 0x4b, 0x82, 0x97, 0xaa, 0x85, 0x32, 0x45, 0x91, 0xe5, 0x58, 0x49, 0xf2, 0x47, 0x11, 0xe3, 0x5c, 0xc9, 0x1c, 0xc0, 0x83, 0xa7, 0x44, 0x53, 0xdc, 0x43, 0x82, 0x97, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x69, 0xcd, 0x1c, 0x41, 0x79, 0x71, 0x22, 0xd4, 0x6, 0xd6, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x2a, 0x84, 0x13, 0x5, 0x20, 0x10, 0xc9, 0xc7, 0x98, 0x43, 0x59, 0xc3, 0xdc, 0x43, 0xc9, 0xc3, 0x83, 0x29, 0x4, 0x1, 0x2, 0xc4, 0xbd, 0x47, 0x63, 0xf1, 0x37, 0x7, 0xb7, 0x7, 0x88, 0x40, 0x83, 0xa7, 0xc7, 0xfe, 0x9c, 0x43, 0x3e, 0xc4, 0xa2, 0x47, 0x22, 0x85, 0x1c, 0xcc, 0xef, 0xf0, 0x7f, 0xe1, 0x25, 0xc9, 0x6c, 0x0, 0x22, 0x85, 0x89, 0x3f, 0x39, 0xe9, 0x5c, 0x40, 0xfc, 0x5b, 0x99, 0xcb, 0x22, 0x85, 0x82, 0x97, 0x9, 0x89, 0x19, 0xe5, 0x32, 0x47, 0xb7, 0x7, 0x0, 0x1, 0x63, 0xf3, 0xe7, 0x0, 0x3e, 0xc6, 0xb7, 0x94, 0x81, 0x40, 0x83, 0xa7, 0x44, 0x53, 0x22, 0x85, 0x9c, 0x43, 0x82, 0x97, 0x15, 0xe5, 0xbd, 0x47, 0x63, 0xf2, 0x37, 0x5, 0x81, 0x45, 0x83, 0xa7, 0x44, 0x53, 0x22, 0x85, 0xdc, 0x43, 0x82, 0x97, 0x21, 0xa8, 0x19, 0x69, 0xad, 0x44, 0xd, 0x9, 0x2c, 0x0, 0x22, 0x85, 0xef, 0xc0, 0x60, 0xc, 0x63, 0x1b, 0x25, 0x1, 0xfd, 0x14, 0xed, 0xf8, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x49, 0xd5, 0xc5, 0xbf, 0x22, 0x85, 0xef, 0xf0, 0x9f, 0xdd, 0x51, 0xd5, 0xdd, 0xb7, 0x5c, 0x40, 0x22, 0x85, 0xbc, 0x4f, 0x82, 0x97, 0x93, 0x7, 0x80, 0x10, 0xaa, 0x85, 0xe3, 0x1a, 0xf5, 0xfa, 0x1c, 0x48, 0x5, 0x47, 0xf1, 0x17, 0xe3, 0x64, 0xf7, 0xfa, 0x5d, 0xb7, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x1d, 0x71, 0xda, 0xc0, 0x37, 0x9b, 0x81, 0x40, 0x83, 0x27, 0x4b, 0x53, 0xa2, 0xcc, 0xa6, 0xca, 0x9c, 0x47, 0xca, 0xc8, 0x2a, 0xc6, 0x86, 0xce, 0xce, 0xc6, 0xd2, 0xc4, 0xd6, 0xc2, 0x5e, 0xde, 0x62, 0xdc, 0x66, 0xda, 0x6a, 0xd8, 0x6e, 0xd6, 0x68, 0x0, 0xae, 0x84, 0x32, 0x89, 0x82, 0x97, 0x2a, 0x84, 0x51, 0xed, 0xb2, 0x47, 0xd8, 0x43, 0x14, 0x4f, 0x63, 0x88, 0x6, 0x1a, 0x58, 0x4f, 0x63, 0x5, 0x7, 0x1a, 0x98, 0x47, 0x18, 0x47, 0x25, 0xeb, 0x32, 0x45, 0x81, 0x4a, 0x5c, 0x41, 0xd8, 0x4f, 0x19, 0xc3, 0x83, 0xaa, 0x47, 0x2, 0x83, 0xab, 0x7, 0x2, 0x63, 0x8d, 0xb, 0x18, 0x33, 0xf7, 0x7a, 0x3, 0x63, 0x19, 0x7, 0x18, 0x58, 0x49, 0x63, 0x60, 0x97, 0x6, 0xb3, 0x89, 0x24, 0x1, 0x63, 0x6c, 0x37, 0x5, 0x33, 0xf7, 0x74, 0x3, 0x21, 0xeb, 0x33, 0x77, 0x79, 0x3, 0x29, 0xe7, 0x63, 0x6, 0x9, 0x4, 0x98, 0x5f, 0x3d, 0xe3, 0x4a, 0x8a, 0xa6, 0x89, 0x32, 0x45, 0x5c, 0x41, 0xbc, 0x57, 0xed, 0xeb, 0x83, 0x27, 0x4b, 0x53, 0x32, 0x45, 0x9c, 0x43, 0x82, 0x97, 0xaa, 0x85, 0x7d, 0xc5, 0x1, 0x46, 0x83, 0x27, 0x4b, 0x53, 0x32, 0x45, 0x4a, 0x87, 0xdc, 0x47, 0xa6, 0x86, 0x82, 0x97, 0x2a, 0x84, 0x21, 0xa8, 0xc8, 0x47, 0x4a, 0x86, 0xa6, 0x85, 0x2, 0x97, 0x93, 0x7, 0xd0, 0x10, 0x63, 0x6, 0xf5, 0x12, 0x49, 0xd1, 0x13, 0x4, 0x20, 0x10, 0xf6, 0x40, 0x22, 0x85, 0x66, 0x44, 0xd6, 0x44, 0x46, 0x49, 0xb6, 0x49, 0x26, 0x4a, 0x96, 0x4a, 0x6, 0x4b, 0xf2, 0x5b, 0x62, 0x5c, 0xd2, 0x5c, 0x42, 0x5d, 0xb2, 0x5d, 0x25, 0x61, 0x82, 0x80, 0x83, 0xc7, 0x7, 0x3, 0xc1, 0xdf, 0x83, 0x27, 0x4b, 0x53, 0x9c, 0x43, 0x82, 0x97, 0x2a, 0x84, 0x61, 0xf9, 0x32, 0x45, 0x81, 0x47, 0x3e, 0xcc, 0x5c, 0x41, 0x1, 0x48, 0x42, 0xce, 0x9c, 0x5f, 0x2c, 0x8, 0x82, 0x97, 0xb2, 0x46, 0xaa, 0x8d, 0x15, 0xe1, 0xe2, 0x4c, 0x72, 0x4d, 0xb3, 0xe7, 0xac, 0x1, 0x89, 0xcf, 0x3, 0xac, 0x46, 0x0, 0x19, 0x6a, 0x19, 0xa, 0x3, 0x48, 0xc, 0x3, 0x63, 0x56, 0x4, 0x1, 0x63, 0x8d, 0xd, 0x0, 0x99, 0x6d, 0x99, 0xd, 0x83, 0x27, 0x4b, 0x53, 0xee, 0x85, 0x36, 0x85, 0xdc, 0x43, 0x82, 0x97, 0x2a, 0x84, 0x59, 0xf1, 0x81, 0xb7, 0x22, 0x86, 0x66, 0x85, 0xea, 0x85, 0x36, 0xc4, 0x42, 0xc2, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x3a, 0x93, 0x77, 0x15, 0x0, 0x12, 0x48, 0xa2, 0x46, 0x91, 0xcf, 0x3, 0x27, 0x4c, 0x3, 0x93, 0x17, 0x34, 0x0, 0x3e, 0x97, 0x1c, 0x43, 0x63, 0xf7, 0x37, 0x1, 0x58, 0x43, 0xba, 0x97, 0x63, 0xf3, 0xf4, 0x0, 0xd2, 0x8d, 0x5, 0x4, 0x6d, 0xb7, 0x81, 0x45, 0x82, 0x97, 0x2a, 0x84, 0x9, 0xd5, 0x81, 0xb7, 0x32, 0x45, 0x5c, 0x41, 0x63, 0x86, 0xa, 0x2, 0x63, 0x64, 0x5a, 0x3, 0x33, 0xf7, 0x59, 0x3, 0x5, 0xe3, 0xdc, 0x4f, 0xce, 0x85, 0x33, 0xa, 0x5a, 0x41, 0x82, 0x97, 0xaa, 0x85, 0xd6, 0x99, 0x63, 0x60, 0x2a, 0x3, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0x30, 0x4c, 0x9c, 0x4f, 0xce, 0x85, 0x33, 0xa, 0x7a, 0x41, 0x82, 0x97, 0xaa, 0x85, 0xde, 0x99, 0xcd, 0xb7, 0x83, 0x27, 0x4b, 0x53, 0x32, 0x45, 0x81, 0xe9, 0x63, 0x7, 0xa, 0x0, 0xdc, 0x43, 0x82, 0x97, 0xaa, 0x85, 0xe3, 0x6, 0x5, 0xea, 0x5, 0x46, 0x7d, 0xbd, 0x19, 0x64, 0x15, 0x4, 0xc5, 0xb5, 0x13, 0x4, 0xd0, 0x10, 0xe9, 0xbd, 0x19, 0x64, 0xd, 0x4, 0xd1, 0xbd, 0x5d, 0x71, 0x5e, 0xd6, 0xb7, 0x9b, 0x81, 0x40, 0x83, 0xa7, 0x4b, 0x53, 0xa2, 0xc4, 0xa6, 0xc2, 0x9c, 0x47, 0x4e, 0xde, 0x52, 0xdc, 0x2a, 0xc6, 0x86, 0xc6, 0xca, 0xc0, 0x56, 0xda, 0x5a, 0xd8, 0x68, 0x0, 0xae, 0x89, 0x32, 0x8a, 0xb6, 0x84, 0x82, 0x97, 0x2a, 0x84, 0x21, 0xe9, 0xb2, 0x47, 0xd8, 0x43, 0x38, 0x43, 0x6d, 0xc3, 0x63, 0x83, 0x9, 0xe, 0xd8, 0x4b, 0x63, 0x60, 0x47, 0xf, 0xb3, 0x6, 0x9a, 0x0, 0x63, 0x6c, 0xd7, 0xc, 0x95, 0xc8, 0x88, 0x43, 0xce, 0x85, 0x26, 0x8b, 0x1c, 0x41, 0x9c, 0x5b, 0x82, 0x97, 0x91, 0x67, 0x63, 0xf3, 0x97, 0x0, 0x11, 0x6b, 0xb7, 0x7, 0x80, 0xbf, 0xce, 0x97, 0x37, 0x7, 0x8, 0x0, 0x63, 0xe2, 0xe7, 0x8, 0x41, 0xe1, 0x32, 0x47, 0x2, 0xce, 0x1c, 0x47, 0x9c, 0x4b, 0x99, 0xef, 0x13, 0x4, 0x10, 0x10, 0xb6, 0x40, 0x22, 0x85, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x61, 0x61, 0x82, 0x80, 0x48, 0x47, 0xda, 0x85, 0x70, 0x8, 0x82, 0x97, 0x2a, 0x89, 0x72, 0x4b, 0x61, 0xdd, 0x83, 0xa7, 0x4b, 0x53, 0x32, 0x45, 0x9c, 0x43, 0x82, 0x97, 0x2a, 0x84, 0x1d, 0xe5, 0xce, 0x85, 0x63, 0x3, 0x9, 0x0, 0xca, 0x85, 0xa6, 0x8a, 0x63, 0x73, 0x9b, 0x0, 0xda, 0x8a, 0x32, 0x45, 0xd6, 0x86, 0x52, 0x86, 0x5c, 0x41, 0xbc, 0x43, 0x82, 0x97, 0x83, 0xa7, 0x4b, 0x53, 0x2a, 0x84, 0x32, 0x45, 0xdc, 0x43, 0x9, 0xcc, 0xa2, 0x85, 0x82, 0x97, 0x32, 0x47, 0x1c, 0x47, 0xdc, 0x4b, 0xc9, 0xdf, 0x48, 0x47, 0xca, 0x85, 0x82, 0x97, 0x49, 0xbf, 0x1, 0x49, 0x55, 0xbf, 0x81, 0x45, 0x82, 0x97, 0x2a, 0x84, 0x63, 0x9, 0x9, 0x0, 0x56, 0x86, 0xca, 0x85, 0x4e, 0x85, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xd5, 0x56, 0x9a, 0xb3, 0x84, 0x54, 0x41, 0xd6, 0x99, 0x71, 0xf4, 0xc1, 0xf8, 0xe1, 0xb7, 0x19, 0x64, 0x15, 0x4, 0x8d, 0xb7, 0x13, 0x4, 0x20, 0x10, 0xb1, 0xbf, 0x59, 0x71, 0xde, 0xc6, 0xb7, 0x9b, 0x81, 0x40, 0x83, 0xa7, 0x4b, 0x53, 0xa2, 0xd4, 0xa6, 0xd2, 0x9c, 0x47, 0xca, 0xd0, 0xce, 0xce, 0x2a, 0xc6, 0x86, 0xd6, 0xd2, 0xcc, 0xd6, 0xca, 0xda, 0xc8, 0xe2, 0xc4, 0xe6, 0xc2, 0xea, 0xc0, 0x6e, 0xde, 0x68, 0x0, 0x2e, 0x89, 0xb2, 0x89, 0xb6, 0x84, 0x82, 0x97, 0x2a, 0x84, 0x9, 0xed, 0xb2, 0x47, 0xd8, 0x43, 0x78, 0x43, 0x63, 0x9, 0x7, 0x12, 0x98, 0x47, 0x18, 0x47, 0xd, 0xe7, 0x63, 0x1e, 0x9, 0x2, 0x13, 0x4, 0x20, 0x10, 0xb6, 0x50, 0x22, 0x85, 0x26, 0x54, 0x96, 0x54, 0x6, 0x59, 0xf6, 0x49, 0x66, 0x4a, 0xd6, 0x4a, 0x46, 0x4b, 0xb6, 0x4b, 0x26, 0x4c, 0x96, 0x4c, 0x6, 0x4d, 0xf2, 0x5d, 0x65, 0x61, 0x82, 0x80, 0xc8, 0x47, 0x26, 0x86, 0xce, 0x85, 0x2, 0x97, 0x93, 0x7, 0xd0, 0x10, 0x63, 0xd, 0xf5, 0xe, 0x61, 0xd5, 0xe9, 0xb7, 0xb2, 0x47, 0xd8, 0x4b, 0xe3, 0x62, 0x37, 0xfd, 0xb3, 0x86, 0x99, 0x0, 0xe3, 0x6e, 0xd7, 0xfa, 0xd5, 0xdc, 0x88, 0x43, 0xca, 0x85, 0xa6, 0x8a, 0x1c, 0x41, 0x4e, 0x8c, 0x93, 0xc, 0x0, 0x2, 0xdc, 0x53, 0x9, 0x6d, 0x82, 0x97, 0xb7, 0x7, 0x80, 0xbf, 0xca, 0x97, 0x37, 0x7, 0x8, 0x0, 0xb3, 0xb7, 0xe7, 0x0, 0x33, 0x6b, 0xf5, 0x0, 0x13, 0x7b, 0xfb, 0xf, 0x56, 0x8a, 0x63, 0x7, 0xb, 0x4, 0x63, 0x73, 0x5d, 0x1, 0x9, 0x6a, 0xca, 0x8d, 0x32, 0x45, 0x5c, 0x41, 0xbc, 0x57, 0x89, 0xc7, 0x81, 0x45, 0x82, 0x97, 0x2a, 0x84, 0x35, 0xf9, 0x83, 0xa7, 0x4b, 0x53, 0x32, 0x45, 0x9c, 0x43, 0x82, 0x97, 0x2a, 0x84, 0x39, 0xed, 0x32, 0x45, 0xd2, 0x86, 0x62, 0x86, 0x5c, 0x41, 0xee, 0x85, 0xb3, 0x8a, 0x4a, 0x41, 0xfc, 0x43, 0x82, 0x97, 0x2a, 0x84, 0x63, 0xe6, 0x9a, 0x2, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0x70, 0x25, 0x63, 0xf4, 0x5c, 0x1, 0x13, 0xa, 0x0, 0x2, 0x52, 0x86, 0xca, 0x85, 0x8, 0x8, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xc1, 0x93, 0xd, 0x1, 0x1, 0x55, 0xb7, 0x83, 0xa7, 0x4b, 0x53, 0x32, 0x45, 0xd, 0xe4, 0x63, 0x86, 0xa, 0x2, 0xdc, 0x43, 0x81, 0x45, 0x82, 0x97, 0x2a, 0x84, 0x11, 0xed, 0x52, 0x9c, 0x52, 0x99, 0xad, 0xbf, 0x1, 0x46, 0x83, 0xa7, 0x4b, 0x53, 0x32, 0x45, 0x26, 0x87, 0xdc, 0x47, 0xce, 0x86, 0xa2, 0x85, 0x82, 0x97, 0xdd, 0xbd, 0x5, 0x46, 0xf5, 0xb7, 0xdc, 0x47, 0x26, 0x87, 0xce, 0x86, 0x5, 0x46, 0x81, 0x45, 0x82, 0x97, 0x2a, 0x84, 0xcd, 0xb5, 0x19, 0x64, 0x15, 0x4, 0xf1, 0xbd, 0x13, 0x4, 0xd0, 0x10, 0xd9, 0xbd, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0x60, 0xf0, 0x59, 0x89, 0x47, 0x63, 0x15, 0xf5, 0x0, 0x5, 0x45, 0xef, 0x60, 0xf0, 0x2c, 0xef, 0xe0, 0xdf, 0xed, 0x8, 0xc4, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x99, 0xc5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xb0, 0x1a, 0xaa, 0x84, 0x2e, 0x84, 0x32, 0x89, 0xef, 0xe0, 0xff, 0xea, 0xd8, 0x44, 0x89, 0x67, 0x93, 0x87, 0xf7, 0x70, 0x33, 0x7, 0xe5, 0x40, 0x63, 0xff, 0xe7, 0x0, 0x88, 0xc4, 0x13, 0x5, 0x70, 0x10, 0x63, 0x4, 0x9, 0x0, 0x23, 0x20, 0x89, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x9c, 0x44, 0x1d, 0x8d, 0x95, 0x67, 0x93, 0x87, 0xf7, 0xe1, 0xe3, 0xff, 0xa7, 0xfc, 0x5, 0x44, 0x1, 0x45, 0xe9, 0xbf, 0x2e, 0x85, 0x6f, 0x70, 0xd0, 0x1a, 0x1, 0x11, 0x4a, 0xc8, 0x5, 0x69, 0x22, 0xcc, 0x26, 0xca, 0x4e, 0xc6, 0x6, 0xce, 0x2e, 0x84, 0xb2, 0x89, 0x95, 0x44, 0x13, 0x9, 0x49, 0x80, 0x4a, 0x85, 0xef, 0x20, 0xe0, 0x20, 0x63, 0x66, 0xa4, 0x0, 0x4a, 0x85, 0xef, 0x20, 0x40, 0x20, 0x2a, 0x84, 0xd, 0x4, 0x71, 0x98, 0xca, 0x85, 0x22, 0x85, 0xef, 0xd0, 0xff, 0xe0, 0x1, 0xed, 0xfd, 0x14, 0xf9, 0xfc, 0xf2, 0x40, 0x62, 0x44, 0x23, 0xa0, 0x99, 0x0, 0x42, 0x49, 0xd2, 0x44, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0xa2, 0x84, 0xf5, 0xb7, 0x41, 0x11, 0x2e, 0x85, 0x6, 0xc6, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x66, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x5, 0x89, 0x6f, 0xb0, 0x30, 0x15, 0x41, 0x11, 0x2e, 0x85, 0xb2, 0x85, 0x6, 0xc6, 0xef, 0x10, 0x21, 0x67, 0x81, 0x47, 0x19, 0xe1, 0x93, 0x7, 0xd0, 0x10, 0xb2, 0x40, 0x3e, 0x85, 0x41, 0x1, 0x82, 0x80, 0x37, 0xb5, 0x81, 0x40, 0x41, 0x11, 0x13, 0x5, 0x45, 0x6b, 0x6, 0xc6, 0xef, 0xe0, 0x1f, 0xba, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0x45, 0x6b, 0x6, 0xc6, 0xef, 0xe0, 0xdf, 0xb9, 0xef, 0xe0, 0x1f, 0xdb, 0x48, 0xc4, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x2e, 0x85, 0x6, 0xc6, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x5f, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x84, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xbe, 0x8, 0x40, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xc3, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xc1, 0x8, 0xc0, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0xb7, 0x57, 0xc, 0x60, 0x93, 0x87, 0x7, 0x9, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x23, 0xa0, 0x7, 0x0, 0xaa, 0x84, 0xef, 0x70, 0x60, 0x31, 0x80, 0x40, 0x23, 0xa0, 0x4, 0x0, 0xef, 0x70, 0xa0, 0x33, 0x93, 0x77, 0x14, 0x0, 0x99, 0xc3, 0xef, 0x70, 0xc0, 0x36, 0x93, 0x77, 0x44, 0x0, 0x81, 0xc7, 0x13, 0x5, 0x40, 0x6, 0xdd, 0x28, 0x41, 0x88, 0x1, 0xc8, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x1, 0x45, 0x41, 0x1, 0x6f, 0xc0, 0x90, 0x43, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x63, 0x58, 0xa0, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0x20, 0x7d, 0x2a, 0x84, 0xae, 0x84, 0xef, 0x70, 0xa0, 0x2b, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x6b, 0xa, 0x4, 0x3e, 0x94, 0x1c, 0x40, 0xb3, 0xe5, 0x97, 0x0, 0xc, 0xc0, 0xef, 0x70, 0x0, 0x2d, 0xb2, 0x40, 0x22, 0x44, 0xb7, 0x57, 0xc, 0x60, 0x93, 0x87, 0x7, 0x9, 0x5, 0x47, 0x98, 0xc3, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x85, 0x45, 0x45, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x4, 0x44, 0x3f, 0x26, 0xc2, 0x6, 0xc6, 0x93, 0x4, 0x4, 0x2, 0x1c, 0x40, 0x91, 0xc3, 0x82, 0x97, 0x11, 0x4, 0xe3, 0x1c, 0x94, 0xfe, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x5, 0xc4, 0x6b, 0x6, 0xc6, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x82, 0x13, 0x5, 0xc4, 0x6b, 0x85, 0x46, 0x13, 0x6, 0x80, 0x25, 0x81, 0x45, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x81, 0x13, 0x5, 0xc4, 0x6b, 0x8d, 0x46, 0x13, 0x6, 0x0, 0x4b, 0x85, 0x45, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x7f, 0x13, 0x5, 0xc4, 0x6b, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x80, 0x13, 0x5, 0xc4, 0x6b, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x17, 0xd3, 0x7f, 0xff, 0x67, 0x0, 0x83, 0x7e, 0x71, 0x71, 0x1, 0x45, 0x6, 0xd7, 0x22, 0xd5, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0xef, 0x70, 0x80, 0xa, 0x8a, 0x85, 0xef, 0x70, 0x20, 0xd, 0x5, 0x47, 0x93, 0x7, 0x50, 0x10, 0x63, 0x1c, 0xe5, 0x4, 0x12, 0x44, 0x13, 0x6, 0x40, 0x9, 0x81, 0x45, 0x68, 0x0, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x8b, 0x13, 0x6, 0x40, 0x9, 0xa2, 0x85, 0x68, 0x0, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x8a, 0x37, 0xa5, 0x81, 0x40, 0x81, 0x45, 0x13, 0x5, 0x45, 0xe2, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x41, 0x68, 0x0, 0xef, 0x10, 0x10, 0x21, 0x81, 0x45, 0x68, 0x0, 0xef, 0x10, 0x20, 0x7d, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x5, 0x7d, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x3f, 0x81, 0x47, 0xba, 0x50, 0x2a, 0x54, 0x3e, 0x85, 0x4d, 0x61, 0x82, 0x80, 0xb7, 0xf7, 0xa, 0x60, 0x98, 0x4f, 0x13, 0x67, 0x47, 0x0, 0x98, 0xcf, 0xb7, 0xf7, 0xa, 0x60, 0x98, 0x4b, 0x13, 0x67, 0x17, 0x0, 0x98, 0xcb, 0x93, 0x7, 0x90, 0x6, 0x63, 0x9, 0xf5, 0xa, 0x63, 0xee, 0xa7, 0x0, 0x93, 0x7, 0x10, 0x6, 0x63, 0x3, 0xf5, 0x8, 0x93, 0x7, 0x60, 0x6, 0x63, 0xe, 0xf5, 0x2, 0x1, 0x45, 0x13, 0x35, 0x15, 0x0, 0x82, 0x80, 0x93, 0x7, 0xa0, 0x6, 0x63, 0x7, 0xf5, 0x4, 0x93, 0x7, 0xd0, 0x6, 0xe3, 0x16, 0xf5, 0xfe, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x82, 0x88, 0x43, 0x85, 0x67, 0x37, 0x7, 0x0, 0x1, 0x7d, 0x8d, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0x81, 0x13, 0x7, 0xf7, 0xbf, 0x5, 0xa0, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x82, 0x88, 0x43, 0x37, 0x7, 0x0, 0x1, 0xb7, 0x7, 0xb, 0x60, 0x13, 0x75, 0x5, 0x20, 0x93, 0x87, 0xc7, 0x81, 0x13, 0x7, 0xf7, 0xf7, 0x98, 0xc3, 0x6d, 0xb7, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x82, 0x88, 0x43, 0x37, 0x7, 0x0, 0x1, 0xb7, 0x7, 0xb, 0x60, 0x13, 0x75, 0x5, 0x10, 0x93, 0x87, 0xc7, 0x81, 0x13, 0x7, 0xf7, 0xfb, 0xf9, 0xbf, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x82, 0x88, 0x43, 0x37, 0x7, 0x0, 0x1, 0xb7, 0x7, 0xb, 0x60, 0x13, 0x75, 0x5, 0x40, 0x93, 0x87, 0xc7, 0x81, 0x13, 0x7, 0xf7, 0xef, 0x7d, 0xbf, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x82, 0x88, 0x43, 0x85, 0x67, 0x93, 0x87, 0x7, 0x80, 0x7d, 0x8d, 0x37, 0x7, 0x0, 0x1, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0x81, 0x13, 0x7, 0xf7, 0xdf, 0x69, 0xbf, 0x1, 0x11, 0x26, 0xca, 0x6, 0xce, 0x22, 0xcc, 0x4a, 0xc8, 0x4e, 0xc6, 0xb3, 0x84, 0xe6, 0x40, 0x9d, 0x47, 0x63, 0xd8, 0x97, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xe0, 0x57, 0xaa, 0x89, 0x32, 0x84, 0x3a, 0x89, 0xdd, 0x35, 0xb7, 0xc7, 0x2, 0x18, 0x93, 0x87, 0x7, 0xe0, 0xaa, 0x97, 0x8a, 0x7, 0x98, 0x43, 0x93, 0x16, 0x67, 0x0, 0xe3, 0xcd, 0x6, 0xfe, 0x22, 0x4, 0x33, 0x65, 0x34, 0x1, 0x88, 0xc3, 0x98, 0x43, 0x93, 0x16, 0x67, 0x0, 0xe3, 0xcd, 0x6, 0xfe, 0x88, 0x43, 0x85, 0x4, 0xfd, 0x57, 0x41, 0x81, 0xf2, 0x40, 0x62, 0x44, 0xb3, 0x97, 0x97, 0x0, 0x13, 0x75, 0xf5, 0xf, 0x33, 0x55, 0x25, 0x1, 0x93, 0xc7, 0xf7, 0xff, 0x7d, 0x8d, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x13, 0x75, 0xf5, 0xf, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x2a, 0x89, 0x32, 0x84, 0xb6, 0x84, 0xef, 0xf0, 0x1f, 0xe8, 0xb7, 0xc7, 0x2, 0x18, 0x93, 0x87, 0x7, 0xe0, 0xaa, 0x97, 0x8a, 0x7, 0x98, 0x43, 0x93, 0x16, 0x67, 0x0, 0xe3, 0xcd, 0x6, 0xfe, 0x22, 0x4, 0x33, 0x64, 0x24, 0x1, 0xc2, 0x4, 0x45, 0x8c, 0x37, 0x7, 0x0, 0x1, 0x59, 0x8c, 0x80, 0xc3, 0x98, 0x43, 0x93, 0x16, 0x67, 0x0, 0xe3, 0xcd, 0x6, 0xfe, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x4e, 0xc6, 0x52, 0xc4, 0x6, 0xce, 0x3e, 0x8a, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x56, 0xc2, 0xb3, 0x89, 0xe6, 0x40, 0x9d, 0x47, 0x63, 0xd8, 0x37, 0x1, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0x80, 0x4a, 0xaa, 0x8a, 0x32, 0x84, 0xb6, 0x84, 0x3a, 0x89, 0xef, 0xf0, 0xff, 0xe0, 0xb7, 0xc7, 0x2, 0x18, 0x93, 0x87, 0x7, 0xe0, 0x33, 0x8, 0xf5, 0x0, 0xa, 0x8, 0x83, 0x27, 0x8, 0x0, 0x13, 0x97, 0x67, 0x0, 0xe3, 0x4c, 0x7, 0xfe, 0x22, 0x4, 0x33, 0x65, 0x54, 0x1, 0x23, 0x20, 0xa8, 0x0, 0x83, 0x27, 0x8, 0x0, 0x13, 0x97, 0x67, 0x0, 0xe3, 0x4c, 0x7, 0xfe, 0xfd, 0x55, 0x83, 0x27, 0x8, 0x0, 0xb3, 0x98, 0x25, 0x1, 0x85, 0x4, 0xb3, 0x94, 0x95, 0x0, 0x93, 0xc8, 0xf8, 0xff, 0x85, 0x9, 0xc1, 0x83, 0xb3, 0xe6, 0x98, 0x0, 0xb3, 0x95, 0x35, 0x1, 0xfd, 0x8e, 0x93, 0xc7, 0xf5, 0xff, 0xb3, 0xf7, 0x47, 0x1, 0x93, 0xf6, 0xf6, 0xf, 0xb3, 0x97, 0x27, 0x1, 0xd5, 0x8f, 0x37, 0x7, 0xff, 0x0, 0xc2, 0x7, 0xf9, 0x8f, 0xc9, 0x8f, 0x37, 0x7, 0x0, 0x1, 0xd9, 0x8f, 0x23, 0x20, 0xf8, 0x0, 0x83, 0x27, 0x8, 0x0, 0x13, 0x97, 0x67, 0x0, 0xe3, 0x4c, 0x7, 0xfe, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0xef, 0xd0, 0x7f, 0x8b, 0x2a, 0x84, 0xef, 0xd0, 0x1f, 0x8c, 0x93, 0x7, 0x40, 0x6, 0x33, 0x4, 0xf4, 0x2, 0xb2, 0x40, 0x22, 0x95, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0xa8, 0x4b, 0x13, 0x7, 0x40, 0x6, 0xbc, 0x4b, 0x79, 0x81, 0x33, 0x5, 0xe5, 0x2, 0xed, 0x83, 0x9d, 0x8b, 0x3e, 0x95, 0x82, 0x80, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0xdc, 0x5b, 0x1, 0x45, 0xc9, 0x83, 0x9d, 0x8b, 0x91, 0xe3, 0x82, 0x80, 0x13, 0xf7, 0x17, 0x0, 0x19, 0xc3, 0x13, 0x45, 0x15, 0x0, 0x85, 0x83, 0xc5, 0xbf, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x69, 0xb7, 0x6, 0x0, 0x10, 0x1, 0x11, 0x98, 0x4b, 0x55, 0x8f, 0x98, 0xcb, 0xd8, 0x4b, 0x3a, 0xce, 0x72, 0x45, 0x9c, 0x4f, 0x3e, 0xcc, 0xe2, 0x45, 0x5, 0x61, 0xc2, 0x5, 0xc1, 0x81, 0x82, 0x80, 0x25, 0x47, 0x63, 0x76, 0xb7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x70, 0xe0, 0x2e, 0x95, 0x47, 0x3d, 0x8a, 0x63, 0x8d, 0xf5, 0x6, 0x63, 0xe6, 0xb7, 0x2, 0xd, 0x47, 0x1c, 0x41, 0x63, 0x8e, 0xe5, 0x4, 0x11, 0x47, 0x63, 0x80, 0xe5, 0x6, 0x5, 0x47, 0x63, 0x8c, 0xe5, 0x2, 0x9, 0x47, 0x63, 0x80, 0xe5, 0x4, 0xd8, 0x47, 0x72, 0x6, 0x12, 0x7, 0x11, 0x83, 0x51, 0x8f, 0xd8, 0xc7, 0x82, 0x80, 0xa1, 0x46, 0x5c, 0x41, 0x63, 0x84, 0xd5, 0x6, 0x63, 0x87, 0xe5, 0x6, 0x19, 0x47, 0x63, 0x98, 0xe5, 0x4, 0x98, 0x53, 0x72, 0x6, 0x12, 0x7, 0x11, 0x83, 0x51, 0x8f, 0x98, 0xd3, 0x82, 0x80, 0xd8, 0x47, 0x62, 0x6, 0xb7, 0x6, 0x0, 0xf1, 0xfd, 0x16, 0x75, 0x8f, 0xf9, 0xb7, 0xd8, 0x47, 0x52, 0x6, 0xb7, 0x6, 0x10, 0xff, 0xcd, 0xbf, 0xd8, 0x47, 0x42, 0x6, 0xb7, 0x6, 0xf1, 0xff, 0xe5, 0xb7, 0xd8, 0x47, 0x32, 0x6, 0xc5, 0x76, 0xc5, 0xb7, 0x14, 0x41, 0x7d, 0x77, 0x13, 0x7, 0xf7, 0xf, 0xdc, 0x46, 0x22, 0x6, 0xf9, 0x8f, 0xd1, 0x8f, 0xdc, 0xc6, 0x82, 0x80, 0x98, 0x53, 0x62, 0x6, 0xb7, 0x6, 0x0, 0xf1, 0xfd, 0x16, 0x75, 0x8f, 0x45, 0xbf, 0x98, 0x53, 0x52, 0x6, 0xb7, 0x6, 0x10, 0xff, 0xcd, 0xbf, 0x98, 0x53, 0x42, 0x6, 0xb7, 0x6, 0xf1, 0xff, 0xe5, 0xb7, 0x25, 0x47, 0x63, 0x76, 0xb7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x70, 0xc0, 0x22, 0x95, 0x47, 0x63, 0x8c, 0xf5, 0x4, 0x63, 0xe2, 0xb7, 0x2, 0xd, 0x47, 0x1c, 0x41, 0x63, 0x8f, 0xe5, 0x2, 0x11, 0x47, 0x63, 0x8f, 0xe5, 0x2, 0x5, 0x47, 0x63, 0x83, 0xe5, 0x2, 0x9, 0x47, 0x63, 0x83, 0xe5, 0x2, 0xc8, 0x47, 0x71, 0x81, 0x82, 0x80, 0xa1, 0x46, 0x5c, 0x41, 0x63, 0x8c, 0xd5, 0x2, 0x63, 0x8c, 0xe5, 0x2, 0x19, 0x47, 0x63, 0x95, 0xe5, 0x2, 0x88, 0x53, 0xe5, 0xb7, 0xc8, 0x47, 0x61, 0x81, 0x9, 0xa8, 0xc8, 0x47, 0x51, 0x81, 0x31, 0xa0, 0xc8, 0x47, 0x41, 0x81, 0x19, 0xa0, 0xc8, 0x47, 0x31, 0x81, 0x3d, 0x89, 0x82, 0x80, 0x1c, 0x41, 0xc8, 0x47, 0x21, 0x81, 0xdd, 0xbf, 0x88, 0x53, 0xf9, 0xbf, 0x88, 0x53, 0xc5, 0xb7, 0x88, 0x53, 0xcd, 0xb7, 0x91, 0xc9, 0x1c, 0x41, 0xc1, 0x66, 0xd8, 0x4b, 0x55, 0x8f, 0xd8, 0xcb, 0xd8, 0x4b, 0x89, 0x66, 0x55, 0x8f, 0xd8, 0xcb, 0x82, 0x80, 0x91, 0xc9, 0x1c, 0x41, 0xa1, 0x66, 0xd8, 0x4b, 0x55, 0x8f, 0xd8, 0xcb, 0xd8, 0x4b, 0x91, 0x66, 0x55, 0x8f, 0xd8, 0xcb, 0x82, 0x80, 0x58, 0x41, 0x1, 0x11, 0xb7, 0x17, 0x12, 0x12, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x93, 0x87, 0x27, 0x21, 0x63, 0x8, 0xf7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0x0, 0x1f, 0x2a, 0x84, 0x8, 0x49, 0xb2, 0x84, 0x2e, 0xc6, 0x71, 0x24, 0x8, 0x48, 0xb2, 0x45, 0x1, 0x46, 0x89, 0xe4, 0x95, 0x22, 0x9, 0xc5, 0xef, 0x70, 0x60, 0x15, 0xe9, 0x2a, 0xe5, 0xbf, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x58, 0x41, 0xb7, 0x17, 0x12, 0x12, 0x93, 0x87, 0x27, 0x21, 0x63, 0x14, 0xf7, 0x0, 0x8, 0x49, 0xb1, 0xac, 0x82, 0x80, 0x3, 0x46, 0xf5, 0x0, 0x37, 0xb7, 0x81, 0x40, 0x93, 0x6, 0xc7, 0x6d, 0x5, 0x8a, 0x13, 0x18, 0x26, 0x0, 0xc2, 0x96, 0x9c, 0x42, 0x85, 0xe3, 0x23, 0x2c, 0x5, 0x0, 0x88, 0xc2, 0x54, 0xcd, 0xa9, 0xe5, 0x4c, 0x41, 0x8, 0x41, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xe0, 0x2f, 0xf0, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x3, 0x23, 0x5, 0x0, 0x83, 0x28, 0x45, 0x0, 0x13, 0x7, 0xc7, 0x6d, 0xd4, 0x43, 0x63, 0xe7, 0xd8, 0x0, 0x63, 0x95, 0x16, 0x3, 0x94, 0x43, 0x63, 0x72, 0xd3, 0x2, 0xd4, 0x4f, 0x1c, 0xcd, 0x54, 0xcd, 0x88, 0xc2, 0x93, 0x6, 0x85, 0x1, 0xd4, 0xcf, 0x89, 0xe5, 0x42, 0x97, 0x1c, 0x43, 0xe3, 0x8e, 0xa7, 0xfa, 0x1, 0x45, 0x82, 0x80, 0xb6, 0x87, 0xc9, 0xbf, 0x94, 0x4f, 0xed, 0xfe, 0x23, 0x2c, 0x5, 0x0, 0x88, 0xcf, 0xe1, 0x7, 0x5c, 0xcd, 0xc5, 0xb7, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x6d, 0x1, 0x11, 0x70, 0x0, 0x81, 0x45, 0x6, 0xce, 0x2, 0xc6, 0xef, 0x60, 0xa0, 0x7e, 0x32, 0x47, 0x85, 0x47, 0x63, 0x14, 0xf7, 0x0, 0xef, 0x60, 0xb0, 0x46, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x60, 0xd0, 0x3b, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x60, 0x90, 0x41, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x60, 0xd0, 0x3a, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x60, 0xb0, 0x3d, 0x3, 0x46, 0xf5, 0x0, 0x1, 0x11, 0x22, 0xcc, 0x5, 0x8a, 0x2a, 0x84, 0x32, 0xc6, 0x6, 0xce, 0xc5, 0x37, 0x32, 0x46, 0xb7, 0xb7, 0x81, 0x40, 0x13, 0x87, 0xc7, 0x6d, 0x93, 0x16, 0x26, 0x0, 0x36, 0x97, 0xc, 0x43, 0x18, 0x4c, 0x93, 0x87, 0xc7, 0x6d, 0x19, 0xc3, 0x48, 0x4c, 0x48, 0xcf, 0x48, 0x4c, 0x1, 0x48, 0x81, 0x48, 0x18, 0xc1, 0x58, 0x44, 0x37, 0x5, 0x0, 0xff, 0x23, 0x20, 0x4, 0x1, 0x69, 0x8f, 0x23, 0x22, 0x14, 0x1, 0x23, 0x24, 0x4, 0x0, 0x58, 0xc4, 0x63, 0x1b, 0xb4, 0x0, 0xb6, 0x97, 0x9c, 0x43, 0x7d, 0x55, 0xfd, 0x55, 0x99, 0xc3, 0x88, 0x43, 0xcc, 0x43, 0xef, 0xe0, 0x2f, 0xe0, 0xb5, 0x3f, 0xf2, 0x40, 0x62, 0x44, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x25, 0xcd, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x6d, 0x79, 0x71, 0x22, 0xd4, 0x6, 0xd6, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x2a, 0x84, 0x13, 0x5, 0x30, 0x10, 0xa9, 0xc7, 0x32, 0x8a, 0x2e, 0x89, 0xef, 0xe0, 0x6f, 0xda, 0xaa, 0x84, 0xae, 0x89, 0x91, 0x3f, 0x1c, 0x40, 0x58, 0x40, 0x13, 0x5, 0x30, 0x10, 0xd9, 0x8f, 0x85, 0xe7, 0xb3, 0x87, 0x24, 0x1, 0xb3, 0xb4, 0x97, 0x0, 0x1c, 0xc0, 0x5c, 0x44, 0xd2, 0x99, 0x37, 0x7, 0x0, 0xff, 0xce, 0x94, 0xf9, 0x8f, 0x44, 0xc0, 0x23, 0x24, 0x4, 0x0, 0x5c, 0xc4, 0x81, 0x45, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0xe6, 0x2a, 0xc6, 0xef, 0xf0, 0xff, 0xf0, 0x32, 0x45, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x49, 0xcd, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x6d, 0x79, 0x71, 0x26, 0xd2, 0x6, 0xd6, 0x22, 0xd4, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0xaa, 0x84, 0x13, 0x5, 0x30, 0x10, 0xb5, 0xc7, 0x32, 0x84, 0x2e, 0x89, 0xef, 0xe0, 0x6f, 0xd0, 0x63, 0xea, 0x85, 0x0, 0x63, 0x14, 0xb4, 0x0, 0x63, 0x66, 0x25, 0x1, 0xef, 0xe0, 0x6f, 0xcf, 0x2a, 0x89, 0x2e, 0x84, 0xef, 0xe0, 0xf, 0xd1, 0xaa, 0x89, 0x2e, 0x8a, 0xef, 0xf0, 0xff, 0xeb, 0x9c, 0x40, 0xd8, 0x40, 0x13, 0x5, 0x30, 0x10, 0xd9, 0x8f, 0x85, 0xeb, 0xb3, 0x87, 0x29, 0x1, 0xb3, 0xb9, 0x37, 0x1, 0x9c, 0xc0, 0xdc, 0x44, 0x22, 0x9a, 0x37, 0x7, 0x0, 0xff, 0x22, 0x4, 0x21, 0x80, 0xf9, 0x8f, 0xd2, 0x99, 0xc1, 0x8f, 0x23, 0xa2, 0x34, 0x1, 0x23, 0xa4, 0x24, 0x1, 0xdc, 0xc4, 0x81, 0x45, 0x26, 0x85, 0xef, 0xf0, 0xbf, 0xdc, 0x2a, 0xc6, 0xef, 0xf0, 0xff, 0xe6, 0x32, 0x45, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0xc6, 0x13, 0x4, 0x20, 0x10, 0x5, 0xc5, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x6d, 0x13, 0x4, 0x30, 0x10, 0x89, 0xcf, 0xef, 0xf0, 0x7f, 0xe4, 0x32, 0x45, 0x1c, 0x41, 0x58, 0x41, 0xd9, 0x8f, 0x81, 0xc7, 0xef, 0xf0, 0x9f, 0xe4, 0x2a, 0x84, 0xef, 0xf0, 0x3f, 0xe2, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0xb7, 0x97, 0x81, 0x40, 0x3, 0xa3, 0x47, 0x77, 0x63, 0x3, 0x3, 0x0, 0x2, 0x83, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x37, 0xb5, 0x81, 0x40, 0x93, 0x85, 0x7, 0x8d, 0x1, 0x46, 0x93, 0x86, 0x7, 0x8d, 0x13, 0x5, 0x5, 0x7d, 0x25, 0x48, 0x15, 0x43, 0xb3, 0x7, 0xc5, 0x0, 0x83, 0xc7, 0x7, 0x0, 0x13, 0xf7, 0xf7, 0xf, 0x91, 0x83, 0x93, 0x88, 0x7, 0x3, 0x63, 0x74, 0xf8, 0x0, 0x93, 0x88, 0x77, 0x5, 0x93, 0x77, 0xf7, 0x0, 0x23, 0x80, 0x15, 0x1, 0x13, 0x87, 0x7, 0x3, 0x63, 0x74, 0xf8, 0x0, 0x13, 0x87, 0x77, 0x5, 0xa3, 0x80, 0xe5, 0x0, 0x5, 0x6, 0x89, 0x5, 0xe3, 0x15, 0x66, 0xfc, 0xa3, 0x84, 0x6, 0x0, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x8d, 0x81, 0xeb, 0x41, 0x11, 0x6, 0xc6, 0x61, 0x3f, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x9, 0x28, 0x11, 0xc1, 0xa9, 0x20, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x82, 0x80, 0x9, 0xa0, 0x1, 0x45, 0x82, 0x80, 0x37, 0xb7, 0x81, 0x40, 0x93, 0x6, 0xc7, 0x8d, 0x81, 0x47, 0x13, 0x7, 0xc7, 0x8d, 0x95, 0x45, 0x90, 0x42, 0x63, 0xf, 0xa6, 0x0, 0x11, 0xe6, 0x8a, 0x7, 0x3e, 0x97, 0x8, 0xc3, 0x1, 0x45, 0x82, 0x80, 0x85, 0x7, 0x91, 0x6, 0xe3, 0x95, 0xb7, 0xfe, 0x13, 0x5, 0x10, 0x10, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x4, 0xc4, 0x8d, 0x26, 0xc2, 0x6, 0xc6, 0x93, 0x4, 0xc4, 0xfe, 0x1c, 0x48, 0x91, 0xc3, 0x82, 0x97, 0x71, 0x14, 0xe3, 0x1c, 0x94, 0xfe, 0xef, 0x50, 0xf0, 0x3e, 0xef, 0xd0, 0xef, 0x9a, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xd0, 0x6f, 0xed, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x69, 0x28, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x70, 0x20, 0x27, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x13, 0x85, 0xc1, 0xb0, 0x6, 0xc6, 0xef, 0x0, 0x1, 0x1e, 0xef, 0x0, 0xe1, 0x23, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0xb7, 0x27, 0xb, 0x60, 0x93, 0x87, 0x7, 0xc0, 0x28, 0x0, 0x6, 0xce, 0x3e, 0xc6, 0x2, 0xc4, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xe8, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xe8, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xe7, 0xf2, 0x40, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xb0, 0xa0, 0x9, 0xef, 0xa0, 0x70, 0x7f, 0x19, 0xc5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x60, 0x50, 0x58, 0xef, 0xa0, 0x50, 0x5c, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xd0, 0xef, 0x9c, 0xb7, 0x97, 0x81, 0x40, 0x93, 0x87, 0x47, 0x78, 0x98, 0x43, 0x83, 0xc7, 0x47, 0x0, 0x1, 0x11, 0x22, 0xcc, 0x28, 0x0, 0x37, 0x34, 0xb, 0x60, 0x6, 0xce, 0x26, 0xca, 0x13, 0x4, 0x4, 0xc0, 0x3a, 0xc4, 0x23, 0x6, 0xf1, 0x0, 0xef, 0x10, 0xe0, 0x4a, 0x5c, 0x4c, 0xb7, 0x4, 0x0, 0x80, 0x37, 0x7, 0x80, 0x40, 0xc5, 0x8f, 0x37, 0x36, 0xb, 0x60, 0x5c, 0xcc, 0x1, 0x48, 0x81, 0x47, 0x13, 0x7, 0x7, 0x4c, 0xb7, 0x6, 0x0, 0x80, 0x13, 0x6, 0x46, 0xc1, 0x93, 0x5, 0x0, 0x50, 0x3d, 0x45, 0xef, 0x10, 0xf0, 0x55, 0x1c, 0x4c, 0xc5, 0x8f, 0x1c, 0xcc, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x4d, 0x47, 0xaa, 0x87, 0x63, 0x8, 0xe5, 0x10, 0x63, 0x69, 0xa7, 0x8, 0x37, 0x65, 0x9, 0x60, 0x35, 0x47, 0x13, 0x5, 0xc5, 0x5, 0x63, 0x83, 0xe7, 0x10, 0x63, 0x62, 0xf7, 0x4, 0x37, 0x65, 0x9, 0x60, 0x29, 0x47, 0x13, 0x5, 0x45, 0x9, 0x63, 0x8a, 0xe7, 0xe, 0x63, 0x6e, 0xf7, 0x0, 0x37, 0x65, 0x9, 0x60, 0x21, 0x47, 0x13, 0x5, 0x85, 0x2, 0x63, 0x81, 0xe7, 0xe, 0x37, 0x65, 0x9, 0x60, 0x13, 0x5, 0xc5, 0x2, 0x82, 0x80, 0x37, 0x65, 0x9, 0x60, 0x2d, 0x47, 0x61, 0x5, 0x63, 0x86, 0xe7, 0xc, 0x37, 0x65, 0x9, 0x60, 0x13, 0x5, 0x5, 0xc, 0x82, 0x80, 0x37, 0x65, 0x9, 0x60, 0x45, 0x47, 0x13, 0x5, 0x85, 0xc, 0x63, 0x8a, 0xe7, 0xa, 0x37, 0x65, 0x9, 0x60, 0x49, 0x47, 0x13, 0x5, 0xc5, 0xc, 0x63, 0x83, 0xe7, 0xa, 0x37, 0x65, 0x9, 0x60, 0x39, 0x47, 0x13, 0x5, 0x45, 0x6, 0x63, 0x8c, 0xe7, 0x8, 0x37, 0x65, 0x9, 0x60, 0x41, 0x47, 0x13, 0x5, 0x5, 0xd, 0x63, 0x85, 0xe7, 0x8, 0x1, 0x45, 0x82, 0x80, 0x37, 0x65, 0x9, 0x60, 0x61, 0x47, 0x13, 0x5, 0xc5, 0x9, 0x63, 0x8c, 0xe7, 0x6, 0x63, 0x6c, 0xf7, 0x2, 0x37, 0x65, 0x9, 0x60, 0x59, 0x47, 0x13, 0x5, 0x5, 0xb, 0x63, 0x83, 0xe7, 0x6, 0x37, 0x65, 0x9, 0x60, 0x5d, 0x47, 0x13, 0x5, 0xc5, 0xb, 0x63, 0x8c, 0xe7, 0x4, 0x37, 0x65, 0x9, 0x60, 0x51, 0x47, 0x13, 0x5, 0x45, 0xe, 0x63, 0x85, 0xe7, 0x4, 0x37, 0x65, 0x9, 0x60, 0x13, 0x5, 0x5, 0xe, 0x82, 0x80, 0x37, 0x65, 0x9, 0x60, 0x6d, 0x47, 0x13, 0x5, 0x45, 0x5, 0x63, 0x89, 0xe7, 0x2, 0x37, 0x65, 0x9, 0x60, 0x71, 0x47, 0x13, 0x5, 0x5, 0x8, 0x63, 0x82, 0xe7, 0x2, 0x37, 0x65, 0x9, 0x60, 0x65, 0x47, 0x13, 0x5, 0x85, 0x9, 0x63, 0x8b, 0xe7, 0x0, 0x37, 0x65, 0x9, 0x60, 0x13, 0x5, 0x45, 0xa, 0x82, 0x80, 0x37, 0x65, 0x9, 0x60, 0x13, 0x5, 0x85, 0xd, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x2a, 0x84, 0x8d, 0x44, 0x5, 0x49, 0x63, 0x11, 0x24, 0x3, 0x5, 0x45, 0xef, 0x20, 0xc0, 0x60, 0x93, 0x5, 0x0, 0x40, 0x5, 0x45, 0xef, 0x30, 0xc0, 0x24, 0x19, 0xe5, 0x93, 0x87, 0xf4, 0xff, 0x63, 0x4c, 0x90, 0x2, 0xbe, 0x84, 0x1, 0x44, 0x22, 0x85, 0xef, 0x20, 0xc0, 0x67, 0x63, 0x5, 0x24, 0x1, 0x1, 0x45, 0xef, 0x20, 0x40, 0x5e, 0x1, 0x45, 0xef, 0x20, 0x40, 0x61, 0x93, 0x5, 0x0, 0x40, 0x7d, 0x55, 0xef, 0x30, 0xe0, 0x21, 0x5d, 0xdd, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0x10, 0x30, 0x23, 0xbe, 0x84, 0x45, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xf0, 0x5f, 0xe7, 0x18, 0x41, 0xb9, 0x46, 0x85, 0x47, 0x63, 0xf6, 0x86, 0x0, 0x93, 0x7, 0x4, 0xff, 0x93, 0xb7, 0xd7, 0x0, 0x93, 0xc7, 0xf7, 0xff, 0xf9, 0x8f, 0x1c, 0xc1, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0xe5, 0x1c, 0x41, 0xf1, 0x46, 0x21, 0x47, 0x63, 0xb, 0xd4, 0x0, 0xbd, 0x46, 0x9, 0x47, 0x63, 0xe7, 0x86, 0x0, 0x45, 0x14, 0x33, 0x34, 0x80, 0x0, 0x13, 0x17, 0x14, 0x0, 0xb2, 0x40, 0x22, 0x44, 0xd9, 0x8f, 0x1c, 0xc1, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xc0, 0x3f, 0xd4, 0xef, 0x20, 0x50, 0x70, 0x1, 0x45, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x86, 0x85, 0x47, 0x63, 0x16, 0xf5, 0x0, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x30, 0xe0, 0x64, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0xef, 0x20, 0xe0, 0x68, 0x93, 0x7, 0x80, 0x2, 0x63, 0x8, 0xf5, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x60, 0x70, 0x2e, 0x5, 0x45, 0xef, 0x20, 0x0, 0x58, 0x1, 0x45, 0xef, 0x20, 0xc0, 0x63, 0xb7, 0x27, 0xb, 0x60, 0x93, 0x87, 0x7, 0xc0, 0x3e, 0xc6, 0x2, 0xc4, 0xef, 0x20, 0x60, 0x60, 0x2a, 0x84, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xb9, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xb9, 0x13, 0x5, 0x0, 0x64, 0xb3, 0x35, 0xa4, 0x2, 0x13, 0x6, 0x80, 0x3e, 0x81, 0x46, 0x33, 0x5, 0xa4, 0x2, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x19, 0x2a, 0x86, 0x91, 0x46, 0x81, 0x45, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xb5, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xb5, 0xef, 0x20, 0xa0, 0x13, 0x1, 0x45, 0xef, 0xf0, 0x3f, 0xe9, 0xef, 0x20, 0xe0, 0x5a, 0x2a, 0x84, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xb3, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xb4, 0x9, 0x65, 0x13, 0x5, 0x85, 0x32, 0xb3, 0x35, 0xa4, 0x2, 0x13, 0x6, 0x80, 0x3e, 0x81, 0x46, 0x33, 0x5, 0xa4, 0x2, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x13, 0x2a, 0x86, 0x81, 0x45, 0x91, 0x46, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xaf, 0x28, 0x0, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xaf, 0x8, 0x8, 0xef, 0x20, 0x0, 0x7f, 0xc, 0x10, 0x13, 0x5, 0x0, 0xa, 0x72, 0x44, 0xef, 0x20, 0x40, 0x5f, 0xe3, 0x1, 0x5, 0xf2, 0x1, 0x45, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x7b, 0x8, 0x10, 0xef, 0x20, 0xc0, 0x64, 0x73, 0x25, 0x20, 0x7e, 0x93, 0x7, 0x0, 0xa, 0xb3, 0x35, 0xf5, 0x2, 0x22, 0x86, 0x81, 0x46, 0x33, 0x5, 0xf5, 0x2, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xe, 0x73, 0x10, 0x25, 0x7e, 0xf2, 0x50, 0x62, 0x54, 0x21, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0xef, 0x20, 0x80, 0x4e, 0x81, 0x45, 0x9, 0xcd, 0x85, 0x47, 0x63, 0xa, 0xf5, 0x0, 0x89, 0x47, 0x63, 0x6, 0xf5, 0x26, 0x8d, 0x47, 0x63, 0x15, 0xf5, 0x0, 0x95, 0x45, 0x11, 0xa0, 0x91, 0x45, 0x1, 0x46, 0x13, 0x5, 0x10, 0x2, 0xef, 0x20, 0xa0, 0x8, 0x1, 0x45, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x6e, 0xe1, 0x47, 0xaa, 0x84, 0x63, 0xeb, 0xa7, 0x0, 0xb7, 0x47, 0x2, 0x1, 0x93, 0x87, 0x7, 0x80, 0xb3, 0xd7, 0xa7, 0x0, 0x85, 0x8b, 0x63, 0x94, 0x7, 0x22, 0xb7, 0x67, 0x9, 0x60, 0x13, 0x87, 0x7, 0x0, 0x54, 0x47, 0x93, 0x87, 0x7, 0x0, 0xf9, 0x9a, 0x54, 0xc7, 0x14, 0x53, 0xf9, 0x9a, 0x14, 0xd3, 0xb7, 0x46, 0x0, 0x60, 0x37, 0x27, 0xb, 0x60, 0x93, 0x86, 0x6, 0x0, 0x13, 0x7, 0x7, 0x80, 0x63, 0x88, 0xe6, 0x0, 0xd8, 0x53, 0xb7, 0x6, 0xc0, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0xd8, 0xd3, 0xd8, 0x57, 0x37, 0x96, 0x0, 0x60, 0x13, 0x6, 0x6, 0x0, 0x79, 0x9b, 0xd8, 0xd7, 0x94, 0x5b, 0x37, 0x7, 0xc0, 0xff, 0x7d, 0x17, 0xf9, 0x8e, 0x94, 0xdb, 0x94, 0x5f, 0xf9, 0x8e, 0x94, 0xdf, 0xd4, 0x5b, 0xf9, 0x9a, 0xd4, 0xdb, 0xb4, 0x43, 0xf9, 0x8e, 0xb4, 0xc3, 0xb7, 0x86, 0x0, 0x60, 0x93, 0x86, 0x6, 0x0, 0x63, 0x13, 0xd6, 0x1c, 0xb4, 0x43, 0x75, 0x8f, 0xb8, 0xc3, 0xd8, 0x5f, 0x37, 0x4, 0xc0, 0xff, 0x7d, 0x14, 0x79, 0x9b, 0xd8, 0xdf, 0xb8, 0x47, 0x21, 0x45, 0x79, 0x9b, 0xb8, 0xc7, 0xb8, 0x53, 0x61, 0x8f, 0xb8, 0xd3, 0xf8, 0x4f, 0x79, 0x9b, 0xf8, 0xcf, 0xb8, 0x57, 0x61, 0x8f, 0xb8, 0xd7, 0xf8, 0x53, 0x79, 0x9b, 0xf8, 0xd3, 0xf8, 0x57, 0x79, 0x9b, 0xf8, 0xd7, 0xb8, 0x5b, 0x61, 0x8f, 0xb8, 0xdb, 0xb8, 0x5f, 0x61, 0x8f, 0xb8, 0xdf, 0x93, 0x87, 0x7, 0x8, 0xd8, 0x4b, 0x79, 0x9b, 0xd8, 0xcb, 0x98, 0x4f, 0x79, 0x9b, 0x98, 0xcf, 0xd8, 0x4f, 0x79, 0x9b, 0xd8, 0xcf, 0x98, 0x53, 0x61, 0x8f, 0x98, 0xd3, 0x94, 0x57, 0x37, 0x7, 0xfc, 0xff, 0x7d, 0x17, 0xf9, 0x8e, 0x94, 0xd7, 0xd4, 0x57, 0x75, 0x8f, 0xd8, 0xd7, 0xd8, 0x53, 0x79, 0x9b, 0xd8, 0xd3, 0x37, 0x7, 0x8, 0x60, 0x13, 0x7, 0x7, 0x0, 0x74, 0x53, 0xdd, 0x9a, 0x74, 0xd3, 0xd8, 0x5f, 0x79, 0x9b, 0xd8, 0xdf, 0xb8, 0x43, 0x79, 0x9b, 0xb8, 0xc3, 0x98, 0x47, 0x61, 0x8f, 0x98, 0xc7, 0xf8, 0x5b, 0x79, 0x9b, 0xf8, 0xdb, 0xf8, 0x5b, 0x13, 0x67, 0x27, 0x0, 0xf8, 0xdb, 0xef, 0xf0, 0xbf, 0xce, 0x71, 0x45, 0xef, 0xf0, 0x5f, 0xce, 0x59, 0x45, 0xef, 0xf0, 0xff, 0xcd, 0x41, 0x45, 0xef, 0xf0, 0x9f, 0xcd, 0x45, 0x45, 0xef, 0xf0, 0x3f, 0xcd, 0x49, 0x45, 0xef, 0xf0, 0xdf, 0xcc, 0x4d, 0x45, 0xef, 0xf0, 0x7f, 0xcc, 0x51, 0x45, 0xef, 0xf0, 0x1f, 0xcc, 0x55, 0x45, 0xef, 0xf0, 0xbf, 0xcb, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x13, 0x98, 0x43, 0xc1, 0x76, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0xc7, 0xf, 0x98, 0x43, 0x79, 0x9b, 0x98, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x87, 0xf, 0x98, 0x43, 0x79, 0x9b, 0x98, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0xf, 0x98, 0x43, 0x79, 0x9b, 0x98, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x47, 0xb, 0x98, 0x43, 0x79, 0x9b, 0x98, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x87, 0xb, 0x98, 0x43, 0x61, 0x8f, 0x98, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0xc7, 0x12, 0x23, 0xa0, 0x7, 0x0, 0x85, 0x47, 0x63, 0x88, 0xf4, 0x0, 0xc1, 0x47, 0x63, 0x85, 0xf4, 0x0, 0xc9, 0x47, 0x63, 0x94, 0xf4, 0x6, 0xb7, 0x37, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xf0, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xfc, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0xb7, 0x37, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xfe, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xe0, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xf8, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x47, 0x40, 0x23, 0xa0, 0x7, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x8d, 0x45, 0x4d, 0xb3, 0xf4, 0x47, 0x75, 0x8f, 0xf8, 0xc7, 0x3d, 0xbd, 0xb7, 0x17, 0xb, 0x60, 0xe1, 0x7, 0x9c, 0x43, 0x1, 0x45, 0x63, 0xdb, 0x7, 0x0, 0x21, 0x67, 0x7d, 0x17, 0x33, 0xf5, 0xe7, 0x0, 0xc1, 0x83, 0xf9, 0x8f, 0x63, 0x83, 0xa7, 0x0, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0xef, 0xf0, 0x9f, 0xfd, 0x2a, 0x84, 0x1, 0x45, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x45, 0xc9, 0x47, 0x63, 0xeb, 0xa7, 0x6, 0xa1, 0x47, 0x63, 0xe0, 0xa7, 0x4, 0x19, 0x47, 0xa9, 0x47, 0x63, 0xf, 0xe5, 0x0, 0x63, 0x6c, 0xa7, 0x4, 0x8d, 0x47, 0x63, 0x1, 0xf5, 0x8, 0x15, 0x47, 0xa1, 0x47, 0x63, 0x6, 0xe5, 0x0, 0x93, 0x7, 0xf5, 0xff, 0x93, 0xb7, 0x17, 0x0, 0x37, 0xb7, 0x81, 0x40, 0x23, 0x24, 0xf7, 0x58, 0x9, 0xc4, 0xb7, 0x17, 0xb, 0x60, 0x23, 0xac, 0x7, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x93, 0x7, 0x75, 0xff, 0x5, 0x47, 0x33, 0x17, 0xf7, 0x0, 0x13, 0x77, 0x57, 0x39, 0x9d, 0x47, 0x79, 0xfb, 0x3d, 0x47, 0xa5, 0x47, 0xe3, 0x8, 0xe5, 0xfc, 0xb1, 0x47, 0x63, 0xc, 0xf5, 0x2, 0x81, 0x47, 0xd1, 0xb7, 0x1d, 0x47, 0x95, 0x47, 0xe3, 0x1f, 0xe5, 0xfa, 0x99, 0x47, 0x65, 0xbf, 0xd9, 0x47, 0x63, 0xeb, 0xa7, 0x0, 0x51, 0x47, 0xad, 0x47, 0xe3, 0x66, 0xa7, 0xfa, 0x81, 0x47, 0xe3, 0x13, 0xe5, 0xfa, 0xb5, 0x47, 0x45, 0xb7, 0x61, 0x47, 0x81, 0x47, 0xe3, 0x1d, 0xe5, 0xf8, 0xb1, 0x47, 0x51, 0xbf, 0x11, 0x47, 0x91, 0x47, 0xe3, 0x7, 0xe4, 0xf8, 0x25, 0x47, 0xa5, 0x47, 0xe3, 0x3, 0xe4, 0xf8, 0x19, 0x47, 0x99, 0x47, 0xe3, 0xf, 0xe4, 0xf6, 0x13, 0x7, 0xb4, 0xff, 0x8d, 0x47, 0x35, 0xfb, 0x95, 0x47, 0x85, 0xbf, 0xb7, 0x87, 0xc, 0x60, 0x93, 0x87, 0x47, 0x17, 0x9c, 0x43, 0x1, 0x45, 0xc1, 0x8b, 0x89, 0xc7, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x78, 0x82, 0x80, 0xb7, 0x87, 0xc, 0x60, 0x93, 0x87, 0x47, 0x17, 0x88, 0x43, 0x11, 0x81, 0x5, 0x89, 0x82, 0x80, 0x41, 0x11, 0x65, 0x45, 0x6, 0xc6, 0xef, 0xd0, 0x8f, 0x8a, 0x65, 0x46, 0xf1, 0x45, 0x1, 0x45, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xa7, 0x81, 0x45, 0x65, 0x45, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xa5, 0x65, 0x45, 0x91, 0x45, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xa4, 0xb7, 0x87, 0xc, 0x60, 0x93, 0x87, 0xc7, 0x16, 0x98, 0x43, 0xb2, 0x40, 0x65, 0x45, 0x13, 0x67, 0x7, 0x1, 0x98, 0xc3, 0xb7, 0x87, 0xc, 0x60, 0x93, 0x87, 0x87, 0x16, 0x98, 0x43, 0x13, 0x67, 0x7, 0x1, 0x98, 0xc3, 0x41, 0x1, 0x6f, 0xc0, 0xbf, 0xfb, 0x1, 0x45, 0x82, 0x80, 0x79, 0x71, 0x26, 0xd2, 0xa3, 0x5, 0xa1, 0x0, 0xaa, 0x84, 0x37, 0x65, 0x81, 0x40, 0x3, 0x26, 0xc5, 0xbc, 0xb7, 0x17, 0xb, 0x60, 0x6, 0xd6, 0x22, 0xd4, 0x4a, 0xd0, 0x4e, 0xce, 0x2, 0xc6, 0x93, 0x87, 0x7, 0x40, 0x63, 0x18, 0xf6, 0x6, 0x41, 0x47, 0x8d, 0x46, 0x5c, 0x4e, 0xc1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0xb3, 0xd7, 0xd7, 0x40, 0xe3, 0x8a, 0xe7, 0xfe, 0x74, 0x0, 0x5, 0x46, 0x93, 0x5, 0xb1, 0x0, 0x13, 0x5, 0xc5, 0xbc, 0x37, 0xf4, 0x0, 0x60, 0xef, 0x0, 0x10, 0x49, 0x13, 0x4, 0x4, 0x0, 0x37, 0xb9, 0x81, 0x40, 0x93, 0x9, 0x30, 0x1f, 0x5c, 0x40, 0x85, 0x83, 0x85, 0x8b, 0x89, 0xe7, 0x83, 0x27, 0xc9, 0x58, 0x63, 0xda, 0xf9, 0x2, 0x5c, 0x40, 0x85, 0x83, 0x85, 0x8b, 0x91, 0xcb, 0x5c, 0x40, 0x85, 0x83, 0x85, 0x8b, 0x91, 0xc3, 0x4, 0xc0, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa6, 0x7, 0x58, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x13, 0x7, 0x0, 0x8, 0x81, 0x46, 0x49, 0xbf, 0x13, 0x5, 0x40, 0x6, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x29, 0x83, 0x27, 0xc9, 0x58, 0x85, 0x7, 0x23, 0x26, 0xf9, 0x58, 0x6d, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x3, 0x45, 0x4, 0x0, 0x5, 0x4, 0x9, 0xe5, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xef, 0xf0, 0x5f, 0xf3, 0xf5, 0xb7, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x7, 0x59, 0x6f, 0xf0, 0xbf, 0xfd, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x2a, 0x84, 0xa1, 0x44, 0x25, 0x49, 0x93, 0x57, 0xc4, 0x1, 0x63, 0x6f, 0xf9, 0x0, 0x13, 0x85, 0x7, 0x3, 0xfd, 0x14, 0xef, 0xf0, 0x5f, 0xf0, 0x12, 0x4, 0xf5, 0xf4, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x13, 0x85, 0x77, 0x5, 0xdd, 0xb7, 0x41, 0x11, 0xa9, 0x47, 0x22, 0xc4, 0x33, 0x64, 0xf5, 0x2, 0x6, 0xc6, 0x33, 0x45, 0xf5, 0x2, 0x11, 0xed, 0x13, 0x5, 0x0, 0x2, 0xef, 0xf0, 0x5f, 0xed, 0x13, 0x5, 0x4, 0x3, 0x22, 0x44, 0xb2, 0x40, 0x13, 0x75, 0xf5, 0xf, 0x41, 0x1, 0x6f, 0xf0, 0x3f, 0xec, 0x13, 0x5, 0x5, 0x3, 0x13, 0x75, 0xf5, 0xf, 0xcd, 0xb7, 0x1, 0x11, 0x85, 0x47, 0x3e, 0xc0, 0xb7, 0x87, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x3e, 0xc2, 0x89, 0x47, 0x3e, 0xc4, 0x15, 0x66, 0xb7, 0x97, 0x0, 0x60, 0x22, 0xcc, 0x93, 0x87, 0x7, 0x0, 0x81, 0x46, 0x13, 0x6, 0x6, 0xe2, 0x85, 0x45, 0x2a, 0x84, 0xa, 0x85, 0x6, 0xce, 0x3e, 0xc6, 0xef, 0x0, 0x30, 0x13, 0xa, 0x85, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x51, 0x93, 0x7, 0x80, 0x3e, 0x33, 0x4, 0xf4, 0x2, 0x13, 0x6, 0x40, 0x1f, 0x8d, 0x46, 0x81, 0x45, 0xa, 0x85, 0x33, 0x56, 0xc4, 0x2, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x4e, 0xa, 0x85, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x4f, 0xa, 0x85, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x4e, 0x28, 0x0, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x4d, 0x28, 0x0, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x4d, 0x28, 0x0, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x4c, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x2a, 0x84, 0x13, 0x5, 0x80, 0x3e, 0x52, 0xcc, 0x6, 0xd6, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x37, 0xba, 0x81, 0x40, 0xef, 0xf0, 0x3f, 0xf5, 0x83, 0x47, 0x4a, 0x59, 0xc9, 0xc3, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x7, 0x59, 0x23, 0x26, 0x4, 0x0, 0x81, 0x47, 0x9, 0xc7, 0xb7, 0x47, 0x80, 0x40, 0x93, 0x87, 0x7, 0xde, 0x1c, 0xc8, 0x8d, 0x47, 0x23, 0x24, 0x4, 0x0, 0x5c, 0xc0, 0x48, 0x44, 0x19, 0xc1, 0xef, 0xf0, 0xbf, 0xe8, 0x37, 0x99, 0x81, 0x40, 0x13, 0x5, 0x9, 0x7d, 0xef, 0xf0, 0xff, 0xe7, 0x1c, 0x48, 0x99, 0xc3, 0x48, 0x4c, 0x82, 0x97, 0x13, 0x5, 0x9, 0x7d, 0xef, 0xf0, 0xff, 0xe6, 0xb7, 0x27, 0xc, 0x60, 0x93, 0x87, 0x47, 0x7, 0x9c, 0x43, 0x89, 0x8b, 0x63, 0x82, 0x7, 0x10, 0x83, 0x47, 0x4, 0x2, 0xb1, 0xcf, 0x8, 0x44, 0x35, 0xc5, 0x2a, 0xc4, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x55, 0x2a, 0xc6, 0x2c, 0x0, 0x13, 0x5, 0x60, 0x11, 0x13, 0x10, 0xf0, 0x1, 0x73, 0x0, 0x10, 0x0, 0x13, 0x50, 0x70, 0x40, 0xb1, 0xa0, 0x1c, 0x44, 0xc5, 0xd3, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x5, 0x7a, 0xef, 0xf0, 0x5f, 0xe2, 0x8, 0x40, 0xef, 0xf0, 0x1f, 0xe8, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x5, 0x7c, 0xef, 0xf0, 0x3f, 0xe1, 0x8, 0x44, 0xef, 0xf0, 0xdf, 0xe0, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x7c, 0xef, 0xf0, 0x1f, 0xe0, 0xbd, 0xb7, 0x83, 0x47, 0x4a, 0x59, 0x81, 0xcb, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x7, 0x59, 0x83, 0x47, 0x5, 0x0, 0xc1, 0xff, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x45, 0x7d, 0xef, 0xf0, 0xff, 0xdd, 0x8, 0x4c, 0xef, 0xf0, 0x3f, 0xe0, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x5, 0x7f, 0xef, 0xf0, 0xdf, 0xdc, 0x85, 0x47, 0x3e, 0xc0, 0xb7, 0x87, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x3e, 0xc2, 0x89, 0x47, 0x3e, 0xc4, 0xb7, 0x97, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0xa, 0x85, 0x3e, 0xc6, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x38, 0xa, 0x85, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x38, 0xa, 0x85, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x37, 0x28, 0x0, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x36, 0x28, 0x0, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x36, 0x28, 0x0, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x35, 0xc, 0x4c, 0x22, 0x54, 0xb2, 0x50, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x1, 0x45, 0x45, 0x61, 0x6f, 0x0, 0x70, 0x7d, 0xb7, 0x64, 0x81, 0x40, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x34, 0x25, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x85, 0x4, 0xbd, 0xef, 0x0, 0x80, 0x73, 0xef, 0x10, 0x70, 0x58, 0xaa, 0x89, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x30, 0x9, 0x65, 0x13, 0x5, 0x85, 0xb5, 0xb3, 0xb5, 0xa9, 0x2, 0x13, 0x6, 0x80, 0x3e, 0x81, 0x46, 0x33, 0x85, 0xa9, 0x2, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x91, 0x2a, 0x86, 0x8d, 0x46, 0x81, 0x45, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x2d, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x2d, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x2c, 0x13, 0x5, 0x80, 0x3e, 0xef, 0xf0, 0x7f, 0xd7, 0x5c, 0x48, 0x99, 0xc3, 0x48, 0x4c, 0x82, 0x97, 0x13, 0x5, 0x9, 0x7d, 0xef, 0xf0, 0xff, 0xcc, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x45, 0x80, 0x23, 0xa, 0xa, 0x58, 0xef, 0xf0, 0xff, 0xcb, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x8d, 0xef, 0xf0, 0x3f, 0xcb, 0x13, 0x5, 0x9, 0x7d, 0xef, 0xf0, 0xbf, 0xca, 0x13, 0x5, 0x9, 0x7d, 0xef, 0xf0, 0x3f, 0xca, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x27, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x27, 0x13, 0x85, 0x4, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x26, 0xef, 0xf0, 0x7f, 0xa4, 0x9, 0xed, 0x5c, 0x40, 0x5, 0x47, 0x15, 0x45, 0x63, 0x87, 0xe7, 0x0, 0x9, 0x47, 0x19, 0x45, 0x63, 0x83, 0xe7, 0x0, 0x11, 0x45, 0xef, 0xc0, 0xef, 0xba, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x85, 0x81, 0xef, 0xf0, 0x5f, 0xc5, 0x59, 0x22, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x37, 0xc4, 0x81, 0x40, 0xb7, 0xc4, 0x81, 0x40, 0x4a, 0xc0, 0x6, 0xc6, 0x2a, 0x89, 0x13, 0x4, 0x44, 0x87, 0x93, 0x84, 0x44, 0x93, 0x63, 0x68, 0x94, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x83, 0x57, 0x64, 0x0, 0x63, 0x9b, 0x27, 0x1, 0x83, 0x57, 0x44, 0x0, 0x85, 0x8b, 0x91, 0xc7, 0x1c, 0x40, 0x82, 0x97, 0x19, 0xc1, 0xef, 0x60, 0xc0, 0x9, 0x21, 0x4, 0xd1, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x1, 0x45, 0x37, 0xc4, 0x81, 0x40, 0xb7, 0xc4, 0x81, 0x40, 0x6, 0xc6, 0x13, 0x4, 0x4, 0x84, 0xef, 0xf0, 0x1f, 0xfa, 0x93, 0x84, 0x4, 0x84, 0x63, 0x63, 0x94, 0x2, 0x37, 0xc4, 0x81, 0x40, 0xb7, 0xc4, 0x81, 0x40, 0x13, 0x4, 0x44, 0x85, 0x93, 0x84, 0x4, 0x84, 0x71, 0x14, 0x63, 0x7c, 0x94, 0x0, 0x5, 0x45, 0xef, 0xf0, 0xdf, 0xf7, 0xef, 0x40, 0x90, 0x1a, 0x1, 0xa0, 0x1c, 0x40, 0x11, 0x4, 0x82, 0x97, 0xd1, 0xbf, 0x1c, 0x40, 0x82, 0x97, 0xcd, 0xb7, 0x39, 0x71, 0x22, 0xdc, 0x26, 0xda, 0x2a, 0x84, 0xae, 0x84, 0x13, 0x6, 0x40, 0x2, 0x81, 0x45, 0x68, 0x0, 0x6, 0xde, 0x4a, 0xd8, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x28, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa0, 0x87, 0x5a, 0xb7, 0x27, 0xc, 0x60, 0x93, 0x87, 0x47, 0x7, 0x9c, 0x43, 0x89, 0x8b, 0x95, 0xcb, 0x22, 0x85, 0xc5, 0x26, 0xe1, 0x47, 0x63, 0x16, 0xf5, 0x2, 0x37, 0x69, 0x81, 0x40, 0x13, 0x5, 0x89, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x14, 0x13, 0x5, 0x89, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x14, 0x13, 0x5, 0x89, 0xbd, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x13, 0x91, 0x47, 0x3e, 0xc8, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x82, 0x6c, 0x0, 0x22, 0x85, 0x2, 0xc6, 0x2, 0xce, 0x3e, 0xca, 0x11, 0x2c, 0xb3, 0xe5, 0xa4, 0x0, 0x93, 0xf5, 0xf5, 0xf, 0x23, 0x6, 0xb1, 0x2, 0x9d, 0xc1, 0x6c, 0x0, 0x22, 0x85, 0x15, 0x2c, 0xb7, 0x47, 0x80, 0x40, 0x93, 0x87, 0x87, 0x2c, 0x68, 0x0, 0x22, 0xd4, 0x3e, 0xd0, 0xef, 0xf0, 0x1f, 0xc4, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0x21, 0x61, 0x82, 0x80, 0x6c, 0x0, 0x22, 0x85, 0x49, 0x2c, 0xf1, 0xbf, 0x41, 0x11, 0x81, 0x45, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x2a, 0x84, 0xb7, 0x94, 0x81, 0x40, 0x39, 0x2a, 0x13, 0x85, 0x4, 0x7d, 0xef, 0xf0, 0x5f, 0xae, 0x22, 0x85, 0x81, 0x45, 0x55, 0x24, 0x22, 0x44, 0xb2, 0x40, 0x13, 0x85, 0x4, 0x7d, 0x92, 0x44, 0x41, 0x1, 0x6f, 0xf0, 0xff, 0xac, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xc0, 0xaf, 0xb6, 0x79, 0x71, 0x22, 0xd4, 0x4a, 0xd0, 0x6, 0xd6, 0x26, 0xd2, 0x4e, 0xce, 0x2a, 0x89, 0xe1, 0x26, 0xfd, 0x57, 0x2a, 0x84, 0x63, 0x19, 0xf5, 0x0, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x83, 0xef, 0xf0, 0x3f, 0xaa, 0x1, 0x44, 0x22, 0x85, 0xef, 0x50, 0x30, 0x15, 0xef, 0x40, 0xb0, 0x59, 0x70, 0x0, 0x2c, 0x0, 0xaa, 0x89, 0x22, 0x85, 0x41, 0x26, 0xb7, 0x94, 0x81, 0x40, 0x13, 0x85, 0x4, 0x7d, 0xef, 0xf0, 0x1f, 0xa8, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x86, 0xef, 0xf0, 0x5f, 0xa7, 0x4e, 0x85, 0xef, 0xf0, 0xff, 0xa6, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x88, 0xef, 0xf0, 0x3f, 0xa6, 0x22, 0x85, 0x51, 0x26, 0xef, 0xf0, 0x5f, 0xa8, 0x13, 0x85, 0x4, 0x7d, 0xef, 0xf0, 0x3f, 0xa5, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x85, 0x88, 0xef, 0xf0, 0x7f, 0xa4, 0x3, 0x25, 0x89, 0x0, 0xef, 0xf0, 0x9f, 0xa6, 0x13, 0x85, 0x4, 0x7d, 0xef, 0xf0, 0x7f, 0xa3, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x89, 0xef, 0xf0, 0xbf, 0xa2, 0x22, 0x45, 0xef, 0xf0, 0xff, 0xa4, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x8b, 0xef, 0xf0, 0x9f, 0xa1, 0x32, 0x45, 0xef, 0xf0, 0xdf, 0xa3, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x85, 0x8b, 0xef, 0xf0, 0x7f, 0xa0, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x5f, 0x8b, 0x19, 0xc9, 0xef, 0xf0, 0xbf, 0x9e, 0xb2, 0x40, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x5, 0x7d, 0x41, 0x1, 0x6f, 0xf0, 0xbf, 0x9d, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x8c, 0xd5, 0xb7, 0x31, 0x71, 0x22, 0xdd, 0x2e, 0x84, 0xb7, 0xa5, 0x81, 0x40, 0x13, 0x6, 0x40, 0x9, 0x93, 0x85, 0x45, 0xfe, 0x4a, 0xd9, 0x2a, 0x89, 0x68, 0x0, 0x6, 0xdf, 0x26, 0xdb, 0x4e, 0xd7, 0x52, 0xd5, 0x56, 0xd3, 0x5a, 0xd1, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x9, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x85, 0x90, 0xef, 0xf0, 0x9f, 0x99, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0x9f, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x91, 0xef, 0xf0, 0x7f, 0x98, 0x60, 0x0, 0x81, 0x44, 0x37, 0x9b, 0x81, 0x40, 0xb7, 0xaa, 0x81, 0x40, 0x37, 0xaa, 0x81, 0x40, 0x93, 0x9, 0x50, 0x2, 0x93, 0xf7, 0x34, 0x0, 0x89, 0xe7, 0x13, 0x5, 0xb, 0x7d, 0xef, 0xf0, 0x5f, 0x96, 0x8, 0x40, 0x11, 0x4, 0xef, 0xf0, 0xdf, 0x95, 0x13, 0x85, 0xa, 0x92, 0xef, 0xf0, 0x5f, 0x95, 0x93, 0x97, 0x24, 0x0, 0xca, 0x97, 0x88, 0x43, 0x85, 0x4, 0xef, 0xf0, 0x1f, 0x97, 0x13, 0x5, 0x8a, 0x92, 0xef, 0xf0, 0xff, 0x93, 0xe3, 0x96, 0x34, 0xfd, 0xfa, 0x50, 0x6a, 0x54, 0xda, 0x54, 0x4a, 0x59, 0xba, 0x59, 0x2a, 0x5a, 0x9a, 0x5a, 0xa, 0x5b, 0x29, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xf0, 0x8f, 0xff, 0x11, 0xcd, 0x83, 0x27, 0x84, 0x8, 0x5, 0x47, 0x93, 0x86, 0xf7, 0xff, 0x63, 0x75, 0xd7, 0x0, 0x15, 0x47, 0x63, 0x99, 0xe7, 0x0, 0xe5, 0x47, 0x23, 0x24, 0xf4, 0x8, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0xdd, 0xbf, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x92, 0x9c, 0xc5, 0x1c, 0x41, 0x41, 0x11, 0x22, 0xc4, 0x9c, 0xcd, 0x83, 0x27, 0x85, 0x8, 0x6, 0xc6, 0x65, 0x47, 0x2e, 0x84, 0x63, 0x90, 0xe7, 0x2, 0xef, 0xf0, 0x7f, 0x81, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x93, 0x1c, 0xc4, 0xb7, 0x47, 0x80, 0x40, 0x8, 0xc0, 0x93, 0x87, 0xe7, 0x3c, 0x1c, 0xc8, 0x29, 0xa8, 0x61, 0x47, 0x63, 0x9f, 0xe7, 0x0, 0x85, 0x47, 0xdc, 0xc1, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x94, 0x23, 0xa0, 0x5, 0x0, 0x9c, 0xc5, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x6d, 0x47, 0xe3, 0x9b, 0xe7, 0xfe, 0x45, 0x22, 0xfd, 0x57, 0x63, 0x13, 0xf5, 0x0, 0x1, 0x45, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x96, 0x1c, 0xc4, 0xb7, 0x47, 0x80, 0x40, 0x8, 0xc0, 0x93, 0x87, 0x7, 0x30, 0x65, 0xbf, 0x3, 0x27, 0x85, 0x8, 0x91, 0x47, 0xdc, 0xc1, 0x23, 0xa0, 0x5, 0x0, 0xbd, 0x47, 0x63, 0xeb, 0xe7, 0x0, 0xb7, 0xa7, 0x81, 0x40, 0xa, 0x7, 0x93, 0x87, 0x47, 0xfa, 0xba, 0x97, 0x9c, 0x43, 0x91, 0xc3, 0x9c, 0xc5, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x98, 0xdc, 0xc5, 0x1c, 0x41, 0x9c, 0xcd, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x2a, 0x84, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x9a, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x6, 0xd6, 0x26, 0xd2, 0xef, 0xf0, 0x9f, 0x81, 0x0, 0x44, 0x37, 0xa9, 0x81, 0x40, 0xb7, 0x99, 0x81, 0x40, 0x13, 0xa, 0x4, 0x40, 0xb7, 0xaa, 0x81, 0x40, 0x37, 0xab, 0x81, 0x40, 0x9d, 0x4b, 0x13, 0x9, 0xc9, 0x99, 0x93, 0x89, 0x9, 0x7d, 0x21, 0x4c, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0x81, 0x13, 0x85, 0x4a, 0x9b, 0xef, 0xf0, 0x8f, 0xfe, 0x81, 0x44, 0x13, 0x5, 0x8b, 0x9b, 0xef, 0xf0, 0xef, 0xfd, 0x93, 0x97, 0x24, 0x0, 0xa2, 0x97, 0x88, 0x43, 0xef, 0xf0, 0xcf, 0xff, 0x4a, 0x85, 0x63, 0x93, 0x74, 0x1, 0x4e, 0x85, 0x85, 0x4, 0xef, 0xf0, 0x4f, 0xfc, 0xe3, 0x9f, 0x84, 0xfd, 0x13, 0x4, 0x4, 0x2, 0xe3, 0x13, 0x44, 0xfd, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x3, 0x25, 0x85, 0x8, 0x82, 0x80, 0xf3, 0x27, 0x0, 0x30, 0x13, 0x5, 0x5, 0x8, 0x1c, 0xc1, 0xf3, 0x27, 0x50, 0x30, 0x5c, 0xc1, 0xb7, 0xc7, 0xad, 0xde, 0x93, 0x87, 0xe7, 0xd, 0x1c, 0xc5, 0x5c, 0xc5, 0xf3, 0x27, 0x40, 0xf1, 0x1c, 0xc9, 0x82, 0x80, 0x41, 0x11, 0x6d, 0x45, 0x6, 0xc6, 0xef, 0xc0, 0x8f, 0xf0, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x10, 0x98, 0x43, 0x6d, 0x46, 0xe9, 0x45, 0x13, 0x67, 0x17, 0x0, 0x98, 0xc3, 0x98, 0x43, 0x1, 0x45, 0x13, 0x67, 0x27, 0x0, 0x98, 0xc3, 0x98, 0x43, 0x75, 0x9b, 0x98, 0xc3, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xb, 0x81, 0x45, 0x6d, 0x45, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x9, 0x91, 0x45, 0x6d, 0x45, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x8, 0xb7, 0x27, 0xc, 0x60, 0x98, 0x47, 0x6d, 0x45, 0x13, 0x67, 0x7, 0x30, 0x98, 0xc7, 0xef, 0xc0, 0x4f, 0xe1, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x99, 0xc5, 0xb7, 0x27, 0xc, 0x60, 0x93, 0x87, 0x87, 0x3, 0x9c, 0x43, 0x9c, 0xc1, 0x19, 0xc6, 0xb7, 0x27, 0xc, 0x60, 0x93, 0x87, 0xc7, 0x3, 0x9c, 0x43, 0x1c, 0xc2, 0x82, 0x80, 0xb7, 0x27, 0xc, 0x60, 0xc8, 0x43, 0x13, 0x75, 0x5, 0x30, 0x13, 0x35, 0x15, 0x0, 0x33, 0x5, 0xa0, 0x40, 0x82, 0x80, 0xb7, 0x27, 0xc, 0x60, 0xa8, 0x43, 0x82, 0x80, 0x83, 0x27, 0xc5, 0xff, 0x41, 0x11, 0x22, 0xc4, 0x36, 0x84, 0x94, 0x42, 0x4a, 0xc0, 0x13, 0xf7, 0xc7, 0xff, 0x13, 0xf9, 0x17, 0x0, 0x85, 0x83, 0x85, 0x8b, 0x95, 0x8f, 0x26, 0xc2, 0xb3, 0x37, 0xf0, 0x0, 0x6, 0xc6, 0xb3, 0x4, 0xf0, 0x40, 0x63, 0x4, 0xb7, 0x0, 0x93, 0xc4, 0xf7, 0xff, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x5a, 0x99, 0xcb, 0x19, 0xe2, 0x51, 0x17, 0x21, 0x5, 0x85, 0x46, 0x13, 0x36, 0x16, 0x0, 0xba, 0x85, 0x82, 0x97, 0x11, 0xe1, 0xfd, 0x14, 0x5c, 0x40, 0x23, 0x20, 0x24, 0x1, 0xb2, 0x40, 0xa6, 0x97, 0x5c, 0xc0, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x5, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0xb7, 0x45, 0x80, 0x40, 0x30, 0x0, 0x93, 0x85, 0x25, 0x6f, 0x6, 0xce, 0x2, 0xc4, 0x2, 0xc6, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xcd, 0xf2, 0x40, 0x32, 0x45, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0x4, 0x88, 0x40, 0x83, 0x25, 0x84, 0xfd, 0x37, 0xb5, 0x81, 0x40, 0x26, 0xc2, 0x13, 0x6, 0xc0, 0x4, 0x93, 0x4, 0x5, 0x8f, 0x13, 0x5, 0x5, 0x8f, 0x6, 0xc6, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xd1, 0xb2, 0x40, 0x23, 0x2c, 0x94, 0xfc, 0xb7, 0x47, 0x80, 0x40, 0x22, 0x44, 0x93, 0x87, 0x87, 0x75, 0xfc, 0xc4, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x79, 0x71, 0x4a, 0xd0, 0x4e, 0xce, 0x2e, 0x89, 0xb2, 0x89, 0x81, 0x45, 0x21, 0x46, 0x22, 0xd4, 0x26, 0xd2, 0x6, 0xd6, 0xaa, 0x84, 0x36, 0x84, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xcd, 0x85, 0x47, 0x63, 0x19, 0xf9, 0xe, 0xb7, 0x87, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0xdc, 0xc0, 0x23, 0xa0, 0x24, 0x1, 0xdc, 0x40, 0x37, 0x47, 0xd8, 0x50, 0x13, 0x7, 0x17, 0xaa, 0xf8, 0xd3, 0xb8, 0x47, 0xb7, 0x6, 0x0, 0xa0, 0xfd, 0x16, 0x6, 0x7, 0x5, 0x83, 0xb8, 0xc7, 0xb8, 0x47, 0x37, 0x6, 0x0, 0xe8, 0x7d, 0x16, 0x75, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0xb7, 0x6, 0x40, 0x0, 0x5, 0x88, 0x55, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x6, 0x4, 0xb7, 0x85, 0x0, 0x60, 0x71, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x37, 0x6, 0x0, 0xfa, 0x7d, 0x16, 0x55, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x93, 0x85, 0x5, 0x0, 0x71, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x37, 0x6, 0x80, 0xfe, 0x7d, 0x16, 0x55, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x71, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x37, 0x6, 0x1c, 0x0, 0x55, 0x8f, 0xb8, 0xc7, 0xf8, 0x5f, 0x13, 0x67, 0x27, 0x0, 0xf8, 0xdf, 0xb8, 0x5b, 0x75, 0x9b, 0x41, 0x8f, 0xb8, 0xdb, 0xb8, 0x47, 0x51, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x37, 0x86, 0x3, 0x0, 0x55, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x51, 0x8f, 0xb8, 0xc7, 0xb8, 0x47, 0x37, 0x6, 0xd0, 0xff, 0x7d, 0x16, 0x55, 0x8f, 0xb8, 0xc7, 0x37, 0x67, 0x9, 0x60, 0x13, 0x7, 0x7, 0x0, 0x63, 0x90, 0xb7, 0x10, 0x6c, 0x43, 0x6d, 0x8e, 0x70, 0xc3, 0x70, 0x43, 0xd1, 0x8e, 0x74, 0xc3, 0xf8, 0x47, 0xc2, 0x9, 0xb7, 0x6, 0x40, 0x0, 0x3a, 0xc6, 0x32, 0x46, 0x42, 0x6, 0x41, 0x82, 0x33, 0x66, 0x36, 0x1, 0x32, 0xc6, 0x32, 0x47, 0xf8, 0xc7, 0xb8, 0x47, 0x55, 0x8f, 0xb8, 0xc7, 0x23, 0xa2, 0x7, 0x6, 0x7d, 0xa8, 0x89, 0x47, 0x63, 0x17, 0xf9, 0x0, 0xb7, 0x97, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x31, 0xb7, 0xb7, 0x27, 0xb, 0x60, 0x93, 0x87, 0x7, 0xc0, 0xdc, 0xc0, 0x23, 0xa0, 0x24, 0x1, 0xe3, 0x11, 0x9, 0xf0, 0x37, 0x47, 0xd8, 0x50, 0x13, 0x7, 0x17, 0xaa, 0x98, 0xcf, 0x98, 0x43, 0xb7, 0x5, 0x0, 0x80, 0x13, 0x86, 0xf5, 0xff, 0x71, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x90, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xf2, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x40, 0xfe, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0xc8, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0x7e, 0x4, 0x85, 0x66, 0x3a, 0xc4, 0x22, 0x47, 0x93, 0x86, 0x6, 0x80, 0x13, 0x77, 0x7, 0xf0, 0x3a, 0xc4, 0x22, 0x47, 0x98, 0xc3, 0x98, 0x43, 0x13, 0x77, 0xf7, 0xef, 0x98, 0xc3, 0x98, 0x5b, 0x4d, 0x8f, 0x98, 0xdb, 0xd8, 0x57, 0x71, 0x8f, 0x59, 0x8c, 0xc0, 0xd7, 0x98, 0x43, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x7, 0x0, 0x13, 0x67, 0x7, 0x20, 0x98, 0xc3, 0x98, 0x43, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb9, 0x66, 0x55, 0x8f, 0x98, 0xc3, 0x23, 0xac, 0x7, 0x0, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x2c, 0x4b, 0x6d, 0x8e, 0x30, 0xcb, 0x30, 0x4b, 0xd1, 0x8e, 0x34, 0xcb, 0x11, 0xb7, 0x1c, 0x41, 0xb7, 0x6, 0x40, 0x0, 0x98, 0x53, 0x55, 0x8f, 0x98, 0xd3, 0x93, 0x86, 0x7, 0x8, 0x98, 0x4e, 0x13, 0x67, 0x17, 0x0, 0x98, 0xce, 0x3, 0xa7, 0x87, 0x9, 0x5, 0x8b, 0x6d, 0xff, 0x98, 0x53, 0xb7, 0x6, 0xc0, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xd3, 0x93, 0x86, 0x7, 0x8, 0x98, 0x4e, 0x13, 0x67, 0x17, 0x0, 0x98, 0xce, 0x3, 0xa7, 0x87, 0x9, 0x5, 0x8b, 0x6d, 0xff, 0x82, 0x80, 0x8, 0x41, 0x37, 0x18, 0xb, 0x60, 0x13, 0x8, 0x8, 0x40, 0x13, 0x7, 0x0, 0x8, 0x63, 0x13, 0x5, 0x1, 0x41, 0x47, 0x5c, 0x4d, 0x81, 0x48, 0xc1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x63, 0x13, 0x5, 0x1, 0x8d, 0x48, 0xb3, 0xd7, 0x17, 0x41, 0xb3, 0x7, 0xf7, 0x40, 0x41, 0x67, 0x7d, 0x17, 0x33, 0xf8, 0xe7, 0x0, 0x63, 0x63, 0x6, 0x1, 0x3e, 0x86, 0x79, 0x8e, 0x90, 0xc2, 0x81, 0x47, 0x63, 0xc3, 0xc7, 0x0, 0x82, 0x80, 0x33, 0x87, 0xf5, 0x0, 0x3, 0x47, 0x7, 0x0, 0x85, 0x7, 0x18, 0xc1, 0xfd, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x37, 0x34, 0xb, 0x60, 0x26, 0xc2, 0x13, 0x4, 0x4, 0xc0, 0x6, 0xc6, 0x5c, 0x40, 0xb7, 0x6, 0x0, 0x80, 0xfd, 0x16, 0xf5, 0x8f, 0x5c, 0xc0, 0x1c, 0x40, 0x37, 0x7, 0xfc, 0xff, 0x13, 0x7, 0xf7, 0xf, 0xf9, 0x8f, 0x93, 0xe7, 0x7, 0x20, 0x1c, 0xc0, 0x3, 0x47, 0x35, 0x0, 0x1c, 0x40, 0x37, 0x6, 0xfc, 0xf, 0x5, 0x8b, 0x1a, 0x7, 0x93, 0xf7, 0xf7, 0xfb, 0xd9, 0x8f, 0x1c, 0xc0, 0x3, 0x47, 0x45, 0x0, 0x1c, 0x40, 0xaa, 0x84, 0x5, 0x8b, 0x1e, 0x7, 0x93, 0xf7, 0xf7, 0xf7, 0xd9, 0x8f, 0x1c, 0xc0, 0x1c, 0x40, 0x37, 0x7, 0x0, 0x10, 0x81, 0x45, 0xd9, 0x8f, 0x1c, 0xc0, 0x1c, 0x40, 0x37, 0x7, 0x0, 0xf0, 0x7d, 0x17, 0xf9, 0x8f, 0x1c, 0xc0, 0x1c, 0x40, 0x3, 0x47, 0x25, 0x0, 0xd1, 0x8f, 0x1c, 0xc0, 0x1c, 0x40, 0x7e, 0x7, 0x15, 0x46, 0xf5, 0x8f, 0xd9, 0x8f, 0x1c, 0xc0, 0x1c, 0x40, 0x37, 0x7, 0x0, 0x40, 0x89, 0x46, 0xd9, 0x8f, 0x1c, 0xc0, 0x83, 0x47, 0x5, 0x0, 0x1, 0x47, 0x13, 0x5, 0x10, 0x6, 0xef, 0xc0, 0x4f, 0xbc, 0x3, 0xc7, 0x14, 0x0, 0x1c, 0x40, 0xb7, 0x6, 0x0, 0xe0, 0x5, 0x8b, 0xfd, 0x16, 0x76, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0xb2, 0x40, 0x1c, 0xc0, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5c, 0x4d, 0x81, 0xcf, 0x58, 0x41, 0x1c, 0x41, 0xd9, 0x8f, 0x18, 0x45, 0x33, 0xe5, 0xe7, 0x0, 0x6d, 0x8d, 0xd, 0x8d, 0x13, 0x35, 0x15, 0x0, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x79, 0x71, 0x4a, 0xd0, 0x71, 0x46, 0x2e, 0x89, 0x81, 0x45, 0x22, 0xd4, 0x26, 0xd2, 0x6, 0xd6, 0x2a, 0x84, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x97, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa4, 0xc7, 0x5a, 0x99, 0xe4, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0x45, 0x61, 0x82, 0x80, 0xca, 0x85, 0x26, 0x85, 0xef, 0xf0, 0xff, 0xfa, 0x29, 0xc5, 0xc8, 0x4c, 0x4c, 0x0, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x94, 0x1c, 0x40, 0x12, 0x47, 0xba, 0x97, 0x1c, 0xc0, 0x22, 0x47, 0x5c, 0x40, 0xba, 0x97, 0x5c, 0xc0, 0x18, 0x44, 0xb2, 0x47, 0x63, 0xf3, 0xe7, 0x0, 0xba, 0x87, 0x42, 0x47, 0x1c, 0xc4, 0x5c, 0x44, 0xba, 0x97, 0x5c, 0xc4, 0x52, 0x47, 0x1c, 0x48, 0xba, 0x97, 0x1c, 0xc8, 0x62, 0x47, 0x5c, 0x48, 0xba, 0x97, 0x5c, 0xc8, 0x72, 0x47, 0x1c, 0x4c, 0xba, 0x97, 0x1c, 0xcc, 0x84, 0x50, 0x79, 0xbf, 0x79, 0x71, 0xaa, 0x85, 0x48, 0x0, 0x6, 0xd6, 0xef, 0xf0, 0x3f, 0xf7, 0xb2, 0x50, 0x32, 0x45, 0x45, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0xc, 0x48, 0x48, 0x45, 0x6, 0xc6, 0xb7, 0x7, 0x8, 0x0, 0x89, 0x8d, 0x63, 0xf8, 0xb7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x50, 0xe0, 0x6f, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x88, 0xb2, 0x40, 0x48, 0xcc, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0xb7, 0xb7, 0x81, 0x40, 0x22, 0xc4, 0x3, 0xa4, 0xc7, 0x5a, 0x6, 0xc6, 0x9, 0xe4, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5c, 0x4c, 0x81, 0xef, 0x22, 0x85, 0xef, 0xf0, 0xff, 0xfa, 0x48, 0x4c, 0x19, 0xc5, 0x93, 0x5, 0x44, 0x1, 0x97, 0xc0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x84, 0x0, 0x50, 0xe9, 0xbf, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x80, 0x0, 0x4e, 0xd6, 0x6a, 0xc8, 0x4a, 0xd8, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0x6e, 0xc6, 0xe9, 0x22, 0xf1, 0x2a, 0xd1, 0x47, 0x33, 0x5, 0xf5, 0x2, 0x3d, 0x5, 0x41, 0x99, 0x33, 0x1, 0xa1, 0x40, 0x8a, 0x84, 0x26, 0x85, 0xed, 0x22, 0x2a, 0x8d, 0xa6, 0x87, 0xaa, 0x89, 0x5, 0x47, 0x63, 0x6e, 0xa7, 0x5, 0x13, 0xa, 0x40, 0x2, 0x33, 0x8a, 0x49, 0x3, 0x37, 0xab, 0x81, 0x40, 0x81, 0x4d, 0x1, 0x49, 0xfd, 0x5c, 0x93, 0xb, 0x40, 0x2, 0x13, 0xb, 0xb, 0x18, 0x93, 0x7, 0xfa, 0x0, 0xc1, 0x9b, 0x33, 0x1, 0xf1, 0x40, 0x8a, 0x8a, 0x63, 0x94, 0xad, 0x7, 0x63, 0x99, 0x29, 0x7, 0x37, 0xbb, 0x81, 0x40, 0x83, 0x27, 0xcb, 0x5a, 0xbd, 0xe3, 0x5, 0x6c, 0xd6, 0x84, 0x81, 0x4b, 0x13, 0xc, 0x4c, 0x80, 0x63, 0x8d, 0x79, 0x5, 0xe2, 0x85, 0x26, 0x85, 0xef, 0xf0, 0x3f, 0xe5, 0x59, 0xed, 0x85, 0xb, 0x93, 0x84, 0x44, 0x2, 0xf5, 0xb7, 0x94, 0x43, 0xd0, 0x43, 0xc8, 0x4b, 0xb3, 0x85, 0xc6, 0x0, 0x63, 0x13, 0xb5, 0x2, 0xc8, 0x4f, 0x8c, 0x47, 0x63, 0x1f, 0xb5, 0x0, 0x3, 0xc5, 0x47, 0x2, 0x83, 0xc5, 0x7, 0x1, 0x63, 0x19, 0xb5, 0x0, 0xd4, 0xcb, 0x94, 0x4f, 0xfd, 0x55, 0x8c, 0xc7, 0xb2, 0x96, 0x94, 0xcf, 0xfd, 0x19, 0x5, 0x7, 0xd1, 0x7, 0x85, 0xbf, 0x8c, 0x44, 0x63, 0x88, 0x95, 0x5, 0x13, 0xc, 0x19, 0x0, 0x63, 0xf8, 0x89, 0x1, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x50, 0xc0, 0x5c, 0xb3, 0x7, 0x79, 0x3, 0x92, 0x5, 0x91, 0x5, 0x31, 0x46, 0xda, 0x95, 0xd6, 0x97, 0x3e, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x79, 0x94, 0x40, 0xd8, 0x40, 0x54, 0xc5, 0x36, 0x97, 0x18, 0xc9, 0x3, 0xc7, 0x4, 0x1, 0x1, 0xcf, 0x23, 0x2e, 0x5, 0x0, 0x33, 0x9, 0x79, 0x3, 0x56, 0x99, 0x23, 0x20, 0x9, 0x2, 0x62, 0x89, 0x85, 0xd, 0xd1, 0x4, 0x89, 0xb7, 0xef, 0xf0, 0xff, 0xe6, 0xed, 0xb7, 0xc8, 0x4c, 0xd2, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x72, 0x2a, 0x89, 0x39, 0xd9, 0x52, 0x86, 0xd6, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x74, 0xca, 0x84, 0x1, 0x4a, 0x25, 0xa0, 0xc8, 0x4c, 0x19, 0xc5, 0x93, 0x85, 0x44, 0x1, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x6e, 0x63, 0x1e, 0xa, 0x2, 0x83, 0x27, 0xcb, 0x5a, 0x23, 0x26, 0x2b, 0x5b, 0x23, 0x20, 0xf9, 0x2, 0x5, 0xa, 0x93, 0x84, 0x44, 0x2, 0xe3, 0x9d, 0x49, 0xfd, 0x13, 0x1, 0x4, 0xfc, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x42, 0x4d, 0xb2, 0x4d, 0x21, 0x61, 0x82, 0x80, 0x83, 0xa7, 0xc4, 0xff, 0x23, 0xae, 0x94, 0xfe, 0x9c, 0xd0, 0xe9, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x5f, 0xe5, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x9, 0xc9, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x40, 0xf0, 0x7a, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x40, 0xd0, 0x7d, 0x82, 0x80, 0x9, 0xc9, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x40, 0xb0, 0x79, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x40, 0x70, 0x7f, 0x82, 0x80, 0x17, 0xb3, 0x7f, 0xff, 0x67, 0x0, 0x83, 0x68, 0x13, 0x85, 0x1, 0x82, 0x17, 0xb3, 0x7f, 0xff, 0x67, 0x0, 0x83, 0x65, 0x8, 0x41, 0x9c, 0x41, 0x1d, 0x8d, 0x82, 0x80, 0xb7, 0xc7, 0x81, 0x40, 0x37, 0xc7, 0x81, 0x40, 0x13, 0x7, 0x47, 0x85, 0x93, 0x87, 0x47, 0x87, 0x99, 0x8f, 0x37, 0xa7, 0x81, 0x40, 0x3, 0x25, 0x47, 0x10, 0x8d, 0x87, 0x5, 0x5, 0x3e, 0x95, 0x82, 0x80, 0x5d, 0x71, 0x86, 0xc6, 0xa2, 0xc4, 0xa6, 0xc2, 0x80, 0x8, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x5a, 0xd8, 0x5e, 0xd6, 0x62, 0xd4, 0x66, 0xd2, 0xb7, 0xa7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x10, 0xd1, 0x49, 0xb7, 0xa5, 0x81, 0x40, 0xb3, 0x89, 0xf9, 0x2, 0x93, 0x85, 0x85, 0x10, 0xaa, 0x8a, 0x93, 0x87, 0xf9, 0x0, 0xc1, 0x9b, 0x33, 0x1, 0xf1, 0x40, 0xa, 0x89, 0x4e, 0x86, 0x4a, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x62, 0xb7, 0xc5, 0x81, 0x40, 0x37, 0xc6, 0x81, 0x40, 0x93, 0x87, 0x45, 0x85, 0x13, 0x6, 0x46, 0x87, 0x1d, 0x8e, 0x93, 0x7, 0x76, 0x1, 0xc1, 0x9b, 0x33, 0x1, 0xf1, 0x40, 0xb7, 0x7, 0x5, 0x40, 0x83, 0xa7, 0xc7, 0xff, 0xa, 0x8a, 0x93, 0x85, 0x45, 0x85, 0xdc, 0x43, 0x13, 0x5, 0x8a, 0x0, 0x93, 0x54, 0x36, 0x40, 0x23, 0x20, 0xfa, 0x0, 0xb7, 0x7, 0x88, 0x40, 0x23, 0x22, 0xfa, 0x0, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x5e, 0x13, 0x8b, 0x14, 0x0, 0xb7, 0x56, 0x80, 0x40, 0x21, 0x46, 0x93, 0x86, 0x46, 0xe1, 0xda, 0x85, 0x52, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x6a, 0xd2, 0x87, 0x1, 0x46, 0x63, 0x6f, 0x66, 0x3, 0xd6, 0x84, 0xca, 0x99, 0x41, 0x4c, 0x63, 0x15, 0x39, 0x7, 0x13, 0x1, 0x4, 0xfb, 0xb6, 0x40, 0x33, 0x85, 0x54, 0x41, 0xb7, 0xd7, 0xcc, 0xcc, 0x9, 0x85, 0x93, 0x87, 0xd7, 0xcc, 0x33, 0x5, 0xf5, 0x2, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x22, 0x5c, 0x92, 0x5c, 0x61, 0x61, 0x82, 0x80, 0xd8, 0x43, 0x94, 0x43, 0xd, 0x7, 0xf1, 0x9a, 0x71, 0x9b, 0x94, 0xc3, 0xd8, 0xc3, 0x63, 0x58, 0xd7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x50, 0xc0, 0x38, 0x63, 0x79, 0x96, 0x0, 0x8c, 0x47, 0xe3, 0xd7, 0xb6, 0xfe, 0x63, 0xd4, 0xe5, 0x0, 0xef, 0x50, 0xa0, 0x2f, 0x5, 0x6, 0xa1, 0x7, 0x79, 0xb7, 0x51, 0x46, 0xca, 0x85, 0x13, 0x5, 0xc4, 0xfb, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x54, 0x3, 0x25, 0x9, 0x0, 0x3, 0x26, 0x49, 0x0, 0x52, 0x88, 0xaa, 0x86, 0xb3, 0x5, 0xc5, 0x0, 0x32, 0x87, 0x1, 0x43, 0x63, 0x6b, 0x63, 0x3, 0x85, 0x4b, 0x63, 0x75, 0xec, 0x2, 0x63, 0x83, 0xb, 0x2, 0x51, 0x46, 0x93, 0x5, 0xc4, 0xfb, 0x26, 0x85, 0x93, 0x8c, 0x44, 0x1, 0x23, 0x2e, 0xd4, 0xfa, 0x23, 0x20, 0xe4, 0xfc, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x50, 0x63, 0x83, 0xb, 0x4, 0xe6, 0x84, 0x51, 0x9, 0xa6, 0x8c, 0x35, 0xa8, 0x83, 0x27, 0x48, 0x0, 0x63, 0xd0, 0xf6, 0x4, 0x83, 0x28, 0x8, 0x0, 0xe3, 0xd1, 0xb8, 0xfc, 0x63, 0xc6, 0x16, 0x1, 0x63, 0xc5, 0xb7, 0x2, 0x81, 0x4b, 0x5d, 0xbf, 0x33, 0x87, 0xd8, 0x40, 0x63, 0xd5, 0xb7, 0x2, 0x33, 0x85, 0xa7, 0x40, 0x9, 0x8e, 0x23, 0x22, 0xc9, 0x0, 0x23, 0x20, 0xf9, 0x0, 0xa6, 0x8c, 0x81, 0x4b, 0xe3, 0x61, 0xec, 0xfa, 0xe6, 0x84, 0x1, 0xb7, 0x33, 0x87, 0xf5, 0x40, 0xbe, 0x86, 0x5, 0x3, 0x21, 0x8, 0x49, 0xb7, 0xc6, 0x85, 0xe5, 0xbf, 0x13, 0x10, 0xf0, 0x1, 0x73, 0x0, 0x10, 0x0, 0x13, 0x50, 0x70, 0x40, 0x82, 0x80, 0xb7, 0x27, 0xc, 0x60, 0x93, 0x87, 0x47, 0x7, 0x9c, 0x43, 0x89, 0x8b, 0x81, 0xcb, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x47, 0x11, 0x9c, 0x43, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0x0, 0x50, 0x10, 0x82, 0x80, 0xb7, 0x27, 0xc, 0x60, 0x93, 0x87, 0x47, 0x7, 0x9c, 0x43, 0x89, 0x8b, 0x85, 0xc7, 0x1, 0x11, 0x85, 0x47, 0x2a, 0xc4, 0x2e, 0xc6, 0x13, 0x5, 0x30, 0x10, 0x4c, 0x0, 0x6, 0xce, 0x3e, 0xc2, 0xef, 0xf0, 0x1f, 0xfb, 0x11, 0xe5, 0x13, 0x5, 0x80, 0x10, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x1, 0x45, 0xe5, 0xbf, 0x73, 0x10, 0x5, 0x7a, 0x93, 0x7, 0x80, 0x8, 0x73, 0x90, 0x57, 0x7a, 0x93, 0x7, 0xc0, 0x4, 0x73, 0x90, 0x17, 0x7a, 0x73, 0x90, 0x25, 0x7a, 0x1, 0x45, 0x82, 0x80, 0xb7, 0x47, 0x0, 0x50, 0x93, 0x87, 0x87, 0xfe, 0x13, 0x87, 0x47, 0x1, 0x1, 0x45, 0x93, 0x16, 0x55, 0x0, 0x33, 0x85, 0xa6, 0x40, 0x94, 0x43, 0x91, 0x7, 0x35, 0x8d, 0xe3, 0x99, 0xe7, 0xfe, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0xef, 0x40, 0x30, 0x4d, 0xef, 0x40, 0x50, 0x50, 0xb7, 0x17, 0xb, 0x60, 0xc0, 0x43, 0xb7, 0x49, 0x0, 0x50, 0x93, 0x84, 0x89, 0xfe, 0x11, 0xc8, 0x83, 0xc7, 0x81, 0x82, 0x99, 0xcf, 0x3, 0xaa, 0x44, 0x1, 0xef, 0xf0, 0xff, 0xfa, 0x63, 0xa, 0xaa, 0x0, 0x61, 0x46, 0x81, 0x45, 0x13, 0x85, 0x89, 0xfe, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x3b, 0x23, 0x84, 0x1, 0x82, 0xef, 0x10, 0x50, 0x4b, 0x9c, 0x44, 0xd0, 0x44, 0x3, 0xa9, 0x4, 0x0, 0xb3, 0x7, 0xf5, 0x40, 0x33, 0x86, 0xc5, 0x40, 0x33, 0x37, 0xf5, 0x0, 0x19, 0x8e, 0x33, 0x87, 0x87, 0x2, 0xcc, 0xc4, 0x88, 0xc4, 0xb3, 0xb7, 0x87, 0x2, 0x4d, 0x83, 0x93, 0x96, 0xd7, 0x0, 0x55, 0x8f, 0x93, 0xd6, 0x37, 0x1, 0xb3, 0x7, 0x86, 0x2, 0x33, 0x36, 0x86, 0x2, 0x13, 0xd8, 0x37, 0x1, 0xb6, 0x7, 0xba, 0x97, 0x33, 0xb7, 0xe7, 0x0, 0x3e, 0x99, 0xb3, 0x37, 0xf9, 0x0, 0x23, 0xa0, 0x24, 0x1, 0x36, 0x6, 0x33, 0x66, 0xc8, 0x0, 0xb2, 0x96, 0x36, 0x97, 0xd4, 0x40, 0x36, 0x97, 0x33, 0x84, 0xe7, 0x0, 0xc0, 0xc0, 0xef, 0xf0, 0xff, 0xf2, 0xc8, 0xc8, 0xef, 0x40, 0xb0, 0x42, 0xef, 0x40, 0xb0, 0x48, 0xf2, 0x40, 0xa2, 0x85, 0x62, 0x44, 0xd2, 0x44, 0xb2, 0x49, 0x22, 0x4a, 0x4a, 0x85, 0x42, 0x49, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xf0, 0x7f, 0xf2, 0xb7, 0x17, 0xb, 0x60, 0xb2, 0x40, 0xc0, 0xc3, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x26, 0xd2, 0x4, 0x41, 0x22, 0xd4, 0x4a, 0xd0, 0xc5, 0x80, 0xfd, 0x88, 0x4e, 0xce, 0x2a, 0x89, 0x2e, 0x84, 0xb2, 0x89, 0xa6, 0x85, 0x50, 0x0, 0x1, 0x45, 0x6, 0xd6, 0xef, 0x10, 0x10, 0x57, 0xb2, 0x47, 0x13, 0xf7, 0x27, 0x0, 0x3d, 0xe3, 0x85, 0x8b, 0x81, 0xc7, 0xfd, 0x57, 0x63, 0x8f, 0xf9, 0x4, 0x83, 0x17, 0x9, 0x0, 0x13, 0xf7, 0x17, 0x0, 0x29, 0xeb, 0x13, 0xf7, 0xc7, 0x0, 0xb1, 0x46, 0x63, 0x18, 0xd7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x50, 0xa0, 0xe, 0x13, 0xf7, 0x87, 0x0, 0x1, 0x45, 0x19, 0xef, 0x13, 0xf7, 0x47, 0x0, 0x1d, 0xc3, 0x13, 0x77, 0x4, 0x10, 0x9, 0xcb, 0x13, 0x55, 0xa4, 0x0, 0x85, 0x83, 0x5, 0x89, 0x85, 0x8b, 0x1d, 0x8d, 0x13, 0x35, 0x15, 0x0, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x26, 0x85, 0xef, 0x80, 0x40, 0x33, 0xe5, 0xb7, 0x1, 0x45, 0xe5, 0xb7, 0xb7, 0xb7, 0x81, 0x40, 0x2a, 0x87, 0x3, 0xa5, 0xc7, 0x5b, 0x11, 0xe1, 0x82, 0x80, 0x1c, 0x41, 0x93, 0x96, 0xf7, 0x0, 0x63, 0xc6, 0x6, 0x0, 0xc5, 0x83, 0xfd, 0x8b, 0xe3, 0x88, 0xe7, 0xfe, 0x8, 0x45, 0xe5, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0xaa, 0x84, 0xef, 0xf0, 0x1f, 0xfd, 0x2a, 0x89, 0x2a, 0x84, 0x31, 0xe5, 0x85, 0x65, 0x93, 0x85, 0x45, 0x80, 0x31, 0x45, 0xef, 0xb0, 0xef, 0xd4, 0x2a, 0x84, 0x15, 0xcd, 0x31, 0x46, 0x81, 0x45, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x23, 0x1c, 0x40, 0x37, 0x7, 0xc2, 0xff, 0x13, 0xf5, 0xf4, 0x1, 0x7d, 0x17, 0x93, 0x14, 0x15, 0x1, 0xf9, 0x8f, 0xc5, 0x8f, 0x1c, 0xc0, 0x37, 0xb6, 0x81, 0x40, 0x83, 0x25, 0xc6, 0x5b, 0xae, 0x87, 0x91, 0xef, 0x99, 0xc1, 0x63, 0x1e, 0x9, 0x2, 0x1c, 0xc4, 0x23, 0x2e, 0x86, 0x5a, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x98, 0x43, 0x93, 0x16, 0xf7, 0x0, 0xe3, 0xc0, 0x6, 0xfe, 0x14, 0x40, 0xb9, 0x8e, 0x13, 0x98, 0xf6, 0x0, 0x63, 0x46, 0x8, 0x0, 0x45, 0x83, 0x7d, 0x8b, 0xe3, 0x76, 0xa7, 0xfc, 0x3e, 0x89, 0x9c, 0x47, 0xc9, 0xb7, 0x23, 0x24, 0x89, 0x0, 0x1c, 0xc4, 0xe1, 0xb7, 0x37, 0x7, 0x80, 0xbf, 0x2a, 0x97, 0xb7, 0x6, 0x8, 0x0, 0xaa, 0x87, 0x63, 0x61, 0xd7, 0x2, 0x37, 0x7, 0x0, 0xb0, 0x2a, 0x97, 0x91, 0x66, 0x5, 0x45, 0x63, 0x6b, 0xd7, 0x0, 0x37, 0x7, 0x0, 0xc0, 0xba, 0x97, 0x37, 0x5, 0x5, 0x0, 0x33, 0xb5, 0xa7, 0x0, 0x82, 0x80, 0x5, 0x45, 0x82, 0x80, 0x59, 0x71, 0xda, 0xc8, 0x3e, 0xc2, 0x3a, 0x8b, 0x86, 0xd6, 0xa2, 0xd4, 0xa6, 0xd2, 0xca, 0xd0, 0xce, 0xce, 0xd2, 0xcc, 0xd6, 0xca, 0xde, 0xc6, 0xe2, 0xc4, 0xe6, 0xc2, 0xea, 0xc0, 0x6e, 0xde, 0x42, 0xc4, 0x13, 0xf7, 0x5, 0x30, 0x93, 0x7, 0x0, 0x30, 0x63, 0x8, 0xf7, 0x3a, 0x93, 0xf7, 0x5, 0xf, 0xaa, 0x89, 0xae, 0x84, 0x32, 0x8d, 0xb6, 0x8c, 0x99, 0xc3, 0x63, 0x1f, 0xb, 0x38, 0x13, 0xf4, 0x4, 0x10, 0x9, 0xc4, 0x63, 0xa, 0xb, 0x38, 0x63, 0xc8, 0x9, 0x38, 0x63, 0x4, 0xd, 0x0, 0x63, 0x84, 0xc, 0x38, 0x93, 0xf7, 0x4, 0x40, 0x81, 0xcb, 0x63, 0x7, 0xb, 0x0, 0x5a, 0x85, 0xef, 0xf0, 0xdf, 0xf6, 0x63, 0xa, 0x5, 0x36, 0x93, 0xf7, 0xe4, 0xf, 0x81, 0xe7, 0x59, 0xc8, 0x93, 0xe4, 0x24, 0x0, 0xfd, 0x57, 0x19, 0x44, 0x63, 0x87, 0xf9, 0x2, 0xf9, 0x57, 0x3d, 0x44, 0x63, 0x83, 0xf9, 0x2, 0xf5, 0x57, 0x41, 0x44, 0x63, 0x8f, 0xf9, 0x0, 0xf1, 0x57, 0x1d, 0x44, 0x63, 0x8b, 0xf9, 0x0, 0xed, 0x57, 0x75, 0x44, 0x63, 0x87, 0xf9, 0x0, 0xe9, 0x57, 0x2d, 0x44, 0x63, 0x83, 0xf9, 0x0, 0x7d, 0x54, 0x85, 0x65, 0x93, 0x85, 0x45, 0x80, 0x21, 0x45, 0xef, 0xb0, 0xf, 0xbf, 0x2a, 0x8a, 0x55, 0xc5, 0xef, 0x40, 0x10, 0x1f, 0x93, 0xf7, 0xe4, 0xf, 0x2, 0xcc, 0x2, 0xce, 0x2, 0xd0, 0x26, 0xc0, 0x81, 0xe7, 0x93, 0xe7, 0xe4, 0x0, 0x3e, 0xc0, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xaa, 0xc7, 0x5b, 0x63, 0x9a, 0xa, 0x2, 0xfd, 0x57, 0x63, 0xc, 0xf4, 0xa, 0x22, 0x85, 0xef, 0xf0, 0xdf, 0xe2, 0xaa, 0x8a, 0x39, 0xe5, 0xe2, 0x47, 0xb7, 0x6, 0xc2, 0xff, 0x13, 0x77, 0xf4, 0x1, 0xfd, 0x16, 0x46, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0x3e, 0xcc, 0x93, 0xa, 0x81, 0x1, 0x15, 0xa8, 0x93, 0xe4, 0xe4, 0x0, 0xb5, 0xb7, 0x3, 0xd7, 0xa, 0x0, 0x83, 0xa7, 0xa, 0x0, 0x11, 0x8b, 0x29, 0xeb, 0x13, 0x97, 0x27, 0x0, 0x61, 0x87, 0x63, 0x99, 0xe9, 0x6, 0x13, 0x97, 0xf7, 0x0, 0x63, 0x45, 0x7, 0x6, 0x7d, 0x57, 0x63, 0x6, 0xe4, 0x0, 0xc5, 0x83, 0xfd, 0x8b, 0x63, 0x1f, 0xf4, 0xc, 0x82, 0x45, 0x22, 0x86, 0x56, 0x85, 0xef, 0xf0, 0x1f, 0xd4, 0x61, 0xc9, 0x3, 0xa4, 0xa, 0x0, 0x45, 0x80, 0x7d, 0x88, 0x22, 0x85, 0xef, 0xf0, 0x7f, 0xde, 0x2a, 0x89, 0x63, 0x14, 0x5, 0x10, 0xef, 0x40, 0xf0, 0x17, 0x52, 0x85, 0xef, 0x40, 0xb0, 0x6a, 0x13, 0x5, 0x10, 0x10, 0x6d, 0xa8, 0x13, 0x97, 0xf7, 0x0, 0x63, 0x42, 0x7, 0x2, 0x3, 0xa7, 0x4a, 0x0, 0x19, 0xe7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x40, 0xb0, 0x63, 0x14, 0x43, 0xde, 0x6, 0xe1, 0x86, 0xe3, 0x81, 0xd9, 0xfa, 0x58, 0x4b, 0x75, 0xfb, 0x83, 0xaa, 0x8a, 0x0, 0x91, 0xb7, 0x82, 0x47, 0x37, 0x8, 0x0, 0x80, 0x37, 0x9, 0xc2, 0xff, 0x93, 0xf7, 0x7, 0x10, 0x25, 0x4c, 0x93, 0xd, 0xf8, 0xff, 0x81, 0x4a, 0x7d, 0x19, 0x3e, 0xc6, 0x56, 0x85, 0xef, 0xf0, 0xff, 0xd5, 0xaa, 0x8b, 0x19, 0xe9, 0xe2, 0x46, 0x13, 0xf6, 0xfa, 0x1, 0x46, 0x6, 0xb3, 0xf6, 0x26, 0x1, 0xd1, 0x8e, 0x36, 0xcc, 0x93, 0xb, 0x81, 0x1, 0x50, 0x10, 0xd6, 0x85, 0x1, 0x45, 0xef, 0x10, 0x90, 0x23, 0x82, 0x45, 0x7d, 0x56, 0x5e, 0x85, 0xef, 0xf0, 0x1f, 0xca, 0x5, 0xc1, 0xb2, 0x47, 0xb5, 0xc3, 0x3, 0xd6, 0xb, 0x0, 0x11, 0x8a, 0x39, 0xca, 0x3, 0xa6, 0x4b, 0x0, 0x81, 0x46, 0x21, 0xe6, 0x12, 0x56, 0x63, 0xcd, 0xb6, 0x5, 0x63, 0x4b, 0x86, 0x5, 0x85, 0xa, 0x93, 0x7, 0x0, 0x2, 0xe3, 0x94, 0xfa, 0xfa, 0xfd, 0x57, 0xe3, 0x1f, 0xf4, 0xf2, 0xef, 0x40, 0x50, 0xc, 0x52, 0x85, 0xef, 0x40, 0x10, 0x5f, 0x13, 0x5, 0x50, 0x10, 0xb6, 0x50, 0x26, 0x54, 0x96, 0x54, 0x6, 0x59, 0xf6, 0x49, 0x66, 0x4a, 0xd6, 0x4a, 0x46, 0x4b, 0xb6, 0x4b, 0x26, 0x4c, 0x96, 0x4c, 0x6, 0x4d, 0xf2, 0x5d, 0x65, 0x61, 0x82, 0x80, 0x50, 0x4a, 0x85, 0x6, 0x55, 0xbf, 0xfd, 0x56, 0xe3, 0x1e, 0xd4, 0xfa, 0x92, 0x56, 0xe3, 0xdb, 0x86, 0xfb, 0x36, 0x8c, 0x19, 0xa0, 0xb6, 0x8d, 0x32, 0x8c, 0x56, 0x84, 0x65, 0xb7, 0x93, 0xf7, 0x4, 0x10, 0x63, 0x81, 0x7, 0x12, 0x85, 0x65, 0x93, 0x85, 0x45, 0x80, 0x61, 0x45, 0xef, 0xb0, 0x4f, 0xa3, 0xaa, 0x8a, 0xe3, 0x3, 0x5, 0xee, 0x61, 0x46, 0x81, 0x45, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xf1, 0x92, 0x47, 0x13, 0xf7, 0xf9, 0xf, 0x6, 0x7, 0x23, 0xa8, 0xfa, 0x0, 0x83, 0x27, 0x49, 0x0, 0x23, 0xa2, 0xaa, 0x1, 0x23, 0xa4, 0x9a, 0x1, 0x23, 0xaa, 0xfa, 0x0, 0x83, 0xd7, 0xa, 0x0, 0x23, 0xa6, 0x6a, 0x1, 0x93, 0xf7, 0x17, 0xe0, 0xd9, 0x8f, 0x23, 0x90, 0xfa, 0x0, 0x83, 0x57, 0x9, 0x0, 0x23, 0x22, 0x59, 0x1, 0x93, 0xe7, 0x47, 0x0, 0x23, 0x10, 0xf9, 0x0, 0xfd, 0x47, 0xe3, 0xea, 0x87, 0xea, 0xb7, 0x15, 0x80, 0x40, 0x4a, 0x86, 0x93, 0x85, 0x25, 0xbd, 0x22, 0x85, 0xef, 0x70, 0xd0, 0x74, 0x37, 0xb6, 0x81, 0x40, 0x85, 0x47, 0x93, 0xf5, 0x4, 0x40, 0x83, 0x16, 0x9, 0x0, 0x3, 0x27, 0x86, 0x5b, 0xb3, 0x97, 0x87, 0x0, 0xe5, 0xc1, 0x93, 0xc7, 0xf7, 0xff, 0x93, 0xe6, 0x26, 0x0, 0xf9, 0x8f, 0x23, 0x10, 0xd9, 0x0, 0x23, 0x2c, 0xf6, 0x5a, 0x63, 0xc9, 0x9, 0x0, 0x22, 0x86, 0xce, 0x85, 0x1, 0x45, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x10, 0x83, 0x27, 0x49, 0x0, 0x23, 0x20, 0x2a, 0x1, 0x22, 0x85, 0x23, 0x22, 0xfa, 0x0, 0xef, 0xb0, 0x6f, 0xe8, 0x93, 0x97, 0x44, 0x1, 0x63, 0xd5, 0x7, 0x0, 0x52, 0x85, 0xef, 0xb0, 0xcf, 0xf3, 0x13, 0xd5, 0x14, 0x40, 0x13, 0x75, 0xf5, 0x7, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x2a, 0xfd, 0x47, 0xaa, 0x85, 0xe3, 0xe8, 0x87, 0xe2, 0x22, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xb, 0x93, 0xf4, 0x4, 0x20, 0x85, 0x45, 0x91, 0xe0, 0x81, 0x45, 0x22, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xa, 0x85, 0x47, 0xb3, 0x97, 0x87, 0x0, 0xf3, 0xb7, 0x37, 0x30, 0xef, 0x40, 0x40, 0x76, 0xa2, 0x47, 0xa9, 0xcf, 0x23, 0xa0, 0x47, 0x1, 0x1, 0x45, 0x45, 0xb5, 0xa1, 0x47, 0x23, 0x10, 0xf5, 0x0, 0x63, 0xa, 0xb, 0x0, 0xfd, 0x47, 0xe3, 0xe4, 0x87, 0xde, 0x12, 0x46, 0xda, 0x85, 0x22, 0x85, 0xef, 0x70, 0x70, 0x68, 0x93, 0xf7, 0x4, 0x20, 0x89, 0xcb, 0xfd, 0x47, 0xe3, 0xe9, 0x87, 0xdc, 0xb7, 0x17, 0x0, 0x20, 0x98, 0x47, 0x41, 0x8f, 0x98, 0xc7, 0x83, 0x27, 0x9, 0x0, 0xb7, 0x6, 0x40, 0xc0, 0x13, 0xf7, 0xf9, 0xf, 0xfd, 0x16, 0x5a, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0x23, 0x20, 0xf9, 0x0, 0x31, 0xb7, 0xf5, 0x9a, 0xd9, 0x8f, 0x25, 0xb7, 0x52, 0x85, 0xef, 0x40, 0x50, 0x43, 0x5d, 0xb7, 0x13, 0x5, 0x20, 0x10, 0x89, 0xb5, 0xb6, 0x87, 0x3a, 0x88, 0x81, 0x46, 0x32, 0x87, 0x1, 0x46, 0x6f, 0xf0, 0x7f, 0xc1, 0x1, 0x11, 0x4a, 0xc8, 0x37, 0x9, 0x0, 0x80, 0x22, 0xcc, 0x26, 0xca, 0x4e, 0xc6, 0x6, 0xce, 0x1, 0x44, 0x7d, 0x19, 0x81, 0x49, 0xfd, 0x44, 0x22, 0x86, 0x4a, 0x85, 0xce, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x22, 0x5, 0x89, 0x9, 0xc9, 0x81, 0x45, 0x22, 0x85, 0xef, 0x80, 0x80, 0x4, 0x8d, 0x45, 0x22, 0x85, 0xef, 0x80, 0xe0, 0xa, 0x5, 0x4, 0xe3, 0x1e, 0x94, 0xfc, 0xd, 0x45, 0xef, 0x80, 0x70, 0x51, 0x2a, 0x86, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x1f, 0x5, 0x89, 0x9, 0xcd, 0xd, 0x45, 0xef, 0x80, 0xb0, 0x4f, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x81, 0x45, 0x5, 0x61, 0x6f, 0x80, 0x40, 0x7, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x52, 0xc6, 0x37, 0xa, 0x0, 0x80, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x56, 0xc4, 0x6, 0xce, 0xaa, 0x84, 0x1, 0x44, 0x7d, 0x1a, 0x81, 0x4a, 0x7d, 0x49, 0x22, 0x86, 0x52, 0x85, 0xd6, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x1a, 0x5, 0x89, 0x9, 0xc5, 0x22, 0x85, 0x91, 0xcc, 0xef, 0x80, 0xc0, 0xa, 0x5, 0x4, 0xe3, 0x12, 0x24, 0xff, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0x32, 0x4a, 0xa2, 0x4a, 0x5, 0x61, 0x82, 0x80, 0xef, 0x80, 0x40, 0xe, 0xdd, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x9f, 0xf2, 0x5, 0x45, 0xef, 0xf0, 0x5f, 0xfa, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x37, 0x14, 0xb, 0x60, 0x13, 0x7, 0x4, 0x0, 0x3c, 0x43, 0x37, 0x86, 0x80, 0xff, 0x7d, 0x16, 0x3e, 0xc6, 0xb2, 0x47, 0x34, 0x43, 0x4e, 0xce, 0x6, 0xd6, 0x36, 0xc4, 0xa2, 0x46, 0x26, 0xd2, 0x4a, 0xd0, 0xf1, 0x8e, 0x36, 0xc4, 0xa2, 0x46, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0xbd, 0x83, 0x34, 0xc3, 0x93, 0xf7, 0xf7, 0xf, 0x37, 0xa7, 0x81, 0x40, 0x13, 0x4, 0x4, 0x0, 0x93, 0x9, 0x47, 0x7b, 0x85, 0xef, 0x37, 0x29, 0xb, 0x60, 0x37, 0xaa, 0x81, 0x40, 0x93, 0x4, 0xf0, 0xf, 0x1d, 0x4b, 0x13, 0x9, 0x9, 0x0, 0x13, 0xa, 0xca, 0x6b, 0x85, 0x4a, 0x26, 0x85, 0x97, 0xb0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xa, 0x7d, 0x15, 0x93, 0x16, 0x25, 0x0, 0xb3, 0x87, 0xd9, 0x0, 0x9c, 0x43, 0x63, 0x7b, 0xfb, 0x2, 0xef, 0x40, 0x70, 0x1e, 0x13, 0x7, 0x47, 0x7b, 0x93, 0x85, 0x89, 0x7, 0x5, 0x45, 0x14, 0x43, 0x33, 0xd6, 0xd7, 0x0, 0x5, 0x8a, 0x9, 0xca, 0x50, 0x54, 0xb3, 0x16, 0xd5, 0x0, 0x93, 0xc6, 0xf6, 0xff, 0x75, 0x8e, 0x50, 0xd4, 0xf5, 0x8f, 0xe3, 0x3, 0xb7, 0xfa, 0x11, 0x7, 0xe5, 0xf3, 0x79, 0xbf, 0xa1, 0x7, 0x8a, 0x7, 0xca, 0x97, 0x98, 0x47, 0x29, 0x83, 0x5, 0x8b, 0x5, 0xc3, 0x98, 0x47, 0xd2, 0x96, 0x13, 0x77, 0xf7, 0xbf, 0x98, 0xc7, 0x98, 0x47, 0x13, 0x77, 0xf7, 0xc7, 0x98, 0xc7, 0x9c, 0x42, 0x58, 0x54, 0x93, 0xc7, 0xf7, 0xff, 0xf9, 0x8f, 0x5c, 0xd4, 0x33, 0x95, 0xaa, 0x0, 0x13, 0x45, 0xf5, 0xff, 0xe9, 0x8c, 0xbd, 0xfc, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0x45, 0x61, 0x82, 0x80, 0x13, 0x7, 0xf5, 0xff, 0x89, 0x47, 0x63, 0xfa, 0xe7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x40, 0x30, 0x1d, 0xb7, 0x57, 0x9, 0x60, 0x98, 0x47, 0x13, 0x67, 0x47, 0x0, 0x98, 0xc7, 0x98, 0x47, 0x71, 0x9b, 0x59, 0x8d, 0x88, 0xc7, 0x82, 0x80, 0x5, 0x45, 0x6f, 0xf0, 0xff, 0xfc, 0x82, 0x80, 0xa5, 0x47, 0x63, 0xe3, 0xa7, 0x6, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0x4a, 0xc0, 0x89, 0x47, 0x2a, 0x84, 0xae, 0x84, 0x13, 0x5, 0x20, 0x10, 0x63, 0xe1, 0xb7, 0x4, 0xef, 0x40, 0xc0, 0x44, 0xef, 0xb0, 0x4f, 0xf6, 0xef, 0x40, 0xa0, 0x47, 0xef, 0xb0, 0xcf, 0xf5, 0x8, 0x41, 0xa2, 0x85, 0xef, 0xd0, 0x8f, 0xec, 0x2a, 0x89, 0xef, 0xb0, 0xef, 0xf4, 0x8, 0x41, 0x5, 0x46, 0x33, 0x16, 0x96, 0x0, 0x33, 0x66, 0x26, 0x1, 0xa2, 0x85, 0xef, 0xd0, 0xef, 0xde, 0xef, 0x40, 0xc0, 0x41, 0xef, 0xb0, 0x4f, 0xf3, 0xef, 0x40, 0x80, 0x47, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xb0, 0x4f, 0xf1, 0x8, 0x41, 0xef, 0xb0, 0x0, 0x63, 0xef, 0xb0, 0xaf, 0xf0, 0x8, 0x41, 0xef, 0xb0, 0xa0, 0x4d, 0xef, 0xb0, 0xf, 0xf0, 0xb2, 0x40, 0x8, 0x41, 0x41, 0x1, 0x6f, 0xb0, 0x20, 0x57, 0x1, 0x11, 0x4a, 0xc8, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4e, 0xc6, 0x13, 0x9, 0xf5, 0xfd, 0x9d, 0x47, 0x63, 0xf8, 0x27, 0x1, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x40, 0xf0, 0xf, 0xae, 0x84, 0x32, 0x84, 0xaa, 0x89, 0xef, 0x40, 0xe0, 0x3a, 0xef, 0xb0, 0x6f, 0xec, 0xef, 0x40, 0xc0, 0x3d, 0x93, 0x7, 0x20, 0x2, 0x63, 0x84, 0xf9, 0xc, 0x93, 0x7, 0x40, 0x2, 0x63, 0x8b, 0xf9, 0x10, 0x93, 0x7, 0x10, 0x2, 0x63, 0x9f, 0xf9, 0x2, 0xef, 0xb0, 0x6f, 0xea, 0x8, 0x41, 0x52, 0x4, 0x41, 0x80, 0xef, 0xb0, 0xe0, 0x5b, 0xef, 0xb0, 0x8f, 0xe9, 0x8, 0x41, 0xa6, 0x85, 0xef, 0xb0, 0xe0, 0x5c, 0xef, 0xb0, 0xcf, 0xe8, 0x1c, 0x41, 0x41, 0x77, 0x3d, 0x7, 0xd4, 0x43, 0xdc, 0x46, 0xf9, 0x8f, 0xc1, 0x8f, 0xdc, 0xc6, 0xef, 0xb0, 0x8f, 0xe7, 0x8, 0x41, 0x85, 0x45, 0xef, 0xb0, 0x80, 0x63, 0x13, 0x4, 0x89, 0x1, 0xef, 0xb0, 0x8f, 0xe6, 0xa, 0x4, 0x22, 0x95, 0x3, 0x29, 0x45, 0x0, 0xef, 0xb0, 0xcf, 0xe5, 0x22, 0x95, 0x44, 0xc1, 0xef, 0x40, 0x80, 0x33, 0xef, 0xb0, 0xf, 0xe5, 0xef, 0x40, 0x40, 0x39, 0x8d, 0x47, 0xd, 0x45, 0x63, 0xd, 0xf9, 0x0, 0x63, 0xcb, 0x27, 0xd, 0x85, 0x47, 0x11, 0x45, 0x63, 0x7, 0xf9, 0x0, 0x89, 0x47, 0x25, 0x45, 0x63, 0x13, 0xf9, 0x0, 0x5, 0x45, 0x8d, 0x47, 0xd, 0x44, 0x63, 0x8d, 0xf4, 0x0, 0x63, 0xc2, 0x97, 0xc, 0x85, 0x47, 0x11, 0x44, 0x63, 0x87, 0xf4, 0x0, 0x89, 0x47, 0x25, 0x44, 0x63, 0x93, 0xf4, 0x0, 0x5, 0x44, 0x81, 0x45, 0xef, 0x10, 0x0, 0x56, 0x22, 0x85, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x85, 0x45, 0x5, 0x61, 0x6f, 0x10, 0xc0, 0x54, 0xef, 0xb0, 0x2f, 0xdf, 0x8, 0x41, 0xef, 0xb0, 0x20, 0x3c, 0xef, 0xb0, 0x8f, 0xde, 0x8, 0x41, 0xa6, 0x85, 0xef, 0xb0, 0x20, 0x3d, 0xef, 0xb0, 0xcf, 0xdd, 0x8, 0x41, 0xa2, 0x85, 0xef, 0xb0, 0x60, 0x38, 0xef, 0xb0, 0xf, 0xdd, 0x8, 0x41, 0x85, 0x45, 0xef, 0xb0, 0xe0, 0x38, 0xef, 0xd0, 0xcf, 0xbe, 0x31, 0xd9, 0x89, 0x47, 0xe3, 0x98, 0xf4, 0xf4, 0x5, 0x45, 0xef, 0x0, 0xb0, 0x63, 0xef, 0xb0, 0x2f, 0xdb, 0x8, 0x41, 0x85, 0x45, 0xef, 0xb0, 0x20, 0x57, 0x81, 0x45, 0x25, 0x45, 0xef, 0xf0, 0xdf, 0xe1, 0xd, 0xbf, 0xef, 0xb0, 0xcf, 0xd9, 0x8, 0x41, 0xef, 0xb0, 0x20, 0x41, 0xef, 0xb0, 0x2f, 0xd9, 0x8, 0x41, 0xa6, 0x85, 0xef, 0xb0, 0x20, 0x42, 0xef, 0xb0, 0x6f, 0xd8, 0x1c, 0x41, 0xc1, 0x76, 0xbd, 0x6, 0xd0, 0x43, 0x93, 0x17, 0x44, 0x1, 0xc1, 0x83, 0x18, 0x46, 0x75, 0x8f, 0xd9, 0x8f, 0x1c, 0xc6, 0x1, 0xb7, 0x91, 0x47, 0x25, 0x45, 0xe3, 0x1e, 0xf9, 0xf2, 0x9, 0x45, 0x1d, 0xbf, 0x91, 0x47, 0x25, 0x44, 0xe3, 0x97, 0xf4, 0xf4, 0x9, 0x44, 0xa1, 0xb7, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xc, 0x98, 0x43, 0x13, 0x67, 0x17, 0x0, 0x98, 0xc3, 0x98, 0x43, 0x13, 0x67, 0x7, 0x3, 0x98, 0xc3, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa2, 0x7, 0x5c, 0x82, 0x80, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x10, 0xd8, 0x4f, 0x41, 0x11, 0xb7, 0x6, 0xfd, 0xff, 0x3a, 0xc6, 0x32, 0x47, 0xfd, 0x16, 0x51, 0x45, 0x13, 0x77, 0x7, 0xf0, 0x3a, 0xc6, 0x32, 0x47, 0xd8, 0xcf, 0x98, 0x4f, 0x3a, 0xc4, 0x22, 0x47, 0x13, 0x77, 0x7, 0xf0, 0x3a, 0xc4, 0x22, 0x47, 0x98, 0xcf, 0x98, 0x4b, 0x75, 0x8f, 0xb7, 0x6, 0x2, 0x0, 0x55, 0x8f, 0x98, 0xcb, 0x41, 0x1, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0x3, 0x49, 0x1, 0x11, 0x6, 0xce, 0x89, 0xc5, 0x93, 0x86, 0xf5, 0xff, 0xf5, 0x8d, 0x99, 0xc1, 0xef, 0x40, 0x40, 0x68, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x10, 0xd8, 0x4f, 0x93, 0xf6, 0xf6, 0xf, 0x3a, 0xc6, 0x32, 0x47, 0x13, 0x77, 0x7, 0xf0, 0x55, 0x8f, 0x3a, 0xc6, 0x32, 0x47, 0xd8, 0xcf, 0x98, 0x4f, 0x3a, 0xc4, 0x22, 0x47, 0x13, 0x77, 0x7, 0xf0, 0x55, 0x8f, 0x3a, 0xc4, 0x22, 0x47, 0xb7, 0x6, 0xfd, 0xff, 0xfd, 0x16, 0x98, 0xcf, 0x98, 0x4b, 0x75, 0x8f, 0x98, 0xcb, 0xf2, 0x40, 0x5, 0x61, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0x63, 0x43, 0x93, 0x7, 0x0, 0x1e, 0xb3, 0xc7, 0xa7, 0x2, 0x1, 0x11, 0x6, 0xce, 0x25, 0x47, 0x93, 0x86, 0xd7, 0xff, 0x63, 0x68, 0xd7, 0x0, 0x13, 0x7, 0x40, 0xdf, 0x33, 0x57, 0xd7, 0x40, 0x5, 0x8b, 0x19, 0xc3, 0xef, 0x40, 0x60, 0x61, 0xb7, 0x66, 0x9, 0x60, 0x93, 0x86, 0x6, 0x10, 0x98, 0x4e, 0xc1, 0x75, 0x93, 0x85, 0xf5, 0xf, 0x3a, 0xc6, 0xd, 0x47, 0x33, 0xd7, 0xe7, 0x2, 0x32, 0x46, 0xf1, 0x17, 0x93, 0xb7, 0x17, 0x0, 0x6d, 0x8e, 0xc2, 0x7, 0x7d, 0x17, 0x13, 0x77, 0xf7, 0xf, 0x22, 0x7, 0x51, 0x8f, 0x3a, 0xc6, 0x32, 0x47, 0x41, 0x76, 0x7d, 0x16, 0x98, 0xce, 0x98, 0x4e, 0x71, 0x8f, 0xd9, 0x8f, 0x9c, 0xce, 0x9c, 0x4a, 0x37, 0x7, 0xfd, 0xff, 0x7d, 0x17, 0xf9, 0x8f, 0x41, 0x67, 0xd9, 0x8f, 0x9c, 0xca, 0xf2, 0x40, 0x5, 0x61, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0x43, 0x3b, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0xd8, 0x57, 0xb7, 0x6, 0x0, 0x60, 0xe, 0x7, 0xd, 0x83, 0x55, 0x8f, 0xd8, 0xd7, 0xd8, 0x57, 0xb7, 0x6, 0x40, 0xfe, 0xfd, 0x16, 0x75, 0x8f, 0xb7, 0x6, 0xc0, 0x0, 0x55, 0x8f, 0xd8, 0xd7, 0xd8, 0x57, 0xb7, 0x6, 0x0, 0xf2, 0xfd, 0x16, 0x75, 0x8f, 0xb7, 0x6, 0x0, 0x6, 0x55, 0x8f, 0xd8, 0xd7, 0xd8, 0x57, 0xb7, 0x6, 0x0, 0x10, 0x55, 0x8f, 0xd8, 0xd7, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xa, 0x98, 0x43, 0x55, 0x8f, 0x98, 0xc3, 0x82, 0x80, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x7, 0x5c, 0x85, 0x7, 0x23, 0x20, 0xf7, 0x5c, 0x82, 0x80, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x7, 0x5c, 0xfd, 0x17, 0x23, 0x20, 0xf7, 0x5c, 0x82, 0x80, 0x19, 0xc1, 0x6f, 0xf0, 0xbf, 0xf8, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xa, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xf0, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x82, 0x80, 0xb7, 0x7, 0x9, 0x60, 0xd8, 0x43, 0x13, 0x67, 0x7, 0x20, 0xd8, 0xc3, 0xb7, 0x17, 0xb, 0x60, 0xd8, 0x57, 0x13, 0x67, 0x17, 0x0, 0xd8, 0xd7, 0x82, 0x80, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xa, 0x98, 0x43, 0x19, 0xc9, 0xb7, 0x6, 0x0, 0x20, 0x55, 0x8f, 0x98, 0xc3, 0x13, 0x5, 0xc0, 0x12, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0x23, 0x2e, 0xb7, 0x6, 0x0, 0xe0, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x82, 0x80, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xa, 0x98, 0x43, 0x19, 0xc9, 0xb7, 0x6, 0x0, 0x40, 0x55, 0x8f, 0x98, 0xc3, 0x13, 0x5, 0x20, 0x3, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0x63, 0x2b, 0xb7, 0x6, 0x0, 0xc0, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x82, 0x80, 0xb7, 0x7, 0xb, 0x60, 0x9, 0x47, 0x93, 0x87, 0x7, 0x40, 0x63, 0xa, 0xe5, 0x2, 0x63, 0x68, 0xa7, 0x0, 0x9, 0xcd, 0x98, 0x43, 0x71, 0x9b, 0x13, 0x67, 0x17, 0x0, 0x11, 0xa8, 0xd, 0x47, 0x63, 0x4, 0xe5, 0x2, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x40, 0xc0, 0x48, 0x98, 0x43, 0x71, 0x9b, 0x98, 0xc3, 0x13, 0x5, 0xc0, 0x12, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0xc3, 0x26, 0x98, 0x43, 0x71, 0x9b, 0x13, 0x67, 0x27, 0x0, 0xed, 0xb7, 0x98, 0x43, 0x13, 0x67, 0x37, 0x0, 0xcd, 0xb7, 0xb7, 0x7, 0xb, 0x60, 0x83, 0xa7, 0x7, 0x40, 0x9, 0x47, 0x9, 0x45, 0x8d, 0x8b, 0x63, 0x88, 0xe7, 0x0, 0xd, 0x47, 0xd, 0x45, 0x63, 0x84, 0xe7, 0x0, 0x33, 0x35, 0xf0, 0x0, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xdf, 0xfd, 0x11, 0xc9, 0x93, 0x7, 0xf5, 0xff, 0x93, 0xb7, 0x37, 0x0, 0x13, 0x95, 0xf7, 0x0, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x37, 0x15, 0x2, 0x0, 0x13, 0x5, 0x5, 0x34, 0xcd, 0xbf, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0x1, 0xc9, 0x5, 0x47, 0x63, 0xe, 0xe5, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x40, 0xa0, 0x40, 0x98, 0x43, 0x6d, 0x9b, 0x98, 0xc3, 0xd, 0x45, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0xc3, 0x1e, 0x98, 0x43, 0x13, 0x67, 0x47, 0x0, 0xfd, 0xb7, 0x82, 0x80, 0xb7, 0x17, 0xb, 0x60, 0x88, 0x4b, 0xc1, 0x7, 0x93, 0x16, 0x5, 0x1, 0xc1, 0x82, 0x13, 0x57, 0x5, 0x1, 0x63, 0x9b, 0xe6, 0x0, 0x13, 0x7, 0xf5, 0xff, 0xf5, 0x56, 0x63, 0xe6, 0xe6, 0x0, 0x41, 0x67, 0x79, 0x17, 0x79, 0x8d, 0x15, 0xe1, 0x94, 0x43, 0xc1, 0x67, 0x85, 0x7, 0xfd, 0x8e, 0x13, 0x7, 0x90, 0x2, 0x63, 0x84, 0xf6, 0x0, 0x13, 0x7, 0x80, 0x2, 0x33, 0x7, 0xf7, 0x2, 0xb7, 0x17, 0xb, 0x60, 0x13, 0x5, 0x80, 0x2, 0x98, 0xcb, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0x2a, 0x84, 0xae, 0x84, 0xef, 0xf0, 0x9f, 0xfa, 0x63, 0x65, 0x85, 0x2, 0xaa, 0x87, 0x1, 0x45, 0x21, 0xc0, 0x33, 0xd7, 0x87, 0x2, 0x93, 0x56, 0x17, 0x0, 0xbe, 0x96, 0xb3, 0xd6, 0xe6, 0x2, 0x63, 0x18, 0xd4, 0x2, 0x81, 0x46, 0x94, 0xc0, 0xdc, 0xc0, 0x98, 0xc4, 0xc0, 0xc4, 0x5, 0x45, 0x5, 0xa0, 0x93, 0x7, 0x0, 0x5, 0x63, 0x2, 0xf4, 0x2, 0x93, 0x7, 0x80, 0x7, 0x11, 0x47, 0x63, 0xe, 0xf4, 0x0, 0x93, 0x7, 0x0, 0xa, 0x1, 0x45, 0xd, 0x47, 0x63, 0x8, 0xf4, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x19, 0x47, 0x85, 0x46, 0x93, 0x7, 0x0, 0x1e, 0xd1, 0xb7, 0x41, 0x11, 0xb7, 0x67, 0x9, 0x60, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0x4a, 0xc0, 0x93, 0x87, 0x7, 0x0, 0x83, 0xa7, 0x7, 0x11, 0x5, 0x47, 0xaa, 0x84, 0xc1, 0x83, 0x8d, 0x8b, 0x5, 0x44, 0x63, 0x89, 0xe7, 0x0, 0x9, 0x47, 0x9, 0x44, 0x63, 0x85, 0xe7, 0x0, 0x1, 0x44, 0x91, 0xc3, 0xd, 0x44, 0x9c, 0x40, 0x8d, 0xe7, 0x8c, 0x44, 0xc8, 0x44, 0xef, 0xf0, 0x9f, 0xc6, 0x85, 0x47, 0x63, 0x1c, 0xf4, 0x12, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x5c, 0x63, 0x96, 0x7, 0x12, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0xf0, 0xff, 0xbd, 0x5, 0x49, 0x63, 0x95, 0x27, 0x11, 0x63, 0x8, 0xf4, 0xe, 0x21, 0x45, 0xef, 0xf0, 0xdf, 0xed, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xc, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x70, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x2, 0x55, 0x8f, 0x98, 0xc3, 0xef, 0xf0, 0xff, 0xeb, 0xd8, 0x40, 0x93, 0x7, 0x0, 0x1e, 0x63, 0x4, 0xf7, 0x0, 0xef, 0x40, 0xc0, 0x29, 0x13, 0x5, 0x60, 0x2, 0x37, 0x4, 0xb, 0x60, 0xef, 0xb0, 0xcf, 0x8e, 0x13, 0x4, 0x84, 0x81, 0x1c, 0x40, 0x93, 0x6, 0x0, 0x5, 0x9, 0x46, 0xed, 0x9b, 0x1c, 0xc0, 0x1c, 0x40, 0x81, 0x45, 0x13, 0x5, 0x60, 0x6, 0x93, 0xe7, 0x87, 0x0, 0x1c, 0xc0, 0xef, 0xa0, 0xbf, 0xe8, 0xa1, 0x46, 0xd, 0x46, 0x81, 0x45, 0x13, 0x5, 0x60, 0x6, 0xef, 0xa0, 0xdf, 0xe7, 0x81, 0x47, 0x1, 0x47, 0x89, 0x46, 0x15, 0x46, 0x81, 0x45, 0x13, 0x5, 0x60, 0x6, 0xef, 0xa0, 0xbf, 0xe9, 0x81, 0x47, 0x11, 0x47, 0x99, 0x46, 0x15, 0x46, 0x81, 0x45, 0x13, 0x5, 0x60, 0x6, 0xef, 0xa0, 0x9f, 0xe8, 0x93, 0x6, 0x30, 0x7, 0x19, 0x46, 0x81, 0x45, 0x13, 0x5, 0x60, 0x6, 0xef, 0xa0, 0x9f, 0xe4, 0x89, 0x47, 0x1, 0x47, 0x85, 0x46, 0x25, 0x46, 0x81, 0x45, 0x13, 0x5, 0x60, 0x6, 0xef, 0xa0, 0x7f, 0xe6, 0x1c, 0x40, 0x13, 0x97, 0x77, 0x0, 0xe3, 0x5d, 0x7, 0xfe, 0x29, 0x45, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xff, 0x1c, 0x40, 0x13, 0x5, 0x60, 0x2, 0xdd, 0x9b, 0x1c, 0xc0, 0x1c, 0x40, 0x93, 0xe7, 0x47, 0x0, 0x1c, 0xc0, 0xef, 0xb0, 0xcf, 0x90, 0xb7, 0xb7, 0x81, 0x40, 0x13, 0x7, 0x0, 0x1e, 0x23, 0xa2, 0xe7, 0x5c, 0xc8, 0x44, 0xef, 0xf0, 0x7f, 0xba, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x25, 0x45, 0x41, 0x1, 0x6f, 0xf0, 0x1f, 0xde, 0x9, 0x47, 0x63, 0x96, 0xe7, 0x0, 0xef, 0xf0, 0xbf, 0xae, 0xe3, 0x8, 0x24, 0xed, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0xb7, 0x66, 0x9, 0x60, 0x26, 0xd2, 0x6, 0xd6, 0x22, 0xd4, 0x93, 0x87, 0x6, 0x0, 0x3, 0xa7, 0x7, 0x11, 0x5, 0x46, 0xaa, 0x84, 0x41, 0x83, 0xd, 0x8b, 0x63, 0xe, 0xc7, 0x6, 0x89, 0x46, 0x63, 0x4, 0xd7, 0x4, 0x21, 0xe3, 0x3, 0xa7, 0x87, 0x11, 0x3a, 0xc4, 0x22, 0x47, 0x83, 0xa7, 0x7, 0x11, 0x13, 0x77, 0xf7, 0xf, 0x3e, 0xc6, 0x32, 0x44, 0x93, 0x7, 0x17, 0x0, 0x13, 0x74, 0xf4, 0xf, 0x5, 0x4, 0x33, 0x4, 0xf4, 0x2, 0xef, 0xf0, 0xbf, 0xd7, 0x1, 0x47, 0xb3, 0x57, 0x85, 0x2, 0x80, 0xc4, 0xb2, 0x50, 0x22, 0x54, 0x98, 0xc0, 0xc8, 0xc0, 0xdc, 0xc4, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0xef, 0x40, 0xa0, 0x14, 0x3, 0xa7, 0x87, 0x11, 0x51, 0x45, 0x3a, 0xcc, 0x62, 0x47, 0x83, 0xa7, 0x7, 0x11, 0x13, 0x77, 0xf7, 0xf, 0x3e, 0xce, 0x72, 0x44, 0x93, 0x7, 0x17, 0x0, 0x9, 0x47, 0x13, 0x74, 0xf4, 0xf, 0x5, 0x4, 0x33, 0x4, 0xf4, 0x2, 0xd1, 0x47, 0xb3, 0xd7, 0x87, 0x2, 0x7d, 0xbf, 0x3, 0xa7, 0x87, 0x11, 0x83, 0xa7, 0x87, 0x11, 0x93, 0x86, 0x6, 0x0, 0x41, 0x83, 0x3e, 0xc8, 0xc2, 0x47, 0x5, 0x8b, 0xa1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x99, 0xe3, 0x11, 0x44, 0x1, 0xef, 0x3, 0xa7, 0x6, 0x11, 0x85, 0x7, 0x3a, 0xca, 0x52, 0x44, 0x21, 0x80, 0x13, 0x74, 0xf4, 0xf, 0x5, 0x4, 0x33, 0x4, 0xf4, 0x2, 0x93, 0x7, 0x0, 0x1e, 0x5, 0x47, 0x13, 0x5, 0x0, 0x1e, 0xb3, 0xd7, 0x87, 0x2, 0xa5, 0xbf, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x3f, 0xce, 0xb2, 0x40, 0x85, 0x45, 0x41, 0x1, 0x6f, 0xf0, 0x3f, 0xa3, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xbf, 0xfe, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x5c, 0x89, 0xe7, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0xf0, 0xff, 0x9a, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x17, 0xb, 0x60, 0x98, 0x4b, 0xc1, 0x67, 0x85, 0x7, 0x7d, 0x8f, 0x63, 0x14, 0xf7, 0x0, 0x13, 0x65, 0x15, 0x0, 0x13, 0x17, 0x5, 0x1, 0x41, 0x83, 0x42, 0x5, 0x49, 0x8f, 0xb7, 0x17, 0xb, 0x60, 0x98, 0xcb, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x37, 0x64, 0x9, 0x60, 0x93, 0x7, 0x4, 0x0, 0x6, 0xd6, 0x83, 0xa7, 0x7, 0x11, 0x5, 0x47, 0x13, 0x4, 0x4, 0x0, 0xc1, 0x83, 0x8d, 0x8b, 0x63, 0x81, 0xe7, 0x8, 0x9, 0x47, 0x63, 0x8c, 0xe7, 0x4, 0xcd, 0xe3, 0xef, 0xf0, 0x7f, 0xc6, 0x83, 0x27, 0xc4, 0x11, 0x3e, 0xcc, 0x62, 0x47, 0x83, 0x27, 0x4, 0x11, 0x13, 0x77, 0xf7, 0xf, 0x3e, 0xce, 0xf2, 0x47, 0x5, 0x7, 0x93, 0xf7, 0xf7, 0xf, 0x85, 0x7, 0xb3, 0x87, 0xe7, 0x2, 0x3, 0x27, 0x4, 0x12, 0xb2, 0x50, 0x22, 0x54, 0x3a, 0xc2, 0x12, 0x47, 0x45, 0x61, 0x21, 0x83, 0x13, 0x77, 0xf7, 0xf, 0x33, 0x55, 0xf5, 0x2, 0x93, 0x7, 0x17, 0x0, 0x33, 0x55, 0xf5, 0x2, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x33, 0x5, 0xf5, 0x2, 0x82, 0x80, 0x83, 0x27, 0xc4, 0x11, 0x51, 0x45, 0x3e, 0xc4, 0x22, 0x47, 0x83, 0x27, 0x4, 0x11, 0x13, 0x77, 0xf7, 0xf, 0x3e, 0xc6, 0xb2, 0x47, 0x5, 0x7, 0x93, 0xf7, 0xf7, 0xf, 0x85, 0x7, 0xb3, 0x87, 0xe7, 0x2, 0x45, 0xbf, 0x83, 0x27, 0xc4, 0x11, 0x13, 0x5, 0x0, 0x1e, 0x3e, 0xc8, 0x42, 0x47, 0x83, 0x27, 0x4, 0x11, 0x21, 0x83, 0x3e, 0xca, 0xd2, 0x47, 0x13, 0x77, 0xf7, 0xf, 0x5, 0x7, 0xa1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x85, 0x7, 0xb3, 0x87, 0xe7, 0x2, 0x59, 0xb7, 0x85, 0x47, 0x1, 0x45, 0x41, 0xb7, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0x98, 0x53, 0xb7, 0x6, 0x0, 0x80, 0x15, 0x45, 0x55, 0x8f, 0x98, 0xd3, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0x63, 0xd8, 0x37, 0x7, 0xb, 0x60, 0x13, 0x7, 0x7, 0x40, 0x1c, 0x53, 0x15, 0x45, 0x86, 0x7, 0x85, 0x83, 0x1c, 0xd3, 0x17, 0xa3, 0x7f, 0xff, 0x67, 0x0, 0xc3, 0xd6, 0x1c, 0x41, 0x3, 0x23, 0x6, 0x0, 0x54, 0x42, 0x3, 0x28, 0x86, 0x0, 0x58, 0x46, 0x83, 0x28, 0x6, 0x1, 0x89, 0xeb, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0x70, 0x7d, 0x90, 0x43, 0x93, 0x7, 0x40, 0x3, 0xb3, 0x85, 0xf5, 0x2, 0x3, 0x25, 0x3, 0x0, 0x3, 0x2e, 0x83, 0x0, 0xb7, 0x2, 0x0, 0x40, 0xfd, 0x12, 0x13, 0x5e, 0xfe, 0x1, 0x7e, 0xe, 0xb7, 0xf, 0x0, 0xfc, 0xfd, 0x1f, 0xb7, 0xe, 0x0, 0x4, 0xb3, 0x7, 0xb6, 0x0, 0x83, 0x25, 0x43, 0x0, 0x88, 0xc3, 0x37, 0x5, 0x0, 0x80, 0xcc, 0xcb, 0x8c, 0x5b, 0x13, 0x3, 0xf5, 0xff, 0x37, 0xf, 0x0, 0xf8, 0xb3, 0xf5, 0x65, 0x0, 0xb3, 0xe5, 0xc5, 0x1, 0x8c, 0xdb, 0x8c, 0x42, 0x3, 0xae, 0x86, 0x0, 0x7d, 0x1f, 0xcc, 0xc3, 0xcc, 0x42, 0x13, 0x5e, 0xee, 0x1, 0x7a, 0xe, 0x8c, 0xc7, 0xcc, 0x47, 0xb3, 0xf5, 0x55, 0x0, 0xb3, 0xe5, 0xc5, 0x1, 0xcc, 0xc7, 0xcc, 0x53, 0x3, 0xae, 0xc6, 0x0, 0xb3, 0xf5, 0xf5, 0x1, 0x33, 0x7e, 0xde, 0x1, 0xb3, 0xe5, 0xc5, 0x1, 0xcc, 0xd3, 0xcc, 0x53, 0x3, 0xae, 0xc6, 0x0, 0xb7, 0xe, 0x0, 0x8, 0xb3, 0xf5, 0xe5, 0x1, 0x33, 0x7e, 0xde, 0x1, 0xb3, 0xe5, 0xc5, 0x1, 0xcc, 0xd3, 0x3, 0xae, 0xc6, 0x0, 0xcc, 0x53, 0xb7, 0xe, 0x0, 0x10, 0x33, 0x7e, 0xde, 0x1, 0xb7, 0xe, 0x0, 0xf0, 0xfd, 0x1e, 0xb3, 0xf5, 0xd5, 0x1, 0xb3, 0xe5, 0xc5, 0x1, 0xcc, 0xd3, 0x83, 0xa3, 0xc6, 0x0, 0xcc, 0x53, 0x37, 0xe, 0x0, 0x20, 0xb3, 0xf3, 0xc3, 0x1, 0x37, 0xe, 0x0, 0xe0, 0x7d, 0x1e, 0xb3, 0xf5, 0xc5, 0x1, 0xb3, 0xe5, 0x75, 0x0, 0xcc, 0xd3, 0xcc, 0x46, 0xd4, 0x53, 0xb7, 0x3, 0x0, 0x4, 0xf9, 0x81, 0xfa, 0x5, 0xb3, 0xf6, 0x56, 0x0, 0xcd, 0x8e, 0xd4, 0xd3, 0x83, 0x45, 0x38, 0x0, 0x94, 0x4b, 0xb7, 0x2, 0x0, 0xff, 0xfd, 0x12, 0x85, 0x89, 0xe2, 0x5, 0xb3, 0xf6, 0x56, 0x0, 0xcd, 0x8e, 0x94, 0xcb, 0x83, 0x22, 0x8, 0x0, 0x94, 0x4b, 0xb7, 0x5, 0x0, 0x2, 0xb3, 0xf2, 0xb2, 0x0, 0xb7, 0x5, 0x0, 0xfe, 0xfd, 0x15, 0xed, 0x8e, 0xb3, 0xe6, 0x56, 0x0, 0x94, 0xcb, 0x94, 0x4b, 0x83, 0x22, 0x8, 0x0, 0xb3, 0xf6, 0xf6, 0x1, 0xb3, 0xf2, 0x72, 0x0, 0xb3, 0xe6, 0x56, 0x0, 0x94, 0xcb, 0x94, 0x4b, 0x83, 0x2f, 0x8, 0x0, 0xb7, 0x2, 0x0, 0x8, 0xb3, 0xf6, 0xe6, 0x1, 0xb3, 0xff, 0x5f, 0x0, 0xb3, 0xe6, 0xf6, 0x1, 0x94, 0xcb, 0x94, 0x4b, 0x3, 0x2f, 0x8, 0x0, 0xb7, 0xf, 0x0, 0x10, 0xb3, 0xf6, 0xd6, 0x1, 0x33, 0x7f, 0xff, 0x1, 0xb3, 0xe6, 0xe6, 0x1, 0x94, 0xcb, 0x94, 0x4b, 0x3, 0x28, 0x8, 0x0, 0xb7, 0xe, 0x0, 0x20, 0xb3, 0xf6, 0xc6, 0x1, 0x33, 0x78, 0xd8, 0x1, 0xb3, 0xe6, 0x6, 0x1, 0x94, 0xcb, 0x94, 0x4f, 0x3, 0x28, 0x7, 0x0, 0x37, 0xe, 0x0, 0x2, 0xed, 0x8e, 0x33, 0x78, 0xc8, 0x1, 0xb3, 0xe6, 0x6, 0x1, 0x94, 0xcf, 0xc, 0x43, 0x94, 0x4f, 0x37, 0x8, 0x0, 0x3c, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0x0, 0xc4, 0x7d, 0x18, 0xb3, 0xf6, 0x6, 0x1, 0xcd, 0x8e, 0x94, 0xcf, 0xc, 0x43, 0x94, 0x4f, 0x37, 0x8, 0x0, 0x40, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0x0, 0xc0, 0x7d, 0x18, 0xb3, 0xf6, 0x6, 0x1, 0xcd, 0x8e, 0x94, 0xcf, 0xc, 0x43, 0x94, 0x4f, 0x41, 0x78, 0xfd, 0x81, 0xfe, 0x5, 0xb3, 0xf6, 0x66, 0x0, 0xcd, 0x8e, 0x94, 0xcf, 0x83, 0x55, 0x67, 0x0, 0x94, 0x57, 0x7d, 0x18, 0x85, 0x89, 0xc2, 0x5, 0xb3, 0xf6, 0x6, 0x1, 0xcd, 0x8e, 0x94, 0xd7, 0x4c, 0x43, 0x94, 0x57, 0x37, 0x8, 0x2, 0x0, 0xb3, 0xf5, 0x5, 0x1, 0x1, 0x78, 0x7d, 0x18, 0xb3, 0xf6, 0x6, 0x1, 0xcd, 0x8e, 0x94, 0xd7, 0x4c, 0x43, 0x94, 0x57, 0x37, 0x8, 0x4, 0x0, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0xfc, 0xff, 0x7d, 0x18, 0xb3, 0xf6, 0x6, 0x1, 0xcd, 0x8e, 0x94, 0xd7, 0x4c, 0x43, 0x94, 0x57, 0x37, 0x8, 0x78, 0x0, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0x88, 0xff, 0x7d, 0x18, 0xb3, 0xf6, 0x6, 0x1, 0xcd, 0x8e, 0x94, 0xd7, 0x4c, 0x43, 0x94, 0x57, 0x37, 0x8, 0x80, 0x7, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0x80, 0xf8, 0x7d, 0x18, 0xb3, 0xf6, 0x6, 0x1, 0xcd, 0x8e, 0x94, 0xd7, 0x94, 0x57, 0x4c, 0x43, 0x96, 0x6, 0xed, 0x81, 0xee, 0x5, 0x95, 0x82, 0xcd, 0x8e, 0x94, 0xd7, 0x14, 0x47, 0xd8, 0x57, 0x93, 0xf6, 0x6, 0xf0, 0x13, 0x77, 0xf7, 0xf, 0x55, 0x8f, 0xd8, 0xd7, 0x3, 0xa7, 0x8, 0x0, 0xb7, 0x6, 0x0, 0x10, 0xd8, 0xcf, 0x3, 0xa7, 0x48, 0x0, 0x98, 0xd3, 0x93, 0x7, 0x6, 0x8, 0xf8, 0x4f, 0x13, 0x6, 0x6, 0x10, 0x49, 0x8f, 0xf8, 0xcf, 0xb8, 0x4b, 0x55, 0x8f, 0xb8, 0xcb, 0x5c, 0x56, 0x37, 0x7, 0xfd, 0xff, 0x7d, 0x17, 0xf9, 0x8f, 0x37, 0x7, 0x2, 0x0, 0xd9, 0x8f, 0x5c, 0xd6, 0x82, 0x80, 0x1c, 0x41, 0x3, 0x28, 0x6, 0x0, 0x54, 0x42, 0x89, 0xeb, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0x70, 0x51, 0x98, 0x43, 0xe1, 0x47, 0xb3, 0x87, 0xf5, 0x2, 0x3, 0x26, 0x8, 0x0, 0x83, 0x25, 0x88, 0x0, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0xfd, 0x81, 0xfe, 0x5, 0xba, 0x97, 0x93, 0x87, 0x7, 0x8, 0x90, 0xd7, 0x3, 0x26, 0x48, 0x0, 0x13, 0x7, 0x7, 0x8, 0x37, 0x8, 0x0, 0x2, 0xd0, 0xd7, 0x50, 0x5f, 0x69, 0x8e, 0x4d, 0x8e, 0x50, 0xdf, 0x8c, 0x42, 0x30, 0x47, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0x0, 0xfe, 0x7d, 0x18, 0x33, 0x76, 0x6, 0x1, 0x4d, 0x8e, 0x30, 0xc7, 0x8c, 0x42, 0x30, 0x47, 0x37, 0x8, 0x0, 0x3c, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0x0, 0xc4, 0x7d, 0x18, 0x33, 0x76, 0x6, 0x1, 0x4d, 0x8e, 0x30, 0xc7, 0x8c, 0x42, 0x30, 0x47, 0x37, 0x8, 0x0, 0x40, 0xb3, 0xf5, 0x5, 0x1, 0x37, 0x8, 0x0, 0xc0, 0x7d, 0x18, 0x33, 0x76, 0x6, 0x1, 0x4d, 0x8e, 0x30, 0xc7, 0x8c, 0x42, 0x30, 0x47, 0xfd, 0x81, 0xfe, 0x5, 0x69, 0x8e, 0x4d, 0x8e, 0x30, 0xc7, 0xd0, 0x42, 0xd8, 0x4f, 0xb7, 0x5, 0x20, 0x0, 0x6d, 0x8e, 0xb7, 0x5, 0xe0, 0xff, 0xfd, 0x15, 0x6d, 0x8f, 0x51, 0x8f, 0xd8, 0xcf, 0xd0, 0x42, 0xd8, 0x4f, 0xb7, 0x5, 0x40, 0x0, 0x6d, 0x8e, 0xb7, 0x5, 0xc0, 0xff, 0xfd, 0x15, 0x6d, 0x8f, 0x51, 0x8f, 0xd8, 0xcf, 0xd0, 0x42, 0xd8, 0x4f, 0xb7, 0x5, 0x80, 0x7, 0x6d, 0x8e, 0xb7, 0x5, 0x80, 0xf8, 0xfd, 0x15, 0x6d, 0x8f, 0x51, 0x8f, 0xd8, 0xcf, 0xd0, 0x42, 0xd8, 0x4f, 0x6d, 0x82, 0x16, 0x7, 0x6e, 0x6, 0x15, 0x83, 0x51, 0x8f, 0xd8, 0xcf, 0x94, 0x46, 0x98, 0x53, 0xf1, 0x82, 0x12, 0x7, 0xf2, 0x6, 0x11, 0x83, 0x55, 0x8f, 0x98, 0xd3, 0x82, 0x80, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x47, 0x15, 0x98, 0x43, 0x39, 0x71, 0xb7, 0x6, 0x0, 0x4, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x8, 0x15, 0x46, 0x55, 0x8f, 0x98, 0xc3, 0x9d, 0x46, 0x85, 0x47, 0x1d, 0x47, 0x81, 0x45, 0x13, 0x5, 0xd0, 0x6, 0xef, 0xa0, 0x2f, 0xfb, 0x85, 0x47, 0x1d, 0x47, 0x9d, 0x46, 0x1d, 0x46, 0x81, 0x45, 0x13, 0x5, 0xd0, 0x6, 0xef, 0xa0, 0xf, 0xfa, 0x81, 0x47, 0x9, 0x47, 0x89, 0x46, 0x35, 0x46, 0x81, 0x45, 0x13, 0x5, 0xd0, 0x6, 0xef, 0xa0, 0xef, 0xf8, 0x81, 0x47, 0xd, 0x47, 0x8d, 0x46, 0x35, 0x46, 0x81, 0x45, 0x13, 0x5, 0xd0, 0x6, 0xef, 0xa0, 0xcf, 0xf7, 0xef, 0xa0, 0x3f, 0xac, 0x3d, 0xc9, 0x2a, 0x89, 0x81, 0x44, 0x9, 0x4a, 0x60, 0x0, 0x8d, 0x49, 0x26, 0x85, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0xa, 0xcc, 0xef, 0x0, 0xb0, 0x17, 0x2a, 0xc6, 0x26, 0x85, 0xef, 0x0, 0xb0, 0x19, 0x2a, 0xc8, 0x26, 0x85, 0xef, 0x0, 0x70, 0x1b, 0x2a, 0xca, 0x26, 0x85, 0xef, 0x0, 0x30, 0x1d, 0xaa, 0x85, 0x31, 0x46, 0xa, 0x85, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xd4, 0x26, 0x85, 0xef, 0x0, 0x70, 0x1e, 0x2a, 0xce, 0x63, 0x8a, 0x44, 0x1, 0xef, 0x0, 0x10, 0x25, 0x92, 0x47, 0x6e, 0x5, 0x96, 0x7, 0x95, 0x83, 0xc9, 0x8f, 0x3e, 0xc2, 0xa6, 0x85, 0x22, 0x86, 0x4a, 0x85, 0x85, 0x4, 0xef, 0xf0, 0xff, 0xb4, 0xe3, 0x92, 0x34, 0xfb, 0xef, 0xa0, 0x3f, 0xa5, 0x2a, 0x89, 0x81, 0x44, 0x1, 0xe9, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x30, 0xb0, 0x32, 0x85, 0x44, 0x26, 0x85, 0x2, 0xc6, 0x2, 0xc8, 0x2, 0xca, 0x22, 0xc2, 0xef, 0x0, 0xf0, 0x1b, 0x2a, 0xc0, 0x26, 0x85, 0xef, 0x0, 0xf0, 0x1d, 0xaa, 0x85, 0x31, 0x46, 0x22, 0x85, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xce, 0x89, 0xe8, 0xef, 0x0, 0x70, 0x22, 0xc2, 0x47, 0x6e, 0x5, 0x96, 0x7, 0x95, 0x83, 0xc9, 0x8f, 0x3e, 0xc8, 0xa, 0x86, 0xa6, 0x85, 0x4a, 0x85, 0xef, 0xf0, 0xdf, 0xdb, 0xdd, 0xdc, 0xef, 0xa0, 0x9f, 0x9f, 0xaa, 0x84, 0x4d, 0xd5, 0xb7, 0xa5, 0x81, 0x40, 0x41, 0x46, 0x93, 0x85, 0x5, 0x1a, 0x22, 0x85, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xca, 0x9c, 0x40, 0x70, 0x8, 0x98, 0x43, 0x1c, 0x40, 0x11, 0x4, 0x93, 0x87, 0x87, 0x3, 0x8a, 0x7, 0xba, 0x97, 0xd4, 0x4b, 0xed, 0x9a, 0xd4, 0xcb, 0xd4, 0x4b, 0xdd, 0x9a, 0xd4, 0xcb, 0xd4, 0x4b, 0xbd, 0x9a, 0xd4, 0xcb, 0xd4, 0x4b, 0x93, 0xf6, 0xf6, 0xfd, 0xd4, 0xcb, 0xd4, 0x4b, 0xf5, 0x9a, 0xd4, 0xcb, 0xd4, 0x4b, 0xf9, 0x9a, 0xd4, 0xcb, 0xe3, 0x17, 0x86, 0xfc, 0x93, 0x7, 0x7, 0x10, 0xd8, 0x47, 0xb7, 0x6, 0x0, 0xf1, 0xfd, 0x16, 0x75, 0x8f, 0xd8, 0xc7, 0x98, 0x47, 0x6d, 0x9b, 0x98, 0xc7, 0x98, 0x47, 0x5d, 0x9b, 0x98, 0xc7, 0x98, 0x47, 0x3d, 0x9b, 0x98, 0xc7, 0x98, 0x47, 0x13, 0x77, 0xf7, 0xfd, 0x98, 0xc7, 0x98, 0x47, 0x75, 0x9b, 0x98, 0xc7, 0x98, 0x47, 0x79, 0x9b, 0x98, 0xc7, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x21, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x83, 0x47, 0x84, 0x5c, 0x6, 0xc6, 0x8d, 0xef, 0xef, 0xa0, 0xbf, 0x94, 0x1c, 0x41, 0x99, 0xe7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x30, 0x50, 0x22, 0xef, 0xa0, 0x7f, 0x93, 0x8, 0x41, 0xef, 0xa0, 0x30, 0x5a, 0xef, 0xa0, 0xdf, 0x92, 0x8, 0x41, 0xef, 0xa0, 0x10, 0x5d, 0xef, 0xa0, 0x3f, 0x92, 0x8, 0x41, 0xef, 0xa0, 0x50, 0x5e, 0x85, 0x47, 0x23, 0x4, 0xf4, 0x5c, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x83, 0x47, 0x84, 0x5c, 0x6, 0xc6, 0x85, 0xcf, 0xef, 0xa0, 0xbf, 0x8f, 0x1c, 0x41, 0x99, 0xe7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x30, 0x50, 0x1d, 0xef, 0xa0, 0x7f, 0x8e, 0x8, 0x41, 0xef, 0xa0, 0xf0, 0x56, 0xef, 0xa0, 0xdf, 0x8d, 0x8, 0x41, 0xef, 0xa0, 0xf0, 0x58, 0xef, 0xa0, 0x3f, 0x8d, 0x8, 0x41, 0xef, 0xa0, 0x30, 0x5a, 0x23, 0x4, 0x4, 0x5c, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xa0, 0x5f, 0x8b, 0x1c, 0x41, 0x37, 0x7, 0x0, 0xf8, 0x5, 0x88, 0x94, 0x43, 0x7d, 0x17, 0x6e, 0x4, 0x83, 0xa7, 0xc6, 0x8, 0xf9, 0x8f, 0xc1, 0x8f, 0x23, 0xa6, 0xf6, 0x8, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5d, 0x71, 0x86, 0xc6, 0xa2, 0xc4, 0xa6, 0xc2, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x5a, 0xd8, 0x5e, 0xd6, 0x62, 0xd4, 0x66, 0xd2, 0x6a, 0xd0, 0x6e, 0xce, 0x99, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x30, 0x30, 0x15, 0xaa, 0x8a, 0x2e, 0x89, 0xef, 0xf0, 0xef, 0xcd, 0x2a, 0xc4, 0xef, 0xc0, 0x2f, 0xd4, 0x11, 0xcd, 0x91, 0x47, 0x63, 0x9c, 0xfa, 0x0, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x13, 0x98, 0x43, 0xc1, 0x66, 0x13, 0x59, 0x59, 0x0, 0x55, 0x8f, 0x98, 0xc3, 0xa1, 0x67, 0xf9, 0x17, 0xe3, 0xe3, 0x27, 0xfd, 0xef, 0xf0, 0x8f, 0xc3, 0x37, 0x64, 0x9, 0x60, 0x93, 0x7, 0x4, 0x0, 0x83, 0xa7, 0x47, 0x13, 0x5, 0x47, 0x13, 0x4, 0x4, 0x0, 0x8d, 0x8b, 0x5, 0x4b, 0x63, 0x89, 0xe7, 0x0, 0x9, 0x47, 0xd, 0x4b, 0x63, 0x85, 0xe7, 0x0, 0x9, 0x4b, 0x91, 0xc3, 0x11, 0x4b, 0x7d, 0x57, 0x56, 0x8a, 0x63, 0x93, 0xea, 0x0, 0x2a, 0x8a, 0x11, 0x47, 0x63, 0x9, 0xea, 0x20, 0x63, 0x9, 0xa, 0x20, 0x9, 0x47, 0x63, 0xa, 0xea, 0x0, 0xd, 0x47, 0x63, 0xb, 0xea, 0x1e, 0x5, 0x47, 0x63, 0x2, 0xea, 0x1e, 0xef, 0x30, 0xb0, 0x4, 0x3, 0x27, 0x44, 0x13, 0x71, 0x9b, 0x23, 0x2a, 0xe4, 0x12, 0x89, 0x44, 0xb7, 0x9, 0xb, 0x60, 0x13, 0x87, 0x9, 0x40, 0x3, 0x2c, 0x7, 0x2, 0x5, 0x47, 0x93, 0x89, 0x9, 0x40, 0x13, 0x5c, 0xcc, 0x1, 0x13, 0x7c, 0x1c, 0x0, 0x63, 0x1b, 0xea, 0x0, 0x63, 0x19, 0xc, 0x0, 0x3, 0xa7, 0x9, 0x2, 0xb7, 0x6, 0x0, 0x10, 0x55, 0x8f, 0x23, 0xa0, 0xe9, 0x2, 0x37, 0x7, 0xb, 0x60, 0x13, 0x7, 0xc7, 0xa, 0x3, 0x2d, 0x7, 0x0, 0x83, 0xad, 0x9, 0x2, 0x37, 0x7, 0x0, 0x40, 0x33, 0x7d, 0xed, 0x0, 0x11, 0x47, 0x93, 0xdd, 0xfd, 0x1, 0x63, 0x1b, 0xea, 0x0, 0x63, 0x15, 0xd, 0x0, 0x5, 0x45, 0xef, 0xf0, 0x2f, 0xb0, 0x63, 0x94, 0xd, 0x0, 0xef, 0xf0, 0xff, 0x82, 0x37, 0x7, 0xb, 0x60, 0x13, 0x7, 0xc7, 0xa, 0x83, 0x2c, 0x7, 0x0, 0x83, 0xab, 0x9, 0x2, 0x37, 0x7, 0x0, 0x20, 0xb3, 0xfc, 0xec, 0x0, 0x93, 0xdb, 0xeb, 0x1, 0x9, 0x47, 0x93, 0xfb, 0x1b, 0x0, 0x63, 0x10, 0xea, 0x2, 0x63, 0x95, 0xc, 0x0, 0x5, 0x45, 0xef, 0xf0, 0xef, 0xa9, 0x63, 0x99, 0xb, 0x0, 0x3, 0xa7, 0x9, 0x2, 0xb7, 0x6, 0x0, 0x40, 0x55, 0x8f, 0x23, 0xa0, 0xe9, 0x2, 0x37, 0x86, 0x0, 0x60, 0x38, 0x56, 0x13, 0x6, 0x86, 0x6, 0x93, 0x16, 0x37, 0x1, 0x63, 0xce, 0x6, 0x12, 0x37, 0x87, 0x0, 0x60, 0x34, 0x57, 0x69, 0x76, 0x7d, 0x16, 0xf1, 0x8e, 0x13, 0x96, 0xd4, 0x0, 0xd1, 0x8e, 0x34, 0xd7, 0x34, 0x57, 0x7d, 0x76, 0x7d, 0x16, 0xf1, 0x8e, 0x34, 0xd7, 0x34, 0x57, 0x37, 0x6, 0x1, 0x80, 0x7d, 0x16, 0xf1, 0x8e, 0x13, 0x16, 0x9, 0x1, 0xd1, 0x8e, 0x34, 0xd7, 0x37, 0x87, 0x0, 0x60, 0x89, 0x46, 0x13, 0x7, 0x7, 0x8, 0x63, 0x92, 0xd4, 0x12, 0x14, 0x43, 0x13, 0x16, 0x39, 0x1, 0x93, 0xf6, 0xf6, 0x7, 0xd1, 0x8e, 0x14, 0xc3, 0x21, 0x66, 0x37, 0x87, 0x0, 0x60, 0x34, 0x57, 0xb7, 0x5, 0x0, 0x80, 0x13, 0x85, 0xf5, 0xff, 0xe9, 0x8e, 0x34, 0xd7, 0x34, 0x57, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0xcd, 0x8e, 0xb3, 0x35, 0xa9, 0x2, 0x34, 0xd7, 0x13, 0x7, 0x87, 0x6, 0x81, 0x46, 0x3a, 0xc6, 0x33, 0x5, 0xa9, 0x2, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xe7, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x4e, 0x32, 0x47, 0x37, 0x86, 0x0, 0x60, 0xa1, 0x65, 0x13, 0x6, 0x6, 0x8, 0x4, 0x43, 0xed, 0x8c, 0xe5, 0xc8, 0x37, 0x87, 0x0, 0x60, 0x13, 0x7, 0xc7, 0x6, 0x18, 0x43, 0x93, 0x54, 0x77, 0x0, 0x3a, 0xc6, 0xef, 0xc0, 0xf, 0xb5, 0x5, 0xc1, 0x91, 0x46, 0x32, 0x47, 0x63, 0x1d, 0xda, 0x0, 0x93, 0x54, 0xc7, 0x0, 0x37, 0x67, 0x9, 0x60, 0x13, 0x7, 0x7, 0x13, 0x14, 0x43, 0x41, 0x76, 0x7d, 0x16, 0xf1, 0x8e, 0x14, 0xc3, 0xb7, 0x86, 0x0, 0x60, 0xb8, 0x56, 0x6, 0x7, 0x5, 0x83, 0xb8, 0xd6, 0x5, 0x47, 0x63, 0x1a, 0xea, 0xa, 0x63, 0x1a, 0xc, 0x0, 0x83, 0xa7, 0x9, 0x2, 0x37, 0x7, 0x0, 0xf0, 0x7d, 0x17, 0xf9, 0x8f, 0x23, 0xa0, 0xf9, 0x2, 0x91, 0x47, 0x63, 0x2, 0xfb, 0xe, 0x89, 0x47, 0x63, 0xa, 0xfb, 0xc, 0x8d, 0x47, 0x63, 0xd, 0xfb, 0x18, 0x83, 0x27, 0x44, 0x13, 0xf1, 0x9b, 0x93, 0xe7, 0x17, 0x0, 0xd9, 0xa0, 0x3, 0x27, 0x44, 0x13, 0x71, 0x9b, 0x13, 0x67, 0x17, 0x0, 0x5, 0xb5, 0x3, 0x27, 0x44, 0x13, 0x71, 0x9b, 0x13, 0x67, 0x27, 0x0, 0x11, 0xbd, 0x85, 0x44, 0x19, 0xbd, 0x81, 0x44, 0x9, 0xbd, 0x37, 0x87, 0x0, 0x60, 0x13, 0x7, 0x7, 0x8, 0x14, 0x43, 0x93, 0xf6, 0xf6, 0xf, 0x93, 0xe6, 0x6, 0x8, 0x14, 0xc3, 0x14, 0x42, 0x93, 0x95, 0x6, 0x1, 0xe3, 0xc7, 0x5, 0xea, 0x14, 0x43, 0x85, 0x8a, 0xed, 0xda, 0x55, 0xb5, 0x85, 0x46, 0x63, 0x9b, 0xd4, 0x0, 0x14, 0x43, 0x37, 0x6, 0xb, 0x1, 0x13, 0x6, 0x6, 0x76, 0x93, 0xe6, 0x6, 0xf8, 0x14, 0xc3, 0xe9, 0xbd, 0x14, 0x43, 0x13, 0x16, 0x19, 0x1, 0x93, 0xf6, 0xf6, 0x7, 0xd1, 0x8e, 0x37, 0x16, 0x2, 0x0, 0x14, 0xc3, 0x13, 0x6, 0x6, 0x34, 0xc9, 0xb5, 0x14, 0x42, 0x85, 0x8a, 0x81, 0xd6, 0x81, 0xb7, 0x11, 0x47, 0x63, 0x1c, 0xea, 0x0, 0x63, 0x94, 0xd, 0x0, 0xef, 0xf0, 0x2f, 0xe5, 0xe3, 0x1b, 0xd, 0xf4, 0x1, 0x45, 0xef, 0xf0, 0x8f, 0x8f, 0xb1, 0xb7, 0x9, 0x47, 0xe3, 0x14, 0xea, 0xf4, 0x63, 0x9a, 0xb, 0x0, 0x83, 0xa7, 0x9, 0x2, 0x37, 0x7, 0x0, 0xc0, 0x7d, 0x17, 0xf9, 0x8f, 0x23, 0xa0, 0xf9, 0x2, 0xe3, 0x98, 0xc, 0xf2, 0x1, 0x45, 0xef, 0xf0, 0x6f, 0x8a, 0x1d, 0xb7, 0x83, 0x27, 0x44, 0x13, 0xf1, 0x9b, 0x23, 0x2a, 0xf4, 0x12, 0xa2, 0x47, 0xb3, 0x89, 0x27, 0x3, 0x33, 0xba, 0x27, 0x3, 0x85, 0x47, 0x63, 0x90, 0xfa, 0x6, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x81, 0x46, 0x13, 0x6, 0x0, 0x7d, 0x33, 0x9, 0xfa, 0x2, 0x33, 0x84, 0xf9, 0x2, 0xb3, 0xb7, 0xf9, 0x2, 0x3d, 0x80, 0x3e, 0x99, 0x93, 0x17, 0x19, 0x1, 0x5d, 0x8c, 0x13, 0x59, 0xf9, 0x0, 0x22, 0x85, 0xca, 0x85, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xce, 0xb3, 0x7, 0xa4, 0x40, 0x33, 0x37, 0xf4, 0x0, 0xb3, 0x6, 0xb9, 0x40, 0x63, 0x9f, 0xe6, 0x6, 0x63, 0xed, 0xf4, 0x6, 0xb3, 0x7, 0xa4, 0x0, 0x33, 0xb4, 0x87, 0x0, 0x2e, 0x99, 0x4a, 0x94, 0x1, 0xe4, 0x1, 0x45, 0x63, 0xee, 0x97, 0x2, 0x13, 0x17, 0xfa, 0x1, 0x93, 0xd7, 0x19, 0x0, 0xd9, 0x8f, 0x13, 0x87, 0xf7, 0xff, 0x93, 0x55, 0x1a, 0x0, 0x93, 0xb7, 0x17, 0x0, 0x13, 0x95, 0x34, 0x1, 0xb3, 0x87, 0xf5, 0x40, 0x93, 0xd6, 0xd4, 0x0, 0x3a, 0x95, 0xb6, 0x97, 0xb3, 0x35, 0xe5, 0x0, 0x4e, 0x86, 0xd2, 0x86, 0xbe, 0x95, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xc8, 0xb6, 0x40, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x22, 0x5c, 0x92, 0x5c, 0x2, 0x5d, 0xf2, 0x4d, 0x61, 0x61, 0x82, 0x80, 0x83, 0x27, 0x44, 0x13, 0xf1, 0x9b, 0x93, 0xe7, 0x27, 0x0, 0x5, 0xbf, 0x1, 0x45, 0xd1, 0xbf, 0x41, 0x11, 0x6, 0xc6, 0x11, 0xe6, 0x81, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x30, 0x40, 0x54, 0x93, 0x57, 0xd5, 0x0, 0xce, 0x5, 0x81, 0x46, 0x4e, 0x5, 0xdd, 0x8d, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xc2, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x6f, 0xc0, 0x6f, 0x98, 0x5, 0xc1, 0x41, 0x11, 0x2a, 0x86, 0x81, 0x46, 0x37, 0x5, 0x0, 0x12, 0x93, 0x5, 0xa0, 0x7, 0x6, 0xc6, 0x97, 0xa0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xc0, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x19, 0x45, 0x6, 0xc6, 0x4d, 0x22, 0xaa, 0x85, 0xd, 0xe9, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0xd8, 0x5f, 0xf1, 0x76, 0xfd, 0x16, 0x13, 0x67, 0x17, 0x0, 0xd8, 0xdf, 0xd8, 0x5f, 0x13, 0x67, 0x27, 0x0, 0xd8, 0xdf, 0xd8, 0x5f, 0x75, 0x9b, 0xd8, 0xdf, 0xb7, 0x87, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0xb8, 0x47, 0x75, 0x8f, 0xb8, 0xc7, 0xb2, 0x40, 0x19, 0x45, 0x41, 0x1, 0x69, 0xa2, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0xef, 0xc0, 0xf, 0x8d, 0x21, 0xc1, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0xfc, 0x57, 0x1, 0x47, 0x9d, 0x46, 0xa5, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x19, 0x46, 0x81, 0x45, 0x13, 0x5, 0x10, 0x6, 0xef, 0xa0, 0xaf, 0x85, 0x22, 0x54, 0xb2, 0x50, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x85, 0x47, 0x19, 0x47, 0x99, 0x46, 0x15, 0x46, 0x81, 0x45, 0x13, 0x5, 0x10, 0x6, 0x45, 0x61, 0x6f, 0xa0, 0xcf, 0x83, 0xef, 0xe0, 0x9f, 0xf8, 0xaa, 0x87, 0xd, 0x47, 0xd, 0x45, 0x63, 0x87, 0xe7, 0x0, 0x5, 0x47, 0x5, 0x45, 0x63, 0x83, 0xe7, 0x0, 0x7d, 0x55, 0x93, 0x5, 0x40, 0x6, 0xef, 0xf0, 0x9f, 0xad, 0x2a, 0x86, 0x9, 0x65, 0x13, 0x5, 0x5, 0x71, 0x81, 0x45, 0xef, 0xf0, 0x3f, 0xef, 0x2a, 0x84, 0xae, 0x84, 0xef, 0xf0, 0x5f, 0xf1, 0x33, 0x9, 0xa4, 0x0, 0xa, 0x85, 0xae, 0x94, 0xef, 0xf0, 0xef, 0x9f, 0xef, 0xf0, 0xaf, 0xae, 0x81, 0x47, 0x1, 0x47, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x10, 0x6, 0xef, 0x90, 0x5f, 0xfe, 0x33, 0x34, 0x89, 0x0, 0x85, 0x47, 0x1, 0x47, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x10, 0x6, 0x26, 0x94, 0xef, 0x90, 0xdf, 0xfc, 0x1, 0x47, 0x81, 0x46, 0xd, 0x46, 0x81, 0x45, 0x13, 0x5, 0x10, 0x6, 0xef, 0x90, 0x3f, 0xf5, 0xd, 0x47, 0x8d, 0x46, 0xd, 0x46, 0x81, 0x45, 0xaa, 0x89, 0x13, 0x5, 0x10, 0x6, 0xef, 0x90, 0x1f, 0xf4, 0xaa, 0x84, 0xef, 0xf0, 0x3f, 0xeb, 0xaa, 0x87, 0x63, 0x83, 0x9, 0x0, 0x99, 0xe4, 0xe3, 0xe8, 0x85, 0xfc, 0x63, 0x14, 0xb4, 0x0, 0xe3, 0xe4, 0x27, 0xfd, 0xa, 0x85, 0xef, 0xf0, 0xaf, 0x80, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x85, 0x47, 0x1c, 0xc2, 0x89, 0x47, 0x5c, 0xc2, 0x93, 0x7, 0xa0, 0xd, 0x41, 0x11, 0xb3, 0xd7, 0xb7, 0x0, 0x26, 0xc2, 0x6, 0xc6, 0x22, 0xc4, 0x85, 0x8b, 0xb2, 0x84, 0x9, 0x47, 0x8d, 0xe7, 0xb7, 0x7, 0x80, 0x40, 0x93, 0x87, 0x7, 0x0, 0x8a, 0x5, 0x33, 0x84, 0xf5, 0x0, 0x22, 0x85, 0xef, 0x60, 0xe0, 0x58, 0xb7, 0x7, 0x80, 0x40, 0x2a, 0x94, 0x93, 0x87, 0x87, 0x1d, 0x1d, 0x8c, 0x33, 0x34, 0x80, 0x0, 0x13, 0x17, 0x14, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x98, 0xc4, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xa0, 0xaf, 0xc3, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x94, 0xb2, 0x40, 0x33, 0x85, 0x87, 0x0, 0x22, 0x44, 0x3, 0x45, 0x5, 0x0, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x94, 0xaa, 0x97, 0x85, 0x5, 0x23, 0x80, 0xb7, 0x0, 0x6f, 0xa0, 0xef, 0xc1, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x2e, 0x84, 0x6, 0xc6, 0xaa, 0x84, 0xef, 0x20, 0x50, 0x60, 0xa2, 0x85, 0x13, 0x7, 0xc4, 0x0, 0x9c, 0x41, 0x91, 0xeb, 0x84, 0xc1, 0xef, 0x20, 0x30, 0x62, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xe3, 0x87, 0x97, 0xfe, 0x91, 0x5, 0xe3, 0x92, 0xe5, 0xfe, 0xef, 0x20, 0x90, 0x60, 0x13, 0x5, 0x10, 0x10, 0xd5, 0xb7, 0xb7, 0xb5, 0x81, 0x40, 0x93, 0x85, 0xc5, 0x96, 0x6f, 0xf0, 0x9f, 0xfb, 0xa1, 0x47, 0x63, 0xe7, 0xa7, 0x6, 0x41, 0x11, 0x26, 0xc2, 0x6, 0xc6, 0x22, 0xc4, 0x89, 0x47, 0xae, 0x84, 0x63, 0xe2, 0xb7, 0x6, 0x2a, 0x84, 0xef, 0x20, 0x70, 0x57, 0xef, 0x20, 0x90, 0x5a, 0xb7, 0x67, 0x81, 0x40, 0x13, 0x87, 0x7, 0xc1, 0x13, 0x15, 0x34, 0x0, 0x2a, 0x97, 0x85, 0x46, 0x3, 0x14, 0x47, 0x0, 0x93, 0x87, 0x7, 0xc1, 0x63, 0x95, 0xd4, 0x2, 0x93, 0x6, 0x14, 0x0, 0x23, 0x12, 0xd7, 0x0, 0x19, 0xe0, 0xaa, 0x97, 0x84, 0xc3, 0xef, 0x20, 0x50, 0x54, 0xef, 0x20, 0x50, 0x5a, 0x1, 0x45, 0x63, 0x53, 0x4, 0x2, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x30, 0x60, 0x27, 0xed, 0xf0, 0x7d, 0x14, 0x42, 0x4, 0x41, 0x84, 0x23, 0x12, 0x87, 0x0, 0xd9, 0xbf, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x77, 0x80, 0x40, 0x1, 0x11, 0x93, 0x87, 0x87, 0xa, 0x3e, 0xc0, 0x8a, 0x85, 0x85, 0x47, 0x5, 0x45, 0x6, 0xce, 0x2, 0xc2, 0x2, 0xc6, 0x3e, 0xc4, 0xef, 0x0, 0xb0, 0x12, 0xf2, 0x40, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x37, 0xa5, 0x81, 0x40, 0x85, 0x46, 0x1, 0x46, 0x89, 0x45, 0x13, 0x5, 0x5, 0x1b, 0x6f, 0x0, 0xd0, 0x2, 0x89, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0x60, 0x20, 0xb1, 0x47, 0x33, 0x5, 0xf5, 0x2, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x2b, 0x3e, 0x95, 0x82, 0x80, 0x89, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0xe0, 0x1d, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x28, 0x12, 0x5, 0x3e, 0x95, 0x82, 0x80, 0x89, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0xa0, 0x1b, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x47, 0x27, 0xa, 0x5, 0x3e, 0x95, 0x82, 0x80, 0x89, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0x60, 0x19, 0xb1, 0x47, 0x33, 0x5, 0xf5, 0x2, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x25, 0x3e, 0x95, 0x82, 0x80, 0x89, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0xe0, 0x16, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x23, 0xe, 0x5, 0x3e, 0x95, 0x82, 0x80, 0x85, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0xa0, 0x14, 0xb1, 0x47, 0x33, 0x5, 0xf5, 0x2, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x22, 0x3e, 0x95, 0x82, 0x80, 0x85, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0x20, 0x12, 0xb1, 0x47, 0x33, 0x5, 0xf5, 0x2, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x20, 0x3e, 0x95, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xb0, 0x9f, 0xd2, 0x9, 0x47, 0xe5, 0x47, 0x63, 0x70, 0xa7, 0x2, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0xf8, 0x47, 0xe5, 0x47, 0x7d, 0x8b, 0x19, 0xc7, 0x93, 0x7, 0x27, 0x0, 0x7d, 0x47, 0x63, 0x73, 0xf7, 0x0, 0xfd, 0x47, 0xb2, 0x40, 0x3e, 0x85, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xb0, 0x5f, 0xcf, 0x89, 0x47, 0x69, 0x47, 0x63, 0xf0, 0xa7, 0x2, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0xfc, 0x47, 0x95, 0x83, 0xfd, 0x8b, 0x99, 0xc7, 0x13, 0x87, 0x27, 0x0, 0xfd, 0x47, 0x63, 0xf3, 0xe7, 0x0, 0x7d, 0x47, 0xb2, 0x40, 0x3a, 0x85, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x4e, 0xc6, 0x22, 0xcc, 0x2a, 0x84, 0x13, 0x85, 0x1, 0xed, 0x26, 0xca, 0x4a, 0xc8, 0xb2, 0x84, 0x2e, 0x89, 0x6, 0xce, 0xef, 0xa0, 0x2f, 0xb7, 0x13, 0x77, 0x14, 0x0, 0x93, 0x87, 0x1, 0xe1, 0xca, 0x85, 0x11, 0xe7, 0x61, 0x47, 0x33, 0x87, 0xe4, 0x2, 0x3e, 0x97, 0xc, 0x43, 0x13, 0x77, 0x24, 0x0, 0x4a, 0x88, 0x19, 0xe7, 0x61, 0x47, 0x33, 0x87, 0xe4, 0x2, 0x3e, 0x97, 0x3, 0x28, 0x47, 0x0, 0x13, 0x77, 0x44, 0x0, 0xca, 0x88, 0x19, 0xe7, 0x61, 0x47, 0x33, 0x87, 0xe4, 0x2, 0x3e, 0x97, 0x83, 0x28, 0x87, 0x0, 0x13, 0x77, 0x84, 0x0, 0x4a, 0x85, 0x11, 0xe7, 0x61, 0x47, 0x33, 0x87, 0xe4, 0x2, 0x3e, 0x97, 0x48, 0x47, 0x61, 0x47, 0x33, 0x87, 0xe4, 0x2, 0x3e, 0x97, 0x14, 0x4b, 0xbd, 0x8a, 0x99, 0xe2, 0x23, 0x2a, 0x27, 0x1, 0x61, 0x47, 0xb3, 0x84, 0xe4, 0x2, 0x33, 0x86, 0x97, 0x0, 0x18, 0x4a, 0x93, 0x77, 0xf4, 0x0, 0x92, 0x7, 0x13, 0x77, 0xf7, 0xf0, 0xd9, 0x8f, 0x59, 0x8c, 0x3d, 0x88, 0xc1, 0x9b, 0xc1, 0x8f, 0x48, 0xc6, 0xc, 0xc2, 0x23, 0x22, 0x6, 0x1, 0x23, 0x24, 0x16, 0x1, 0x1c, 0xca, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0x13, 0x85, 0x1, 0xed, 0xb2, 0x49, 0x5, 0x61, 0x6f, 0xa0, 0x4f, 0xae, 0x1, 0x11, 0x4e, 0xc6, 0x13, 0x85, 0x1, 0xed, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x52, 0xc4, 0x56, 0xc2, 0x6, 0xce, 0xef, 0xa0, 0x6f, 0xab, 0x93, 0x87, 0x1, 0xe1, 0x1d, 0x47, 0x93, 0x84, 0x1, 0xe1, 0x23, 0xa2, 0xe7, 0xc, 0x1, 0x49, 0x1, 0x45, 0x13, 0x84, 0x1, 0xe1, 0xe1, 0x4a, 0x21, 0x4a, 0xb3, 0x7, 0x59, 0x3, 0xa2, 0x97, 0x9c, 0x4b, 0xbd, 0x8b, 0x85, 0xc3, 0x83, 0x27, 0x44, 0xc, 0x63, 0x74, 0xf9, 0x0, 0x23, 0x22, 0x24, 0xd, 0x1, 0xc9, 0xdc, 0x44, 0x98, 0x44, 0xd4, 0x40, 0x90, 0x40, 0x91, 0x45, 0xef, 0x10, 0x80, 0x5c, 0xc8, 0x48, 0x5, 0x9, 0xe1, 0x4, 0xe3, 0x19, 0x49, 0xfd, 0x83, 0x27, 0x44, 0xc, 0x61, 0x45, 0x33, 0x5, 0xf5, 0x2, 0x22, 0x95, 0xef, 0x0, 0xe0, 0x71, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x13, 0x85, 0x1, 0xed, 0xb2, 0x49, 0x5, 0x61, 0x6f, 0xa0, 0x8f, 0xa5, 0x1, 0x11, 0x52, 0xc4, 0x4a, 0xc8, 0x2a, 0x89, 0x13, 0x85, 0x1, 0xed, 0x22, 0xcc, 0x26, 0xca, 0x4e, 0xc6, 0x56, 0xc2, 0x6, 0xce, 0xae, 0x89, 0x1, 0x44, 0xef, 0xa0, 0x4f, 0xa2, 0x81, 0x44, 0x91, 0x4a, 0x93, 0x17, 0x24, 0x0, 0x33, 0x87, 0xf9, 0x0, 0xca, 0x97, 0xc, 0x43, 0x88, 0x43, 0x22, 0x86, 0x5, 0x4, 0xef, 0x10, 0x60, 0x60, 0xc9, 0x8c, 0xe3, 0x14, 0x54, 0xff, 0x13, 0x85, 0x1, 0xed, 0xef, 0xa0, 0x2f, 0xa1, 0xf2, 0x40, 0x62, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0xaa, 0x84, 0x1, 0x44, 0x11, 0x49, 0x93, 0x17, 0x24, 0x0, 0xa6, 0x97, 0x88, 0x43, 0xa2, 0x85, 0x5, 0x4, 0xef, 0x10, 0xe0, 0x50, 0xe3, 0x18, 0x24, 0xff, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x20, 0x50, 0x6c, 0x75, 0x71, 0x6, 0xc7, 0x22, 0xc5, 0x26, 0xc3, 0x4a, 0xc1, 0xce, 0xde, 0xd2, 0xdc, 0xd6, 0xda, 0xda, 0xd8, 0xde, 0xd6, 0xe2, 0xd4, 0xe6, 0xd2, 0xea, 0xd0, 0xee, 0xce, 0xfd, 0x47, 0x63, 0xf4, 0xa7, 0x0, 0xef, 0xf0, 0xff, 0xfc, 0x2a, 0x8a, 0x13, 0x85, 0x1, 0xed, 0xef, 0xa0, 0x8f, 0x97, 0xef, 0xf0, 0xbf, 0xea, 0x13, 0x85, 0x1, 0xed, 0xef, 0xa0, 0xcf, 0x96, 0x93, 0x87, 0x1, 0xe1, 0x3, 0xa7, 0x47, 0xc, 0x9d, 0x47, 0x93, 0x89, 0x1, 0xe1, 0x63, 0xe3, 0xe7, 0x2, 0x1, 0x44, 0x99, 0x4a, 0x11, 0x49, 0x83, 0xa7, 0x49, 0xc, 0xa2, 0x85, 0xb3, 0x87, 0x57, 0x3, 0xa2, 0x97, 0x8a, 0x7, 0xce, 0x97, 0x88, 0x43, 0x5, 0x4, 0xef, 0x10, 0x40, 0x44, 0xe3, 0x14, 0x24, 0xff, 0x13, 0x85, 0x1, 0xed, 0xef, 0xa0, 0x6f, 0x94, 0x13, 0x85, 0x1, 0xed, 0x5, 0x49, 0x2, 0xc8, 0x2, 0xca, 0x2, 0xcc, 0x2, 0xce, 0x2, 0xd0, 0x2, 0xd2, 0x2, 0xd4, 0x2, 0xd6, 0x33, 0x19, 0x49, 0x1, 0xef, 0xa0, 0x2f, 0x91, 0x1, 0x4b, 0xe1, 0x4c, 0x33, 0x4, 0x9b, 0x3, 0x13, 0x85, 0x1, 0xed, 0x2, 0xd8, 0x2, 0xda, 0x2, 0xdc, 0x2, 0xde, 0x82, 0xc0, 0x82, 0xc2, 0x82, 0xc4, 0x82, 0xc6, 0x4e, 0x94, 0xef, 0xa0, 0xf, 0x8f, 0x22, 0x8c, 0x81, 0x4b, 0x81, 0x4d, 0x81, 0x4a, 0x4c, 0x48, 0x3, 0x25, 0xc, 0x0, 0xca, 0x86, 0x56, 0x86, 0xef, 0x10, 0xa0, 0x52, 0x13, 0x87, 0xb, 0x1, 0xa, 0x97, 0x8, 0xc3, 0x4c, 0x48, 0x2a, 0xc6, 0x3, 0x25, 0xc, 0x0, 0xca, 0x86, 0x56, 0x86, 0xef, 0x10, 0x20, 0x56, 0x1c, 0x18, 0x33, 0x87, 0x77, 0x1, 0x8, 0xc3, 0x4c, 0x48, 0x2a, 0x8a, 0x3, 0x25, 0xc, 0x0, 0xca, 0x86, 0x56, 0x86, 0xef, 0x10, 0xa0, 0x5c, 0x1c, 0x10, 0x33, 0x87, 0x77, 0x1, 0x8, 0xc3, 0x4c, 0x48, 0x3, 0x25, 0xc, 0x0, 0xca, 0x86, 0x56, 0x86, 0xef, 0x10, 0x60, 0x5f, 0x9c, 0x0, 0x33, 0x87, 0x77, 0x1, 0xb2, 0x47, 0x8, 0xc3, 0x2a, 0x8d, 0x81, 0xc7, 0x63, 0x3, 0xa, 0x0, 0x85, 0x4d, 0xc2, 0x57, 0x63, 0x8, 0xfa, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x20, 0xb0, 0x58, 0x86, 0x47, 0xe3, 0x19, 0xfd, 0xfe, 0x85, 0xa, 0x91, 0x47, 0x11, 0xc, 0x91, 0xb, 0xe3, 0x9c, 0xfa, 0xf6, 0xb3, 0xa, 0x9b, 0x3, 0x13, 0x85, 0x1, 0xed, 0xef, 0xa0, 0x6f, 0x86, 0xce, 0x9a, 0x83, 0xa7, 0xa, 0x1, 0xbd, 0x8b, 0x63, 0x85, 0x7, 0xe, 0x63, 0x83, 0xd, 0xe, 0x13, 0x85, 0x1, 0xed, 0xef, 0xa0, 0x8f, 0x83, 0x41, 0x46, 0xa2, 0x85, 0x8, 0x8, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xf2, 0xaa, 0x8b, 0x3, 0xac, 0x4a, 0x1, 0x4d, 0xe5, 0x63, 0x1c, 0x8a, 0x9, 0x23, 0x20, 0x4, 0x0, 0x23, 0x22, 0x4, 0x0, 0x23, 0x24, 0x4, 0x0, 0x23, 0x26, 0x4, 0x0, 0x23, 0xaa, 0xa, 0x0, 0xe1, 0x4a, 0xb3, 0xa, 0x5b, 0x3, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xdf, 0xff, 0x8c, 0x0, 0x22, 0x85, 0xce, 0x9a, 0x83, 0xa7, 0x4a, 0x1, 0xbe, 0xc0, 0xbe, 0xc2, 0xbe, 0xc4, 0xbe, 0xc6, 0xef, 0xf0, 0x9f, 0xda, 0x83, 0xa7, 0xa, 0x1, 0x3d, 0x89, 0xa2, 0x85, 0xc1, 0x9b, 0xc9, 0x8f, 0x23, 0xa8, 0xfa, 0x0, 0x22, 0x85, 0xef, 0xf0, 0x3f, 0xd9, 0x83, 0xa7, 0xa, 0x1, 0x3d, 0x89, 0x12, 0x5, 0x93, 0xf7, 0xf7, 0xf0, 0xc9, 0x8f, 0x23, 0xa8, 0xfa, 0x0, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xdf, 0xfc, 0x52, 0x85, 0x81, 0x47, 0x1, 0x47, 0x81, 0x46, 0x1, 0x46, 0x91, 0x45, 0xef, 0x10, 0xa0, 0x2f, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x5f, 0xfb, 0x63, 0x84, 0xb, 0x0, 0x63, 0x14, 0x8a, 0x1, 0xef, 0xf0, 0x9f, 0xcc, 0x8, 0x8, 0xef, 0xf0, 0x9f, 0xda, 0xbd, 0xbd, 0x41, 0x46, 0xc, 0x10, 0x22, 0x85, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xe7, 0x8d, 0xbf, 0x63, 0x15, 0x8a, 0x1, 0x23, 0xaa, 0xaa, 0x1, 0xa5, 0xb7, 0xb2, 0x57, 0x22, 0x57, 0x92, 0x56, 0x2, 0x56, 0x91, 0x45, 0x6a, 0x85, 0xef, 0x10, 0x40, 0x2b, 0x99, 0xbf, 0x5, 0xb, 0xa1, 0x47, 0xe3, 0x16, 0xfb, 0xe4, 0x83, 0xa7, 0xc9, 0xc, 0x13, 0x49, 0xf9, 0xff, 0x13, 0x85, 0x1, 0xed, 0x33, 0x79, 0xf9, 0x0, 0x23, 0xa6, 0x29, 0xd, 0xef, 0x90, 0x5f, 0xf5, 0x2a, 0x44, 0xba, 0x40, 0xa, 0x49, 0xf6, 0x59, 0x66, 0x5a, 0xd6, 0x5a, 0x46, 0x5b, 0xb6, 0x5b, 0x26, 0x5c, 0x96, 0x5c, 0x6, 0x5d, 0xf6, 0x4d, 0x13, 0x85, 0x1, 0xed, 0x9a, 0x44, 0x49, 0x61, 0x6f, 0x90, 0x1f, 0xf3, 0x1, 0x11, 0x22, 0xcc, 0x4a, 0xc8, 0x2a, 0x89, 0x13, 0x85, 0x1, 0xed, 0x6, 0xce, 0x26, 0xca, 0xae, 0x84, 0xef, 0x90, 0x5f, 0xf0, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xdf, 0xef, 0xfd, 0x57, 0x1, 0x46, 0x63, 0x85, 0xf4, 0x0, 0x5, 0x46, 0x33, 0x16, 0x96, 0x0, 0xe1, 0x47, 0xb3, 0x7, 0xf9, 0x2, 0x13, 0x87, 0x1, 0xe1, 0x37, 0xa5, 0x81, 0x40, 0x85, 0x45, 0x91, 0x46, 0x13, 0x5, 0x45, 0x2d, 0x3e, 0x97, 0x83, 0x28, 0xc7, 0x0, 0x3, 0x28, 0x87, 0x0, 0x5c, 0x43, 0x18, 0x43, 0xef, 0x10, 0x60, 0x16, 0x2a, 0xc6, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x3f, 0xed, 0xb2, 0x45, 0x85, 0xe1, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x7f, 0xec, 0x26, 0x85, 0xef, 0xf0, 0x7f, 0xd0, 0x13, 0x5, 0x10, 0x10, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x80, 0x4a, 0x86, 0x3d, 0x45, 0xef, 0xf0, 0xbf, 0xb0, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x1f, 0xea, 0x1, 0x45, 0xcd, 0xb7, 0x5d, 0x71, 0x56, 0xda, 0xa6, 0xc2, 0xaa, 0x84, 0x13, 0x85, 0x1, 0xed, 0xca, 0xc0, 0x4e, 0xde, 0x5a, 0xd8, 0x5e, 0xd6, 0xae, 0x89, 0x36, 0x8b, 0x86, 0xc6, 0xa2, 0xc4, 0x52, 0xdc, 0x62, 0xd4, 0x66, 0xd2, 0x6a, 0xd0, 0x6e, 0xce, 0x32, 0x89, 0xef, 0x90, 0xbf, 0xe5, 0x93, 0x7, 0x1b, 0x0, 0xfd, 0x19, 0x81, 0x4b, 0x81, 0xc7, 0x85, 0x4b, 0xb3, 0x9b, 0x6b, 0x1, 0x93, 0x7, 0xc0, 0x2, 0x61, 0x4c, 0xb3, 0x87, 0xf9, 0x2, 0x13, 0x8a, 0x1, 0xe1, 0x21, 0x4d, 0x93, 0x8d, 0x41, 0x8d, 0x33, 0xc, 0x89, 0x3, 0xbe, 0x94, 0x52, 0x9c, 0x63, 0xd8, 0x9, 0x0, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x9f, 0xe3, 0x1, 0x45, 0x15, 0xa0, 0x80, 0x54, 0x63, 0x7f, 0x8d, 0x2, 0xd8, 0x50, 0xc1, 0x67, 0xfd, 0x17, 0x63, 0xa, 0xf7, 0x2, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xdf, 0xe1, 0x5a, 0x85, 0xef, 0xf0, 0xdf, 0xc5, 0x13, 0x5, 0x60, 0x10, 0xb6, 0x40, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x22, 0x5c, 0x92, 0x5c, 0x2, 0x5d, 0xf2, 0x4d, 0x61, 0x61, 0x82, 0x80, 0x93, 0x7, 0xf4, 0xff, 0x39, 0x47, 0x63, 0x78, 0xf7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x20, 0x50, 0x2e, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x1f, 0xdc, 0x83, 0x27, 0xc, 0x1, 0x13, 0xd7, 0x47, 0x0, 0x3d, 0x8b, 0x93, 0x46, 0xf7, 0xff, 0xe1, 0x8e, 0xd5, 0xc2, 0x61, 0x8f, 0x45, 0xc3, 0xbd, 0x8b, 0x93, 0xc7, 0xf7, 0xff, 0xe1, 0x8f, 0x23, 0xa4, 0xfd, 0x2, 0xb1, 0xef, 0x93, 0x77, 0x14, 0x0, 0x1, 0x47, 0x91, 0xc7, 0xe1, 0x47, 0xb3, 0x7, 0xf9, 0x2, 0xd2, 0x97, 0x98, 0x43, 0x93, 0x76, 0x24, 0x0, 0x81, 0x47, 0x91, 0xc6, 0xe1, 0x47, 0xb3, 0x7, 0xf9, 0x2, 0xd2, 0x97, 0xdc, 0x43, 0x93, 0x76, 0x44, 0x0, 0x1, 0x48, 0x99, 0xc6, 0xe1, 0x46, 0xb3, 0x6, 0xd9, 0x2, 0xd2, 0x96, 0x3, 0xa8, 0x86, 0x0, 0x21, 0x88, 0x81, 0x48, 0x19, 0xc4, 0xe1, 0x46, 0xb3, 0x6, 0xd9, 0x2, 0xd2, 0x96, 0x83, 0xa8, 0xc6, 0x0, 0x91, 0x46, 0x5e, 0x86, 0x85, 0x45, 0x26, 0x85, 0xef, 0x0, 0x70, 0x7e, 0xaa, 0x85, 0x9, 0xa8, 0x85, 0x45, 0xde, 0x86, 0x4a, 0x86, 0x13, 0x85, 0x41, 0x8d, 0x4d, 0x3d, 0x81, 0x45, 0x41, 0xdd, 0x13, 0x85, 0x1, 0xed, 0x2e, 0xc6, 0xef, 0x90, 0xff, 0xd3, 0xb2, 0x45, 0x93, 0x84, 0x44, 0xfd, 0x9d, 0xed, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xff, 0xd2, 0x5a, 0x85, 0xef, 0xf0, 0xff, 0xb6, 0x13, 0x5, 0x10, 0x10, 0x9, 0xbf, 0x22, 0x85, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x4, 0x99, 0x47, 0xb3, 0x7, 0xf9, 0x2, 0x7d, 0x15, 0x85, 0x46, 0x5e, 0x86, 0x81, 0x45, 0xaa, 0x97, 0x8a, 0x7, 0xd2, 0x97, 0x98, 0x43, 0x26, 0x85, 0xef, 0x0, 0x70, 0x78, 0x45, 0xb7, 0xe8, 0x48, 0x4a, 0x86, 0xfd, 0x19, 0xef, 0xf0, 0x3f, 0x95, 0x75, 0xb5, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0x5a, 0xc0, 0x45, 0xcd, 0x2e, 0x8b, 0x63, 0x5a, 0xb0, 0xa, 0x9d, 0x47, 0x32, 0x89, 0x63, 0xe6, 0xc7, 0xa, 0xfd, 0x47, 0xb6, 0x84, 0x63, 0xe2, 0xd7, 0xa, 0xaa, 0x8a, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x5f, 0xca, 0x93, 0x87, 0x1, 0xe1, 0x83, 0xa7, 0x87, 0xb, 0x93, 0x89, 0x1, 0xe1, 0x1, 0x44, 0xbd, 0x8b, 0x99, 0xeb, 0x37, 0xa5, 0x81, 0x40, 0xfd, 0x56, 0x1d, 0x46, 0x85, 0x45, 0x13, 0x5, 0x5, 0x30, 0xef, 0xf0, 0xff, 0xdf, 0x2a, 0x84, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xdf, 0xc8, 0x35, 0xe4, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xdf, 0xc6, 0xa6, 0x85, 0x4a, 0x85, 0xef, 0xf0, 0xff, 0xd4, 0x2a, 0x84, 0xd, 0xe9, 0xa6, 0x86, 0x4a, 0x86, 0xda, 0x85, 0x56, 0x85, 0xef, 0xf0, 0x3f, 0xdd, 0x2a, 0x84, 0xd, 0xe1, 0xa6, 0x85, 0x4a, 0x85, 0xef, 0xf0, 0x3f, 0xd3, 0x2a, 0x84, 0x19, 0xe9, 0x3, 0xa7, 0xc9, 0xc, 0x85, 0x47, 0xb3, 0x97, 0x97, 0x0, 0xd9, 0x8f, 0x23, 0xa6, 0xf9, 0xc, 0xef, 0xf0, 0x7f, 0x96, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xff, 0xc3, 0x19, 0xec, 0xef, 0xe0, 0xbf, 0xef, 0x37, 0x75, 0x80, 0x40, 0x13, 0x5, 0xe5, 0x8d, 0xef, 0xf0, 0x2f, 0xe5, 0x2a, 0x84, 0x9, 0xc5, 0xef, 0x20, 0xb0, 0xa, 0x13, 0x4, 0x20, 0x10, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x4e, 0xc6, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x52, 0xc4, 0xfd, 0x47, 0x93, 0x9, 0x20, 0x10, 0x63, 0xe7, 0xa7, 0x8, 0x2e, 0x84, 0x93, 0x9, 0x20, 0x10, 0xd1, 0xc1, 0x9c, 0x41, 0xc1, 0xc3, 0x93, 0x89, 0x1, 0xe1, 0x83, 0xa7, 0x9, 0xc, 0x2a, 0x89, 0x93, 0x84, 0x1, 0xe1, 0xb9, 0xcf, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x9f, 0xbb, 0x83, 0xa7, 0xc4, 0xc, 0x93, 0x9, 0x30, 0x10, 0xb3, 0xd7, 0x27, 0x1, 0x85, 0x8b, 0x95, 0xef, 0x83, 0xa6, 0x84, 0xc, 0xb3, 0xd7, 0x26, 0x1, 0x85, 0x8b, 0x85, 0xeb, 0xd1, 0x47, 0xb3, 0x7, 0xf9, 0x2, 0x10, 0x40, 0x81, 0x49, 0xa6, 0x97, 0x13, 0x87, 0x7, 0x8, 0x30, 0xcb, 0x50, 0x40, 0x23, 0xae, 0x7, 0xc, 0x5c, 0x44, 0x70, 0xcb, 0x3c, 0xcf, 0x1c, 0x44, 0x3c, 0xd3, 0x85, 0x47, 0xb3, 0x97, 0x27, 0x1, 0xd5, 0x8f, 0x23, 0xa4, 0xf4, 0xc, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0xdf, 0xb7, 0x11, 0xa8, 0x13, 0x85, 0x1, 0xed, 0xef, 0x90, 0x3f, 0xb1, 0x83, 0xa7, 0x9, 0xc, 0x93, 0x9, 0x10, 0x10, 0xd1, 0xfb, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0x22, 0x4a, 0x4e, 0x85, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xef, 0x90, 0xdf, 0x95, 0xb2, 0x45, 0xf2, 0x40, 0x8, 0x41, 0x5, 0x61, 0x6f, 0x90, 0x80, 0x64, 0x48, 0x41, 0x82, 0x80, 0x48, 0x41, 0x82, 0x80, 0x48, 0x41, 0x82, 0x80, 0x11, 0x5, 0x82, 0x80, 0x1c, 0x41, 0x4c, 0xc1, 0x93, 0xb5, 0x15, 0x0, 0x86, 0x7, 0xfe, 0x5, 0x85, 0x83, 0xcd, 0x8f, 0x1c, 0xc1, 0x82, 0x80, 0x1c, 0x41, 0x4c, 0xc1, 0x93, 0xb5, 0x15, 0x0, 0x86, 0x7, 0xfe, 0x5, 0x85, 0x83, 0xcd, 0x8f, 0x1c, 0xc1, 0x82, 0x80, 0x1c, 0x41, 0x4c, 0xc1, 0x93, 0xb5, 0x15, 0x0, 0x86, 0x7, 0xfe, 0x5, 0x85, 0x83, 0xcd, 0x8f, 0x1c, 0xc1, 0x82, 0x80, 0x9c, 0x41, 0x5c, 0xc1, 0xdc, 0x41, 0x1c, 0xc5, 0x9c, 0x45, 0x5c, 0xc5, 0xdc, 0x45, 0x1c, 0xc9, 0x82, 0x80, 0x9c, 0x41, 0x5c, 0xc1, 0xdc, 0x41, 0x1c, 0xc5, 0x9c, 0x45, 0x5c, 0xc5, 0xdc, 0x45, 0x1c, 0xc9, 0x82, 0x80, 0x9c, 0x41, 0x5c, 0xc1, 0xdc, 0x41, 0x1c, 0xc5, 0x9c, 0x45, 0x5c, 0xc5, 0xdc, 0x45, 0x1c, 0xc9, 0x82, 0x80, 0x19, 0xe1, 0x1, 0x45, 0x82, 0x80, 0x1c, 0x41, 0x1, 0x11, 0x6, 0xce, 0x3e, 0xc6, 0xb2, 0x47, 0x22, 0xcc, 0x26, 0xca, 0x13, 0x97, 0x37, 0x0, 0xb2, 0x47, 0xc1, 0x83, 0xbd, 0x8b, 0x63, 0x56, 0x7, 0x4, 0x8d, 0x44, 0x63, 0xf8, 0xf4, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x20, 0x0, 0x79, 0x32, 0x47, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x37, 0x39, 0x83, 0x13, 0x77, 0xc7, 0x3, 0xba, 0x97, 0x9c, 0x43, 0x2e, 0x84, 0x82, 0x97, 0x63, 0xc9, 0x84, 0x0, 0xa, 0x4, 0x22, 0x95, 0x8, 0x41, 0x1, 0xc5, 0xb2, 0x47, 0x63, 0xd3, 0x7, 0x0, 0x1, 0x45, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0xd, 0x47, 0xe3, 0x6e, 0xf7, 0xfa, 0x32, 0x47, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x36, 0x39, 0x83, 0x13, 0x77, 0xc7, 0x3, 0xba, 0x97, 0x9c, 0x43, 0x82, 0x97, 0xc1, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x8d, 0x47, 0x63, 0xd8, 0xb7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x20, 0xe0, 0x71, 0x2a, 0x84, 0x5, 0xc1, 0xb6, 0x84, 0x2e, 0x89, 0xb2, 0x89, 0xef, 0xf0, 0x1f, 0xf5, 0xa6, 0x86, 0x13, 0x86, 0x19, 0x0, 0xca, 0x85, 0xf1, 0x37, 0x89, 0xc4, 0x4e, 0x86, 0xca, 0x85, 0x22, 0x85, 0x82, 0x94, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x20, 0xc0, 0x6d, 0x39, 0x71, 0x93, 0x7, 0x85, 0xff, 0x3e, 0xc8, 0x3e, 0xca, 0x3e, 0xcc, 0x3e, 0xce, 0x3e, 0xd0, 0x3e, 0xd2, 0x3e, 0xd4, 0x3e, 0xd6, 0x1c, 0x41, 0x6, 0xde, 0x3e, 0xc6, 0xb2, 0x47, 0x32, 0x47, 0xe9, 0x83, 0x41, 0x83, 0x3d, 0x8b, 0x91, 0x8b, 0xd9, 0x8f, 0x1d, 0x47, 0x63, 0x54, 0xf7, 0x0, 0xef, 0xf0, 0x1f, 0xfc, 0xf2, 0x50, 0x8a, 0x7, 0x93, 0x87, 0x7, 0x3, 0x8a, 0x97, 0x3, 0xa5, 0x7, 0xfe, 0x21, 0x61, 0x82, 0x80, 0x1c, 0x41, 0x1, 0x11, 0x22, 0xcc, 0x3e, 0xc6, 0x32, 0x44, 0xb2, 0x47, 0x6, 0xce, 0x69, 0x80, 0xc1, 0x83, 0xbd, 0x8b, 0x11, 0x88, 0x5d, 0x8c, 0x9d, 0x47, 0x63, 0xd4, 0x87, 0x0, 0xef, 0xf0, 0xdf, 0xf8, 0xef, 0xf0, 0x9f, 0xf9, 0xb7, 0xa7, 0x81, 0x40, 0xa, 0x4, 0x93, 0x87, 0xc7, 0x34, 0xa2, 0x97, 0x9c, 0x43, 0xf2, 0x40, 0x62, 0x44, 0x3e, 0x95, 0x5, 0x61, 0x82, 0x80, 0x31, 0xc5, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0xae, 0x84, 0x2a, 0x84, 0xef, 0xf0, 0x5f, 0xfb, 0x18, 0x41, 0x85, 0x47, 0xb3, 0x95, 0x97, 0x0, 0x1c, 0x41, 0x3d, 0x8b, 0x93, 0xc5, 0xf5, 0xff, 0x6d, 0x8f, 0xc1, 0x9b, 0xd9, 0x8f, 0x1c, 0xc1, 0x1c, 0x41, 0xbd, 0x8b, 0x91, 0xeb, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0xf4, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x6f, 0x20, 0x60, 0x66, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x1d, 0xc9, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2e, 0x84, 0xef, 0xf0, 0xbf, 0xf6, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x20, 0x0, 0x5f, 0x14, 0x41, 0x85, 0x47, 0xb3, 0x97, 0x87, 0x0, 0xd5, 0x8f, 0x14, 0x41, 0xbd, 0x8b, 0xc1, 0x9a, 0xd5, 0x8f, 0x1c, 0xc1, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x11, 0x5, 0x82, 0x80, 0x11, 0x5, 0x82, 0x80, 0x79, 0x71, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6, 0xd6, 0x22, 0xd4, 0xaa, 0x8b, 0x2e, 0x8c, 0xb2, 0x89, 0x36, 0x8b, 0xba, 0x8a, 0xbe, 0x84, 0x42, 0x89, 0x46, 0x8a, 0xf1, 0x4c, 0x81, 0xe5, 0x93, 0x1c, 0x26, 0x0, 0xf1, 0xc, 0x5, 0x66, 0x21, 0x6, 0xe6, 0x85, 0x11, 0x45, 0xef, 0x80, 0xbf, 0xbd, 0x2a, 0x84, 0x45, 0xc5, 0x66, 0x86, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x75, 0x63, 0x14, 0xc, 0x0, 0x13, 0xc, 0xc4, 0x1, 0x1c, 0x44, 0x93, 0xf9, 0xf9, 0x3f, 0x37, 0x7, 0xf1, 0xff, 0x93, 0xf7, 0x7, 0xc0, 0xb3, 0xe9, 0x37, 0x1, 0x23, 0x24, 0x34, 0x1, 0x1c, 0x44, 0x7d, 0x17, 0x13, 0x79, 0x19, 0x0, 0xf9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xf0, 0x7d, 0x17, 0xf9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xf9, 0x8f, 0x76, 0x9, 0xb3, 0xe7, 0x27, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x7d, 0x17, 0x85, 0x88, 0xf9, 0x8f, 0xfa, 0x4, 0xc5, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x13, 0xb7, 0x1a, 0x0, 0x7e, 0x7, 0x86, 0x7, 0x85, 0x83, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x40, 0x42, 0xa, 0x23, 0x26, 0x54, 0x1, 0xc1, 0x9b, 0x1c, 0xc0, 0x83, 0x28, 0x4, 0x0, 0xc2, 0x57, 0x23, 0x28, 0x74, 0x1, 0xc2, 0x8, 0x93, 0xd8, 0x8, 0x1, 0xb3, 0xe8, 0x48, 0x1, 0x23, 0x20, 0x14, 0x1, 0x23, 0x2a, 0x64, 0x1, 0x23, 0x2c, 0x84, 0x1, 0x5c, 0xc0, 0x21, 0x4, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x5d, 0x71, 0xa6, 0xc2, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x5a, 0xd8, 0x5e, 0xd6, 0x62, 0xd4, 0x66, 0xd2, 0x86, 0xc6, 0xa2, 0xc4, 0x6a, 0xd0, 0x6e, 0xce, 0xaa, 0x8c, 0x2e, 0x8b, 0xb2, 0x84, 0xb6, 0x8a, 0x3a, 0x8c, 0xbe, 0x8b, 0xc2, 0x89, 0x46, 0x8a, 0x13, 0x9, 0xc0, 0x2, 0x89, 0xe5, 0x13, 0x99, 0x26, 0x0, 0x13, 0x9, 0xc9, 0x2, 0x5, 0x66, 0x21, 0x6, 0xca, 0x85, 0x11, 0x45, 0xef, 0x80, 0xff, 0xac, 0x2a, 0x84, 0x63, 0x3, 0x5, 0x10, 0x4a, 0x86, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x64, 0x63, 0x14, 0xb, 0x0, 0x13, 0xb, 0xc4, 0x2, 0x3, 0xad, 0x4, 0x0, 0x6a, 0x85, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xb3, 0x2a, 0x89, 0xc8, 0x40, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xb2, 0x2a, 0xc6, 0x88, 0x44, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xb1, 0xaa, 0x8d, 0xc8, 0x44, 0x97, 0x90, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xb0, 0xb2, 0x47, 0x3e, 0x99, 0x6e, 0x99, 0x2a, 0x99, 0x63, 0x88, 0x2a, 0x1, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x20, 0xc0, 0x41, 0x1c, 0x44, 0x93, 0xfa, 0xfa, 0x3f, 0x37, 0x7, 0xf1, 0xff, 0x93, 0xf7, 0x7, 0xc0, 0xb3, 0xea, 0x57, 0x1, 0x23, 0x24, 0x54, 0x1, 0x1c, 0x44, 0x7d, 0x17, 0x13, 0x7a, 0x1a, 0x0, 0xf9, 0x8f, 0x41, 0x67, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xf0, 0x7d, 0x17, 0xf9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xf9, 0x8f, 0x76, 0xa, 0xb3, 0xe7, 0x47, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x7d, 0x17, 0x93, 0xf9, 0x19, 0x0, 0xf9, 0x8f, 0xfa, 0x9, 0xb3, 0xe7, 0x37, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x13, 0xb7, 0x1b, 0x0, 0x7e, 0x7, 0x86, 0x7, 0x85, 0x83, 0xd9, 0x8f, 0x1c, 0xc4, 0x23, 0x2e, 0xa4, 0x1, 0xdc, 0x40, 0x23, 0x26, 0x74, 0x1, 0x23, 0x28, 0x94, 0x1, 0x1c, 0xd0, 0x9c, 0x44, 0x23, 0x2a, 0x84, 0x1, 0x23, 0x2c, 0x64, 0x1, 0x5c, 0xd0, 0xdc, 0x44, 0x1c, 0xd4, 0x1c, 0x40, 0xc1, 0x9b, 0x1c, 0xc0, 0x1c, 0x40, 0x46, 0x47, 0xc2, 0x7, 0x42, 0x7, 0xc1, 0x83, 0xd9, 0x8f, 0x1c, 0xc0, 0xd6, 0x47, 0x5c, 0xc0, 0x21, 0x4, 0xb6, 0x40, 0x22, 0x85, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x22, 0x5c, 0x92, 0x5c, 0x2, 0x5d, 0xf2, 0x4d, 0x61, 0x61, 0x82, 0x80, 0x79, 0x71, 0x56, 0xca, 0xb2, 0x8a, 0x5, 0x66, 0x5a, 0xc8, 0x5e, 0xc6, 0x2e, 0x8b, 0xaa, 0x8b, 0x21, 0x6, 0xf1, 0x45, 0x11, 0x45, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x62, 0xc4, 0x6, 0xd6, 0xb6, 0x89, 0xba, 0x84, 0x3e, 0x8c, 0x42, 0x89, 0x46, 0x8a, 0xef, 0x80, 0x5f, 0x97, 0x2a, 0x84, 0x41, 0xc9, 0x71, 0x46, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x4f, 0x1c, 0x44, 0x37, 0x7, 0xf1, 0xff, 0x7d, 0x17, 0xf9, 0x8f, 0x37, 0x7, 0x2, 0x0, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xf0, 0x7d, 0x17, 0xf9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0x13, 0x7c, 0x1c, 0x0, 0xf9, 0x8f, 0x76, 0xc, 0xb3, 0xe7, 0x87, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x7d, 0x17, 0x85, 0x88, 0xf9, 0x8f, 0xfa, 0x4, 0xc5, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x13, 0xb7, 0x19, 0x0, 0x7e, 0x7, 0x86, 0x7, 0x85, 0x83, 0xd9, 0x8f, 0x1c, 0xc4, 0x23, 0x2a, 0x64, 0x1, 0x23, 0x2c, 0x54, 0x1, 0x1c, 0x40, 0x42, 0x9, 0x23, 0x26, 0x34, 0x1, 0xc1, 0x9b, 0x1c, 0xc0, 0x1c, 0x40, 0x23, 0x28, 0x74, 0x1, 0xc2, 0x7, 0xc1, 0x83, 0x33, 0xe9, 0x27, 0x1, 0x23, 0x20, 0x24, 0x1, 0x23, 0x22, 0x44, 0x1, 0x21, 0x4, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x41, 0x11, 0xae, 0x88, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0x2, 0xc6, 0x8a, 0x87, 0x1, 0x47, 0x11, 0x48, 0x63, 0x41, 0xc7, 0x2, 0x4c, 0x45, 0x10, 0x49, 0x18, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x45, 0x2, 0x82, 0x46, 0x8, 0x45, 0x79, 0x83, 0xf5, 0x83, 0x85, 0x8b, 0x5, 0x8b, 0x41, 0x1, 0x6f, 0xf0, 0x3f, 0xef, 0xe3, 0x1, 0x7, 0xff, 0x93, 0x15, 0x27, 0x0, 0xb6, 0x95, 0x8c, 0x41, 0x5, 0x7, 0x8c, 0xc3, 0x91, 0x7, 0xf1, 0xb7, 0x79, 0x71, 0x56, 0xca, 0xb2, 0x8a, 0x5, 0x66, 0x5a, 0xc8, 0x5e, 0xc6, 0x2e, 0x8b, 0xaa, 0x8b, 0x21, 0x6, 0xf1, 0x45, 0x11, 0x45, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x62, 0xc4, 0x6, 0xd6, 0xb6, 0x89, 0xba, 0x84, 0x3e, 0x8c, 0x42, 0x89, 0x46, 0x8a, 0xef, 0x80, 0xff, 0x84, 0x2a, 0x84, 0x41, 0xc9, 0x71, 0x46, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x3c, 0x1c, 0x44, 0x37, 0x7, 0xf1, 0xff, 0x7d, 0x17, 0xf9, 0x8f, 0x37, 0x7, 0x3, 0x0, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xf0, 0x7d, 0x17, 0xf9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0x13, 0x7c, 0x1c, 0x0, 0xf9, 0x8f, 0x76, 0xc, 0xb3, 0xe7, 0x87, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x7d, 0x17, 0x85, 0x88, 0xf9, 0x8f, 0xfa, 0x4, 0xc5, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x13, 0xb7, 0x19, 0x0, 0x7e, 0x7, 0x86, 0x7, 0x85, 0x83, 0xd9, 0x8f, 0x1c, 0xc4, 0x23, 0x2a, 0x64, 0x1, 0x23, 0x2c, 0x54, 0x1, 0x1c, 0x40, 0x42, 0x9, 0x23, 0x26, 0x34, 0x1, 0xc1, 0x9b, 0x1c, 0xc0, 0x1c, 0x40, 0x23, 0x28, 0x74, 0x1, 0xc2, 0x7, 0xc1, 0x83, 0x33, 0xe9, 0x27, 0x1, 0x23, 0x20, 0x24, 0x1, 0x23, 0x22, 0x44, 0x1, 0x21, 0x4, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x41, 0x11, 0xae, 0x88, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0x2, 0xc6, 0x8a, 0x87, 0x1, 0x47, 0x11, 0x48, 0x63, 0x41, 0xc7, 0x2, 0x4c, 0x45, 0x10, 0x49, 0x18, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x45, 0x2, 0x82, 0x46, 0x8, 0x45, 0x79, 0x83, 0xf5, 0x83, 0x85, 0x8b, 0x5, 0x8b, 0x41, 0x1, 0x6f, 0xf0, 0x3f, 0xef, 0xe3, 0x1, 0x7, 0xff, 0x93, 0x15, 0x27, 0x0, 0xb6, 0x95, 0x8c, 0x41, 0x5, 0x7, 0x8c, 0xc3, 0x91, 0x7, 0xf1, 0xb7, 0x79, 0x71, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6, 0xd6, 0x22, 0xd4, 0xaa, 0x8b, 0xae, 0x89, 0x32, 0x8a, 0x36, 0x8b, 0x3a, 0x8c, 0xbe, 0x84, 0x42, 0x89, 0xc6, 0x8a, 0x93, 0xc, 0x80, 0x2, 0x89, 0xe5, 0x93, 0x1c, 0x26, 0x0, 0x93, 0x8c, 0x8c, 0x2, 0x5, 0x66, 0x21, 0x6, 0xe6, 0x85, 0x11, 0x45, 0xef, 0x80, 0x8f, 0xf1, 0x2a, 0x84, 0x4d, 0xc9, 0x66, 0x86, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x29, 0x63, 0x94, 0x9, 0x0, 0x93, 0x9, 0x84, 0x2, 0x1c, 0x44, 0x13, 0x7a, 0xfa, 0x3f, 0x37, 0x7, 0xf1, 0xff, 0x93, 0xf7, 0x7, 0xc0, 0x33, 0xea, 0x47, 0x1, 0x23, 0x24, 0x44, 0x1, 0x1c, 0x44, 0x7d, 0x17, 0x13, 0x79, 0x19, 0x0, 0xf9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0x10, 0x76, 0x9, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xf9, 0x8f, 0xb3, 0xe7, 0x27, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x85, 0x88, 0x7d, 0x17, 0xfa, 0x4, 0xf9, 0x8f, 0xc5, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x23, 0x2e, 0x74, 0x1, 0x23, 0x20, 0x64, 0x3, 0x86, 0x7, 0x85, 0x83, 0x1c, 0xc4, 0x23, 0x22, 0x34, 0x3, 0x83, 0x27, 0xc, 0x0, 0xc2, 0xa, 0x5c, 0xc4, 0x83, 0x27, 0x4c, 0x0, 0x1c, 0xc8, 0x83, 0x27, 0x8c, 0x0, 0x5c, 0xc8, 0x83, 0x27, 0xcc, 0x0, 0x1c, 0xcc, 0x1c, 0x40, 0xc1, 0x9b, 0x1c, 0xc0, 0x83, 0x28, 0x4, 0x0, 0xc2, 0x57, 0xc2, 0x8, 0x93, 0xd8, 0x8, 0x1, 0xb3, 0xe8, 0x58, 0x1, 0x23, 0x20, 0x14, 0x1, 0x5c, 0xc0, 0x21, 0x4, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6, 0xd6, 0x22, 0xd4, 0x2a, 0x8c, 0x2e, 0x8a, 0xb2, 0x89, 0xb6, 0x8a, 0xba, 0x8b, 0x3e, 0x8b, 0xc2, 0x84, 0x46, 0x89, 0x93, 0xc, 0x80, 0x3, 0x89, 0xe5, 0x93, 0x9c, 0x26, 0x0, 0x93, 0x8c, 0x8c, 0x3, 0x5, 0x66, 0x21, 0x6, 0xe6, 0x85, 0x11, 0x45, 0xef, 0x80, 0x6f, 0xe0, 0x2a, 0x84, 0x61, 0xc1, 0x66, 0x86, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x18, 0x63, 0x14, 0xa, 0x0, 0x13, 0xa, 0x84, 0x3, 0x1c, 0x44, 0x93, 0xfa, 0xfa, 0x3f, 0x37, 0x7, 0xf1, 0xff, 0x93, 0xf7, 0x7, 0xc0, 0xb3, 0xea, 0x57, 0x1, 0x23, 0x24, 0x54, 0x1, 0x1c, 0x44, 0x7d, 0x17, 0x13, 0x79, 0x19, 0x0, 0xf9, 0x8f, 0x41, 0x67, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0x10, 0x76, 0x9, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xf9, 0x8f, 0xb3, 0xe7, 0x27, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x7d, 0x17, 0x85, 0x88, 0xf9, 0x8f, 0xfa, 0x4, 0xc5, 0x8f, 0x1c, 0xc4, 0x14, 0x44, 0x23, 0x2e, 0x84, 0x1, 0x23, 0x20, 0x74, 0x3, 0x86, 0x6, 0x85, 0x82, 0x14, 0xc4, 0x23, 0x22, 0x44, 0x3, 0x13, 0x5, 0xc4, 0x0, 0x41, 0x46, 0xda, 0x85, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x10, 0x83, 0xa7, 0x9, 0x0, 0x1c, 0xd4, 0x83, 0xa7, 0x49, 0x0, 0x5c, 0xd4, 0x83, 0xa7, 0x89, 0x0, 0x1c, 0xd8, 0x83, 0xa7, 0xc9, 0x0, 0x5c, 0xd8, 0x1c, 0x40, 0xc1, 0x9b, 0x1c, 0xc0, 0x1c, 0x40, 0x42, 0x57, 0xc2, 0x7, 0x42, 0x7, 0xc1, 0x83, 0xd9, 0x8f, 0x1c, 0xc0, 0xd2, 0x57, 0x5c, 0xc0, 0x21, 0x4, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x5a, 0xc8, 0x32, 0x8b, 0x5, 0x66, 0x5e, 0xc6, 0x62, 0xc4, 0xae, 0x8b, 0x2a, 0x8c, 0x21, 0x6, 0x93, 0x5, 0x80, 0x2, 0x11, 0x45, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x6, 0xd6, 0xb6, 0x89, 0xba, 0x84, 0x3e, 0x89, 0x42, 0x8a, 0xc6, 0x8a, 0xef, 0x80, 0x4f, 0xcf, 0x2a, 0x84, 0x45, 0xc1, 0x13, 0x6, 0x80, 0x2, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x6, 0x1c, 0x44, 0x37, 0x7, 0xf1, 0xff, 0x7d, 0x17, 0xf9, 0x8f, 0x37, 0x7, 0x2, 0x0, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0x10, 0x13, 0x79, 0x19, 0x0, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xf9, 0x8f, 0x76, 0x9, 0xb3, 0xe7, 0x27, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x85, 0x88, 0x7d, 0x17, 0xfa, 0x4, 0xf9, 0x8f, 0xc5, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x23, 0x2e, 0x84, 0x1, 0x42, 0xa, 0x86, 0x7, 0x85, 0x83, 0x1c, 0xc4, 0x83, 0xa7, 0x9, 0x0, 0x23, 0x20, 0x74, 0x3, 0x23, 0x22, 0x64, 0x3, 0x5c, 0xc4, 0x83, 0xa7, 0x49, 0x0, 0x1c, 0xc8, 0x83, 0xa7, 0x89, 0x0, 0x5c, 0xc8, 0x83, 0xa7, 0xc9, 0x0, 0x1c, 0xcc, 0x1c, 0x40, 0xc1, 0x9b, 0x1c, 0xc0, 0x3, 0x28, 0x4, 0x0, 0x42, 0x8, 0x13, 0x58, 0x8, 0x1, 0x33, 0x68, 0x48, 0x1, 0x23, 0x20, 0x4, 0x1, 0x23, 0x22, 0x54, 0x1, 0x21, 0x4, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0xae, 0x88, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0x2, 0xc6, 0xa, 0x87, 0x81, 0x47, 0x11, 0x48, 0x63, 0xd4, 0xc7, 0x0, 0x63, 0x93, 0x7, 0x3, 0x4c, 0x45, 0x10, 0x49, 0x18, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x45, 0x2, 0x8, 0x45, 0x79, 0x83, 0xf5, 0x83, 0x8a, 0x86, 0x85, 0x8b, 0x5, 0x8b, 0xef, 0xf0, 0xdf, 0xed, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x93, 0x95, 0x27, 0x0, 0xb6, 0x95, 0x8c, 0x41, 0x85, 0x7, 0xc, 0xc3, 0x11, 0x7, 0xe1, 0xb7, 0x79, 0x71, 0x5a, 0xc8, 0x32, 0x8b, 0x5, 0x66, 0x5e, 0xc6, 0x62, 0xc4, 0xae, 0x8b, 0x2a, 0x8c, 0x21, 0x6, 0x93, 0x5, 0x80, 0x2, 0x11, 0x45, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x6, 0xd6, 0xb6, 0x89, 0xba, 0x84, 0x3e, 0x89, 0x42, 0x8a, 0xc6, 0x8a, 0xef, 0x80, 0x6f, 0xbb, 0x2a, 0x84, 0x45, 0xc1, 0x13, 0x6, 0x80, 0x2, 0x81, 0x45, 0x97, 0x80, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xf3, 0x1c, 0x44, 0x37, 0x7, 0xf1, 0xff, 0x7d, 0x17, 0xf9, 0x8f, 0x37, 0x7, 0x3, 0x0, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0x10, 0x13, 0x79, 0x19, 0x0, 0xd9, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xf9, 0x8f, 0x76, 0x9, 0xb3, 0xe7, 0x27, 0x1, 0x1c, 0xc4, 0x1c, 0x44, 0x37, 0x7, 0x0, 0xc0, 0x85, 0x88, 0x7d, 0x17, 0xfa, 0x4, 0xf9, 0x8f, 0xc5, 0x8f, 0x1c, 0xc4, 0x1c, 0x44, 0x23, 0x2e, 0x84, 0x1, 0x42, 0xa, 0x86, 0x7, 0x85, 0x83, 0x1c, 0xc4, 0x83, 0xa7, 0x9, 0x0, 0x23, 0x20, 0x74, 0x3, 0x23, 0x22, 0x64, 0x3, 0x5c, 0xc4, 0x83, 0xa7, 0x49, 0x0, 0x1c, 0xc8, 0x83, 0xa7, 0x89, 0x0, 0x5c, 0xc8, 0x83, 0xa7, 0xc9, 0x0, 0x1c, 0xcc, 0x1c, 0x40, 0xc1, 0x9b, 0x1c, 0xc0, 0x3, 0x28, 0x4, 0x0, 0x42, 0x8, 0x13, 0x58, 0x8, 0x1, 0x33, 0x68, 0x48, 0x1, 0x23, 0x20, 0x4, 0x1, 0x23, 0x22, 0x54, 0x1, 0x21, 0x4, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0xae, 0x88, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0x2, 0xc6, 0xa, 0x87, 0x81, 0x47, 0x11, 0x48, 0x63, 0xd4, 0xc7, 0x0, 0x63, 0x93, 0x7, 0x3, 0x4c, 0x45, 0x10, 0x49, 0x18, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x45, 0x2, 0x8, 0x45, 0x79, 0x83, 0xf5, 0x83, 0x8a, 0x86, 0x85, 0x8b, 0x5, 0x8b, 0xef, 0xf0, 0xdf, 0xed, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x93, 0x95, 0x27, 0x0, 0xb6, 0x95, 0x8c, 0x41, 0x85, 0x7, 0xc, 0xc3, 0x11, 0x7, 0xe1, 0xb7, 0x1, 0x11, 0x46, 0xc0, 0xc2, 0x88, 0x3e, 0x88, 0xba, 0x87, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x6, 0xce, 0xef, 0xf0, 0xf, 0xe8, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0xae, 0x88, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0x2, 0xc6, 0x8a, 0x87, 0x1, 0x47, 0x11, 0x48, 0x63, 0x43, 0xc7, 0x2, 0xc, 0x41, 0x18, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x45, 0x2, 0x82, 0x46, 0x50, 0x45, 0x8, 0x45, 0x79, 0x83, 0xf5, 0x83, 0x85, 0x8b, 0x5, 0x8b, 0x93, 0xf5, 0xf5, 0x3f, 0x41, 0x1, 0x6f, 0xf0, 0xff, 0xfa, 0xe3, 0xf, 0x7, 0xfd, 0x93, 0x15, 0x27, 0x0, 0xb6, 0x95, 0x8c, 0x41, 0x5, 0x7, 0x8c, 0xc3, 0x91, 0x7, 0xe1, 0xb7, 0x1, 0x11, 0x2, 0x53, 0x46, 0xc0, 0xc2, 0x88, 0x1a, 0xc2, 0x3e, 0x88, 0xba, 0x87, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x6, 0xce, 0xef, 0xf0, 0x6f, 0xf1, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x79, 0x71, 0x6, 0xd6, 0x2, 0xc8, 0x2, 0xca, 0x2, 0xcc, 0x2, 0xce, 0x1c, 0x8, 0x1, 0x47, 0x91, 0x48, 0x63, 0x54, 0xc7, 0x0, 0x63, 0x1b, 0x17, 0x3, 0x10, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x5, 0x0, 0x2e, 0xc0, 0x83, 0x28, 0x45, 0x2, 0x42, 0x47, 0x54, 0x45, 0x93, 0x5, 0x45, 0x1, 0x8, 0x45, 0xf9, 0x83, 0x13, 0x58, 0xd8, 0x1, 0x13, 0x78, 0x18, 0x0, 0x85, 0x8b, 0x13, 0x76, 0xf6, 0x3f, 0xef, 0xf0, 0xdf, 0xf9, 0xb2, 0x50, 0x45, 0x61, 0x82, 0x80, 0x13, 0x18, 0x27, 0x0, 0x36, 0x98, 0x3, 0x28, 0x8, 0x0, 0x5, 0x7, 0x23, 0xa0, 0x7, 0x1, 0x91, 0x7, 0x55, 0xbf, 0x1, 0x11, 0x46, 0xc0, 0xc2, 0x88, 0x3e, 0x88, 0xba, 0x87, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x6, 0xce, 0xef, 0xf0, 0x3f, 0xa5, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0xae, 0x88, 0x2, 0xc0, 0x2, 0xc2, 0x2, 0xc4, 0x2, 0xc6, 0xa, 0x87, 0x81, 0x47, 0x11, 0x48, 0x63, 0xd4, 0xc7, 0x0, 0x63, 0x95, 0x7, 0x3, 0xc, 0x41, 0x18, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x45, 0x2, 0x50, 0x45, 0x8, 0x45, 0x79, 0x83, 0xf5, 0x83, 0x8a, 0x86, 0x85, 0x8b, 0x5, 0x8b, 0x93, 0xf5, 0xf5, 0x3f, 0xef, 0xf0, 0xbf, 0xfa, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x93, 0x95, 0x27, 0x0, 0xb6, 0x95, 0x8c, 0x41, 0x85, 0x7, 0xc, 0xc3, 0x11, 0x7, 0xd1, 0xb7, 0x1, 0x11, 0x2, 0x53, 0x46, 0xc0, 0xc2, 0x88, 0x1a, 0xc2, 0x3e, 0x88, 0xba, 0x87, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x6, 0xce, 0xef, 0xf0, 0x1f, 0xaf, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x79, 0x71, 0x6, 0xd6, 0x2, 0xc8, 0x2, 0xca, 0x2, 0xcc, 0x2, 0xce, 0x18, 0x8, 0x81, 0x47, 0x91, 0x48, 0x63, 0xd4, 0xc7, 0x0, 0x63, 0x9b, 0x17, 0x3, 0x10, 0x41, 0x1c, 0x41, 0x3, 0x28, 0x5, 0x0, 0x2e, 0xc0, 0x83, 0x28, 0x45, 0x2, 0x54, 0x45, 0x93, 0x5, 0x45, 0x1, 0x8, 0x45, 0xf9, 0x83, 0x13, 0x58, 0xd8, 0x1, 0x18, 0x8, 0x13, 0x78, 0x18, 0x0, 0x85, 0x8b, 0x13, 0x76, 0xf6, 0x3f, 0xef, 0xf0, 0xdf, 0xf9, 0xb2, 0x50, 0x45, 0x61, 0x82, 0x80, 0x13, 0x98, 0x27, 0x0, 0x36, 0x98, 0x3, 0x28, 0x8, 0x0, 0x85, 0x7, 0x23, 0x20, 0x7, 0x1, 0x11, 0x7, 0x55, 0xbf, 0x79, 0x71, 0x6, 0xce, 0x3a, 0xd0, 0x3e, 0xd2, 0x42, 0xd4, 0x46, 0xd6, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x70, 0x26, 0x1c, 0x41, 0x2e, 0x83, 0xb2, 0x85, 0xc1, 0x83, 0x36, 0x86, 0x14, 0x10, 0x36, 0xc6, 0xbd, 0x8b, 0xd, 0x47, 0xe3, 0x61, 0xf7, 0xfe, 0x1c, 0x41, 0xc1, 0x83, 0xbd, 0x8b, 0xe3, 0x6c, 0xf7, 0xfc, 0x18, 0x41, 0x39, 0x83, 0x63, 0xe, 0x3, 0x0, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x77, 0xc7, 0x3, 0x93, 0x87, 0xc7, 0x39, 0xba, 0x97, 0x9c, 0x43, 0x82, 0x97, 0xf2, 0x40, 0x45, 0x61, 0x82, 0x80, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x77, 0xc7, 0x3, 0x93, 0x87, 0xc7, 0x38, 0xe5, 0xb7, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x26, 0xca, 0x8d, 0x47, 0x1, 0x46, 0x2e, 0x84, 0x63, 0xd2, 0xb7, 0x2, 0x81, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0xd0, 0x1f, 0xa2, 0x85, 0x93, 0x4, 0x16, 0x0, 0x2a, 0xc6, 0xef, 0xf0, 0xaf, 0xbe, 0x32, 0x45, 0xa2, 0x85, 0xef, 0xf0, 0x8f, 0xa2, 0x26, 0x86, 0x6d, 0xf5, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0xb7, 0x86, 0x80, 0x40, 0x93, 0x86, 0xe6, 0xc7, 0x1, 0x46, 0x6f, 0xf0, 0x4f, 0xa9, 0x5d, 0x71, 0xbe, 0xc2, 0x3c, 0x18, 0x6, 0xd6, 0x32, 0xdc, 0x36, 0xde, 0xba, 0xc0, 0xc2, 0xc4, 0xc6, 0xc6, 0x3e, 0xc4, 0x59, 0xc5, 0x2, 0xc8, 0x2, 0xca, 0x2, 0xcc, 0x2, 0xce, 0x10, 0x8, 0x81, 0x46, 0x1, 0x47, 0x11, 0x48, 0x63, 0x4d, 0xb7, 0x2, 0x91, 0xc2, 0x3e, 0xc4, 0x1c, 0x41, 0x3e, 0xc6, 0xb2, 0x47, 0x13, 0x97, 0x37, 0x0, 0x63, 0x4d, 0x7, 0x2, 0xb2, 0x47, 0xd, 0x47, 0xc1, 0x83, 0xbd, 0x8b, 0x63, 0x6d, 0xf7, 0x2, 0x32, 0x47, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x32, 0x39, 0x83, 0x13, 0x77, 0xc7, 0x3, 0xba, 0x97, 0x9c, 0x43, 0xc2, 0x45, 0x89, 0xa0, 0xe3, 0x5, 0x7, 0xfd, 0x94, 0x43, 0x5, 0x7, 0x91, 0x7, 0x14, 0xc2, 0x11, 0x6, 0x85, 0x46, 0x5d, 0xbf, 0xb2, 0x47, 0xd, 0x47, 0xc1, 0x83, 0xbd, 0x8b, 0x63, 0x78, 0xf7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x30, 0x14, 0x32, 0x47, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x33, 0x39, 0x83, 0x13, 0x77, 0xc7, 0x3, 0xba, 0x97, 0x9c, 0x43, 0xc, 0x8, 0x82, 0x97, 0xb2, 0x50, 0x61, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x8d, 0x47, 0x63, 0xd8, 0xc7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x70, 0x10, 0x2a, 0x84, 0xae, 0x89, 0x32, 0x89, 0x81, 0x44, 0x19, 0xcc, 0x22, 0x85, 0xef, 0xf0, 0x4f, 0xa6, 0x1c, 0x41, 0xbd, 0x8b, 0xdd, 0x8c, 0x63, 0x8, 0x34, 0x1, 0x22, 0x85, 0xca, 0x85, 0xef, 0xf0, 0x4f, 0x92, 0x2a, 0x84, 0xd5, 0xb7, 0xf2, 0x40, 0x62, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x8d, 0x47, 0x63, 0xd4, 0xc7, 0x0, 0xef, 0xf0, 0x2f, 0x9d, 0x2a, 0x84, 0x2e, 0x89, 0xb2, 0x84, 0xb6, 0x89, 0x5, 0xc0, 0x22, 0x85, 0xef, 0xf0, 0x8f, 0xa1, 0x5c, 0x41, 0xb3, 0xf7, 0x37, 0x1, 0x91, 0xeb, 0x63, 0x8, 0x24, 0x1, 0x22, 0x85, 0xa6, 0x85, 0xef, 0xf0, 0x6f, 0x8d, 0x2a, 0x84, 0xcd, 0xb7, 0x1, 0x44, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x8d, 0x47, 0x63, 0xd8, 0xc7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x10, 0x6, 0x2a, 0x84, 0xae, 0x89, 0x32, 0x89, 0xb6, 0x84, 0x31, 0xc8, 0x63, 0x2, 0x34, 0x5, 0xca, 0x85, 0x22, 0x85, 0xef, 0xf0, 0xaf, 0x88, 0x2a, 0x8a, 0x22, 0x85, 0xef, 0xf0, 0xf, 0x9b, 0x5c, 0x41, 0xe5, 0x8f, 0x99, 0xe7, 0x22, 0x85, 0xca, 0x85, 0xef, 0xf0, 0x4f, 0x87, 0x2a, 0x84, 0xe9, 0xbf, 0x52, 0x85, 0xef, 0xf0, 0x8f, 0x99, 0x5c, 0x41, 0xe5, 0x8f, 0xed, 0xf7, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x22, 0x85, 0xef, 0xf0, 0xaf, 0x97, 0x5c, 0x41, 0xe5, 0x8f, 0xf1, 0xd7, 0xcd, 0xb7, 0x1, 0x44, 0xf9, 0xbf, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x8d, 0x47, 0x63, 0xd8, 0xc7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x60, 0x7e, 0xae, 0x84, 0x32, 0x84, 0xef, 0xf0, 0x3f, 0xf6, 0x11, 0xc9, 0x63, 0x89, 0xa4, 0x0, 0xa2, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x6f, 0xf0, 0xaf, 0x80, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x8d, 0x47, 0x63, 0xd8, 0xc7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x0, 0x7a, 0x2a, 0x84, 0xae, 0x89, 0xb2, 0x84, 0xef, 0xf0, 0xbf, 0xec, 0x2a, 0x89, 0xd, 0xc1, 0x63, 0x0, 0xa4, 0x2, 0xa6, 0x85, 0x22, 0x85, 0xef, 0xe0, 0x7f, 0xfc, 0x63, 0xb, 0xa9, 0x0, 0x63, 0x8, 0x34, 0x1, 0x22, 0x85, 0xa6, 0x85, 0xef, 0xe0, 0x7f, 0xfb, 0x2a, 0x84, 0x7d, 0xf1, 0x1, 0x44, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0xef, 0xc0, 0xf, 0x87, 0x85, 0x67, 0x93, 0x87, 0x87, 0x38, 0x48, 0x0, 0x2, 0xc4, 0x2, 0xc6, 0x3e, 0xc2, 0xef, 0x60, 0xb0, 0x44, 0x19, 0xc1, 0xef, 0x10, 0x0, 0x6c, 0xef, 0x40, 0x20, 0x5f, 0x1, 0x45, 0x9, 0x29, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x60, 0x90, 0x12, 0xef, 0x60, 0x70, 0x1d, 0xef, 0x60, 0x80, 0x7f, 0xb7, 0xa5, 0x81, 0x40, 0x37, 0x95, 0x80, 0x40, 0x81, 0x47, 0x1, 0x48, 0x5, 0x47, 0x81, 0x46, 0x5, 0x66, 0x93, 0x85, 0x85, 0xcd, 0x13, 0x5, 0x65, 0xb7, 0xef, 0x0, 0x10, 0x6c, 0x85, 0x47, 0x63, 0x8, 0xf5, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x20, 0x6f, 0x93, 0x7, 0x0, 0x0, 0x89, 0xc7, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x0, 0x0, 0x0, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x0, 0xb0, 0x7d, 0x1, 0x11, 0x22, 0xcc, 0xb7, 0xb7, 0x81, 0x40, 0x37, 0xb4, 0x81, 0x40, 0x26, 0xca, 0x4e, 0xc6, 0xaa, 0x84, 0x83, 0xa9, 0x47, 0x5f, 0x83, 0x27, 0x84, 0x60, 0x3, 0x25, 0x84, 0x60, 0x4a, 0xc8, 0x6, 0xce, 0x23, 0x87, 0x7, 0x14, 0x11, 0x5, 0x2e, 0x89, 0xef, 0x10, 0x80, 0x60, 0x5, 0xe1, 0x83, 0x27, 0x84, 0x60, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x26, 0x7, 0x5f, 0xd0, 0x57, 0x85, 0x47, 0xb3, 0x97, 0xc7, 0x0, 0x93, 0xc7, 0xf7, 0xff, 0xf5, 0x8f, 0x23, 0x28, 0xf7, 0x5e, 0xfd, 0x57, 0x63, 0x96, 0xf4, 0x4, 0x63, 0x4, 0x9, 0x4, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x97, 0xd8, 0x43, 0x83, 0x26, 0x84, 0x60, 0x98, 0xc6, 0x83, 0x26, 0x84, 0x60, 0x10, 0x47, 0xd0, 0xc6, 0x83, 0x26, 0x84, 0x60, 0x10, 0x47, 0x91, 0x6, 0x54, 0xc2, 0x83, 0x26, 0x84, 0x60, 0x91, 0x6, 0x14, 0xc7, 0x3, 0x27, 0x84, 0x60, 0x5c, 0xcb, 0x98, 0x43, 0x5, 0x7, 0x98, 0xc3, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x83, 0x27, 0x84, 0x60, 0xce, 0x94, 0xc4, 0xc3, 0x63, 0xf1, 0x34, 0x3, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x7, 0x60, 0x83, 0x25, 0x84, 0x60, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x91, 0x5, 0x5, 0x61, 0x6f, 0x10, 0x0, 0x54, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x47, 0x60, 0x83, 0x25, 0x84, 0x60, 0x91, 0x5, 0xef, 0x10, 0xe0, 0x52, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x87, 0x5d, 0xe3, 0xf7, 0xe4, 0xfa, 0x23, 0xac, 0x97, 0x5c, 0x5d, 0xb7, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x6, 0xce, 0x4e, 0xc6, 0x2a, 0x84, 0xef, 0x10, 0x0, 0xd, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x87, 0x5f, 0x37, 0xb9, 0x81, 0x40, 0x93, 0x4, 0xc9, 0x9d, 0x5, 0x7, 0x23, 0xac, 0xe7, 0x5e, 0x3, 0xa7, 0x87, 0x5f, 0x85, 0x47, 0x63, 0x16, 0xf7, 0x6, 0x13, 0x9, 0xc9, 0x9d, 0x93, 0x89, 0x44, 0x1f, 0x4a, 0x85, 0x51, 0x9, 0xef, 0x10, 0x80, 0x4a, 0xe3, 0x9c, 0x29, 0xff, 0xb7, 0xb9, 0x81, 0x40, 0x13, 0x85, 0x89, 0x9c, 0xef, 0x10, 0x80, 0x49, 0x37, 0xb9, 0x81, 0x40, 0x13, 0x5, 0x49, 0x9b, 0xef, 0x10, 0xc0, 0x48, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0x5, 0x9a, 0xef, 0x10, 0x0, 0x48, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x98, 0xef, 0x10, 0x40, 0x47, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0x85, 0x97, 0xef, 0x10, 0x80, 0x46, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x89, 0x89, 0x9c, 0x23, 0xa2, 0x37, 0x61, 0x13, 0x9, 0x49, 0x9b, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa0, 0x27, 0x61, 0xb7, 0xb6, 0x81, 0x40, 0x83, 0xa7, 0x86, 0x60, 0x58, 0x54, 0xb7, 0xb5, 0x81, 0x40, 0x81, 0xe7, 0x23, 0xa4, 0x86, 0x60, 0x21, 0xa8, 0x83, 0xa7, 0xc5, 0x5e, 0x89, 0xeb, 0x83, 0xa7, 0x86, 0x60, 0x91, 0xc7, 0x83, 0xa7, 0x86, 0x60, 0xdc, 0x57, 0xe3, 0x74, 0xf7, 0xfe, 0x37, 0xb6, 0x81, 0x40, 0x83, 0x27, 0xc6, 0x5d, 0x85, 0x7, 0x23, 0x2e, 0xf6, 0x5c, 0x37, 0xb6, 0x81, 0x40, 0x3, 0x25, 0x6, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xe7, 0x0, 0xc9, 0x8f, 0x23, 0x28, 0xf6, 0x5e, 0xd1, 0x47, 0xb3, 0x7, 0xf7, 0x2, 0xa6, 0x97, 0xd0, 0x43, 0x10, 0xc4, 0x8, 0x46, 0x48, 0xc4, 0x3, 0x28, 0x86, 0x0, 0x13, 0x5, 0x44, 0x0, 0x23, 0x22, 0xa8, 0x0, 0x8, 0xc6, 0x5c, 0xc8, 0x90, 0x43, 0x5, 0x6, 0x90, 0xc3, 0x83, 0xa7, 0xc5, 0x5e, 0x89, 0xcb, 0x83, 0xa7, 0x86, 0x60, 0x5, 0x7, 0xdc, 0x57, 0x63, 0xf4, 0xe7, 0x0, 0xef, 0x10, 0xc0, 0x3, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x6f, 0x0, 0xd0, 0x7d, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x47, 0x60, 0x94, 0x43, 0xb7, 0xb7, 0x81, 0x40, 0x89, 0xe6, 0x7d, 0x57, 0x23, 0xac, 0xe7, 0x5c, 0x82, 0x80, 0x3, 0x27, 0x47, 0x60, 0x58, 0x47, 0x18, 0x43, 0xcd, 0xbf, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x10, 0xc0, 0x48, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x84, 0xef, 0x10, 0xe0, 0xc, 0x13, 0x5, 0x84, 0x5, 0xef, 0xc0, 0x90, 0x20, 0x83, 0x47, 0xd4, 0x14, 0x91, 0xeb, 0x8, 0x58, 0xef, 0x10, 0xc0, 0x10, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x10, 0x0, 0x10, 0x5, 0x47, 0xe3, 0x89, 0xe7, 0xfe, 0x9, 0x47, 0x63, 0x84, 0xe7, 0x0, 0xef, 0xf0, 0x9f, 0xfb, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x26, 0xca, 0xb7, 0xb4, 0x81, 0x40, 0x22, 0xcc, 0x4a, 0xc8, 0x6, 0xce, 0x4e, 0xc6, 0x37, 0xb4, 0x81, 0x40, 0x93, 0x84, 0xc4, 0x98, 0x37, 0xb9, 0x81, 0x40, 0x83, 0x27, 0xc4, 0x5f, 0x81, 0xe7, 0xef, 0x60, 0x0, 0x5c, 0xdd, 0xbf, 0xef, 0x0, 0xd0, 0x70, 0xdc, 0x44, 0x83, 0xa9, 0xc7, 0x0, 0x13, 0x85, 0x49, 0x0, 0xef, 0x10, 0x80, 0x36, 0x83, 0x27, 0x89, 0x5f, 0xfd, 0x17, 0x23, 0x2c, 0xf9, 0x5e, 0x83, 0x27, 0xc4, 0x5f, 0xfd, 0x17, 0x23, 0x2e, 0xf4, 0x5e, 0xef, 0x0, 0x50, 0x71, 0x4e, 0x85, 0xef, 0xf0, 0x9f, 0xf6, 0xd1, 0xb7, 0x1, 0x11, 0x4e, 0xc6, 0xaa, 0x89, 0x3, 0x25, 0x8, 0x3, 0x5a, 0xc0, 0x2e, 0x8b, 0x93, 0x5, 0x50, 0xa, 0x22, 0xcc, 0x26, 0xca, 0x42, 0x84, 0xb2, 0x84, 0x4a, 0xc8, 0x52, 0xc4, 0x56, 0xc2, 0x3a, 0x89, 0x6, 0xce, 0x36, 0x8a, 0xbe, 0x8a, 0x97, 0x70, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x59, 0x13, 0x87, 0xf4, 0xff, 0x4, 0x58, 0xba, 0x94, 0xc1, 0x98, 0x64, 0xc0, 0x63, 0x2, 0xb, 0x2, 0x1, 0x47, 0xc1, 0x46, 0xb3, 0x7, 0xeb, 0x0, 0x83, 0xc7, 0x7, 0x0, 0x33, 0x6, 0xe4, 0x0, 0x23, 0xa, 0xf6, 0x2, 0x81, 0xc7, 0x5, 0x7, 0xe3, 0x16, 0xd7, 0xfe, 0xa3, 0x1, 0x4, 0x4, 0xe1, 0x47, 0x63, 0xf8, 0x27, 0x1, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0xc0, 0x37, 0x13, 0x5, 0x44, 0x0, 0x23, 0x26, 0x24, 0x3, 0x23, 0x24, 0x24, 0x5, 0xef, 0x10, 0x80, 0x27, 0x13, 0x5, 0x84, 0x1, 0xef, 0x10, 0x0, 0x27, 0xe5, 0x47, 0xb3, 0x87, 0x27, 0x41, 0x1c, 0xcc, 0x13, 0x5, 0x84, 0x5, 0x0, 0xc8, 0x40, 0xd0, 0xef, 0x80, 0x2f, 0xf6, 0x52, 0x86, 0xce, 0x85, 0x26, 0x85, 0xef, 0x0, 0xd0, 0x54, 0x8, 0xc0, 0x63, 0x84, 0xa, 0x0, 0x23, 0xa0, 0x8a, 0x0, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0x4a, 0xc0, 0x6, 0xc6, 0x26, 0xc2, 0x37, 0xb9, 0x81, 0x40, 0xef, 0x0, 0x50, 0x60, 0x19, 0xe0, 0x3, 0x24, 0x89, 0x60, 0x93, 0x4, 0x44, 0x0, 0x26, 0x85, 0xef, 0x10, 0xe0, 0x25, 0x5, 0xe9, 0x54, 0x54, 0x51, 0x47, 0xb7, 0xb7, 0x81, 0x40, 0x33, 0x87, 0xe6, 0x2, 0x93, 0x87, 0xc7, 0x9d, 0xba, 0x97, 0x9c, 0x43, 0x89, 0xef, 0x37, 0xb7, 0x81, 0x40, 0x3, 0x26, 0x7, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xd7, 0x0, 0x93, 0xc7, 0xf7, 0xff, 0xf1, 0x8f, 0x23, 0x28, 0xf7, 0x5e, 0x1c, 0x54, 0x89, 0xc7, 0x13, 0x5, 0x84, 0x1, 0xef, 0x10, 0x20, 0x22, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0xc7, 0x5d, 0x85, 0x7, 0x23, 0x2e, 0xf7, 0x5c, 0x83, 0x27, 0x89, 0x60, 0x63, 0x94, 0x87, 0x4, 0x37, 0xb5, 0x81, 0x40, 0xa6, 0x85, 0x13, 0x5, 0xc5, 0x98, 0xef, 0x10, 0x60, 0x1b, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0xc7, 0x5f, 0x85, 0x7, 0x23, 0x2e, 0xf7, 0x5e, 0xef, 0x0, 0x10, 0x5b, 0x85, 0x47, 0x37, 0xb7, 0x81, 0x40, 0x3, 0x27, 0xc7, 0x5e, 0x21, 0xc7, 0xb9, 0xc3, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x5d, 0x9d, 0xc7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0xe0, 0x26, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x87, 0x5f, 0xfd, 0x17, 0x23, 0x2c, 0xf7, 0x5e, 0xef, 0xf0, 0x3f, 0xda, 0xef, 0x0, 0x70, 0x57, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0xdc, 0x81, 0x47, 0xc1, 0xb7, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0x0, 0xf0, 0x5a, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x7, 0x5d, 0x85, 0x7, 0x23, 0x28, 0xf7, 0x5c, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x47, 0x5f, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x5f, 0x82, 0x80, 0xaa, 0x87, 0x9, 0xed, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x60, 0x81, 0xeb, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x6, 0xc6, 0xef, 0x10, 0x40, 0x1f, 0x13, 0x85, 0x47, 0x3, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x5d, 0x63, 0x9a, 0x7, 0x16, 0x41, 0x11, 0xb7, 0xb7, 0x81, 0x40, 0x22, 0xc4, 0x3, 0xa4, 0x47, 0x5f, 0x6, 0xc6, 0x5, 0x4, 0x23, 0xaa, 0x87, 0x5e, 0x21, 0xe0, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x47, 0x60, 0x18, 0x43, 0x19, 0xc7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0x40, 0x1b, 0x37, 0xb7, 0x81, 0x40, 0x83, 0xa6, 0x47, 0x60, 0x3, 0x26, 0x7, 0x60, 0x23, 0xa2, 0xc7, 0x60, 0x23, 0x20, 0xd7, 0x60, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x7, 0x5e, 0x85, 0x7, 0x23, 0x20, 0xf7, 0x5e, 0xef, 0xf0, 0x5f, 0xcd, 0xb7, 0xb5, 0x81, 0x40, 0x83, 0xa7, 0x85, 0x5d, 0x37, 0xb7, 0x81, 0x40, 0x13, 0x7, 0xc7, 0x9d, 0x37, 0xb3, 0x81, 0x40, 0x1, 0x45, 0x63, 0x77, 0xf4, 0x2, 0x83, 0x27, 0x83, 0x60, 0xd1, 0x46, 0xdc, 0x57, 0xb3, 0x87, 0xd7, 0x2, 0x3e, 0x97, 0x18, 0x43, 0x85, 0x47, 0x63, 0xf3, 0xe7, 0x0, 0x5, 0x45, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x5e, 0xf5, 0xeb, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0xbe, 0x81, 0x40, 0xb7, 0xbe, 0x81, 0x40, 0x5, 0x4f, 0xd1, 0x4f, 0x75, 0xa8, 0x83, 0x27, 0x4e, 0x60, 0xdc, 0x47, 0xdc, 0x47, 0xd4, 0x43, 0x63, 0x75, 0xd4, 0x0, 0x23, 0xac, 0xd5, 0x5c, 0x5d, 0xbf, 0xd4, 0x4b, 0x90, 0x47, 0x3, 0xa8, 0xc7, 0x0, 0x93, 0x88, 0x47, 0x0, 0x23, 0x24, 0x6, 0x1, 0xd0, 0x47, 0x3, 0xa8, 0x87, 0x0, 0x23, 0x22, 0x6, 0x1, 0xd0, 0x42, 0x63, 0x14, 0x16, 0x1, 0xd0, 0x47, 0xd0, 0xc2, 0x23, 0xaa, 0x7, 0x0, 0x90, 0x42, 0x7d, 0x16, 0x90, 0xc2, 0x94, 0x57, 0x8d, 0xca, 0x94, 0x57, 0xd0, 0x4f, 0x3, 0xa8, 0x7, 0x2, 0x23, 0x24, 0x6, 0x1, 0x90, 0x53, 0x3, 0xa8, 0xc7, 0x1, 0x23, 0x22, 0x6, 0x1, 0x3, 0xa8, 0x46, 0x0, 0x13, 0x86, 0x87, 0x1, 0x63, 0x14, 0xc8, 0x0, 0x90, 0x53, 0xd0, 0xc2, 0x23, 0xa4, 0x7, 0x2, 0x90, 0x42, 0x7d, 0x16, 0x90, 0xc2, 0x3, 0xa8, 0xc7, 0x2, 0x3, 0xa6, 0xe, 0x5f, 0xb3, 0x16, 0xf, 0x1, 0xd1, 0x8e, 0x23, 0xa8, 0xde, 0x5e, 0xb3, 0x6, 0xf8, 0x3, 0xba, 0x96, 0xd0, 0x42, 0x90, 0xc7, 0x83, 0x22, 0x86, 0x0, 0x23, 0xa6, 0x57, 0x0, 0x83, 0x22, 0x86, 0x0, 0x23, 0xa2, 0x12, 0x1, 0x23, 0x24, 0x16, 0x1, 0xd4, 0xcb, 0x9c, 0x42, 0x85, 0x7, 0x9c, 0xc2, 0x83, 0x27, 0x83, 0x60, 0xdc, 0x57, 0x63, 0xf3, 0x7, 0x1, 0x5, 0x45, 0x83, 0x27, 0x4e, 0x60, 0x9c, 0x43, 0xa1, 0xf3, 0xfd, 0x57, 0x23, 0xac, 0xf5, 0x5c, 0x1, 0xb7, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x87, 0x5e, 0x1, 0x45, 0x85, 0x7, 0x23, 0x24, 0xf7, 0x5e, 0x82, 0x80, 0x5, 0x45, 0x31, 0xb7, 0x79, 0x71, 0x22, 0xd4, 0x37, 0xb4, 0x81, 0x40, 0x83, 0x27, 0x4, 0x5d, 0x6, 0xd6, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x99, 0xe7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x10, 0xa0, 0x3, 0xef, 0x0, 0x70, 0x32, 0x83, 0x27, 0x4, 0x5d, 0xfd, 0x17, 0x23, 0x28, 0xf4, 0x5c, 0x83, 0x27, 0x4, 0x5d, 0x89, 0xcf, 0x1, 0x45, 0x2a, 0xc6, 0xef, 0x0, 0xd0, 0x33, 0xb2, 0x50, 0x22, 0x54, 0x32, 0x45, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x5f, 0xe5, 0xd3, 0x37, 0xb6, 0x81, 0x40, 0x37, 0xb5, 0x81, 0x40, 0x81, 0x47, 0x13, 0x6, 0x6, 0x9a, 0x37, 0xbf, 0x81, 0x40, 0x85, 0x4f, 0x13, 0x5, 0xc5, 0x9d, 0xd1, 0x48, 0x37, 0xb3, 0x81, 0x40, 0x37, 0xbe, 0x81, 0x40, 0x85, 0x4e, 0x61, 0xa8, 0x5c, 0x46, 0xdc, 0x47, 0x98, 0x57, 0xd4, 0x4f, 0x8c, 0x53, 0x8c, 0xc6, 0x94, 0x53, 0xcc, 0x4f, 0xcc, 0xc2, 0x4c, 0x43, 0x93, 0x86, 0x87, 0x1, 0x63, 0x94, 0xd5, 0x0, 0x94, 0x53, 0x54, 0xc3, 0x23, 0xa4, 0x7, 0x2, 0x14, 0x43, 0x13, 0x88, 0x47, 0x0, 0xfd, 0x16, 0x14, 0xc3, 0xd8, 0x4b, 0x94, 0x47, 0xcc, 0x47, 0x8c, 0xc6, 0xd4, 0x47, 0x8c, 0x47, 0xcc, 0xc2, 0x54, 0x43, 0x63, 0x94, 0x6, 0x1, 0xd4, 0x47, 0x54, 0xc3, 0x23, 0xaa, 0x7, 0x0, 0x14, 0x43, 0xfd, 0x16, 0x14, 0xc3, 0xd4, 0x57, 0x83, 0x25, 0xf, 0x5f, 0x33, 0x97, 0xdf, 0x0, 0x4d, 0x8f, 0x23, 0x28, 0xef, 0x5e, 0x33, 0x87, 0x16, 0x3, 0x85, 0x6, 0x2a, 0x97, 0x4c, 0x43, 0x8c, 0xc7, 0x83, 0xa2, 0x85, 0x0, 0x23, 0xa6, 0x57, 0x0, 0x83, 0xa2, 0x85, 0x0, 0x23, 0xa2, 0x2, 0x1, 0x23, 0xa4, 0x5, 0x1, 0xd8, 0xcb, 0xc, 0x43, 0x85, 0x5, 0xc, 0xc3, 0x3, 0x27, 0x83, 0x60, 0x58, 0x57, 0x63, 0x74, 0xd7, 0x0, 0x23, 0x22, 0xde, 0x5f, 0x18, 0x42, 0x25, 0xf7, 0x99, 0xc3, 0xef, 0xf0, 0x5f, 0xa8, 0xb7, 0xb4, 0x81, 0x40, 0x3, 0xa4, 0x84, 0x5e, 0x9, 0xcc, 0x37, 0xb9, 0x81, 0x40, 0x85, 0x49, 0xef, 0xf0, 0x1f, 0xd4, 0x19, 0xc1, 0x23, 0x22, 0x39, 0x5f, 0x7d, 0x14, 0x75, 0xf8, 0x23, 0xa4, 0x4, 0x5e, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x5e, 0xe3, 0x87, 0x7, 0xee, 0xef, 0x0, 0xb0, 0x27, 0x5, 0x45, 0xdd, 0xb5, 0x11, 0xe5, 0x6f, 0x0, 0x10, 0x27, 0xf2, 0x40, 0x5, 0x61, 0xe5, 0xbf, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x5d, 0x1, 0x11, 0x6, 0xce, 0x99, 0xc7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0x30, 0x6e, 0x2a, 0xc6, 0xef, 0xf0, 0xdf, 0xca, 0x32, 0x45, 0x81, 0x45, 0xef, 0xf0, 0xcf, 0xff, 0xef, 0xf0, 0x9f, 0xe7, 0x79, 0xd5, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x7, 0x5d, 0xb7, 0xb7, 0x81, 0x40, 0x9, 0xc7, 0x5, 0x47, 0x23, 0xa2, 0xe7, 0x5e, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x23, 0xa2, 0x7, 0x5e, 0x37, 0xb4, 0x81, 0x40, 0x83, 0x27, 0x84, 0x60, 0x37, 0xa7, 0xa5, 0xa5, 0x6, 0xc6, 0x9c, 0x5b, 0x13, 0x7, 0x57, 0x5a, 0x90, 0x43, 0x63, 0x1b, 0xe6, 0x0, 0xd4, 0x43, 0x63, 0x98, 0xc6, 0x0, 0x98, 0x47, 0x63, 0x15, 0xd7, 0x0, 0xdc, 0x47, 0x63, 0x8a, 0xe7, 0x0, 0x3, 0x25, 0x84, 0x60, 0x83, 0x25, 0x84, 0x60, 0x93, 0x85, 0x45, 0x3, 0xef, 0x0, 0x30, 0x27, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x7, 0x5f, 0x97, 0x70, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x44, 0xfd, 0x47, 0x33, 0x85, 0xa7, 0x40, 0x51, 0x47, 0x33, 0x7, 0xe5, 0x2, 0xb7, 0xb6, 0x81, 0x40, 0x93, 0x87, 0xc6, 0x9d, 0x93, 0x86, 0xc6, 0x9d, 0xba, 0x97, 0x90, 0x43, 0x11, 0xe6, 0x81, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0x70, 0x63, 0xd0, 0x43, 0x21, 0x7, 0x36, 0x97, 0x50, 0x42, 0xd0, 0xc3, 0xd0, 0x43, 0x63, 0x15, 0xe6, 0x0, 0xd8, 0x43, 0x58, 0x43, 0xd8, 0xc3, 0xd1, 0x47, 0x33, 0x5, 0xf5, 0x2, 0xb2, 0x40, 0xaa, 0x96, 0xdc, 0x42, 0xdc, 0x47, 0x23, 0x24, 0xf4, 0x60, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x0, 0x70, 0x5f, 0xb7, 0xb7, 0x81, 0x40, 0x2e, 0x84, 0x83, 0xa5, 0x87, 0x60, 0xe1, 0x5, 0xef, 0x0, 0x10, 0x51, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x85, 0x45, 0x41, 0x1, 0x6f, 0xf0, 0xf, 0xf0, 0x5c, 0x45, 0xdc, 0x47, 0x89, 0xeb, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x0, 0x30, 0x5c, 0x98, 0x57, 0xd4, 0x4f, 0x90, 0x53, 0x93, 0x85, 0x87, 0x1, 0x90, 0xc6, 0x94, 0x53, 0xd0, 0x4f, 0xd0, 0xc2, 0x54, 0x43, 0x63, 0x94, 0xb6, 0x0, 0x94, 0x53, 0x54, 0xc3, 0x23, 0xa4, 0x7, 0x2, 0x14, 0x43, 0xd0, 0x57, 0xfd, 0x16, 0x14, 0xc3, 0x37, 0xb7, 0x81, 0x40, 0x3, 0x27, 0x7, 0x5d, 0x41, 0xe3, 0xd8, 0x4b, 0x94, 0x47, 0xcc, 0x47, 0x8c, 0xc6, 0xd4, 0x47, 0x8c, 0x47, 0xcc, 0xc2, 0x54, 0x43, 0x93, 0x85, 0x47, 0x0, 0x63, 0x94, 0xb6, 0x0, 0xd4, 0x47, 0x54, 0xc3, 0x23, 0xaa, 0x7, 0x0, 0x14, 0x43, 0xfd, 0x16, 0x14, 0xc3, 0xb7, 0xb6, 0x81, 0x40, 0x3, 0xa5, 0x6, 0x5f, 0x5, 0x47, 0x33, 0x17, 0xc7, 0x0, 0x49, 0x8f, 0x23, 0xa8, 0xe6, 0x5e, 0xd1, 0x46, 0xb3, 0x6, 0xd6, 0x2, 0x37, 0xb7, 0x81, 0x40, 0x13, 0x7, 0xc7, 0x9d, 0x36, 0x97, 0x54, 0x43, 0x94, 0xc7, 0x88, 0x46, 0xc8, 0xc7, 0x88, 0x46, 0x4c, 0xc1, 0x8c, 0xc6, 0xd8, 0xcb, 0x1c, 0x43, 0x1, 0x45, 0x85, 0x7, 0x1c, 0xc3, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x60, 0xdc, 0x57, 0x63, 0xf8, 0xc7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x5, 0x47, 0x23, 0xa2, 0xe7, 0x5e, 0x5, 0x45, 0x82, 0x80, 0x37, 0xb7, 0x81, 0x40, 0x13, 0x7, 0x7, 0x9a, 0x54, 0x43, 0xd4, 0xcf, 0x88, 0x46, 0x88, 0xd3, 0x88, 0x46, 0x4c, 0xc1, 0x8c, 0xc6, 0x98, 0xd7, 0xd1, 0xb7, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x5e, 0x1c, 0xc1, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x5f, 0x5c, 0xc1, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0xf0, 0x4c, 0x2a, 0xc6, 0x2e, 0x84, 0xe5, 0xd9, 0xef, 0x0, 0x40, 0x7b, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa6, 0x47, 0x5f, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa6, 0x87, 0x60, 0x32, 0x45, 0x3, 0x46, 0xe6, 0x14, 0x58, 0x41, 0x11, 0xce, 0x83, 0xa7, 0x87, 0x60, 0x23, 0x87, 0x7, 0x14, 0x5, 0x45, 0x2a, 0xc6, 0xef, 0x0, 0x80, 0x7b, 0xf2, 0x40, 0x62, 0x44, 0x32, 0x45, 0x5, 0x61, 0x82, 0x80, 0x1c, 0x40, 0x7d, 0x56, 0x63, 0x87, 0xc7, 0x2, 0x37, 0xb6, 0x81, 0x40, 0x3, 0x26, 0x6, 0x5e, 0xc, 0x41, 0x63, 0x87, 0xc5, 0x0, 0x63, 0xe5, 0xe6, 0x0, 0x23, 0x20, 0x4, 0x0, 0xc1, 0xbf, 0x33, 0x86, 0xe6, 0x40, 0xe3, 0x7b, 0xf6, 0xfe, 0x95, 0x8f, 0xba, 0x97, 0x1c, 0xc0, 0xef, 0xf0, 0xbf, 0xf6, 0x1, 0x45, 0x75, 0xbf, 0xb7, 0xb7, 0x81, 0x40, 0x5, 0x47, 0x23, 0xa2, 0xe7, 0x5e, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x60, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0xc7, 0x5e, 0x5, 0x45, 0x81, 0xcb, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x7, 0x5d, 0x13, 0x35, 0x15, 0x0, 0x6, 0x5, 0x82, 0x80, 0x71, 0xc9, 0x1, 0x11, 0x4a, 0xc8, 0x37, 0xb9, 0x81, 0x40, 0x3, 0x27, 0x89, 0x60, 0x5c, 0x55, 0x22, 0xcc, 0x58, 0x57, 0x6, 0xce, 0x26, 0xca, 0x4e, 0xc6, 0x2a, 0x84, 0x63, 0xf5, 0xe7, 0xa, 0x18, 0x4d, 0x63, 0x48, 0x7, 0x0, 0x3, 0x27, 0x89, 0x60, 0x54, 0x57, 0x65, 0x47, 0x15, 0x8f, 0x18, 0xcd, 0x51, 0x47, 0x33, 0x87, 0xe7, 0x2, 0x54, 0x48, 0xb7, 0xb7, 0x81, 0x40, 0x13, 0x86, 0xc7, 0x9d, 0x93, 0x84, 0xc7, 0x9d, 0x32, 0x97, 0x63, 0x9a, 0xe6, 0x6, 0x93, 0x9, 0x44, 0x0, 0x4e, 0x85, 0xef, 0x0, 0xd0, 0x32, 0xb7, 0xb6, 0x81, 0x40, 0x1, 0xed, 0x50, 0x54, 0x3, 0xa7, 0x6, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xc7, 0x0, 0x93, 0xc7, 0xf7, 0xff, 0xf9, 0x8f, 0x23, 0xa8, 0xf6, 0x5e, 0x83, 0x27, 0x89, 0x60, 0x3, 0xa6, 0x6, 0x5f, 0x5, 0x47, 0xdc, 0x57, 0x33, 0x17, 0xf7, 0x0, 0x51, 0x8f, 0x23, 0xa8, 0xe6, 0x5e, 0x51, 0x47, 0x5c, 0xd4, 0xb3, 0x87, 0xe7, 0x2, 0xa6, 0x97, 0xd8, 0x43, 0x18, 0xc4, 0x14, 0x47, 0x54, 0xc4, 0x14, 0x47, 0x23, 0xa2, 0x36, 0x1, 0x23, 0x24, 0x37, 0x1, 0x5c, 0xc8, 0x98, 0x43, 0x5, 0x7, 0x98, 0xc3, 0x5, 0x45, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x83, 0x27, 0x89, 0x60, 0xdc, 0x57, 0x5c, 0xd4, 0xe5, 0xb7, 0x83, 0x27, 0x89, 0x60, 0x28, 0x45, 0xdc, 0x57, 0x33, 0x35, 0xf5, 0x0, 0xf1, 0xbf, 0x1, 0x45, 0x82, 0x80, 0x9, 0xe9, 0x1, 0x45, 0x82, 0x80, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x60, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x26, 0xc2, 0x2a, 0x84, 0x63, 0x88, 0xa7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0xd0, 0x31, 0x7c, 0x45, 0xed, 0xdb, 0x54, 0x55, 0x38, 0x45, 0xfd, 0x17, 0x7c, 0xc5, 0xe3, 0x83, 0xe6, 0xfc, 0xe9, 0xf3, 0x93, 0x4, 0x45, 0x0, 0x26, 0x85, 0xef, 0x0, 0xb0, 0x25, 0xb7, 0xb6, 0x81, 0x40, 0x1, 0xed, 0x50, 0x54, 0x3, 0xa7, 0x6, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xc7, 0x0, 0x93, 0xc7, 0xf7, 0xff, 0xf9, 0x8f, 0x23, 0xa8, 0xf6, 0x5e, 0x38, 0x44, 0xe5, 0x47, 0x5, 0x45, 0x99, 0x8f, 0x1c, 0xcc, 0x3, 0xa6, 0x6, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xe7, 0x0, 0xd1, 0x8f, 0x23, 0xa8, 0xf6, 0x5e, 0xd1, 0x46, 0x58, 0xd4, 0x33, 0x7, 0xd7, 0x2, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x9d, 0xba, 0x97, 0xd8, 0x43, 0x18, 0xc4, 0x14, 0x47, 0x54, 0xc4, 0x14, 0x47, 0xc4, 0xc2, 0x4, 0xc7, 0x5c, 0xc8, 0x98, 0x43, 0x5, 0x7, 0x98, 0xc3, 0xa9, 0xbf, 0x79, 0xc5, 0x74, 0x45, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x26, 0xc2, 0x4a, 0xc0, 0x2a, 0x84, 0x99, 0xe6, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0x30, 0x28, 0x38, 0x45, 0x63, 0x73, 0xb7, 0x0, 0x2e, 0x87, 0x5c, 0x54, 0x63, 0x8d, 0xe7, 0x8, 0x5, 0x46, 0x63, 0x9a, 0xc6, 0x8, 0xb7, 0xb6, 0x81, 0x40, 0x83, 0xa6, 0x86, 0x60, 0xe3, 0x8c, 0x86, 0xfc, 0x14, 0x4c, 0x58, 0xd4, 0x63, 0xc6, 0x6, 0x0, 0xe5, 0x46, 0x33, 0x87, 0xe6, 0x40, 0x18, 0xcc, 0x51, 0x47, 0x33, 0x87, 0xe7, 0x2, 0x54, 0x48, 0xb7, 0xb7, 0x81, 0x40, 0x13, 0x86, 0xc7, 0x9d, 0x93, 0x84, 0xc7, 0x9d, 0x32, 0x97, 0x63, 0x9f, 0xe6, 0x4, 0x13, 0x9, 0x44, 0x0, 0x4a, 0x85, 0xef, 0x0, 0x90, 0x18, 0x58, 0x54, 0xb7, 0xb6, 0x81, 0x40, 0x19, 0xe9, 0x3, 0xa6, 0x6, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xe7, 0x0, 0x93, 0xc7, 0xf7, 0xff, 0xf1, 0x8f, 0x23, 0xa8, 0xf6, 0x5e, 0x3, 0xa6, 0x6, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xe7, 0x0, 0xd1, 0x8f, 0x23, 0xa8, 0xf6, 0x5e, 0xd1, 0x47, 0x33, 0x7, 0xf7, 0x2, 0xb3, 0x87, 0xe4, 0x0, 0xd8, 0x43, 0x18, 0xc4, 0x14, 0x47, 0x54, 0xc4, 0x14, 0x47, 0x23, 0xa2, 0x26, 0x1, 0x23, 0x24, 0x27, 0x1, 0x5c, 0xc8, 0x98, 0x43, 0x5, 0x7, 0x98, 0xc3, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x87, 0x60, 0x11, 0xc7, 0x83, 0xa6, 0x87, 0x60, 0xf8, 0x46, 0x5, 0x7, 0xf8, 0xc6, 0x3, 0xa5, 0x87, 0x60, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x19, 0xc5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0xf0, 0x19, 0x2e, 0x89, 0xb2, 0x84, 0x37, 0xb4, 0x81, 0x40, 0x49, 0x21, 0x83, 0x27, 0x84, 0x60, 0x83, 0xa7, 0x87, 0x14, 0x81, 0xef, 0x83, 0x27, 0x84, 0x60, 0x5, 0x47, 0x23, 0x86, 0xe7, 0x14, 0x91, 0xc4, 0x85, 0x45, 0x26, 0x85, 0xef, 0xf0, 0xef, 0xa9, 0xc5, 0x21, 0x79, 0x21, 0xb9, 0x29, 0x83, 0x27, 0x84, 0x60, 0x3, 0xa5, 0x87, 0x14, 0x19, 0xc5, 0x83, 0x27, 0x84, 0x60, 0x63, 0x1, 0x9, 0x2, 0x23, 0xa4, 0x7, 0x14, 0x83, 0x27, 0x84, 0x60, 0x2a, 0xc6, 0x23, 0x86, 0x7, 0x14, 0xad, 0x21, 0xf2, 0x40, 0x62, 0x44, 0x32, 0x45, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x80, 0x13, 0x7, 0xf5, 0xff, 0x23, 0xa4, 0xe7, 0x14, 0xf9, 0xbf, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0x10, 0x12, 0xf5, 0xf9, 0x2a, 0x84, 0xb2, 0x84, 0xe9, 0x2e, 0x89, 0x47, 0x3, 0x47, 0xc4, 0x14, 0x23, 0x6, 0xf4, 0x14, 0x83, 0x27, 0x84, 0x14, 0x85, 0x7, 0x23, 0x24, 0xf4, 0x14, 0x85, 0x47, 0x63, 0x19, 0xf7, 0x8, 0x1c, 0x54, 0xe1, 0xfb, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x5d, 0x54, 0x54, 0xc9, 0xe7, 0x5c, 0x48, 0x18, 0x44, 0x50, 0x44, 0x10, 0xc7, 0x58, 0x44, 0x10, 0x44, 0x50, 0xc3, 0xd8, 0x43, 0x13, 0x6, 0x44, 0x0, 0x63, 0x14, 0xc7, 0x0, 0x58, 0x44, 0xd8, 0xc3, 0x23, 0x2a, 0x4, 0x0, 0x98, 0x43, 0x7d, 0x17, 0x98, 0xc3, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x25, 0x7, 0x5f, 0x85, 0x47, 0xb3, 0x97, 0xd7, 0x0, 0xcd, 0x8f, 0x23, 0x28, 0xf7, 0x5e, 0x51, 0x47, 0x33, 0x87, 0xe6, 0x2, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x9d, 0xba, 0x97, 0xd8, 0x43, 0x18, 0xc4, 0xc, 0x47, 0x4c, 0xc4, 0xc, 0x47, 0xd0, 0xc1, 0x10, 0xc7, 0x5c, 0xc8, 0x98, 0x43, 0x5, 0x7, 0x98, 0xc3, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x60, 0xdc, 0x57, 0x63, 0xfa, 0xd7, 0x0, 0x99, 0xc0, 0x85, 0x47, 0x9c, 0xc0, 0xb7, 0xb7, 0x81, 0x40, 0x5, 0x47, 0x23, 0xa2, 0xe7, 0x5e, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x89, 0xa6, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x9a, 0xd8, 0x43, 0x58, 0xcc, 0x10, 0x47, 0x10, 0xd0, 0xc, 0x47, 0x13, 0x6, 0x84, 0x1, 0xd0, 0xc1, 0x10, 0xc7, 0x1c, 0xd4, 0x5d, 0xbf, 0x79, 0x71, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0xaa, 0x89, 0x2e, 0x8a, 0x32, 0x89, 0xb6, 0x8a, 0x3a, 0x8b, 0xbe, 0x8b, 0x63, 0xd, 0x8, 0x0, 0xb7, 0x7, 0x0, 0x80, 0xfd, 0x17, 0x63, 0x8, 0xf8, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0xf0, 0x0, 0x4a, 0x85, 0x79, 0x29, 0xaa, 0x84, 0x9, 0xed, 0x7d, 0x55, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x45, 0x61, 0x82, 0x80, 0x13, 0x5, 0x0, 0x15, 0xb5, 0x29, 0x2a, 0x84, 0x1d, 0xc5, 0x13, 0x6, 0x0, 0x15, 0x81, 0x45, 0x97, 0x70, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x9b, 0x22, 0x88, 0xde, 0x87, 0x5a, 0x87, 0xd6, 0x86, 0x4a, 0x86, 0xd2, 0x85, 0x4e, 0x85, 0x4, 0xd8, 0xef, 0xf0, 0x8f, 0xbd, 0x22, 0x85, 0xef, 0xf0, 0xef, 0x9c, 0x5, 0x45, 0x5d, 0xbf, 0x26, 0x85, 0x89, 0x29, 0x7d, 0xb7, 0x39, 0x71, 0x4e, 0xd6, 0xaa, 0x89, 0x3e, 0x85, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x6, 0xde, 0x2e, 0x8a, 0xb2, 0x8a, 0x36, 0x8b, 0xba, 0x8b, 0xbe, 0x84, 0x42, 0x84, 0x46, 0x89, 0x8d, 0x21, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0xc0, 0x77, 0x22, 0x85, 0xb1, 0x21, 0x65, 0xd9, 0x63, 0x7, 0x9, 0x0, 0xb7, 0x7, 0x0, 0x80, 0xfd, 0x17, 0xe3, 0x12, 0xf9, 0xfe, 0x93, 0x7, 0x0, 0x15, 0x3e, 0xc6, 0x32, 0x47, 0xe3, 0x1c, 0xf7, 0xfc, 0xb2, 0x47, 0x31, 0xc4, 0xa9, 0xc4, 0x13, 0x6, 0x0, 0x15, 0x81, 0x45, 0x22, 0x85, 0x97, 0x70, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x92, 0x89, 0x47, 0xa3, 0x6, 0xf4, 0x14, 0x4e, 0x85, 0x4, 0xd8, 0x22, 0x88, 0x3c, 0x0, 0x5e, 0x87, 0xda, 0x86, 0x56, 0x86, 0xd2, 0x85, 0xef, 0xf0, 0x2f, 0xb4, 0x22, 0x85, 0xef, 0xf0, 0x8f, 0x93, 0xf2, 0x50, 0x62, 0x54, 0x22, 0x45, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x21, 0x61, 0x82, 0x80, 0x2, 0xc4, 0xdd, 0xb7, 0x5, 0x45, 0x82, 0x80, 0x1, 0x11, 0x70, 0x0, 0x2c, 0x0, 0x48, 0x0, 0x6, 0xce, 0x22, 0xcc, 0x2, 0xc2, 0x2, 0xc4, 0xc1, 0x2e, 0xa2, 0x47, 0x12, 0x48, 0x32, 0x46, 0xb7, 0xa5, 0x81, 0x40, 0x37, 0x95, 0x80, 0x40, 0x81, 0x48, 0x1, 0x47, 0x81, 0x46, 0x93, 0x85, 0x5, 0xce, 0x13, 0x5, 0xe5, 0xe8, 0xef, 0xf0, 0x7f, 0xf2, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xaa, 0xa7, 0x5c, 0x15, 0xc5, 0xef, 0xf0, 0x1f, 0xfc, 0x85, 0x47, 0x2a, 0x84, 0x63, 0x19, 0xf5, 0x2, 0xbd, 0x2a, 0xb7, 0xb7, 0x81, 0x40, 0x7d, 0x57, 0x23, 0xac, 0xe7, 0x5c, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa6, 0x87, 0x5e, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xaa, 0x7, 0x5e, 0xa9, 0x24, 0xf2, 0x40, 0x62, 0x44, 0xb7, 0xa7, 0x81, 0x40, 0x83, 0xa7, 0xc7, 0x3a, 0x5, 0x61, 0x82, 0x80, 0xfd, 0x57, 0xe3, 0x17, 0xf5, 0xfe, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x0, 0xe0, 0x67, 0x1, 0x45, 0x82, 0x80, 0x9, 0xc9, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x0, 0x80, 0x66, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x47, 0x5d, 0x65, 0xd5, 0x82, 0x80, 0x1, 0xc9, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xa9, 0x25, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x60, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x60, 0x1, 0xc5, 0x13, 0x5, 0x85, 0x5, 0x82, 0x80, 0x13, 0x85, 0x41, 0xc3, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0xaa, 0x84, 0x2e, 0x84, 0xcd, 0x2c, 0x11, 0xcd, 0x1, 0x45, 0x19, 0xc4, 0x9c, 0x40, 0x4, 0xc0, 0x5, 0x45, 0x5c, 0xc0, 0xfc, 0x40, 0x1c, 0xc4, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0xd5, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0x93, 0x77, 0xf5, 0x0, 0x91, 0xc7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xf1, 0x2b, 0xb7, 0xc4, 0x81, 0x40, 0xb7, 0xc9, 0x81, 0x40, 0x93, 0x89, 0x49, 0x93, 0x93, 0x84, 0x44, 0x93, 0xae, 0x8a, 0xb3, 0x87, 0x34, 0x1, 0xb7, 0xc5, 0x81, 0x40, 0x13, 0x87, 0x45, 0x93, 0x37, 0xc9, 0x81, 0x40, 0xbd, 0x7, 0x99, 0x8f, 0x13, 0x9, 0x49, 0x93, 0xb3, 0x87, 0x27, 0x41, 0xc1, 0x9b, 0x33, 0x4, 0xf5, 0x40, 0x99, 0x8c, 0x32, 0x8a, 0x93, 0x85, 0x45, 0x93, 0x26, 0x86, 0x22, 0x85, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x77, 0x33, 0x86, 0x29, 0x41, 0x33, 0x5, 0x94, 0x0, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x75, 0x13, 0x5, 0x44, 0xf6, 0x13, 0x6, 0x0, 0x9, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x74, 0x93, 0x4, 0x4, 0xf6, 0x80, 0xc8, 0xf2, 0x40, 0x62, 0x44, 0x93, 0x87, 0x1, 0x0, 0x23, 0xa0, 0x54, 0x1, 0x23, 0xa4, 0x44, 0x3, 0xdc, 0xc4, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x7, 0x62, 0x82, 0x80, 0xf3, 0x77, 0x4, 0x30, 0x37, 0x17, 0x0, 0x20, 0x13, 0x7, 0x7, 0x9, 0x91, 0x46, 0x8, 0x43, 0xa1, 0x8b, 0x14, 0xc3, 0xf3, 0xa7, 0x7, 0x30, 0x82, 0x80, 0xb7, 0x17, 0x0, 0x20, 0x93, 0x87, 0x7, 0x9, 0x88, 0xc3, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x1f, 0xfd, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0xc7, 0x61, 0x5, 0x7, 0x23, 0xae, 0xe7, 0x60, 0x3, 0xa7, 0xc7, 0x61, 0x85, 0x47, 0x63, 0x16, 0xf7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xac, 0xa7, 0x60, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0xc7, 0x61, 0x1, 0xeb, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xf1, 0x21, 0x3, 0xa7, 0xc7, 0x61, 0x19, 0xcf, 0x3, 0xa7, 0xc7, 0x61, 0x7d, 0x17, 0x23, 0xae, 0xe7, 0x60, 0x83, 0xa7, 0xc7, 0x61, 0x99, 0xe7, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x61, 0x6f, 0xf0, 0xbf, 0xf8, 0x82, 0x80, 0x85, 0x47, 0x37, 0xb7, 0x81, 0x40, 0x23, 0x22, 0xf7, 0x62, 0x37, 0xb7, 0x81, 0x40, 0x23, 0x2a, 0xf7, 0x60, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x62, 0x99, 0xc3, 0x6f, 0xf0, 0x3f, 0xfe, 0x41, 0x11, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x80, 0x7f, 0xce, 0xb7, 0x57, 0xc, 0x60, 0xb7, 0xb6, 0x81, 0x40, 0x37, 0xb6, 0x81, 0x40, 0x93, 0x87, 0x7, 0x9, 0x3, 0xa7, 0x46, 0x62, 0x11, 0xc7, 0x3, 0x27, 0xc6, 0x61, 0x19, 0xe3, 0x98, 0x43, 0x6d, 0xfb, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa0, 0x7, 0x62, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xae, 0x7, 0x60, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa2, 0x7, 0x62, 0xb7, 0xb7, 0x81, 0x40, 0x37, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x1d, 0x23, 0x28, 0xf7, 0x60, 0xb7, 0xb7, 0x81, 0x40, 0x41, 0x11, 0x37, 0xb7, 0x81, 0x40, 0x93, 0x87, 0x7, 0xbd, 0x6, 0xc6, 0x23, 0x26, 0xf7, 0x60, 0xa5, 0x24, 0x5, 0x45, 0x97, 0x70, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x85, 0xf3, 0x67, 0x4, 0x30, 0xef, 0xf0, 0x7f, 0xf7, 0xb2, 0x40, 0x5, 0x45, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xa7, 0x81, 0x40, 0x59, 0x71, 0x93, 0x87, 0x87, 0xce, 0xa2, 0xd4, 0x3e, 0xc4, 0x40, 0x8, 0xb7, 0xa7, 0x81, 0x40, 0x2e, 0xc6, 0x93, 0x87, 0x7, 0xd1, 0x13, 0x6, 0xb0, 0x4, 0x81, 0x45, 0x22, 0x85, 0xa6, 0xd2, 0x86, 0xd6, 0x3e, 0xc8, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x5a, 0x24, 0x0, 0x22, 0x85, 0x8c, 0x40, 0x91, 0x4, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x61, 0xe3, 0x1a, 0x94, 0xfe, 0x22, 0x85, 0xef, 0x90, 0x6f, 0xe4, 0x7c, 0x49, 0xb1, 0xc3, 0x37, 0x7, 0x0, 0xbe, 0x3e, 0x97, 0xb7, 0x6, 0x80, 0x0, 0x63, 0x69, 0xd7, 0x0, 0x37, 0x7, 0x80, 0xbf, 0x3e, 0x97, 0xb7, 0x6, 0x8, 0x0, 0x63, 0x75, 0xd7, 0x0, 0x2c, 0x49, 0x1, 0x45, 0x82, 0x87, 0x37, 0x7, 0x0, 0xc0, 0x3e, 0x97, 0xb7, 0x6, 0x5, 0x0, 0xe3, 0x68, 0xd7, 0xfe, 0x37, 0x7, 0x0, 0xb0, 0x3e, 0x97, 0x91, 0x66, 0xe3, 0x62, 0xd7, 0xfe, 0x41, 0x11, 0x6, 0xc6, 0xfd, 0x24, 0x82, 0x80, 0x85, 0x65, 0x93, 0x85, 0x45, 0x80, 0x6f, 0x60, 0xdf, 0x84, 0x6f, 0x60, 0x9f, 0xa0, 0xb7, 0x7, 0x80, 0xbf, 0xaa, 0x97, 0x37, 0x7, 0x8, 0x0, 0x63, 0xe9, 0xe7, 0x0, 0x37, 0x7, 0x0, 0xb0, 0x2a, 0x97, 0x91, 0x66, 0x81, 0x47, 0x63, 0x7a, 0xd7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x70, 0xc0, 0x7e, 0xb2, 0x40, 0x5, 0x89, 0x41, 0x1, 0x82, 0x80, 0x13, 0xf5, 0x17, 0x0, 0x82, 0x80, 0x6f, 0xf0, 0xff, 0xfc, 0x6f, 0xf0, 0xbf, 0xfc, 0x1, 0x11, 0x4e, 0xc6, 0xaa, 0x89, 0x13, 0x5, 0x0, 0x60, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x6, 0xce, 0x2e, 0x89, 0xb2, 0x84, 0xef, 0xf0, 0x3f, 0xfa, 0x2a, 0x84, 0x13, 0x5, 0x0, 0x15, 0xef, 0xf0, 0x9f, 0xf9, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xd5, 0x2c, 0x7d, 0xd8, 0x23, 0xa0, 0xa9, 0x0, 0x23, 0x20, 0x89, 0x0, 0xf2, 0x40, 0x62, 0x44, 0x93, 0x7, 0x0, 0x60, 0x9c, 0xc0, 0x42, 0x49, 0xd2, 0x44, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x37, 0xa6, 0x80, 0x40, 0x37, 0xb4, 0x81, 0x40, 0x1, 0x47, 0x93, 0x6, 0x4, 0x1d, 0x13, 0x6, 0x66, 0x15, 0x93, 0x5, 0x20, 0x40, 0x13, 0x5, 0x90, 0x3, 0x6, 0xce, 0xef, 0xb0, 0xcf, 0xed, 0x11, 0xc1, 0x3d, 0x24, 0x6d, 0x45, 0xef, 0xc0, 0x3f, 0xf5, 0xaa, 0x85, 0x5, 0xe1, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0xf8, 0x4b, 0x13, 0x67, 0x17, 0x0, 0xf8, 0xcb, 0xf8, 0x4b, 0x13, 0x67, 0x27, 0x0, 0xf8, 0xcb, 0xf8, 0x4b, 0x75, 0x9b, 0xf8, 0xcb, 0x6d, 0x45, 0xef, 0xc0, 0xff, 0xf4, 0x13, 0x5, 0x4, 0x1d, 0xef, 0x50, 0xd0, 0x36, 0xb7, 0x27, 0x81, 0x40, 0x93, 0x87, 0x87, 0xbf, 0x3e, 0xc4, 0xb7, 0x27, 0x81, 0x40, 0x93, 0x87, 0x47, 0xc0, 0x2c, 0x0, 0x13, 0x5, 0x4, 0x1d, 0x3e, 0xc6, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x35, 0x93, 0x7, 0x4, 0x1d, 0x9c, 0x43, 0xb7, 0x6, 0xf0, 0xff, 0x13, 0x5, 0x4, 0x1d, 0xd8, 0x4b, 0x1, 0x46, 0x85, 0x45, 0x75, 0x8f, 0xd8, 0xcb, 0x23, 0xac, 0x7, 0x0, 0x5, 0x47, 0xb8, 0xd3, 0x81, 0x46, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x35, 0x13, 0x5, 0x4, 0x1d, 0x1, 0x46, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x34, 0x13, 0x5, 0x4, 0x1d, 0x5, 0x46, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x33, 0x9, 0x66, 0x13, 0x5, 0x4, 0x1d, 0x13, 0x6, 0x6, 0x71, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x30, 0x13, 0x5, 0x4, 0x1d, 0x5, 0x46, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x30, 0x85, 0x46, 0x1, 0x46, 0x13, 0x5, 0x4, 0x1d, 0x85, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x30, 0x13, 0x5, 0x4, 0x1d, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x2d, 0x13, 0x5, 0x4, 0x1d, 0x85, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x2d, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x6f, 0xf0, 0xdf, 0xed, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0xef, 0x80, 0x1f, 0xa1, 0xef, 0xf0, 0x5f, 0xc6, 0xaa, 0x84, 0xef, 0xe0, 0x1f, 0xfb, 0x2a, 0x84, 0x26, 0x85, 0xef, 0xf0, 0x1f, 0xc7, 0x19, 0xc0, 0xef, 0xf0, 0x7f, 0xce, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x4a, 0xc8, 0x37, 0x9, 0x0, 0x4, 0x22, 0xcc, 0x4e, 0xc6, 0x6, 0xce, 0x26, 0xca, 0x2a, 0x84, 0x7d, 0x19, 0xb7, 0xb9, 0x81, 0x40, 0x18, 0x40, 0x85, 0x45, 0x22, 0x85, 0x7c, 0x57, 0x93, 0xe7, 0x17, 0x0, 0x7c, 0xd7, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x25, 0x1c, 0x40, 0x81, 0x46, 0xd0, 0x5b, 0x33, 0x76, 0x26, 0x1, 0x97, 0x70, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x83, 0x83, 0xa7, 0x89, 0x62, 0xb3, 0x4, 0xf5, 0x40, 0x63, 0xb, 0xf5, 0x0, 0x99, 0xe3, 0x26, 0x85, 0x85, 0x44, 0x23, 0xa4, 0xa9, 0x62, 0xfd, 0x14, 0xef, 0xf0, 0x9f, 0xf7, 0xed, 0xfc, 0x1c, 0x40, 0xbc, 0x5b, 0x85, 0x8b, 0xd5, 0xfb, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x93, 0x7, 0x85, 0x0, 0x5c, 0xc1, 0x7d, 0x57, 0x18, 0xc5, 0x5c, 0xc5, 0x1c, 0xc9, 0x23, 0x20, 0x5, 0x0, 0x82, 0x80, 0x23, 0x28, 0x5, 0x0, 0x82, 0x80, 0x5c, 0x41, 0xdc, 0xc1, 0x98, 0x47, 0x98, 0xc5, 0x98, 0x47, 0x4c, 0xc3, 0x8c, 0xc7, 0x88, 0xc9, 0x1c, 0x41, 0x85, 0x7, 0x1c, 0xc1, 0x82, 0x80, 0x98, 0x41, 0xfd, 0x56, 0x93, 0x7, 0x85, 0x0, 0x63, 0x1f, 0xd7, 0x0, 0x1c, 0x49, 0xd8, 0x43, 0xd8, 0xc1, 0xd8, 0x41, 0xc, 0xc7, 0x9c, 0xc5, 0xcc, 0xc3, 0x88, 0xc9, 0x1c, 0x41, 0x85, 0x7, 0x1c, 0xc1, 0x82, 0x80, 0xdc, 0x43, 0xd4, 0x43, 0x94, 0x42, 0xe3, 0x7d, 0xd7, 0xfe, 0xc5, 0xb7, 0x1c, 0x49, 0x58, 0x41, 0x14, 0x45, 0x14, 0xc7, 0x18, 0x45, 0x54, 0x41, 0x54, 0xc3, 0xd8, 0x43, 0x63, 0x14, 0xa7, 0x0, 0x18, 0x45, 0xd8, 0xc3, 0x23, 0x28, 0x5, 0x0, 0x98, 0x43, 0x7d, 0x17, 0x98, 0xc3, 0x88, 0x43, 0x82, 0x80, 0x59, 0x71, 0xa2, 0xd4, 0x60, 0x10, 0x13, 0x6, 0x20, 0x3, 0x81, 0x45, 0x22, 0x85, 0x86, 0xd6, 0xa6, 0xd2, 0xca, 0xd0, 0x86, 0x84, 0x13, 0x9, 0x1, 0x1, 0x2, 0xc8, 0x2, 0xca, 0x23, 0xc, 0x1, 0x0, 0x23, 0x16, 0x1, 0x0, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x23, 0x41, 0x46, 0xca, 0x85, 0x13, 0x85, 0xd4, 0xff, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x31, 0x64, 0x0, 0xa6, 0x85, 0x29, 0x46, 0x1, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x30, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x47, 0xd2, 0x3e, 0xce, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0xd4, 0x26, 0xd4, 0x4a, 0xd0, 0x3e, 0xd2, 0x64, 0x8, 0x8c, 0x40, 0x22, 0x85, 0x91, 0x4, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x26, 0xe3, 0x19, 0x94, 0xfe, 0x22, 0x85, 0xef, 0x90, 0x4f, 0xa9, 0x79, 0x71, 0xb7, 0xa5, 0x81, 0x40, 0x41, 0x46, 0x93, 0x85, 0x5, 0x3b, 0x48, 0x0, 0x6, 0xd6, 0x22, 0xd4, 0x6, 0x84, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x1c, 0x93, 0x7, 0x0, 0x3, 0x2, 0xca, 0xa3, 0x9, 0xf1, 0x0, 0x41, 0x46, 0x93, 0x7, 0x80, 0x7, 0x93, 0x5, 0x51, 0x1, 0x13, 0x5, 0xc4, 0xff, 0x2, 0xcc, 0x2, 0xce, 0x23, 0xa, 0xf1, 0x0, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x28, 0x48, 0x0, 0xef, 0x90, 0xaf, 0xa4, 0x82, 0x80, 0x6f, 0x60, 0xef, 0xcc, 0x6f, 0x60, 0x8f, 0xe5, 0x2e, 0x85, 0x6f, 0x60, 0x4f, 0xcc, 0x2e, 0x85, 0x6f, 0x60, 0xcf, 0xe4, 0x2e, 0x85, 0xb2, 0x85, 0x6f, 0x60, 0x8f, 0xd4, 0xb3, 0xb7, 0xc5, 0x2, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x1, 0x44, 0xb3, 0x85, 0xc5, 0x2, 0x81, 0xef, 0x2e, 0x85, 0x2e, 0xc6, 0xef, 0x60, 0xcf, 0xc9, 0x2a, 0x84, 0x11, 0xc5, 0xb2, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x17, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2e, 0xc6, 0xef, 0xf0, 0xff, 0x91, 0xa2, 0x85, 0x62, 0x44, 0x32, 0x46, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0xf0, 0x7f, 0xfb, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x37, 0xb4, 0x81, 0x40, 0x93, 0x5, 0x4, 0x23, 0x5, 0x45, 0x6, 0xce, 0x13, 0x4, 0x4, 0x23, 0xef, 0x70, 0xf0, 0x74, 0x63, 0x8, 0xa4, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xf0, 0x5f, 0xf2, 0x37, 0xb4, 0x81, 0x40, 0x93, 0x5, 0xc4, 0x1d, 0x11, 0x45, 0xef, 0x70, 0x10, 0x73, 0x13, 0x4, 0xc4, 0x1d, 0xe3, 0x11, 0xa4, 0xfe, 0x6c, 0x0, 0xb7, 0xc7, 0x10, 0xbb, 0x93, 0x87, 0x37, 0x43, 0x2e, 0x85, 0x3e, 0xc6, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xc, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x26, 0xc2, 0x93, 0x87, 0x41, 0xc3, 0x4c, 0x41, 0xdc, 0x43, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x93, 0x84, 0x41, 0xc3, 0x63, 0x84, 0xf5, 0x0, 0xef, 0xa0, 0x40, 0x61, 0xc, 0x44, 0x9c, 0x44, 0x63, 0x85, 0xf5, 0x0, 0x22, 0x85, 0xef, 0xa0, 0x60, 0x60, 0x4c, 0x44, 0xdc, 0x44, 0x63, 0x89, 0xf5, 0x0, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x6f, 0xa0, 0x0, 0x5f, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x81, 0x45, 0x29, 0xa2, 0x37, 0x7, 0x88, 0x40, 0x93, 0x87, 0x1, 0x90, 0x23, 0x2a, 0xf7, 0xfc, 0x41, 0x11, 0x6, 0xc6, 0x93, 0x87, 0x81, 0xc2, 0x23, 0xa0, 0x7, 0x0, 0x23, 0xa2, 0x7, 0x0, 0x23, 0xa4, 0x7, 0x0, 0x93, 0x87, 0x41, 0xc3, 0x37, 0x7, 0x88, 0x40, 0x23, 0x28, 0xf7, 0xfc, 0x37, 0xa7, 0x80, 0x40, 0x13, 0x7, 0x87, 0x3e, 0x98, 0xd7, 0x11, 0x45, 0x5, 0x47, 0x98, 0xcf, 0xef, 0xf0, 0xbf, 0xea, 0xb7, 0x67, 0x81, 0x40, 0x23, 0xa2, 0xa7, 0xbc, 0x19, 0xe1, 0xef, 0xf0, 0x1f, 0xdd, 0xb2, 0x40, 0x23, 0x20, 0x5, 0x0, 0x41, 0x1, 0x6f, 0xf0, 0xdf, 0xef, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x3f, 0xfa, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x26, 0xc2, 0x4a, 0xc0, 0x13, 0x84, 0x41, 0xc3, 0x15, 0xe5, 0x13, 0x85, 0x41, 0xc3, 0x23, 0x24, 0x4, 0x2, 0x23, 0x2c, 0x4, 0x0, 0xef, 0xa0, 0x70, 0x26, 0xb7, 0xa7, 0x80, 0x40, 0x93, 0x87, 0x87, 0x3e, 0x1c, 0xd4, 0x85, 0x47, 0x1c, 0xcc, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xa5, 0x81, 0x40, 0x93, 0x85, 0xc5, 0xd4, 0xaa, 0x84, 0x37, 0xa9, 0x81, 0x40, 0xef, 0xa0, 0xf0, 0x36, 0x48, 0xc0, 0x93, 0x5, 0x9, 0xd5, 0x26, 0x85, 0xef, 0xa0, 0x30, 0x36, 0x8, 0xc4, 0x93, 0x5, 0x9, 0xd5, 0x26, 0x85, 0xef, 0xa0, 0x70, 0x35, 0x48, 0xc4, 0xe1, 0xb7, 0x37, 0xa5, 0x81, 0x40, 0x41, 0x11, 0x13, 0x5, 0x45, 0xd5, 0x6, 0xc6, 0xef, 0xf0, 0xdf, 0xf8, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x1, 0x11, 0x3e, 0xca, 0x2e, 0xc2, 0x32, 0xc4, 0x36, 0xc6, 0x3a, 0xc8, 0x42, 0xcc, 0x46, 0xce, 0x93, 0x7, 0x80, 0x5, 0x1c, 0xc1, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xff, 0xd0, 0x39, 0x71, 0x3e, 0xda, 0x3c, 0x10, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x32, 0x84, 0x2e, 0x89, 0xaa, 0x84, 0x32, 0xd4, 0x36, 0xd6, 0x3a, 0xd8, 0x42, 0xdc, 0x46, 0xde, 0x3e, 0xc6, 0xef, 0xf0, 0xcf, 0xf2, 0xa2, 0x86, 0x4a, 0x86, 0xa6, 0x85, 0xef, 0x20, 0xe0, 0x5b, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0x21, 0x61, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0xd, 0x24, 0xb3, 0x67, 0xb5, 0x0, 0x2a, 0x84, 0xae, 0x84, 0x37, 0xb9, 0x81, 0x40, 0x99, 0xef, 0x81, 0x47, 0x1, 0x48, 0x23, 0x2c, 0xf9, 0x62, 0x23, 0x2e, 0x9, 0x63, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x2, 0x49, 0xa6, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x61, 0x2a, 0x3, 0x27, 0xc9, 0x63, 0x83, 0x27, 0x89, 0x63, 0xe3, 0xed, 0xe5, 0xfc, 0x63, 0x14, 0xb7, 0x0, 0xe3, 0x69, 0xf5, 0xfc, 0xd9, 0x8f, 0xe1, 0xdf, 0xbd, 0x2a, 0x93, 0x97, 0xa5, 0x1, 0x13, 0x58, 0x65, 0x0, 0x33, 0xe8, 0x7, 0x1, 0x83, 0x28, 0xc9, 0x63, 0x83, 0x27, 0x89, 0x63, 0x13, 0xde, 0x65, 0x0, 0x13, 0x97, 0xa8, 0x1, 0x99, 0x83, 0xd9, 0x8f, 0x93, 0xd8, 0x68, 0x0, 0x33, 0x6, 0xf8, 0x40, 0x33, 0x37, 0xc8, 0x0, 0xb3, 0x6, 0x1e, 0x41, 0x99, 0x8e, 0x63, 0x44, 0xd0, 0x0, 0xd9, 0xfe, 0x51, 0xde, 0x23, 0x2c, 0xa9, 0x62, 0x37, 0xb5, 0x81, 0x40, 0x23, 0x2e, 0xb9, 0x62, 0x83, 0x25, 0x45, 0x63, 0x3, 0x27, 0x5, 0x63, 0x63, 0xde, 0x5, 0x4, 0x3a, 0x96, 0x33, 0x33, 0xe6, 0x0, 0xae, 0x96, 0x9a, 0x96, 0x63, 0xc0, 0x6, 0x2, 0x22, 0x97, 0xb3, 0x37, 0x87, 0x0, 0xa6, 0x95, 0xb3, 0x84, 0xb7, 0x0, 0x1, 0x48, 0x81, 0x47, 0x3a, 0x84, 0x23, 0x2c, 0xf9, 0x62, 0x23, 0x2e, 0x9, 0x63, 0x25, 0xa0, 0x33, 0x87, 0x87, 0x0, 0xb3, 0x37, 0xf7, 0x0, 0xa6, 0x98, 0x33, 0x8, 0x7, 0x41, 0xc6, 0x97, 0x33, 0x37, 0x7, 0x1, 0xb3, 0x87, 0xc7, 0x41, 0x23, 0x28, 0xc5, 0x62, 0x23, 0x2a, 0xd5, 0x62, 0x42, 0x84, 0xb3, 0x84, 0xe7, 0x40, 0x22, 0x85, 0xa6, 0x85, 0xf5, 0x28, 0x35, 0xb7, 0x33, 0x8, 0xc7, 0x40, 0xb3, 0x38, 0x7, 0x1, 0xb3, 0x87, 0xd5, 0x40, 0xb3, 0x87, 0x17, 0x41, 0x63, 0x45, 0xf0, 0x0, 0xcd, 0xf3, 0xe3, 0x0, 0x8, 0xfa, 0x22, 0x96, 0x23, 0x2a, 0xf5, 0x62, 0xa6, 0x96, 0xb3, 0x37, 0x86, 0x0, 0x23, 0x28, 0x5, 0x63, 0x32, 0x84, 0xb3, 0x84, 0xd7, 0x0, 0xe1, 0xb7, 0x41, 0x11, 0x4a, 0xc0, 0x37, 0xb9, 0x81, 0x40, 0x22, 0xc4, 0x2a, 0x84, 0x13, 0x5, 0xc9, 0x62, 0x26, 0xc2, 0x6, 0xc6, 0xb7, 0xb4, 0x81, 0x40, 0xef, 0x60, 0x7f, 0xee, 0x83, 0xa7, 0x84, 0x63, 0x3, 0xa7, 0xc4, 0x63, 0xd9, 0x8f, 0x89, 0xcb, 0xef, 0xf0, 0xbf, 0xea, 0x81, 0x47, 0x1, 0x48, 0x23, 0xac, 0xf4, 0x62, 0x23, 0xae, 0x4, 0x63, 0x13, 0x5, 0xc9, 0x62, 0xef, 0x60, 0xbf, 0xed, 0x14, 0x40, 0x5c, 0x40, 0x37, 0x47, 0xf, 0x0, 0x13, 0x7, 0x7, 0x24, 0xb3, 0x85, 0xe6, 0x2, 0x0, 0x44, 0xb3, 0xb6, 0xe6, 0x2, 0xb3, 0x87, 0xe7, 0x2, 0x13, 0x57, 0xf4, 0x41, 0x2e, 0x94, 0xb3, 0x35, 0xb4, 0x0, 0xb6, 0x97, 0xba, 0x97, 0xb3, 0x84, 0xf5, 0x0, 0x15, 0x28, 0x33, 0x5, 0xa4, 0x40, 0x33, 0x34, 0xa4, 0x0, 0xb3, 0x85, 0xb4, 0x40, 0x81, 0x8d, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x81, 0xa0, 0x9, 0xc9, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x3f, 0xf7, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x89, 0xa2, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x70, 0xaf, 0x88, 0x37, 0xb7, 0x81, 0x40, 0xaa, 0x87, 0x3, 0x25, 0x87, 0x64, 0x3, 0x27, 0xc7, 0x64, 0xb2, 0x40, 0x3e, 0x95, 0xb3, 0x37, 0xf5, 0x0, 0xba, 0x95, 0xbe, 0x95, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x4a, 0xc0, 0x37, 0xb9, 0x81, 0x40, 0x26, 0xc2, 0xaa, 0x84, 0x13, 0x5, 0x9, 0x64, 0x22, 0xc4, 0x6, 0xc6, 0x2e, 0x84, 0xef, 0x60, 0x3f, 0xe2, 0xb7, 0x17, 0xb, 0x60, 0x84, 0xc7, 0xb7, 0x17, 0xb, 0x60, 0xc0, 0xc7, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x13, 0x5, 0x9, 0x64, 0x2, 0x49, 0x41, 0x1, 0x6f, 0x60, 0xdf, 0xe1, 0x1, 0x11, 0x22, 0xcc, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x5, 0x4, 0x64, 0x6, 0xce, 0x26, 0xca, 0xef, 0x60, 0x1f, 0xdf, 0xb7, 0x17, 0xb, 0x60, 0x84, 0x47, 0xb7, 0x17, 0xb, 0x60, 0xcc, 0x47, 0x13, 0x5, 0x4, 0x64, 0x2e, 0xc6, 0xef, 0x60, 0x3f, 0xdf, 0xf2, 0x40, 0x62, 0x44, 0xb2, 0x45, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0xef, 0xa0, 0xdf, 0x8b, 0xaa, 0x84, 0x2e, 0x84, 0xef, 0x60, 0x9f, 0xfe, 0x33, 0x85, 0xa4, 0x40, 0xb3, 0xb4, 0xa4, 0x0, 0xd, 0x8c, 0x5, 0x8c, 0xb7, 0xb7, 0x81, 0x40, 0xb2, 0x40, 0x23, 0xa6, 0x87, 0x64, 0x22, 0x44, 0x23, 0xa4, 0xa7, 0x64, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x81, 0x45, 0xa, 0x85, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0xef, 0xb0, 0x60, 0x14, 0x81, 0x45, 0xa, 0x85, 0xef, 0xf0, 0x5f, 0xf0, 0xef, 0xa0, 0x3f, 0x87, 0x2a, 0x89, 0xae, 0x84, 0xef, 0x60, 0xff, 0xf9, 0x2a, 0x84, 0xae, 0x89, 0xef, 0xf0, 0x7f, 0xf6, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x26, 0x87, 0x64, 0xb3, 0x7, 0x89, 0x40, 0x3, 0x27, 0xc7, 0x64, 0x33, 0x39, 0xf9, 0x0, 0xb3, 0x84, 0x34, 0x41, 0xb3, 0x84, 0x24, 0x41, 0xb3, 0x87, 0xf6, 0x40, 0xb3, 0xb6, 0xf6, 0x0, 0x5, 0x8f, 0x15, 0x8f, 0x3e, 0x95, 0xb3, 0x37, 0xf5, 0x0, 0xba, 0x95, 0xbe, 0x95, 0xef, 0xf0, 0x9f, 0xef, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x6f, 0xf0, 0x7f, 0xf5, 0x6f, 0xf0, 0xdf, 0xa8, 0x41, 0x11, 0x26, 0xc2, 0xb7, 0xb5, 0x80, 0x40, 0xb7, 0xb4, 0x81, 0x40, 0x93, 0x85, 0x65, 0x89, 0x13, 0x85, 0x4, 0x65, 0x6, 0xc6, 0x22, 0xc4, 0x9d, 0x20, 0x9, 0xed, 0x2a, 0x84, 0x5, 0x45, 0xef, 0x70, 0x10, 0x2b, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xaa, 0xa7, 0x64, 0x11, 0xe5, 0x3, 0xa5, 0x4, 0x65, 0x71, 0x28, 0x13, 0x4, 0x10, 0x10, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x6f, 0xf0, 0xdf, 0xfb, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0xaa, 0x84, 0xef, 0xf0, 0x2f, 0xcd, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa4, 0x87, 0x65, 0x9, 0xe8, 0xef, 0xf0, 0x2f, 0xcf, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x1c, 0x40, 0xe3, 0x87, 0x97, 0xfe, 0x0, 0x44, 0xdd, 0xb7, 0x41, 0x11, 0x26, 0xc2, 0xaa, 0x84, 0x31, 0x45, 0x4a, 0xc0, 0x6, 0xc6, 0x22, 0xc4, 0x2e, 0x89, 0xef, 0xf0, 0x7f, 0x9f, 0x5, 0xcd, 0x2a, 0x84, 0xef, 0xf0, 0x2f, 0xc9, 0xb7, 0xb6, 0x81, 0x40, 0x3, 0xa7, 0x86, 0x65, 0x85, 0x47, 0x19, 0xc3, 0x1c, 0x43, 0x85, 0x7, 0x9c, 0xc0, 0x1c, 0xc0, 0x23, 0x22, 0x24, 0x1, 0x18, 0xc4, 0x23, 0xac, 0x86, 0x64, 0xef, 0xf0, 0xef, 0xc9, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x31, 0x45, 0xcd, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xef, 0xf0, 0x4f, 0xc5, 0x32, 0x45, 0xef, 0xf0, 0x3f, 0xf7, 0x1, 0xcd, 0xb7, 0xb6, 0x81, 0x40, 0x83, 0xa7, 0x86, 0x65, 0x18, 0x45, 0x63, 0x9c, 0xa7, 0x0, 0x23, 0xac, 0xe6, 0x64, 0xef, 0xf0, 0x7f, 0x99, 0xef, 0xf0, 0xf, 0xc6, 0xf2, 0x40, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0xbe, 0x86, 0x9c, 0x47, 0xe3, 0x9e, 0xa7, 0xfe, 0x98, 0xc6, 0xdd, 0xb7, 0x82, 0x80, 0x82, 0x80, 0x82, 0x80, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x95, 0x20, 0x31, 0x20, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0xef, 0xa0, 0xf, 0xee, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa4, 0x87, 0x59, 0x83, 0xa7, 0xc7, 0x59, 0xb3, 0x4, 0x95, 0x40, 0x33, 0x35, 0x95, 0x0, 0x33, 0x84, 0xf5, 0x40, 0x9, 0x8c, 0xef, 0x60, 0xdf, 0xe3, 0x33, 0x85, 0xa4, 0x40, 0xb3, 0xb4, 0xa4, 0x0, 0xd, 0x8c, 0x5, 0x8c, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa2, 0x87, 0x66, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x23, 0xa0, 0xa7, 0x66, 0x37, 0xb5, 0x80, 0x40, 0x13, 0x5, 0xe5, 0x81, 0x41, 0x1, 0x6f, 0x80, 0x9f, 0xa4, 0x1, 0x11, 0x6d, 0x45, 0x6, 0xce, 0x22, 0xcc, 0xef, 0xc0, 0x8f, 0xd5, 0xaa, 0x85, 0x5, 0xe1, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0xf8, 0x4b, 0x13, 0x67, 0x17, 0x0, 0xf8, 0xcb, 0xf8, 0x4b, 0x13, 0x67, 0x27, 0x0, 0xf8, 0xcb, 0xf8, 0x4b, 0x75, 0x9b, 0xf8, 0xcb, 0x6d, 0x45, 0xef, 0xc0, 0x4f, 0xd5, 0xb7, 0x27, 0x81, 0x40, 0x93, 0x87, 0x87, 0xbf, 0x37, 0xb4, 0x81, 0x40, 0x3e, 0xc4, 0xb7, 0x27, 0x81, 0x40, 0x93, 0x87, 0x47, 0xc0, 0x13, 0x5, 0x44, 0x28, 0x3e, 0xc6, 0xef, 0x50, 0xa0, 0x15, 0x2c, 0x0, 0x13, 0x5, 0x44, 0x28, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x95, 0x13, 0x5, 0x44, 0x28, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x96, 0x13, 0x5, 0x44, 0x28, 0x1, 0x46, 0x89, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x95, 0x13, 0x5, 0x44, 0x28, 0x1, 0x46, 0x89, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x95, 0x13, 0x5, 0x44, 0x28, 0x85, 0x46, 0x1, 0x46, 0x81, 0x45, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x94, 0xf2, 0x40, 0x62, 0x44, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x83, 0x27, 0xc4, 0x66, 0x6, 0xc6, 0x26, 0xc2, 0xa9, 0xeb, 0x37, 0x26, 0x80, 0x40, 0x85, 0x65, 0xaa, 0x84, 0x13, 0x7, 0xc4, 0x66, 0x81, 0x46, 0x13, 0x6, 0xc6, 0x80, 0x93, 0x85, 0x25, 0xc0, 0x13, 0x5, 0xb0, 0x3, 0xef, 0xa0, 0x9f, 0xc0, 0x1d, 0xe9, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x87, 0x66, 0x1, 0xef, 0x37, 0xb5, 0x81, 0x40, 0x89, 0x45, 0x13, 0x5, 0x45, 0x28, 0x23, 0xa4, 0x97, 0x66, 0x97, 0x60, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x8d, 0x3, 0x25, 0xc4, 0x66, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x6f, 0x60, 0x2f, 0x9c, 0x13, 0x5, 0x30, 0x10, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xa7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x7, 0x47, 0xaa, 0x97, 0x9c, 0x43, 0x93, 0x6, 0x0, 0x8, 0x98, 0x43, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0xb3, 0x7, 0xf7, 0x40, 0x13, 0xb5, 0x17, 0x0, 0x91, 0xe3, 0xc1, 0x46, 0x1, 0x46, 0x11, 0xc1, 0xd, 0x46, 0x5, 0x45, 0x5c, 0x4f, 0xc1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0xb3, 0xd7, 0xc7, 0x40, 0xb3, 0x87, 0xf6, 0x40, 0xe3, 0x78, 0xf5, 0xfe, 0x93, 0xf5, 0xf5, 0xf, 0xc, 0xc3, 0x82, 0x80, 0xb7, 0xa7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x7, 0x47, 0xaa, 0x97, 0x9c, 0x43, 0xb7, 0x16, 0xb, 0x60, 0x93, 0x86, 0x6, 0x40, 0x98, 0x43, 0x1, 0x46, 0x5c, 0x4f, 0x93, 0xf7, 0xf7, 0xf, 0x63, 0x13, 0xd7, 0x0, 0xd, 0x46, 0xb3, 0xd7, 0xc7, 0x40, 0x7d, 0x55, 0x81, 0xc7, 0x8, 0x43, 0x13, 0x75, 0xf5, 0xf, 0x82, 0x80, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x17, 0x25, 0x0, 0x93, 0x87, 0x7, 0x47, 0xba, 0x97, 0x9c, 0x43, 0xfd, 0x56, 0xd8, 0x43, 0x63, 0x14, 0xd7, 0x0, 0x9c, 0x53, 0x82, 0x87, 0xd4, 0xc3, 0x3a, 0x85, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x2a, 0x84, 0xef, 0x10, 0x20, 0x3b, 0xef, 0xf0, 0x6f, 0x9d, 0x81, 0x44, 0x21, 0xc8, 0xef, 0xf0, 0xef, 0x9c, 0xb7, 0xb9, 0x81, 0x40, 0x3, 0xa5, 0xc9, 0x67, 0x37, 0xb9, 0x81, 0x40, 0x83, 0x24, 0x89, 0x67, 0xaa, 0x87, 0x1, 0x47, 0x63, 0x45, 0x97, 0x0, 0x93, 0x4, 0x30, 0x10, 0x2d, 0xa0, 0x90, 0x43, 0x93, 0x86, 0x47, 0x0, 0x63, 0x16, 0xc4, 0x4, 0xfd, 0x14, 0x93, 0x95, 0x24, 0x0, 0x33, 0x7, 0xb5, 0x0, 0x18, 0x43, 0x5, 0x66, 0x98, 0xc3, 0xef, 0x50, 0xdf, 0xc1, 0x23, 0xae, 0xa9, 0x66, 0x23, 0x2c, 0x99, 0x66, 0x81, 0x44, 0xef, 0xf0, 0x2f, 0x9b, 0x5c, 0x48, 0x13, 0xf5, 0x17, 0x0, 0x1d, 0xe1, 0x54, 0x4c, 0x13, 0xf7, 0x16, 0x0, 0x29, 0xef, 0x58, 0x50, 0x13, 0x76, 0x17, 0x0, 0x29, 0xea, 0xd5, 0x8f, 0xd9, 0x8f, 0x89, 0x8b, 0x95, 0xc7, 0x5, 0x47, 0x5, 0x45, 0x31, 0xa0, 0x5, 0x7, 0xb6, 0x87, 0x45, 0xb7, 0x1, 0x47, 0x1, 0x45, 0xb7, 0xb7, 0x81, 0x40, 0xa, 0x7, 0x93, 0x87, 0x7, 0x67, 0xba, 0x97, 0x98, 0x43, 0x7d, 0x17, 0x98, 0xc3, 0x1, 0xe7, 0x81, 0x45, 0xef, 0x10, 0x80, 0x2f, 0xef, 0x10, 0xe0, 0x30, 0xef, 0xf0, 0xf, 0x96, 0x22, 0x85, 0xef, 0xf0, 0xcf, 0xe8, 0xf2, 0x40, 0x62, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x47, 0xd9, 0xb7, 0x39, 0x71, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x3e, 0xc6, 0x6, 0xde, 0x22, 0xdc, 0x5a, 0xd0, 0x3a, 0xc4, 0x89, 0x47, 0xae, 0x84, 0xb2, 0x89, 0x36, 0x89, 0xc2, 0x8a, 0x9, 0x4a, 0x63, 0xc3, 0xa7, 0x0, 0x2a, 0x8a, 0x23, 0xa0, 0xa, 0x0, 0x1, 0x44, 0x5, 0x4b, 0x63, 0x4c, 0x44, 0x1, 0x85, 0x65, 0x13, 0x5, 0xc0, 0x2, 0xef, 0x50, 0x3f, 0xad, 0x2a, 0x84, 0x39, 0xe1, 0x13, 0x5, 0x10, 0x10, 0x35, 0xa0, 0x98, 0x40, 0xb3, 0x17, 0x8b, 0x0, 0x7d, 0x8f, 0x19, 0xeb, 0x3, 0xa7, 0x9, 0x0, 0x7d, 0x8f, 0x19, 0xe7, 0x3, 0x27, 0x9, 0x0, 0xf9, 0x8f, 0x99, 0xe3, 0x5, 0x4, 0xf1, 0xb7, 0x22, 0x85, 0xef, 0x10, 0xc0, 0x24, 0x7d, 0xf9, 0x13, 0x5, 0x30, 0x10, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0x21, 0x61, 0x82, 0x80, 0xa2, 0x47, 0x23, 0x26, 0x35, 0x1, 0x23, 0x28, 0x25, 0x1, 0x1c, 0xc1, 0xb2, 0x47, 0x4, 0xc5, 0x5, 0x4b, 0x5c, 0xc1, 0x9c, 0x40, 0x5c, 0xc9, 0xdc, 0x40, 0x1c, 0xcd, 0x83, 0xa7, 0x9, 0x0, 0x5c, 0xcd, 0x83, 0xa7, 0x49, 0x0, 0x1c, 0xd1, 0x83, 0x27, 0x9, 0x0, 0x5c, 0xd1, 0x83, 0x27, 0x49, 0x0, 0x1c, 0xd5, 0x23, 0xa2, 0x4, 0x0, 0x23, 0xa0, 0x4, 0x0, 0x23, 0xa2, 0x9, 0x0, 0x23, 0xa0, 0x9, 0x0, 0x23, 0x22, 0x9, 0x0, 0x23, 0x20, 0x9, 0x0, 0xef, 0x10, 0xa0, 0x21, 0x37, 0xb9, 0x81, 0x40, 0xef, 0xf0, 0xaf, 0x83, 0x13, 0x9, 0x9, 0x67, 0x81, 0x49, 0x63, 0xc1, 0x49, 0x5, 0x1, 0x49, 0x5, 0x4b, 0x63, 0x4a, 0x49, 0x7, 0x37, 0xb9, 0x81, 0x40, 0xef, 0xf0, 0xf, 0x82, 0x83, 0x24, 0x89, 0x67, 0xb7, 0xb9, 0x81, 0x40, 0x3, 0xa5, 0xc9, 0x67, 0x85, 0x4, 0x5, 0x66, 0x93, 0x95, 0x24, 0x0, 0xef, 0x50, 0x3f, 0xa9, 0x3d, 0xed, 0xef, 0xf0, 0xf, 0x83, 0xef, 0x10, 0x60, 0x1d, 0xef, 0xf0, 0x8f, 0x82, 0x22, 0x85, 0xef, 0xf0, 0x4f, 0xd5, 0x39, 0xbf, 0x58, 0x48, 0xb3, 0x17, 0x3b, 0x1, 0x7d, 0x8f, 0x19, 0xe7, 0x58, 0x4c, 0x7d, 0x8f, 0x1, 0xe7, 0x58, 0x50, 0xf9, 0x8f, 0x85, 0xc3, 0x83, 0x27, 0x9, 0x0, 0x81, 0xeb, 0xb7, 0xb5, 0x80, 0x40, 0x93, 0x85, 0x25, 0xe6, 0x4e, 0x85, 0xef, 0x10, 0x60, 0x18, 0x83, 0x27, 0x9, 0x0, 0x85, 0x7, 0x23, 0x20, 0xf9, 0x0, 0x85, 0x9, 0x11, 0x9, 0x59, 0xb7, 0x5c, 0x48, 0xb3, 0x19, 0x2b, 0x1, 0xb3, 0xf7, 0xf9, 0x0, 0x85, 0xc3, 0x6c, 0x8, 0x4a, 0x85, 0xef, 0x0, 0x70, 0x7e, 0x19, 0xe9, 0xf2, 0x47, 0x89, 0xcb, 0x9c, 0x40, 0x8, 0x40, 0x4c, 0x40, 0xb3, 0xe7, 0x37, 0x1, 0x9c, 0xc0, 0xef, 0x20, 0x80, 0x3, 0x5, 0x9, 0x85, 0xb7, 0x83, 0x27, 0x89, 0x67, 0x23, 0xae, 0xa9, 0x66, 0x23, 0x2c, 0x99, 0x66, 0x8a, 0x7, 0x3e, 0x95, 0x0, 0xc1, 0xef, 0xe0, 0x3f, 0xfa, 0xef, 0x10, 0x80, 0x14, 0xef, 0xe0, 0xbf, 0xf9, 0x1, 0x45, 0x23, 0xa0, 0x8a, 0x0, 0xc1, 0xb5, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x6, 0xd6, 0x2a, 0x84, 0xae, 0x84, 0x32, 0x89, 0x81, 0x49, 0xef, 0xe0, 0x3f, 0xf4, 0x37, 0xbb, 0x81, 0x40, 0xb7, 0xbb, 0x81, 0x40, 0x5, 0x4a, 0x93, 0xa, 0xf0, 0x3, 0x9, 0x4c, 0x83, 0x27, 0x8b, 0x67, 0x63, 0xcf, 0xf9, 0x0, 0x22, 0x54, 0xb2, 0x50, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x45, 0x61, 0x6f, 0xe0, 0xff, 0xf3, 0x83, 0xa7, 0xcb, 0x67, 0x13, 0x97, 0x29, 0x0, 0xba, 0x97, 0x9c, 0x43, 0x95, 0xcf, 0x63, 0x8f, 0x44, 0x3, 0x63, 0x8d, 0x84, 0x5, 0x8d, 0xe8, 0x63, 0xe8, 0x8a, 0x2, 0x93, 0x56, 0x54, 0x0, 0x13, 0x87, 0x46, 0x0, 0xa, 0x7, 0x3e, 0x97, 0x58, 0x43, 0x33, 0x16, 0x8a, 0x0, 0x71, 0x8f, 0x1, 0xcf, 0x98, 0x47, 0x8a, 0x6, 0x36, 0x97, 0x14, 0x43, 0x88, 0x43, 0xcc, 0x43, 0xd1, 0x8e, 0x14, 0xc3, 0x4a, 0x86, 0xef, 0x10, 0xb0, 0x7b, 0x85, 0x9, 0x51, 0xbf, 0xe3, 0xee, 0x8a, 0xfe, 0x93, 0x56, 0x54, 0x0, 0x13, 0x87, 0x46, 0x0, 0xa, 0x7, 0x3e, 0x97, 0x58, 0x47, 0x33, 0x96, 0x84, 0x0, 0x71, 0x8f, 0x75, 0xd3, 0xd8, 0x47, 0x8a, 0x6, 0xf1, 0xb7, 0xe3, 0xee, 0x8a, 0xfc, 0x93, 0x56, 0x54, 0x0, 0x13, 0x87, 0x86, 0x0, 0xa, 0x7, 0x3e, 0x97, 0x58, 0x43, 0x33, 0x16, 0x8a, 0x0, 0x71, 0x8f, 0x71, 0xd3, 0x98, 0x4b, 0x8a, 0x6, 0x75, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0x85, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0xef, 0xa0, 0xb0, 0x1e, 0xa5, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x81, 0xe5, 0xef, 0x0, 0x70, 0x6e, 0x75, 0xd9, 0xef, 0xa0, 0x30, 0x1d, 0xd9, 0x47, 0xe5, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0x85, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0xef, 0xa0, 0x10, 0x1c, 0xa5, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xfd, 0x55, 0xef, 0x0, 0xf0, 0x52, 0x75, 0xd9, 0xef, 0xa0, 0x90, 0x1a, 0xd9, 0x47, 0xe5, 0xb7, 0x1, 0x11, 0x4a, 0xc8, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x5, 0x49, 0x63, 0x7d, 0xa9, 0x0, 0xef, 0xa0, 0x10, 0x19, 0xa5, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x80, 0x2e, 0x84, 0x89, 0xe5, 0xef, 0xa0, 0x70, 0x17, 0xd9, 0x47, 0xdd, 0xb7, 0xaa, 0x84, 0x71, 0x46, 0x81, 0x45, 0x22, 0x85, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x4d, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x97, 0x24, 0x0, 0x93, 0x87, 0x7, 0x47, 0xba, 0x97, 0x9c, 0x43, 0x9c, 0x4f, 0xf9, 0xe7, 0xa1, 0x47, 0x23, 0x10, 0xf4, 0x0, 0x6c, 0x0, 0x26, 0x85, 0xef, 0x0, 0x70, 0x19, 0x79, 0xf1, 0x83, 0x57, 0x44, 0x0, 0x32, 0x47, 0x89, 0x46, 0xf1, 0x9b, 0xc2, 0x7, 0xc1, 0x83, 0x23, 0x12, 0xf4, 0x0, 0x63, 0x3, 0xd7, 0xc, 0x63, 0xe7, 0xe6, 0xa, 0x93, 0xe7, 0x17, 0x0, 0x5d, 0xef, 0x6c, 0x0, 0x26, 0x85, 0xef, 0x0, 0xf0, 0x1c, 0x51, 0xfd, 0xb2, 0x47, 0x5, 0x47, 0x63, 0x8b, 0xe7, 0x0, 0xd, 0x47, 0x63, 0x9d, 0xe7, 0x8, 0x83, 0x57, 0x44, 0x0, 0x93, 0xe7, 0x47, 0x0, 0x23, 0x12, 0xf4, 0x0, 0x6c, 0x0, 0x26, 0x85, 0xef, 0x0, 0x70, 0x21, 0x25, 0xfd, 0xb2, 0x47, 0x9, 0x47, 0x63, 0x88, 0xe7, 0x8, 0xd, 0x47, 0x63, 0x8c, 0xe7, 0x8, 0xad, 0xeb, 0x6c, 0x0, 0x26, 0x85, 0xef, 0x0, 0x30, 0x40, 0x39, 0xfd, 0x3, 0x57, 0x44, 0x0, 0xa5, 0x66, 0x93, 0x86, 0x6, 0x60, 0x93, 0x67, 0x7, 0x30, 0x23, 0x12, 0xf4, 0x0, 0xb2, 0x47, 0x63, 0x87, 0xd7, 0x1a, 0x63, 0xe1, 0xf6, 0xe, 0x93, 0x6, 0xc0, 0x12, 0x63, 0x83, 0xd7, 0x1a, 0x63, 0xe5, 0xf6, 0x8, 0x93, 0x6, 0xe0, 0x6, 0x63, 0x8f, 0xd7, 0x18, 0x63, 0xe1, 0xf6, 0x6, 0x93, 0x6, 0x20, 0x3, 0x63, 0x8b, 0xd7, 0x18, 0x93, 0x6, 0xb0, 0x4, 0x63, 0x89, 0xd7, 0x18, 0x89, 0xc7, 0x13, 0x67, 0x7, 0x70, 0x23, 0x12, 0xe4, 0x0, 0x1c, 0xcc, 0x5c, 0xc8, 0xed, 0xbd, 0xe3, 0x9d, 0x27, 0xf3, 0x89, 0x47, 0x5, 0xbf, 0x8d, 0x46, 0x93, 0xe7, 0x37, 0x0, 0x63, 0x9, 0xd7, 0x0, 0xef, 0xa0, 0xd0, 0x6, 0x93, 0x7, 0x80, 0x5, 0xe9, 0xbd, 0x93, 0xe7, 0x27, 0x0, 0x23, 0x12, 0xf4, 0x0, 0x81, 0xb7, 0x83, 0x57, 0x44, 0x0, 0x93, 0xe7, 0x7, 0x1, 0x23, 0x12, 0xf4, 0x0, 0x85, 0xbf, 0x83, 0x57, 0x44, 0x0, 0x93, 0xe7, 0x7, 0x3, 0xcd, 0xbf, 0x93, 0x6, 0x60, 0x9, 0x63, 0x80, 0xd7, 0x14, 0x93, 0x6, 0x80, 0xc, 0x63, 0x8e, 0xd7, 0x12, 0x93, 0x6, 0x60, 0x8, 0xe3, 0x90, 0xd7, 0xfa, 0x91, 0x47, 0x4d, 0xb7, 0x85, 0x66, 0x93, 0x86, 0x6, 0x96, 0x63, 0x85, 0xd7, 0x12, 0x63, 0xe0, 0xf6, 0x2, 0x93, 0x6, 0x0, 0x4b, 0x63, 0x81, 0xd7, 0x12, 0x93, 0x6, 0x80, 0x70, 0x63, 0x8f, 0xd7, 0x10, 0x93, 0x6, 0x80, 0x25, 0xe3, 0x9b, 0xd7, 0xf6, 0xa1, 0x47, 0xa5, 0xbf, 0x89, 0x66, 0x93, 0x86, 0x6, 0x58, 0x63, 0x86, 0xd7, 0x10, 0x95, 0x66, 0x93, 0x86, 0x6, 0xb0, 0x63, 0x83, 0xd7, 0x10, 0x85, 0x66, 0x93, 0x86, 0x6, 0x2c, 0xe3, 0x9a, 0xd7, 0xf4, 0xb1, 0x47, 0x99, 0xbf, 0xb7, 0x46, 0xf, 0x0, 0x93, 0x86, 0x6, 0x24, 0x63, 0x88, 0xd7, 0xe, 0x63, 0xee, 0xf6, 0x4, 0xb7, 0x16, 0x7, 0x0, 0x93, 0x86, 0x6, 0x80, 0x63, 0x82, 0xd7, 0xe, 0x63, 0xe4, 0xf6, 0x2, 0xf1, 0x66, 0x93, 0x86, 0x6, 0x20, 0x63, 0x8d, 0xd7, 0xc, 0xb7, 0x86, 0x3, 0x0, 0x93, 0x86, 0x6, 0x40, 0x63, 0x89, 0xd7, 0xc, 0xb9, 0x66, 0x93, 0x86, 0x6, 0x10, 0xe3, 0x98, 0xd7, 0xf0, 0xc1, 0x47, 0x9, 0xbf, 0xb7, 0xd6, 0x8, 0x0, 0x93, 0x86, 0x6, 0xa0, 0x63, 0x8e, 0xd7, 0xa, 0xb7, 0x16, 0xe, 0x0, 0x63, 0x8c, 0xd7, 0xa, 0xb7, 0xa6, 0x7, 0x0, 0x93, 0x86, 0x6, 0x12, 0xe3, 0x96, 0xd7, 0xee, 0xd1, 0x47, 0xfd, 0xb5, 0xb7, 0x26, 0x26, 0x0, 0x93, 0x86, 0x6, 0x5a, 0x63, 0x80, 0xd7, 0xa, 0x63, 0xe6, 0xf6, 0x2, 0xb7, 0xe6, 0x16, 0x0, 0x93, 0x86, 0x6, 0x36, 0x63, 0x8a, 0xd7, 0x8, 0xb7, 0x86, 0x1e, 0x0, 0x93, 0x86, 0x6, 0x48, 0x63, 0x86, 0xd7, 0x8, 0xb7, 0x96, 0x11, 0x0, 0x93, 0x86, 0x6, 0x40, 0xe3, 0x9a, 0xd7, 0xea, 0xe1, 0x47, 0x5d, 0xbd, 0xb7, 0x66, 0x35, 0x0, 0x93, 0x86, 0x6, 0x7e, 0x63, 0x8a, 0xd7, 0x6, 0xb7, 0x16, 0x3d, 0x0, 0x93, 0x86, 0x6, 0x90, 0x63, 0x86, 0xd7, 0x6, 0xb7, 0xc6, 0x2d, 0x0, 0x93, 0x86, 0x6, 0x6c, 0xe3, 0x96, 0xd7, 0xe8, 0xf1, 0x47, 0x79, 0xb5, 0xbd, 0x47, 0x69, 0xb5, 0x9d, 0x47, 0x59, 0xb5, 0x8d, 0x47, 0x49, 0xb5, 0x85, 0x47, 0xbd, 0xbd, 0x89, 0x47, 0xad, 0xbd, 0x95, 0x47, 0x9d, 0xbd, 0x99, 0x47, 0x8d, 0xbd, 0xad, 0x47, 0xbd, 0xb5, 0xa5, 0x47, 0xad, 0xb5, 0xa9, 0x47, 0x9d, 0xb5, 0xb5, 0x47, 0x8d, 0xb5, 0xb9, 0x47, 0xb9, 0xbd, 0xdd, 0x47, 0xa9, 0xbd, 0xcd, 0x47, 0x99, 0xbd, 0xc5, 0x47, 0x89, 0xbd, 0xc9, 0x47, 0xb9, 0xb5, 0xd5, 0x47, 0xa9, 0xb5, 0xd9, 0x47, 0x99, 0xb5, 0xed, 0x47, 0x89, 0xb5, 0xe5, 0x47, 0x3d, 0xbd, 0xe9, 0x47, 0x2d, 0xbd, 0xf5, 0x47, 0x1d, 0xbd, 0xf9, 0x47, 0xd, 0xbd, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x85, 0x47, 0x63, 0xfe, 0xa7, 0x0, 0xef, 0xa0, 0x40, 0x6a, 0xa5, 0x47, 0x1c, 0xc1, 0x7d, 0x59, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x4a, 0x85, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x32, 0x84, 0x9, 0xe6, 0xef, 0xa0, 0x80, 0x68, 0xd9, 0x47, 0xd5, 0xb7, 0xaa, 0x84, 0x63, 0x8c, 0xf5, 0xc, 0x89, 0x47, 0x63, 0x8e, 0xf5, 0xc, 0xf5, 0xf5, 0x3, 0x57, 0x4, 0x0, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x96, 0x24, 0x0, 0x93, 0x87, 0x7, 0x47, 0xb6, 0x97, 0x13, 0x76, 0x87, 0x0, 0x94, 0x43, 0x81, 0x47, 0x9, 0xe6, 0x9, 0x8b, 0x93, 0x37, 0x17, 0x0, 0x85, 0x7, 0x9c, 0xce, 0x83, 0x57, 0x44, 0x0, 0x9, 0x47, 0x89, 0x45, 0x8d, 0x8b, 0x63, 0x89, 0xe7, 0x0, 0xd, 0x47, 0x8d, 0x45, 0x63, 0x85, 0xe7, 0x0, 0xfd, 0x17, 0x93, 0xb5, 0x17, 0x0, 0x26, 0x85, 0x99, 0x25, 0x55, 0xf1, 0x83, 0x57, 0x44, 0x0, 0x85, 0x45, 0x91, 0x8b, 0x91, 0xc3, 0x8d, 0x45, 0x26, 0x85, 0xef, 0x0, 0x60, 0x69, 0x41, 0xf9, 0x83, 0x57, 0x44, 0x0, 0x81, 0x45, 0x13, 0xf7, 0x7, 0x1, 0x11, 0xc7, 0x93, 0xf7, 0x7, 0x2, 0xb3, 0x35, 0xf0, 0x0, 0x89, 0x5, 0x26, 0x85, 0xef, 0x0, 0xc0, 0x6e, 0x2a, 0x89, 0x25, 0xf9, 0x83, 0x57, 0x44, 0x0, 0x13, 0xf7, 0x7, 0x30, 0x31, 0xdb, 0x4c, 0x48, 0x18, 0x4c, 0xe3, 0x90, 0xe5, 0xf6, 0x93, 0xf7, 0x7, 0x40, 0x9d, 0xe7, 0xbd, 0x47, 0x63, 0x83, 0xf5, 0x10, 0x63, 0xe4, 0xb7, 0x8, 0x9d, 0x47, 0x63, 0x82, 0xf5, 0x10, 0x63, 0xe7, 0xb7, 0x4, 0x8d, 0x47, 0x63, 0x80, 0xf5, 0x10, 0x63, 0xe9, 0xb7, 0x2, 0x85, 0x47, 0x63, 0x8e, 0xf5, 0xe, 0x89, 0x47, 0x63, 0x8e, 0xf5, 0xe, 0x81, 0x45, 0x26, 0x85, 0xef, 0x0, 0xa0, 0x70, 0xe3, 0x9, 0x5, 0xf0, 0x5, 0xb7, 0xfd, 0x55, 0xef, 0x0, 0x50, 0x12, 0xe3, 0x1c, 0x5, 0xf0, 0x26, 0x85, 0xef, 0x0, 0x90, 0x2a, 0x15, 0xd1, 0x31, 0xb7, 0x95, 0x47, 0x63, 0x8d, 0xf5, 0xc, 0x99, 0x47, 0x63, 0x8d, 0xf5, 0xc, 0x93, 0x5, 0x60, 0x8, 0xc1, 0xbf, 0xad, 0x47, 0x63, 0x8a, 0xf5, 0xc, 0x63, 0xeb, 0xb7, 0x0, 0xa5, 0x47, 0x63, 0x89, 0xf5, 0xc, 0xa9, 0x47, 0x63, 0x89, 0xf5, 0xc, 0x93, 0x5, 0x80, 0x25, 0x55, 0xbf, 0xb5, 0x47, 0x63, 0x86, 0xf5, 0xc, 0xb9, 0x47, 0x63, 0x87, 0xf5, 0xc, 0x85, 0x65, 0x93, 0x85, 0x5, 0x2c, 0x45, 0xb7, 0xdd, 0x47, 0x63, 0x84, 0xf5, 0xc, 0x63, 0xec, 0xb7, 0x2, 0xcd, 0x47, 0x63, 0x84, 0xf5, 0xc, 0x63, 0xec, 0xb7, 0x0, 0xc5, 0x47, 0x63, 0x84, 0xf5, 0xc, 0xc9, 0x47, 0x63, 0x85, 0xf5, 0xc, 0xb9, 0x65, 0x93, 0x85, 0x5, 0x10, 0xa5, 0xbf, 0xd5, 0x47, 0x63, 0x81, 0xf5, 0xc, 0xd9, 0x47, 0x63, 0x83, 0xf5, 0xc, 0xb7, 0xa5, 0x7, 0x0, 0x93, 0x85, 0x5, 0x12, 0x8d, 0xb7, 0xed, 0x47, 0x63, 0x8e, 0xf5, 0xa, 0x63, 0xed, 0xb7, 0x0, 0xe5, 0x47, 0x63, 0x8e, 0xf5, 0xa, 0xe9, 0x47, 0x63, 0x80, 0xf5, 0xc, 0xb7, 0x95, 0x11, 0x0, 0x93, 0x85, 0x5, 0x40, 0x89, 0xb7, 0xf5, 0x47, 0x63, 0x8d, 0xf5, 0xa, 0xf9, 0x47, 0x63, 0x8f, 0xf5, 0xa, 0xf1, 0x47, 0xe3, 0x9e, 0xf5, 0xe4, 0xb7, 0xc5, 0x2d, 0x0, 0x93, 0x85, 0x5, 0x6c, 0x1d, 0xb7, 0xa5, 0x65, 0x93, 0x85, 0x5, 0x60, 0x39, 0xbf, 0x93, 0x5, 0xc0, 0x12, 0x21, 0xbf, 0x93, 0x5, 0xe0, 0x6, 0x9, 0xbf, 0x93, 0x5, 0x20, 0x3, 0x31, 0xb7, 0x93, 0x5, 0xb0, 0x4, 0x19, 0xb7, 0x93, 0x5, 0x60, 0x9, 0x1, 0xb7, 0x93, 0x5, 0x80, 0xc, 0xed, 0xbd, 0x85, 0x65, 0x93, 0x85, 0x5, 0x96, 0xcd, 0xbd, 0x93, 0x5, 0x0, 0x4b, 0xf5, 0xb5, 0x93, 0x5, 0x80, 0x70, 0xdd, 0xb5, 0x89, 0x65, 0x93, 0x85, 0x5, 0x58, 0xf9, 0xbd, 0x95, 0x65, 0x93, 0x85, 0x5, 0xb0, 0xd9, 0xbd, 0xb7, 0x45, 0xf, 0x0, 0x93, 0x85, 0x5, 0x24, 0xf1, 0xb5, 0xb7, 0x15, 0x7, 0x0, 0x93, 0x85, 0x5, 0x80, 0xc9, 0xb5, 0xf1, 0x65, 0x93, 0x85, 0x5, 0x20, 0x6d, 0xbd, 0xb7, 0x85, 0x3, 0x0, 0xbd, 0xb7, 0xb7, 0xd5, 0x8, 0x0, 0x93, 0x85, 0x5, 0xa0, 0x6d, 0xb5, 0xb7, 0x15, 0xe, 0x0, 0x55, 0xb5, 0xb7, 0x25, 0x26, 0x0, 0x93, 0x85, 0x5, 0x5a, 0x69, 0xbd, 0xb7, 0xe5, 0x16, 0x0, 0x93, 0x85, 0x5, 0x36, 0x41, 0xbd, 0xb7, 0x85, 0x1e, 0x0, 0x93, 0x85, 0x5, 0x48, 0x59, 0xb5, 0xb7, 0x65, 0x35, 0x0, 0x93, 0x85, 0x5, 0x7e, 0xb5, 0xbd, 0xb7, 0x15, 0x3d, 0x0, 0x93, 0x85, 0x5, 0x90, 0x8d, 0xbd, 0x41, 0x11, 0x22, 0xc4, 0x2e, 0x84, 0xb7, 0xa5, 0x81, 0x40, 0x93, 0x85, 0x45, 0xd6, 0x26, 0xc2, 0x6, 0xc6, 0xaa, 0x84, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xf9, 0xd, 0xc5, 0xb7, 0xa5, 0x81, 0x40, 0x93, 0x85, 0x85, 0xd6, 0x26, 0x85, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xf8, 0x19, 0xc9, 0xb7, 0xa5, 0x81, 0x40, 0x93, 0x85, 0xc5, 0xd6, 0x26, 0x85, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xf7, 0x15, 0xe1, 0x19, 0xc8, 0x93, 0x77, 0x64, 0x0, 0x99, 0xc3, 0x5, 0x88, 0x11, 0xc4, 0xef, 0xa0, 0x0, 0x3d, 0xb5, 0x47, 0x1c, 0xc1, 0x7d, 0x54, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xef, 0xa0, 0xa0, 0x3b, 0x89, 0x47, 0xed, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x2e, 0x84, 0xb7, 0xa5, 0x81, 0x40, 0x93, 0x85, 0x45, 0xd6, 0x26, 0xc2, 0x6, 0xc6, 0xaa, 0x84, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xf2, 0x15, 0xc5, 0xb7, 0xa5, 0x81, 0x40, 0x93, 0x85, 0x85, 0xd6, 0x26, 0x85, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xf1, 0x19, 0xc9, 0xef, 0xa0, 0x0, 0x38, 0x89, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5, 0x45, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x17, 0x25, 0x0, 0x93, 0x87, 0x7, 0x47, 0xba, 0x97, 0x9c, 0x43, 0x39, 0x80, 0x5, 0x88, 0x23, 0x88, 0x87, 0x0, 0xf1, 0xbf, 0x41, 0x11, 0x6, 0xc6, 0x89, 0x47, 0x63, 0xf8, 0xa7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xe0, 0xbf, 0xcd, 0x8d, 0x47, 0x63, 0x92, 0xf5, 0x2, 0xb7, 0xa7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x7, 0x47, 0xaa, 0x97, 0x9c, 0x43, 0x11, 0x65, 0x9, 0x5, 0x83, 0xc7, 0x7, 0x1, 0x91, 0xe3, 0x9, 0x45, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x91, 0x47, 0x63, 0x9f, 0xf5, 0x0, 0xb7, 0xa7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x7, 0x47, 0xaa, 0x97, 0x9c, 0x43, 0x39, 0x82, 0x5, 0x8a, 0x23, 0x88, 0xc7, 0x0, 0x1, 0x45, 0xf1, 0xbf, 0xef, 0xa0, 0x40, 0x2f, 0x93, 0x7, 0x80, 0x5, 0x1c, 0xc1, 0x7d, 0x55, 0xf9, 0xb7, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0xe0, 0x7f, 0xc7, 0x41, 0x11, 0x6, 0xc6, 0x9, 0x47, 0x63, 0x74, 0xa7, 0x0, 0xef, 0xf0, 0x7f, 0xfe, 0xae, 0x87, 0x13, 0x6, 0x80, 0x5, 0x81, 0x45, 0x3e, 0x85, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xe3, 0xb2, 0x40, 0x9, 0x67, 0x58, 0xc1, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x89, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0xe0, 0x5f, 0xc3, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x89, 0x47, 0x63, 0xf4, 0xa7, 0x0, 0xef, 0xf0, 0xdf, 0xf9, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x17, 0x25, 0x0, 0x93, 0x87, 0x7, 0x47, 0xba, 0x97, 0x84, 0x43, 0x2a, 0x84, 0xb1, 0x4, 0x26, 0x85, 0xef, 0x50, 0x9f, 0xee, 0x13, 0x75, 0xf4, 0xf, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x9a, 0x26, 0x85, 0xef, 0x50, 0xdf, 0xee, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6a, 0xc0, 0x89, 0x47, 0x63, 0xf8, 0xa7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xe0, 0xbf, 0xbb, 0x37, 0xa9, 0x81, 0x40, 0x93, 0x17, 0x25, 0x0, 0x13, 0x9, 0x9, 0x47, 0x3e, 0x99, 0x83, 0x29, 0x9, 0x0, 0x2e, 0x84, 0x32, 0x8a, 0x93, 0x8a, 0xc9, 0x0, 0xaa, 0x84, 0x56, 0x85, 0xef, 0x50, 0xdf, 0xe7, 0xb3, 0xb, 0x44, 0x1, 0x29, 0x4c, 0x89, 0x4c, 0x5, 0x4d, 0x63, 0x94, 0x8b, 0x2, 0x56, 0x85, 0xef, 0x50, 0xff, 0xe7, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x2, 0x4d, 0x52, 0x85, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x3, 0x4b, 0x4, 0x0, 0x63, 0xa, 0x8b, 0x1, 0x83, 0x27, 0x9, 0x0, 0xda, 0x85, 0x26, 0x85, 0xdc, 0x4f, 0x82, 0x97, 0x5, 0x4, 0xc9, 0xb7, 0x83, 0xa7, 0x49, 0x1, 0xe3, 0x86, 0x97, 0xff, 0x83, 0xa7, 0xc9, 0x1, 0xb5, 0x45, 0x26, 0x85, 0x82, 0x97, 0x83, 0xa7, 0x49, 0x1, 0xe3, 0x9d, 0xa7, 0xfd, 0xcd, 0xb7, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6a, 0xc0, 0x89, 0x47, 0x63, 0xf8, 0xa7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xe0, 0x7f, 0xb0, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x17, 0x25, 0x0, 0x93, 0x87, 0x7, 0x47, 0xba, 0x97, 0x3, 0xa9, 0x7, 0x0, 0xaa, 0x89, 0xae, 0x8a, 0x13, 0xb, 0x89, 0x0, 0x5a, 0x85, 0x32, 0x8a, 0x1, 0x44, 0xef, 0x50, 0x7f, 0xdc, 0xb5, 0x4b, 0x7d, 0x5c, 0x85, 0x4c, 0x29, 0x4d, 0x63, 0x4, 0x8a, 0x4, 0x4e, 0x85, 0xef, 0xf0, 0x6f, 0xbb, 0xaa, 0x84, 0x63, 0x10, 0x75, 0x9, 0x83, 0x27, 0x89, 0x1, 0x63, 0x9b, 0x97, 0x1, 0xa9, 0x44, 0xb3, 0x87, 0x8a, 0x0, 0x23, 0x80, 0x97, 0x0, 0x5, 0x4, 0xe3, 0x9e, 0xa4, 0xfd, 0x5, 0xa0, 0xe5, 0xfb, 0x4e, 0x85, 0xef, 0xf0, 0xef, 0xb8, 0xfd, 0x57, 0x63, 0x12, 0xf5, 0x4, 0x83, 0x27, 0x49, 0x0, 0x63, 0x84, 0xa7, 0x0, 0xef, 0xf0, 0x5f, 0xe1, 0x23, 0x22, 0x79, 0x1, 0x5a, 0x85, 0xef, 0x50, 0x7f, 0xd8, 0x22, 0x85, 0x11, 0xe4, 0xef, 0xa0, 0x80, 0xe, 0xad, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x2, 0x4d, 0x45, 0x61, 0x82, 0x80, 0x29, 0x47, 0xe3, 0xf, 0xe5, 0xf8, 0x3, 0x27, 0x49, 0x0, 0xe3, 0x1f, 0xf7, 0xfa, 0x23, 0x22, 0xa9, 0x0, 0x41, 0xbf, 0xe3, 0x17, 0x85, 0xf9, 0x65, 0xbf, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x3c, 0x82, 0x80, 0xb7, 0xa5, 0x81, 0x40, 0x37, 0xa5, 0x81, 0x40, 0x41, 0x11, 0x1, 0x46, 0x93, 0x85, 0xc5, 0x3c, 0x13, 0x5, 0x5, 0xd7, 0x6, 0xc6, 0xef, 0x0, 0xb0, 0x60, 0x19, 0xc1, 0xef, 0xe0, 0xff, 0x99, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x7f, 0xfd, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x89, 0x47, 0x63, 0xe1, 0xa7, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xe0, 0x4f, 0xce, 0xb7, 0xb7, 0x81, 0x40, 0x13, 0x17, 0x24, 0x0, 0x93, 0x87, 0x7, 0x29, 0xba, 0x97, 0x9c, 0x43, 0x12, 0x4, 0x13, 0x87, 0x41, 0x9f, 0x9c, 0x57, 0x22, 0x97, 0x18, 0x47, 0x93, 0xf7, 0x17, 0x10, 0x22, 0x44, 0x1c, 0xcb, 0x54, 0x47, 0xb2, 0x40, 0xd5, 0x8f, 0x5c, 0xc7, 0x41, 0x1, 0x6f, 0xe0, 0xf, 0xce, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x7, 0x29, 0xaa, 0x97, 0x98, 0x43, 0x1c, 0x5b, 0x54, 0x57, 0x63, 0x93, 0xd7, 0x0, 0x82, 0x80, 0x10, 0x5f, 0x93, 0x96, 0x27, 0x0, 0x85, 0x7, 0x36, 0x96, 0x14, 0x42, 0x8d, 0x8e, 0x14, 0xc2, 0x50, 0x5b, 0x63, 0xc3, 0xc7, 0x0, 0x81, 0x47, 0xe3, 0xd0, 0x6, 0xfe, 0x1c, 0xdb, 0xe9, 0xbf, 0x89, 0x47, 0x63, 0xec, 0xa7, 0x2, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x8d, 0x47, 0x2e, 0xc6, 0x2a, 0x84, 0x7d, 0x55, 0x63, 0xef, 0xb7, 0x0, 0xef, 0xe0, 0xcf, 0xc5, 0xb2, 0x45, 0x12, 0x4, 0x21, 0x4, 0x13, 0x85, 0x41, 0x9f, 0x22, 0x95, 0xef, 0x50, 0xc0, 0x46, 0xef, 0xe0, 0x6f, 0xc7, 0x1, 0x45, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x7d, 0x55, 0x82, 0x80, 0x89, 0x47, 0x63, 0xef, 0xa7, 0x0, 0x12, 0x5, 0x93, 0x87, 0x41, 0x9f, 0x21, 0x5, 0x41, 0x11, 0x3e, 0x95, 0x6, 0xc6, 0xef, 0x50, 0x60, 0x46, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x7d, 0x55, 0x82, 0x80, 0x89, 0x47, 0x63, 0xec, 0xa7, 0x2, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x8d, 0x47, 0x2e, 0xc6, 0x2a, 0x84, 0x7d, 0x55, 0x63, 0xef, 0xb7, 0x0, 0xef, 0xe0, 0xaf, 0xbf, 0xb2, 0x45, 0x12, 0x4, 0x21, 0x4, 0x13, 0x85, 0x41, 0x9f, 0x22, 0x95, 0xef, 0x50, 0x80, 0x3d, 0xef, 0xe0, 0x4f, 0xc1, 0x1, 0x45, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x7d, 0x55, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2e, 0xc6, 0x89, 0x47, 0x63, 0xe4, 0xa7, 0x2, 0x2a, 0x84, 0xef, 0xe0, 0x4f, 0xbc, 0xb2, 0x45, 0x12, 0x4, 0x21, 0x4, 0x13, 0x85, 0x41, 0x9f, 0x22, 0x95, 0xef, 0x50, 0x80, 0x3c, 0xef, 0xe0, 0xef, 0xbd, 0x1, 0x45, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x7d, 0x55, 0xdd, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2e, 0xc6, 0x89, 0x47, 0x63, 0xe4, 0xa7, 0x2, 0x2a, 0x84, 0xef, 0xe0, 0xef, 0xb8, 0xb2, 0x45, 0x12, 0x4, 0x21, 0x4, 0x13, 0x85, 0x41, 0x9f, 0x22, 0x95, 0xef, 0x50, 0xe0, 0x3c, 0xef, 0xe0, 0x8f, 0xba, 0x1, 0x45, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x7d, 0x55, 0xdd, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2e, 0xc6, 0x89, 0x47, 0x63, 0xe4, 0xa7, 0x2, 0x2a, 0x84, 0xef, 0xe0, 0x8f, 0xb5, 0xb2, 0x45, 0x12, 0x4, 0x21, 0x4, 0x13, 0x85, 0x41, 0x9f, 0x22, 0x95, 0xef, 0x50, 0x80, 0x3c, 0xef, 0xe0, 0x2f, 0xb7, 0x1, 0x45, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x7d, 0x55, 0xdd, 0xbf, 0x39, 0x71, 0x5a, 0xd0, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x9, 0x4b, 0x63, 0x6c, 0xab, 0x1a, 0x93, 0x1a, 0x45, 0x0, 0x2a, 0x8a, 0x93, 0x89, 0x41, 0x9f, 0x13, 0x85, 0x8a, 0x0, 0x4e, 0x95, 0x2e, 0x89, 0x6c, 0x0, 0xef, 0x50, 0x80, 0x23, 0x32, 0x45, 0x10, 0x8, 0x81, 0x45, 0xef, 0x50, 0x10, 0x76, 0xaa, 0x84, 0x71, 0xe9, 0xef, 0xe0, 0x4f, 0xaf, 0x93, 0x17, 0xc9, 0x0, 0x33, 0x86, 0x27, 0x41, 0x93, 0x56, 0x49, 0x1, 0xb3, 0xb7, 0xc7, 0x0, 0x42, 0x44, 0x9d, 0x8e, 0x63, 0x5, 0x6a, 0xf, 0x93, 0x7, 0xf4, 0xff, 0x93, 0x35, 0x14, 0x0, 0x33, 0x85, 0xc7, 0x0, 0xb3, 0x37, 0xf5, 0x0, 0xb3, 0x85, 0xb6, 0x40, 0xd6, 0x99, 0xbe, 0x95, 0x83, 0xa9, 0x89, 0x0, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xec, 0x19, 0xe1, 0xef, 0xe0, 0x2f, 0xf4, 0x33, 0x9, 0xa9, 0x2, 0x12, 0x4, 0x83, 0xa7, 0x49, 0x1, 0xfd, 0x76, 0xf5, 0x8f, 0x33, 0x54, 0x24, 0x3, 0x13, 0x17, 0x4, 0x1, 0x51, 0x83, 0xd9, 0x8f, 0x23, 0xaa, 0xf9, 0x0, 0x83, 0xa7, 0x49, 0x1, 0x37, 0x7, 0x10, 0xff, 0x3d, 0x88, 0x7d, 0x17, 0x52, 0x4, 0xf9, 0x8f, 0xc1, 0x8f, 0x23, 0xaa, 0xf9, 0x0, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0xe3, 0x80, 0xf9, 0xfc, 0xb7, 0x6, 0x0, 0x60, 0x93, 0x7, 0xf5, 0xff, 0x37, 0x67, 0x9, 0x60, 0x93, 0x86, 0x6, 0x0, 0x13, 0x7, 0x7, 0x0, 0x93, 0xf7, 0xf7, 0xf, 0x63, 0x95, 0xd9, 0x4, 0x54, 0x43, 0x37, 0x16, 0xf0, 0xff, 0x7d, 0x16, 0x36, 0xca, 0xd2, 0x46, 0xb2, 0x7, 0xf1, 0x8e, 0xd5, 0x8f, 0x3e, 0xca, 0xd2, 0x47, 0x5c, 0xc3, 0x83, 0xa7, 0x89, 0x9, 0x93, 0xe7, 0x17, 0x0, 0x23, 0xac, 0xf9, 0x8, 0x83, 0xa7, 0x89, 0x9, 0x85, 0x8b, 0xed, 0xff, 0xef, 0xe0, 0x4f, 0xa5, 0xf2, 0x50, 0x62, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0x26, 0x85, 0xd2, 0x54, 0x21, 0x61, 0x82, 0x80, 0x14, 0x4b, 0x37, 0x16, 0xf0, 0xff, 0x7d, 0x16, 0x36, 0xcc, 0xe2, 0x46, 0xb2, 0x7, 0xf1, 0x8e, 0xd5, 0x8f, 0x3e, 0xcc, 0xe2, 0x47, 0x1c, 0xcb, 0x6d, 0xbf, 0x93, 0x7, 0xf4, 0xff, 0x93, 0x35, 0x14, 0x0, 0x33, 0x85, 0xc7, 0x0, 0xb3, 0x37, 0xf5, 0x0, 0xb3, 0x85, 0xb6, 0x40, 0xbe, 0x95, 0x83, 0xa9, 0x89, 0x2, 0x97, 0x50, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xde, 0x19, 0xdd, 0x33, 0x9, 0xa9, 0x2, 0x12, 0x4, 0x83, 0xa7, 0x49, 0x1, 0xfd, 0x76, 0x7d, 0x15, 0xf5, 0x8f, 0xb7, 0x16, 0xf0, 0xff, 0x13, 0x75, 0xf5, 0xf, 0xfd, 0x16, 0x32, 0x5, 0x33, 0x54, 0x24, 0x3, 0x13, 0x17, 0x4, 0x1, 0x51, 0x83, 0xd9, 0x8f, 0x23, 0xaa, 0xf9, 0x0, 0x83, 0xa7, 0x49, 0x1, 0x37, 0x7, 0x10, 0xff, 0x7d, 0x17, 0x3d, 0x88, 0xf9, 0x8f, 0x52, 0x4, 0xc1, 0x8f, 0x23, 0xaa, 0xf9, 0x0, 0x13, 0x87, 0x9, 0x8, 0x1c, 0x47, 0x3e, 0xce, 0xf2, 0x47, 0xf5, 0x8f, 0xc9, 0x8f, 0x3e, 0xce, 0xf2, 0x47, 0x1c, 0xc7, 0x1c, 0x4f, 0x93, 0xe7, 0x17, 0x0, 0x1c, 0xcf, 0x83, 0xa7, 0x89, 0x9, 0x85, 0x8b, 0xed, 0xff, 0x89, 0xb7, 0xfd, 0x54, 0x89, 0xb7, 0x1, 0x11, 0x26, 0xca, 0x6, 0xce, 0x22, 0xcc, 0x4a, 0xc8, 0x89, 0x47, 0xfd, 0x54, 0x63, 0xed, 0xa7, 0x2, 0x13, 0x14, 0x45, 0x0, 0x93, 0x87, 0x41, 0x9f, 0x21, 0x4, 0x3e, 0x94, 0x22, 0x85, 0x2e, 0x89, 0x2c, 0x0, 0xef, 0x50, 0x0, 0x7, 0x22, 0x45, 0x70, 0x0, 0x81, 0x45, 0xef, 0x50, 0x90, 0x59, 0xaa, 0x84, 0x11, 0xe9, 0xef, 0xe0, 0xcf, 0x92, 0x32, 0x46, 0xca, 0x85, 0x22, 0x85, 0xef, 0x50, 0xa0, 0xa, 0xef, 0xe0, 0xcf, 0x94, 0xf2, 0x40, 0x62, 0x44, 0x42, 0x49, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x89, 0x47, 0x63, 0xe2, 0xa7, 0x14, 0x1, 0x11, 0x22, 0xcc, 0x37, 0xb4, 0x81, 0x40, 0x56, 0xc2, 0x5a, 0xc0, 0x93, 0x1a, 0x25, 0x0, 0x13, 0xb, 0x4, 0x29, 0x56, 0x9b, 0x83, 0x27, 0xb, 0x0, 0x26, 0xca, 0x6, 0xce, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0xaa, 0x84, 0x13, 0x4, 0x4, 0x29, 0x63, 0x8d, 0x7, 0x10, 0x2e, 0x8a, 0xef, 0xd0, 0x6f, 0xbc, 0x83, 0x27, 0xb, 0x0, 0xaa, 0x89, 0xd2, 0x85, 0xe8, 0x57, 0xef, 0x60, 0x50, 0x13, 0x9, 0xed, 0x13, 0x5, 0x70, 0x10, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x80, 0xef, 0xe0, 0xaf, 0x8a, 0x93, 0x87, 0x41, 0x9f, 0x92, 0x4, 0xa6, 0x97, 0x3, 0x26, 0xb, 0x0, 0x98, 0x47, 0x91, 0x66, 0x4c, 0x46, 0x5c, 0x47, 0x5, 0x46, 0x13, 0x89, 0x41, 0x9f, 0xf5, 0x8f, 0x63, 0x9e, 0xc5, 0x0, 0x91, 0xef, 0x5c, 0x43, 0x13, 0x97, 0x17, 0x1, 0x63, 0x5a, 0x7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xe0, 0x2f, 0xd8, 0x91, 0xe3, 0x14, 0xcb, 0xef, 0xe0, 0x8f, 0x89, 0xb3, 0x7, 0x54, 0x1, 0x9c, 0x43, 0x81, 0x45, 0xe8, 0x5b, 0xef, 0x60, 0x90, 0xc, 0x9, 0x45, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x2d, 0xb3, 0x7, 0x99, 0x0, 0x98, 0x47, 0xb7, 0x16, 0xb, 0x60, 0x93, 0x86, 0x6, 0x40, 0x5c, 0x4f, 0x1, 0x46, 0xc1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x63, 0x13, 0xd7, 0x0, 0xd, 0x46, 0xb3, 0xd7, 0xc7, 0x40, 0x89, 0xe7, 0x3c, 0x5b, 0x91, 0x83, 0xbd, 0x8b, 0xa9, 0xc7, 0xef, 0xe0, 0x2f, 0x82, 0x26, 0x99, 0x3, 0x27, 0x89, 0x0, 0x91, 0x66, 0x5c, 0x47, 0xd5, 0x8f, 0x5c, 0xc7, 0xef, 0xe0, 0xef, 0x83, 0xef, 0xd0, 0xcf, 0xaf, 0xb3, 0x7, 0x35, 0x41, 0x81, 0x45, 0x63, 0x65, 0xfa, 0x0, 0xd2, 0x99, 0xb3, 0x85, 0xa9, 0x40, 0x56, 0x94, 0x1c, 0x40, 0xe8, 0x5b, 0xef, 0x60, 0xf0, 0x5, 0x1c, 0x40, 0xaa, 0x84, 0x81, 0x46, 0xe8, 0x57, 0x1, 0x46, 0x81, 0x45, 0xef, 0x60, 0x0, 0x3c, 0x91, 0xe8, 0x29, 0xbf, 0x56, 0x94, 0x1c, 0x40, 0x81, 0x46, 0x1, 0x46, 0xe8, 0x57, 0x81, 0x45, 0xef, 0x60, 0xc0, 0x3a, 0x1, 0x45, 0x29, 0xb7, 0x7d, 0x55, 0x82, 0x80, 0x7d, 0x55, 0x9, 0xb7, 0x89, 0x47, 0x63, 0xed, 0xa7, 0x2, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0xa, 0x5, 0x13, 0x4, 0x4, 0x29, 0x2a, 0x94, 0x1c, 0x40, 0x6, 0xc6, 0x26, 0xc2, 0x7d, 0x55, 0x91, 0xcb, 0xae, 0x84, 0xef, 0xd0, 0xdf, 0xf9, 0x1c, 0x40, 0xdc, 0x4b, 0x9c, 0xc0, 0xef, 0xd0, 0x1f, 0xfc, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x7d, 0x55, 0x82, 0x80, 0x89, 0x47, 0x63, 0xec, 0xa7, 0x10, 0x39, 0x71, 0x4a, 0xd8, 0x37, 0xb9, 0x81, 0x40, 0x26, 0xda, 0x5e, 0xce, 0x93, 0x4, 0x9, 0x29, 0x93, 0x1b, 0x25, 0x0, 0xde, 0x94, 0x4e, 0xd6, 0x83, 0xa9, 0x4, 0x0, 0x22, 0xdc, 0x6, 0xde, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x2a, 0x84, 0x13, 0x9, 0x9, 0x29, 0x7d, 0x55, 0x63, 0x8c, 0x9, 0x6, 0x3, 0xa5, 0x89, 0x6, 0xfd, 0x55, 0xef, 0x60, 0xc0, 0x7a, 0xef, 0xd0, 0xdf, 0xf3, 0x93, 0x87, 0x41, 0x9f, 0x13, 0x1a, 0x44, 0x0, 0xd2, 0x97, 0x98, 0x47, 0x93, 0x8a, 0x41, 0x9f, 0x5c, 0x47, 0x93, 0xf7, 0xe7, 0xef, 0x5c, 0xc7, 0xef, 0xd0, 0xff, 0xf4, 0x3, 0xa5, 0x9, 0x6, 0x1, 0x46, 0x6c, 0x0, 0xef, 0x70, 0x60, 0x8, 0x2a, 0x8b, 0x29, 0xe9, 0xef, 0xd0, 0xdf, 0xf0, 0x5e, 0x99, 0x83, 0x27, 0x9, 0x0, 0xd8, 0x4b, 0x19, 0xc3, 0x23, 0xaa, 0x7, 0x0, 0x23, 0x8e, 0x7, 0x0, 0xef, 0xd0, 0x5f, 0xf2, 0x13, 0x5, 0x8a, 0x0, 0x56, 0x95, 0xef, 0x80, 0x3f, 0xad, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0x9f, 0x3, 0xa5, 0x89, 0x6, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x60, 0x60, 0x2b, 0x1, 0x45, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x21, 0x61, 0x82, 0x80, 0xef, 0xd0, 0xdf, 0xeb, 0x98, 0x40, 0xb2, 0x45, 0x22, 0x85, 0x5c, 0x4b, 0x8d, 0x8f, 0x5c, 0xcb, 0xef, 0xf0, 0x1f, 0xa0, 0xef, 0xd0, 0x7f, 0xed, 0x3, 0xa5, 0x9, 0x6, 0xda, 0x85, 0xef, 0x70, 0x60, 0x4, 0x9c, 0x40, 0x3, 0xc7, 0xc7, 0x1, 0x25, 0xdf, 0x3, 0xc6, 0x47, 0x2, 0x8c, 0x53, 0xa8, 0x53, 0x81, 0x46, 0xef, 0x60, 0x50, 0x7c, 0x85, 0x47, 0xe3, 0x13, 0xf5, 0xf6, 0xef, 0xd0, 0xff, 0xe7, 0x9c, 0x40, 0xd8, 0x4b, 0x83, 0xc6, 0x47, 0x2, 0x23, 0x8e, 0x7, 0x0, 0x36, 0x97, 0xd8, 0xcb, 0xef, 0xd0, 0x9f, 0xe9, 0xa9, 0xb7, 0x7d, 0x55, 0x82, 0x80, 0x89, 0x47, 0x63, 0xec, 0xa7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x7, 0x29, 0xaa, 0x97, 0x88, 0x43, 0x33, 0x35, 0xa0, 0x0, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x89, 0x47, 0x63, 0xeb, 0xa7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x7, 0x29, 0xaa, 0x97, 0x9c, 0x43, 0x91, 0xc3, 0xac, 0xcf, 0x82, 0x80, 0x13, 0x85, 0x1, 0x83, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x90, 0xdf, 0xd4, 0xb7, 0xb7, 0x81, 0x40, 0x5, 0x47, 0xb2, 0x40, 0x23, 0x82, 0xe7, 0x68, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa0, 0x7, 0x68, 0x37, 0x25, 0x80, 0x40, 0x13, 0x5, 0x25, 0x8c, 0x41, 0x1, 0x6f, 0x30, 0x60, 0x50, 0x82, 0x80, 0xb9, 0x81, 0x85, 0x89, 0x23, 0x88, 0xb1, 0xa2, 0x1, 0x45, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x90, 0x70, 0x15, 0xb2, 0x40, 0xd9, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0x41, 0x1, 0x82, 0x80, 0xae, 0x87, 0x41, 0x11, 0x13, 0x6, 0x80, 0x5, 0x81, 0x45, 0x3e, 0x85, 0x6, 0xc6, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x4a, 0xb2, 0x40, 0x9, 0x67, 0x58, 0xc1, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x4a, 0xc0, 0x13, 0x85, 0xc1, 0xa2, 0x22, 0xc4, 0x26, 0xc2, 0x37, 0xf4, 0x0, 0x60, 0x6, 0xc6, 0xef, 0x50, 0x2f, 0xd9, 0x13, 0x7, 0x4, 0x0, 0x5c, 0x43, 0x13, 0x4, 0x4, 0x0, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xc3, 0x93, 0x84, 0x41, 0xa2, 0xef, 0x50, 0xaf, 0xfe, 0x9c, 0x50, 0xd8, 0x50, 0xb3, 0x7, 0xf5, 0x40, 0x33, 0x35, 0xf5, 0x0, 0x99, 0x8d, 0x89, 0x8d, 0x63, 0x44, 0xb0, 0x2, 0x91, 0xe5, 0x31, 0x67, 0x13, 0x7, 0xf7, 0x34, 0x63, 0x6e, 0xf7, 0x0, 0x5c, 0x40, 0x85, 0x83, 0x85, 0x8b, 0xf9, 0xdb, 0xef, 0x50, 0xef, 0xfb, 0x88, 0xd0, 0xcc, 0xd0, 0x5c, 0x40, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xc0, 0x13, 0x85, 0xc1, 0xa2, 0xef, 0x50, 0xf, 0xd5, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0x1f, 0xf8, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x52, 0xcc, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x2e, 0x84, 0x32, 0x89, 0xaa, 0x89, 0x13, 0x85, 0xc1, 0xa2, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6, 0xd6, 0x56, 0xca, 0x33, 0xb, 0x24, 0x1, 0xef, 0x50, 0x2f, 0xcf, 0x93, 0x84, 0x41, 0xa2, 0xa9, 0x4b, 0x9, 0x4c, 0x85, 0x4c, 0x63, 0x14, 0x64, 0x3, 0x13, 0x85, 0xc1, 0xa2, 0xef, 0x50, 0x2f, 0xcf, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x4a, 0x85, 0x2, 0x59, 0x45, 0x61, 0x82, 0x80, 0x83, 0x4a, 0x4, 0x0, 0x9c, 0x4c, 0x63, 0x88, 0x7a, 0x1, 0x9c, 0x4c, 0xd6, 0x85, 0x4e, 0x85, 0x82, 0x97, 0x5, 0x4, 0xd1, 0xb7, 0x98, 0x48, 0xe3, 0x9, 0x87, 0xff, 0xb5, 0x45, 0x4e, 0x85, 0x82, 0x97, 0x9c, 0x48, 0xe3, 0x93, 0x97, 0xff, 0xed, 0xb7, 0xb7, 0xa5, 0x81, 0x40, 0x37, 0xa5, 0x81, 0x40, 0x41, 0x11, 0x1, 0x46, 0x93, 0x85, 0x85, 0x47, 0x13, 0x5, 0xc5, 0xd7, 0x6, 0xc6, 0xbd, 0x2b, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x93, 0x87, 0x41, 0xa2, 0x98, 0x43, 0xfd, 0x56, 0x63, 0x14, 0xd7, 0x0, 0xdc, 0x4f, 0x82, 0x87, 0x94, 0xc3, 0x3a, 0x85, 0x82, 0x80, 0x8d, 0x47, 0x63, 0x99, 0xf5, 0x0, 0x83, 0xc7, 0x1, 0xa3, 0x11, 0x65, 0x9, 0x5, 0x9d, 0xe7, 0x9, 0x45, 0x82, 0x80, 0x91, 0x47, 0x63, 0x98, 0xf5, 0x0, 0x39, 0x82, 0x5, 0x8a, 0x23, 0x88, 0xc1, 0xa2, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x90, 0x20, 0x7b, 0xb2, 0x40, 0x93, 0x7, 0x80, 0x5, 0x1c, 0xc1, 0x7d, 0x55, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x89, 0xe9, 0xef, 0x90, 0x80, 0x79, 0xd9, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xae, 0x87, 0x3e, 0x85, 0x71, 0x46, 0x81, 0x45, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x2f, 0x13, 0x87, 0x41, 0xa2, 0x58, 0x4b, 0xaa, 0x87, 0x19, 0xef, 0x21, 0x47, 0x23, 0x90, 0xe7, 0x0, 0xd, 0x47, 0x23, 0x92, 0xe7, 0x0, 0x37, 0x47, 0xf, 0x0, 0x13, 0x7, 0x7, 0x24, 0x98, 0xcf, 0xd8, 0xcb, 0x1, 0x45, 0xd9, 0xb7, 0x85, 0x46, 0xe3, 0x14, 0xd7, 0xfe, 0x9, 0x47, 0xf9, 0xbf, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0xe0, 0x8f, 0x8d, 0x37, 0xf7, 0x0, 0x60, 0x13, 0x7, 0x7, 0x0, 0x5c, 0x43, 0x7d, 0x55, 0x89, 0x83, 0x85, 0x8b, 0x81, 0xc7, 0x8, 0x43, 0x13, 0x75, 0xf5, 0xf, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x37, 0xf4, 0x0, 0x60, 0x4a, 0xc0, 0x6, 0xc6, 0x2e, 0x89, 0x13, 0x4, 0x4, 0x0, 0x93, 0x84, 0x41, 0xa2, 0x5c, 0x40, 0x85, 0x83, 0x85, 0x8b, 0x8d, 0xcb, 0x5c, 0x40, 0x85, 0x83, 0x85, 0x8b, 0x81, 0xc7, 0x93, 0x77, 0xf9, 0xf, 0x1c, 0xc0, 0xa9, 0x47, 0x63, 0x16, 0xf9, 0x0, 0x5c, 0x40, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xc0, 0xef, 0x50, 0x2f, 0xdd, 0x88, 0xd0, 0xcc, 0xd0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0xef, 0x50, 0xef, 0xdb, 0x98, 0x50, 0xdc, 0x50, 0x33, 0x7, 0xe5, 0x40, 0x33, 0x35, 0xe5, 0x0, 0xb3, 0x87, 0xf5, 0x40, 0x89, 0x8f, 0xe3, 0x4f, 0xf0, 0xfc, 0xdd, 0xf7, 0xb1, 0x67, 0x93, 0x87, 0xf7, 0x34, 0xe3, 0xf3, 0xe7, 0xfa, 0xf9, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x11, 0xea, 0xef, 0x90, 0xe0, 0x69, 0xd9, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x85, 0x47, 0x32, 0x84, 0x63, 0x8f, 0xf5, 0x0, 0xf5, 0x99, 0xf5, 0xf1, 0x3, 0x57, 0x4, 0x0, 0x93, 0x87, 0x41, 0xa2, 0x93, 0x76, 0x87, 0x0, 0x81, 0xca, 0x23, 0xaa, 0x7, 0x0, 0x1, 0x45, 0xe1, 0xbf, 0xef, 0xf0, 0x7f, 0xd4, 0xdd, 0xb7, 0x9, 0x8b, 0x1, 0xc7, 0x5, 0x47, 0xd8, 0xcb, 0xfd, 0xb7, 0x9, 0x47, 0xed, 0xbf, 0x79, 0x71, 0x5a, 0xc8, 0x26, 0xd2, 0x4e, 0xce, 0xaa, 0x89, 0x13, 0x85, 0x81, 0xa2, 0x22, 0xd4, 0x52, 0xcc, 0x56, 0xca, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6a, 0xc0, 0x6, 0xd6, 0x4a, 0xd0, 0xae, 0x8a, 0x32, 0x8a, 0x1, 0x44, 0xef, 0x50, 0xf, 0xab, 0xb5, 0x4b, 0x7d, 0x5c, 0x93, 0x84, 0x41, 0xa2, 0x85, 0x4c, 0x29, 0x4d, 0x63, 0x2, 0x44, 0x5, 0x4e, 0x85, 0xef, 0xf0, 0x9f, 0xe2, 0x2a, 0x89, 0x63, 0x1d, 0x75, 0x7, 0xdc, 0x48, 0x63, 0x9b, 0x97, 0x1, 0x29, 0x49, 0xb3, 0x87, 0x8a, 0x0, 0x23, 0x80, 0x27, 0x1, 0x5, 0x4, 0xe3, 0x1f, 0xa9, 0xfd, 0x39, 0xa8, 0xe5, 0xfb, 0x4e, 0x85, 0xef, 0xf0, 0x3f, 0xe0, 0xfd, 0x57, 0x63, 0x12, 0xf5, 0x4, 0x9c, 0x40, 0x63, 0x84, 0xa7, 0x0, 0xef, 0xf0, 0xdf, 0xe9, 0x23, 0xa0, 0x74, 0x1, 0x13, 0x85, 0x81, 0xa2, 0xef, 0x50, 0xef, 0xa6, 0x22, 0x85, 0x11, 0xe4, 0xef, 0x90, 0x0, 0x5d, 0xad, 0x47, 0x1c, 0xc1, 0x7d, 0x55, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x2, 0x4d, 0x45, 0x61, 0x82, 0x80, 0x29, 0x47, 0xe3, 0xf, 0xe5, 0xf8, 0x98, 0x40, 0xe3, 0x1f, 0xf7, 0xfa, 0x88, 0xc0, 0x51, 0xbf, 0xe3, 0x19, 0x85, 0xf9, 0x6d, 0xbf, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x85, 0x47, 0x82, 0x80, 0x82, 0x80, 0x82, 0x80, 0xb7, 0xb8, 0x81, 0x40, 0x83, 0xa8, 0x8, 0x69, 0x41, 0x11, 0x3a, 0xc4, 0x83, 0xa8, 0xc8, 0x8, 0x3e, 0xc6, 0x63, 0x84, 0x8, 0x0, 0x41, 0x1, 0x82, 0x88, 0x13, 0x5, 0x60, 0x10, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x69, 0x83, 0xa7, 0x7, 0xa, 0x91, 0xc3, 0x82, 0x87, 0x13, 0x5, 0x60, 0x10, 0x82, 0x80, 0x41, 0x11, 0x37, 0xa5, 0x81, 0x40, 0x22, 0xc4, 0x13, 0x5, 0xc5, 0xd8, 0x37, 0xb4, 0x81, 0x40, 0x6, 0xc6, 0x26, 0xc2, 0x4a, 0xc0, 0xae, 0x84, 0x32, 0x89, 0x13, 0x4, 0x84, 0x68, 0xef, 0x90, 0xa0, 0x58, 0x8, 0xc0, 0x37, 0xa5, 0x81, 0x40, 0x4a, 0x86, 0xa6, 0x85, 0x13, 0x5, 0xc5, 0xd7, 0xef, 0x90, 0x80, 0x57, 0x48, 0xc0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x26, 0xc2, 0xb7, 0xb4, 0x81, 0x40, 0x93, 0x84, 0x84, 0x68, 0x88, 0x40, 0x6, 0xc6, 0x22, 0xc4, 0x4a, 0xc0, 0x32, 0x84, 0x2e, 0x89, 0xef, 0x90, 0x60, 0x5a, 0xc8, 0x40, 0x22, 0x86, 0xca, 0x85, 0xef, 0x90, 0xc0, 0x59, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x68, 0x6f, 0x90, 0x0, 0x4f, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x4, 0x84, 0x68, 0x8, 0x40, 0x6, 0xc6, 0xef, 0x90, 0x80, 0x4c, 0x48, 0x40, 0xef, 0x90, 0x20, 0x4c, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x68, 0x6f, 0x90, 0xe0, 0x52, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x68, 0x6f, 0xe0, 0x4f, 0x8a, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x4, 0x84, 0x68, 0x8, 0x40, 0x6, 0xc6, 0x26, 0xc2, 0xef, 0x0, 0x60, 0x6e, 0xaa, 0x84, 0x48, 0x40, 0xef, 0x0, 0xe0, 0x6d, 0xb2, 0x40, 0x22, 0x44, 0x26, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0xd8, 0x6f, 0x0, 0x30, 0x12, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x68, 0x6f, 0x0, 0x90, 0x27, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x68, 0x6f, 0x0, 0x90, 0x20, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x68, 0x6f, 0x0, 0x30, 0x2d, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa5, 0x87, 0x68, 0x6f, 0x0, 0xd0, 0x31, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xcf, 0xb7, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa8, 0xa7, 0x68, 0xef, 0xf0, 0x5f, 0xe8, 0xb2, 0x40, 0xb7, 0xa5, 0x81, 0x40, 0x37, 0xa5, 0x81, 0x40, 0x1, 0x46, 0x93, 0x85, 0xc5, 0x51, 0x13, 0x5, 0x45, 0xd5, 0x41, 0x1, 0x41, 0xa2, 0x6f, 0xf0, 0x5f, 0xfd, 0x82, 0x80, 0x19, 0xcd, 0x93, 0x7, 0xf0, 0x3, 0x7d, 0x55, 0x63, 0xec, 0xb7, 0x0, 0xd, 0x47, 0xb3, 0x85, 0xe5, 0x2, 0x93, 0x87, 0xc1, 0xa4, 0xae, 0x97, 0x3, 0xc5, 0x27, 0x0, 0x82, 0x80, 0x7d, 0x55, 0x82, 0x80, 0x41, 0x11, 0x26, 0xc2, 0x83, 0x24, 0x45, 0xb, 0x22, 0xc4, 0x2e, 0x84, 0x26, 0x86, 0x93, 0x5, 0x45, 0xa, 0x22, 0x85, 0x6, 0xc6, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xf4, 0x19, 0xc5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xd0, 0x9f, 0xd4, 0x22, 0x85, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xf3, 0x63, 0x89, 0xa4, 0x0, 0x33, 0x5, 0x94, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x85, 0xd9, 0xfd, 0xb7, 0x1, 0x11, 0x4e, 0xc6, 0x5a, 0xc0, 0xae, 0x89, 0x2a, 0x8b, 0x85, 0x65, 0x13, 0x5, 0x0, 0xc, 0x4a, 0xc8, 0x52, 0xc4, 0x56, 0xc2, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0xb2, 0x8a, 0x36, 0x8a, 0x3a, 0x89, 0xef, 0x40, 0x4f, 0x9e, 0xd, 0xc5, 0xb7, 0xb6, 0x81, 0x40, 0x3, 0xa6, 0x86, 0x69, 0xb7, 0xb7, 0x81, 0x40, 0x13, 0x87, 0xc7, 0x29, 0x2a, 0x84, 0x81, 0x44, 0x93, 0x87, 0xc7, 0x29, 0x63, 0x94, 0xc4, 0x2, 0x21, 0x47, 0x63, 0x96, 0xe4, 0x2, 0x22, 0x85, 0xef, 0xd0, 0x3f, 0xd2, 0x13, 0x5, 0x10, 0x10, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x80, 0xc, 0x43, 0x11, 0x7, 0x99, 0xc5, 0x85, 0x4, 0xc1, 0xbf, 0x13, 0x87, 0x14, 0x0, 0x23, 0xac, 0xe6, 0x68, 0x13, 0x97, 0x24, 0x0, 0xba, 0x97, 0x80, 0xc3, 0xfd, 0x57, 0x13, 0x5, 0x44, 0xa, 0x63, 0x8b, 0xf9, 0x2, 0xda, 0x85, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xe7, 0x13, 0x6, 0x40, 0xa, 0xd6, 0x85, 0x22, 0x85, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xe5, 0x23, 0x2a, 0x34, 0xb, 0x23, 0x2c, 0x44, 0xb, 0x23, 0x2e, 0x94, 0xa, 0x63, 0x4, 0x9, 0x0, 0x23, 0x20, 0x99, 0x0, 0x1, 0x45, 0x61, 0xbf, 0x3d, 0x46, 0x81, 0x45, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xe3, 0xf1, 0xb7, 0xfd, 0x57, 0x63, 0x86, 0xf5, 0x2, 0x85, 0x47, 0x63, 0x85, 0xf5, 0x2, 0x3d, 0x48, 0x63, 0x62, 0xb8, 0x2, 0x63, 0xfe, 0xb7, 0x0, 0x83, 0x47, 0x5, 0x0, 0x13, 0x8, 0xf0, 0x2, 0x63, 0x9a, 0x7, 0x1, 0x33, 0x8, 0xb5, 0x0, 0x3, 0x48, 0xf8, 0xff, 0x63, 0x4, 0xf8, 0x0, 0x6f, 0xf0, 0x7f, 0xf0, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0xae, 0x84, 0x2a, 0x84, 0x32, 0xc6, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xe0, 0xaa, 0x85, 0x22, 0x85, 0x62, 0x44, 0xb2, 0x46, 0xf2, 0x40, 0x26, 0x86, 0xd2, 0x44, 0x1, 0x47, 0x5, 0x61, 0x6f, 0xf0, 0x1f, 0xfa, 0xaa, 0x87, 0x63, 0x41, 0x5, 0x2, 0x37, 0xb7, 0x81, 0x40, 0x3, 0x27, 0x87, 0x69, 0x1, 0x45, 0x63, 0xfb, 0xe7, 0x0, 0x37, 0xb7, 0x81, 0x40, 0x13, 0x7, 0xc7, 0x29, 0x8a, 0x7, 0xba, 0x97, 0x88, 0x43, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x93, 0x7, 0xf0, 0x3, 0x63, 0xec, 0xa7, 0x0, 0xd, 0x47, 0x33, 0x5, 0xe5, 0x2, 0x93, 0x87, 0xc1, 0xa4, 0xaa, 0x97, 0x3, 0x85, 0x17, 0x0, 0x6f, 0xf0, 0x1f, 0xfc, 0x1, 0x45, 0x82, 0x80, 0x79, 0x71, 0x26, 0xd2, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6a, 0xc0, 0x6, 0xd6, 0x22, 0xd4, 0x4a, 0xd0, 0xaa, 0x8a, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xd8, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xac, 0x87, 0x69, 0xb7, 0xb4, 0x81, 0x40, 0x2a, 0x8a, 0x93, 0x84, 0xc4, 0x29, 0x1, 0x4b, 0xfd, 0x5b, 0x81, 0x49, 0xfd, 0x5c, 0x13, 0xd, 0xf0, 0x2, 0x63, 0x11, 0x6c, 0x3, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x2, 0x4d, 0x4e, 0x85, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x3, 0xa9, 0x4, 0x0, 0x63, 0xe, 0x9, 0x2, 0x3, 0x24, 0x49, 0xb, 0x63, 0xa, 0x94, 0x3, 0x63, 0x68, 0x8a, 0x2, 0x22, 0x86, 0x93, 0x5, 0x49, 0xa, 0x56, 0x85, 0x97, 0x40, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xd0, 0x11, 0xed, 0x19, 0xe0, 0x63, 0x80, 0x9, 0x2, 0x63, 0x78, 0x44, 0x1, 0xb3, 0x87, 0x8a, 0x0, 0x83, 0xc7, 0x7, 0x0, 0x63, 0x94, 0xa7, 0x1, 0x63, 0xc5, 0x8b, 0x0, 0x5, 0xb, 0x91, 0x4, 0x69, 0xbf, 0xa2, 0x8b, 0xca, 0x89, 0xdd, 0xbf, 0x79, 0x71, 0x52, 0xcc, 0x2a, 0x8a, 0x2e, 0x85, 0x26, 0xd2, 0x4a, 0xd0, 0x6, 0xd6, 0x22, 0xd4, 0x4e, 0xce, 0xb2, 0x84, 0x36, 0x89, 0x2e, 0xc6, 0xef, 0xf0, 0x9f, 0xf3, 0x5, 0xc9, 0x93, 0xf7, 0x34, 0x0, 0x83, 0x29, 0x5, 0x0, 0xb2, 0x45, 0x2a, 0x84, 0x9d, 0xc3, 0x93, 0xf7, 0x49, 0x0, 0x85, 0xc3, 0xf9, 0x47, 0x23, 0x20, 0xfa, 0x0, 0x7d, 0x59, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0xf2, 0x49, 0x62, 0x4a, 0x4a, 0x85, 0x2, 0x59, 0x45, 0x61, 0x82, 0x80, 0x89, 0x47, 0xdd, 0xb7, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0xd3, 0x1c, 0x4c, 0xaa, 0x85, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xd1, 0xbf, 0x93, 0xf9, 0x29, 0x0, 0x63, 0x80, 0x9, 0x6, 0x3, 0x25, 0x84, 0xb, 0xca, 0x86, 0x26, 0x86, 0x82, 0x97, 0xaa, 0x84, 0x63, 0x42, 0x5, 0x8, 0xb7, 0xb9, 0x81, 0x40, 0x13, 0x85, 0x49, 0x69, 0xef, 0x40, 0x3f, 0xd5, 0x13, 0x87, 0xc1, 0xa4, 0x1, 0x49, 0x93, 0x87, 0xc1, 0xa4, 0x7d, 0x56, 0x93, 0x6, 0x0, 0x4, 0x83, 0x5, 0x17, 0x0, 0x63, 0x9a, 0xc5, 0x2, 0xd, 0x47, 0x33, 0x7, 0xe9, 0x2, 0x13, 0x85, 0x49, 0x69, 0xba, 0x97, 0x3, 0xc7, 0x7, 0x0, 0x79, 0x9b, 0x23, 0x80, 0xe7, 0x0, 0x3, 0x27, 0xc4, 0xb, 0x23, 0x81, 0x97, 0x0, 0xa3, 0x80, 0xe7, 0x0, 0xef, 0x40, 0xdf, 0xd2, 0x9d, 0xbf, 0x4a, 0x86, 0xa6, 0x85, 0x82, 0x97, 0x65, 0xb7, 0x5, 0x9, 0xd, 0x7, 0xe3, 0x12, 0xd9, 0xfc, 0x13, 0x85, 0x49, 0x69, 0xef, 0x40, 0x3f, 0xd1, 0x5c, 0x4c, 0xb5, 0xdf, 0x18, 0x40, 0x9, 0x8b, 0x19, 0xc7, 0x3, 0x25, 0x84, 0xb, 0xa6, 0x85, 0x82, 0x97, 0xb1, 0x47, 0x89, 0xb7, 0x26, 0x85, 0x82, 0x97, 0xe5, 0xbf, 0xef, 0x90, 0x0, 0x6, 0x1c, 0x41, 0x15, 0xbf, 0x1, 0x11, 0x4a, 0xc8, 0x2a, 0x89, 0x2e, 0x85, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0x2e, 0xc4, 0xb2, 0x84, 0x36, 0xc6, 0xef, 0xf0, 0xbf, 0xe1, 0xa2, 0x45, 0x2a, 0x84, 0xef, 0xf0, 0x7f, 0xc4, 0x9, 0xc4, 0xb2, 0x46, 0xaa, 0x85, 0x63, 0x5c, 0x5, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x23, 0x20, 0xf9, 0x0, 0xd2, 0x44, 0x42, 0x49, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x5c, 0x40, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xdd, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x11, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0xa6, 0x85, 0xd2, 0x44, 0x36, 0x86, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x4a, 0xc8, 0x2a, 0x89, 0x2e, 0x85, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0x2e, 0xc4, 0xb2, 0x84, 0x36, 0xc6, 0xef, 0xf0, 0xbf, 0xda, 0xa2, 0x45, 0x2a, 0x84, 0xef, 0xf0, 0x7f, 0xbd, 0x9, 0xc4, 0xb2, 0x46, 0xaa, 0x85, 0x63, 0x5c, 0x5, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x23, 0x20, 0xf9, 0x0, 0xd2, 0x44, 0x42, 0x49, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x1c, 0x44, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xdd, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x11, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0xa6, 0x85, 0xd2, 0x44, 0x36, 0x86, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x4a, 0xc8, 0x2a, 0x89, 0x2e, 0x85, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0x2e, 0xc4, 0xb2, 0x84, 0x36, 0xc6, 0xef, 0xf0, 0xbf, 0xd3, 0xa2, 0x45, 0x2a, 0x84, 0xef, 0xf0, 0x7f, 0xb6, 0x9, 0xc4, 0xb2, 0x46, 0xaa, 0x85, 0x63, 0x5c, 0x5, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x23, 0x20, 0xf9, 0x0, 0xd2, 0x44, 0x42, 0x49, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x5c, 0x44, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xdd, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x11, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0xa6, 0x85, 0xd2, 0x44, 0x36, 0x86, 0x5, 0x61, 0x82, 0x87, 0x41, 0x11, 0x4a, 0xc0, 0x2a, 0x89, 0x2e, 0x85, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0xae, 0x84, 0xef, 0xf0, 0xff, 0xcc, 0x2a, 0x84, 0xa6, 0x85, 0xef, 0xf0, 0xbf, 0xaf, 0x1, 0xc4, 0xaa, 0x85, 0x63, 0x5d, 0x5, 0x0, 0xa5, 0x47, 0x23, 0x20, 0xf9, 0x0, 0x7d, 0x54, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x5c, 0x4c, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xd5, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x39, 0xc3, 0x3, 0x25, 0x84, 0xb, 0x82, 0x97, 0x37, 0xb9, 0x81, 0x40, 0x2a, 0x84, 0x13, 0x5, 0x49, 0x69, 0xef, 0x40, 0x9f, 0xb2, 0x8d, 0x47, 0xb3, 0x84, 0xf4, 0x2, 0x93, 0x85, 0xc1, 0xa4, 0xa6, 0x95, 0x83, 0xc7, 0x5, 0x0, 0x13, 0xf7, 0x17, 0x0, 0x9, 0xeb, 0x13, 0xd7, 0x27, 0x0, 0x5, 0x8b, 0x1, 0xcf, 0x93, 0xe7, 0x27, 0x0, 0x23, 0x80, 0xf5, 0x0, 0x13, 0x5, 0x49, 0x69, 0xef, 0x40, 0x3f, 0xb1, 0x45, 0xb7, 0x82, 0x97, 0xc1, 0xb7, 0xfd, 0x57, 0x23, 0x80, 0x5, 0x0, 0xa3, 0x80, 0xf5, 0x0, 0x23, 0x81, 0xf5, 0x0, 0xd5, 0xb7, 0x1, 0x11, 0x26, 0xca, 0xaa, 0x84, 0x2e, 0x85, 0x22, 0xcc, 0x6, 0xce, 0x2e, 0xc4, 0x32, 0xc6, 0xef, 0xf0, 0xdf, 0xc2, 0xa2, 0x45, 0x2a, 0x84, 0xef, 0xf0, 0x9f, 0xa5, 0x9, 0xc4, 0x32, 0x46, 0xaa, 0x85, 0x63, 0x5a, 0x5, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x9c, 0xc0, 0x7d, 0x55, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1c, 0x50, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xed, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x1, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0xb2, 0x85, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x4a, 0xc8, 0x2a, 0x89, 0x2e, 0x85, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0x2e, 0xc4, 0xb2, 0x84, 0x36, 0xc6, 0xef, 0xf0, 0x9f, 0xbc, 0xa2, 0x45, 0x2a, 0x84, 0xef, 0xf0, 0x5f, 0x9f, 0x9, 0xc4, 0xb2, 0x46, 0xaa, 0x85, 0x63, 0x5c, 0x5, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x23, 0x20, 0xf9, 0x0, 0xd2, 0x44, 0x42, 0x49, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x7c, 0x48, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xdd, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x11, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0xa6, 0x85, 0xd2, 0x44, 0x36, 0x86, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2a, 0xc6, 0xef, 0xf0, 0x5f, 0xb6, 0xb2, 0x45, 0x2a, 0x84, 0xef, 0xf0, 0x1f, 0x99, 0x2a, 0xc6, 0xef, 0xd0, 0xef, 0x8d, 0x1, 0xc4, 0xb2, 0x45, 0x63, 0xd9, 0x5, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x1c, 0xc1, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x7c, 0x4c, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xf5, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x19, 0xc7, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x2e, 0x85, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x4a, 0xc8, 0x2a, 0x89, 0x2e, 0x85, 0x26, 0xca, 0x2e, 0xc6, 0x6, 0xce, 0x22, 0xcc, 0xb2, 0x84, 0xef, 0xf0, 0x5f, 0xb2, 0xb2, 0x45, 0x89, 0x47, 0x9, 0xc9, 0x2a, 0x84, 0xef, 0xf0, 0xff, 0x94, 0x5c, 0x50, 0xaa, 0x85, 0x81, 0xef, 0x93, 0x7, 0x80, 0x5, 0xf2, 0x40, 0x62, 0x44, 0x23, 0x20, 0xf9, 0x0, 0xd2, 0x44, 0x42, 0x49, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x18, 0x40, 0x9, 0x8b, 0x11, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0xa6, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x26, 0xca, 0xaa, 0x84, 0x2e, 0x85, 0x4a, 0xc8, 0x52, 0xc4, 0x6, 0xce, 0x22, 0xcc, 0x4e, 0xc6, 0x2e, 0x89, 0x32, 0x8a, 0xef, 0xf0, 0xdf, 0xab, 0x89, 0x47, 0x11, 0xcd, 0x2a, 0x84, 0x52, 0x85, 0xef, 0xf0, 0x1f, 0xab, 0xc9, 0x47, 0x63, 0x18, 0xa4, 0x0, 0x83, 0x29, 0x4, 0x0, 0x93, 0xf7, 0x49, 0x0, 0x81, 0xcf, 0xf9, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x9c, 0xc0, 0x42, 0x49, 0xd2, 0x44, 0xb2, 0x49, 0x22, 0x4a, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0xca, 0x85, 0xef, 0xf0, 0xbf, 0x8b, 0x2a, 0x89, 0xd2, 0x85, 0x22, 0x85, 0xef, 0xf0, 0x1f, 0x8b, 0x1c, 0x54, 0x2a, 0x86, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xc9, 0xbf, 0x93, 0xf9, 0x29, 0x0, 0x63, 0x8d, 0x9, 0x0, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0xb2, 0x49, 0x22, 0x4a, 0xca, 0x85, 0x42, 0x49, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0xb2, 0x49, 0x22, 0x4a, 0xaa, 0x85, 0x4a, 0x85, 0x42, 0x49, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x26, 0xca, 0xaa, 0x84, 0x2e, 0x85, 0x2e, 0xc6, 0x6, 0xce, 0x22, 0xcc, 0x4a, 0xc8, 0xef, 0xf0, 0x9f, 0xa2, 0xb2, 0x45, 0x89, 0x47, 0x1, 0xc9, 0x3, 0x29, 0x5, 0x0, 0x2a, 0x84, 0x93, 0x77, 0x49, 0x0, 0x91, 0xcb, 0xf9, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x9c, 0xc0, 0x42, 0x49, 0xd2, 0x44, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0xef, 0xf0, 0x7f, 0x83, 0x5c, 0x54, 0xaa, 0x85, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xcd, 0xb7, 0x13, 0x79, 0x29, 0x0, 0x63, 0xa, 0x9, 0x0, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x26, 0xca, 0xaa, 0x84, 0x2e, 0x85, 0x4a, 0xc8, 0x52, 0xc4, 0x6, 0xce, 0x22, 0xcc, 0x4e, 0xc6, 0x2e, 0x89, 0x32, 0x8a, 0xef, 0xf0, 0x7f, 0x9b, 0x89, 0x47, 0x1, 0xc9, 0x83, 0x29, 0x5, 0x0, 0x2a, 0x84, 0x93, 0xf7, 0x49, 0x0, 0x81, 0xcf, 0xf9, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x9c, 0xc0, 0x42, 0x49, 0xd2, 0x44, 0xb2, 0x49, 0x22, 0x4a, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x52, 0x85, 0xef, 0xf0, 0xbf, 0x98, 0x63, 0x4, 0xa4, 0x0, 0xc9, 0x47, 0xc5, 0xb7, 0xca, 0x85, 0xef, 0xf0, 0x2f, 0xfb, 0x2a, 0x89, 0xd2, 0x85, 0x22, 0x85, 0xef, 0xf0, 0x8f, 0xfa, 0x1c, 0x58, 0x2a, 0x86, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xd1, 0xb7, 0x93, 0xf9, 0x29, 0x0, 0x63, 0x8d, 0x9, 0x0, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0xb2, 0x49, 0x22, 0x4a, 0xca, 0x85, 0x42, 0x49, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0xb2, 0x49, 0x22, 0x4a, 0xaa, 0x85, 0x4a, 0x85, 0x42, 0x49, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0xae, 0x84, 0xaa, 0x89, 0xef, 0xf0, 0x1f, 0x92, 0x2a, 0x84, 0xef, 0xc0, 0x3f, 0xe8, 0x2a, 0x89, 0x89, 0x47, 0x11, 0xc8, 0xce, 0x85, 0x22, 0x85, 0xef, 0xf0, 0x2f, 0xf4, 0x3c, 0x50, 0xaa, 0x85, 0x89, 0xef, 0x93, 0x7, 0x80, 0x5, 0xf2, 0x40, 0x62, 0x44, 0x23, 0x20, 0xf9, 0x0, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x18, 0x40, 0x9, 0x8b, 0x19, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0xb2, 0x49, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x42, 0x49, 0xb2, 0x49, 0xa6, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x41, 0x11, 0x93, 0x77, 0xf5, 0xf, 0x2a, 0xc4, 0x2e, 0xc6, 0x2e, 0x85, 0x91, 0xef, 0x37, 0xb7, 0x81, 0x40, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0x26, 0x87, 0x69, 0x93, 0x87, 0xc7, 0x29, 0x1, 0x47, 0x63, 0x1a, 0xc7, 0x0, 0x41, 0x1, 0x82, 0x80, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x41, 0x1, 0x6f, 0x50, 0x40, 0x30, 0x94, 0x43, 0x91, 0xc6, 0x83, 0xa6, 0x46, 0x9, 0x99, 0xc2, 0x41, 0x1, 0x82, 0x86, 0x5, 0x7, 0x91, 0x7, 0xe9, 0xbf, 0x41, 0x11, 0x93, 0x77, 0xf5, 0xf, 0x2a, 0xc4, 0x2e, 0xc6, 0x2e, 0x85, 0x91, 0xef, 0x37, 0xb7, 0x81, 0x40, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0x25, 0x87, 0x69, 0x93, 0x87, 0xc7, 0x29, 0x1, 0x47, 0x63, 0x18, 0xb7, 0x0, 0x41, 0x1, 0x82, 0x80, 0xb2, 0x85, 0x41, 0x1, 0x6f, 0x50, 0x0, 0x59, 0x94, 0x43, 0x99, 0xc6, 0x83, 0xa6, 0x86, 0x9, 0x81, 0xc6, 0xb2, 0x85, 0x41, 0x1, 0x82, 0x86, 0x5, 0x7, 0x91, 0x7, 0xf1, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x2e, 0xc6, 0xaa, 0x84, 0xef, 0xf0, 0x7f, 0x80, 0xa6, 0x85, 0x2a, 0x84, 0xef, 0xf0, 0x2f, 0xe3, 0xaa, 0x84, 0xef, 0xc0, 0x1f, 0xd8, 0x1, 0xc4, 0x32, 0x46, 0x63, 0xda, 0x4, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x1c, 0xc1, 0xd2, 0x44, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x7c, 0x58, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xed, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x9, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0xa6, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x26, 0x85, 0xd2, 0x44, 0xb2, 0x85, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0xaa, 0x84, 0x2e, 0x89, 0x32, 0xc6, 0xef, 0xf0, 0xef, 0xf9, 0xa6, 0x85, 0x2a, 0x84, 0xef, 0xf0, 0xaf, 0xdc, 0xaa, 0x84, 0xef, 0xc0, 0x9f, 0xd1, 0x1, 0xc4, 0x32, 0x46, 0x63, 0xdb, 0x4, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x1c, 0xc1, 0xd2, 0x44, 0x42, 0x49, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x3c, 0x58, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xe5, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x1, 0xcf, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0xb2, 0x86, 0xa6, 0x85, 0x4a, 0x86, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0xca, 0x85, 0x26, 0x85, 0x42, 0x49, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x2a, 0xc6, 0xef, 0xf0, 0x4f, 0xf3, 0xb2, 0x45, 0x2a, 0x84, 0xef, 0xf0, 0xf, 0xd6, 0x2a, 0xc6, 0xef, 0xc0, 0xff, 0xca, 0x1, 0xc4, 0xb2, 0x45, 0x63, 0xd9, 0x5, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x1c, 0xc1, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x3c, 0x5c, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xf5, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x19, 0xc7, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x2e, 0x85, 0x5, 0x61, 0x82, 0x87, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x2e, 0xc6, 0xaa, 0x84, 0xef, 0xf0, 0xaf, 0xed, 0xa6, 0x85, 0x2a, 0x84, 0xef, 0xf0, 0x6f, 0xd0, 0xaa, 0x84, 0xef, 0xc0, 0x5f, 0xc5, 0x1, 0xc4, 0x32, 0x46, 0x63, 0xda, 0x4, 0x0, 0xa5, 0x47, 0xf2, 0x40, 0x62, 0x44, 0x1c, 0xc1, 0xd2, 0x44, 0x7d, 0x55, 0x5, 0x61, 0x82, 0x80, 0x7c, 0x5c, 0x81, 0xe7, 0x93, 0x7, 0x80, 0x5, 0xed, 0xb7, 0x18, 0x40, 0x9, 0x8b, 0x9, 0xcb, 0x3, 0x25, 0x84, 0xb, 0x62, 0x44, 0xf2, 0x40, 0xa6, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x87, 0x62, 0x44, 0xf2, 0x40, 0x26, 0x85, 0xd2, 0x44, 0xb2, 0x85, 0x5, 0x61, 0x82, 0x87, 0x82, 0x80, 0x13, 0x5, 0x60, 0x10, 0x82, 0x80, 0x6f, 0x50, 0x0, 0xe, 0x6f, 0x50, 0xe0, 0x7b, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x6f, 0x50, 0x0, 0x10, 0x6f, 0x50, 0x90, 0x14, 0x6f, 0x50, 0x50, 0xe, 0x6f, 0x50, 0x20, 0x58, 0x82, 0x80, 0x1, 0x11, 0x93, 0x7, 0x76, 0x1, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x0, 0x10, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0xc1, 0x9b, 0x33, 0x1, 0xf1, 0x40, 0xa, 0x89, 0xae, 0x89, 0xb2, 0x84, 0x13, 0xa, 0x86, 0x0, 0xaa, 0x85, 0x21, 0x46, 0x4a, 0x85, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x3d, 0x26, 0x86, 0xce, 0x85, 0x13, 0x5, 0x89, 0x0, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x3c, 0xd2, 0x85, 0x4a, 0x85, 0xef, 0x60, 0x60, 0x47, 0x13, 0x1, 0x4, 0xfe, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x19, 0x71, 0xa6, 0xda, 0xaa, 0x84, 0x28, 0x0, 0xa2, 0xdc, 0xce, 0xd6, 0xd2, 0xd4, 0xd6, 0xd2, 0x86, 0xde, 0xca, 0xd8, 0x2e, 0x84, 0xb2, 0x89, 0x85, 0x6a, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x62, 0x37, 0x6a, 0x81, 0x40, 0xd, 0xe0, 0x4e, 0x85, 0x2c, 0x0, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x61, 0x1, 0x45, 0xf6, 0x50, 0x66, 0x54, 0xd6, 0x54, 0x46, 0x59, 0xb6, 0x59, 0x26, 0x5a, 0x96, 0x5a, 0x9, 0x61, 0x82, 0x80, 0x22, 0x89, 0x63, 0xf3, 0x8a, 0x0, 0x5, 0x69, 0xca, 0x86, 0x26, 0x86, 0x93, 0x5, 0xca, 0x52, 0x1, 0x45, 0xef, 0x50, 0x6f, 0xce, 0x61, 0xfd, 0x4a, 0x86, 0x93, 0x5, 0xca, 0x52, 0x28, 0x0, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x5d, 0xca, 0x94, 0x33, 0x4, 0x24, 0x41, 0x45, 0xbf, 0x35, 0x71, 0x85, 0x47, 0x3e, 0xd6, 0x3e, 0xd8, 0x93, 0x7, 0x0, 0x20, 0x3e, 0xda, 0x28, 0x10, 0xb1, 0x47, 0x6, 0xcf, 0x22, 0xcd, 0x26, 0xcb, 0x4a, 0xc9, 0x4e, 0xc7, 0x52, 0xc5, 0x56, 0xc3, 0x5a, 0xc1, 0xde, 0xde, 0xe2, 0xdc, 0xe6, 0xda, 0xea, 0xd8, 0xee, 0xd6, 0x2, 0xd4, 0x2, 0xdc, 0x3e, 0xde, 0xef, 0x60, 0x0, 0xe, 0x19, 0xc1, 0xef, 0xd0, 0x2f, 0x89, 0x37, 0x5, 0x80, 0x0, 0x37, 0x74, 0x81, 0x40, 0x5, 0x5, 0x13, 0x4, 0xc4, 0x52, 0x85, 0x64, 0xef, 0x60, 0xe0, 0x2a, 0xa2, 0x94, 0x22, 0x85, 0xef, 0x60, 0x80, 0x40, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xd0, 0x8f, 0x8e, 0xef, 0x60, 0x0, 0x3b, 0x79, 0xf5, 0x13, 0x4, 0x4, 0x20, 0xe3, 0x11, 0x94, 0xfe, 0xef, 0x50, 0x70, 0x7b, 0x1, 0x45, 0xef, 0x60, 0x80, 0x29, 0x93, 0x9, 0x70, 0x10, 0x13, 0xa, 0xc0, 0x10, 0xa1, 0x4a, 0x81, 0x45, 0x8, 0x8, 0xef, 0x60, 0x40, 0x43, 0x2a, 0x89, 0xe3, 0xb, 0x35, 0xff, 0xc2, 0x47, 0x13, 0xb, 0x1, 0x4, 0x5a, 0x84, 0xbe, 0xc0, 0x85, 0x4b, 0xda, 0x84, 0x63, 0x7, 0x49, 0x9, 0xe3, 0x18, 0x9, 0xf8, 0x37, 0x84, 0x81, 0x40, 0x5a, 0x8d, 0x1, 0x4c, 0x81, 0x4c, 0x13, 0x4, 0xc4, 0x52, 0x3, 0x25, 0xd, 0x0, 0x2c, 0x8, 0x85, 0xc, 0xef, 0x60, 0x80, 0x47, 0xe2, 0x4d, 0xaa, 0x85, 0x33, 0x5, 0x84, 0x1, 0x6e, 0x86, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x25, 0x6e, 0x9c, 0x11, 0xd, 0xe3, 0x9f, 0x7c, 0xfd, 0x3, 0x25, 0xb, 0x0, 0xef, 0x60, 0x20, 0x33, 0x21, 0xf9, 0x5, 0x9, 0x11, 0xb, 0xe3, 0x19, 0x79, 0xff, 0xe3, 0xb, 0xc, 0xf8, 0x85, 0x47, 0x23, 0x8, 0xf1, 0x0, 0x83, 0x47, 0x14, 0x0, 0x9, 0x47, 0x23, 0x19, 0xe1, 0x0, 0xa3, 0x8, 0xf1, 0x0, 0x2, 0xca, 0x99, 0x46, 0x63, 0x8a, 0xd7, 0x1a, 0x63, 0xec, 0xf6, 0x2, 0x91, 0x46, 0x63, 0x83, 0xd7, 0x10, 0x95, 0x46, 0x63, 0x8b, 0xd7, 0x10, 0x63, 0x89, 0xe7, 0x8, 0xd, 0x47, 0x63, 0x87, 0xe7, 0xc, 0x93, 0x7, 0x10, 0xf0, 0xc1, 0xa0, 0x11, 0x4, 0xe3, 0x83, 0x5b, 0xf3, 0xfd, 0x55, 0x8, 0x8, 0xef, 0x60, 0x40, 0x38, 0xc2, 0x47, 0x2a, 0x89, 0x85, 0xb, 0x1c, 0xc0, 0xb1, 0xbf, 0x29, 0x47, 0x63, 0x80, 0xe7, 0x1c, 0x63, 0x6e, 0xf7, 0x2, 0x1d, 0x47, 0x63, 0x85, 0xe7, 0x10, 0x25, 0x47, 0xe3, 0x98, 0xe7, 0xfc, 0x48, 0x48, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xd5, 0x1c, 0x48, 0x58, 0x44, 0xfd, 0x56, 0x7d, 0x8f, 0x63, 0x88, 0xd7, 0x0, 0x14, 0x44, 0x93, 0xc7, 0xf7, 0xff, 0x94, 0x42, 0xf5, 0x8f, 0x5d, 0x8f, 0x1c, 0x44, 0x98, 0xc3, 0x23, 0x10, 0x1, 0x4, 0xc9, 0xa8, 0x4d, 0x47, 0xe3, 0x9f, 0xe7, 0xf8, 0x3, 0x57, 0x24, 0x0, 0x23, 0x16, 0x1, 0x0, 0xc1, 0x47, 0x63, 0x3, 0xf7, 0x18, 0xf1, 0x77, 0x85, 0x7, 0x23, 0x16, 0xf1, 0x0, 0x9, 0x46, 0x6c, 0x0, 0x8, 0x8, 0xef, 0xf0, 0xdf, 0xd7, 0xb1, 0xa2, 0x3, 0x57, 0x24, 0x0, 0x23, 0x10, 0x1, 0x4, 0xc1, 0x47, 0x63, 0x12, 0xf7, 0x8, 0x4c, 0x48, 0x10, 0x44, 0x18, 0x48, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x2b, 0x8c, 0xc3, 0xd0, 0xc3, 0x98, 0xc7, 0x59, 0xc2, 0xfd, 0x77, 0x7d, 0x8e, 0x5, 0x67, 0x3a, 0x96, 0xfd, 0x8d, 0x1, 0x45, 0xef, 0x50, 0x8f, 0x8e, 0x35, 0xc9, 0xf1, 0x77, 0x93, 0x87, 0x17, 0x40, 0x23, 0x10, 0xf1, 0x4, 0xa5, 0xa0, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x2b, 0x94, 0x47, 0x58, 0x44, 0x90, 0x43, 0xb7, 0x85, 0x81, 0x40, 0x33, 0x7, 0xd7, 0x2, 0x14, 0x44, 0x93, 0x85, 0x45, 0x54, 0x3a, 0x96, 0xef, 0x50, 0x6f, 0xbd, 0x23, 0x10, 0x1, 0x4, 0xf1, 0xb7, 0x0, 0x44, 0x9, 0x46, 0xa6, 0x85, 0x8, 0x8, 0x23, 0x10, 0x1, 0x4, 0xef, 0xf0, 0x1f, 0xd0, 0x61, 0xe8, 0xef, 0x60, 0xcf, 0x8d, 0x3, 0x57, 0x24, 0x0, 0x23, 0x10, 0x1, 0x4, 0xc1, 0x47, 0x63, 0x5, 0xf7, 0x0, 0xf1, 0x77, 0x85, 0x7, 0x6d, 0xb7, 0x58, 0x48, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa0, 0xe7, 0x6a, 0x18, 0x44, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xae, 0xe7, 0x68, 0x9, 0x46, 0xcd, 0xa8, 0xb7, 0xbb, 0x81, 0x40, 0x83, 0xa7, 0xb, 0x6a, 0x23, 0x10, 0x1, 0x4, 0x89, 0xe7, 0xf1, 0x77, 0x93, 0x87, 0x17, 0x60, 0xb5, 0xbf, 0x37, 0xbb, 0x81, 0x40, 0x3, 0x56, 0x24, 0x0, 0x3, 0x29, 0xcb, 0x69, 0x63, 0x76, 0xc9, 0x0, 0xf5, 0x77, 0x93, 0x87, 0x17, 0x90, 0x95, 0xb7, 0x13, 0x77, 0x36, 0x0, 0x45, 0xfb, 0xb7, 0x85, 0x81, 0x40, 0x3e, 0x85, 0x93, 0x85, 0x45, 0x53, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x8, 0x83, 0x56, 0x24, 0x0, 0x13, 0xd7, 0x26, 0x0, 0xa, 0x7, 0xb3, 0x7, 0xe5, 0x0, 0x33, 0x9, 0xd9, 0x40, 0x23, 0xa0, 0xfb, 0x6a, 0x23, 0x2e, 0x2b, 0x69, 0x71, 0xbf, 0x3, 0x57, 0x24, 0x0, 0x23, 0x10, 0x1, 0x4, 0xa1, 0x47, 0xe3, 0x1b, 0xf7, 0xf6, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x7, 0x6a, 0x59, 0xdb, 0x37, 0xb7, 0x81, 0x40, 0x3, 0x27, 0xc7, 0x69, 0x9, 0xc7, 0xf5, 0x77, 0x93, 0x87, 0x17, 0x80, 0x19, 0xb7, 0x18, 0x44, 0x1, 0xef, 0x9, 0x46, 0xa6, 0x85, 0x8, 0x8, 0xef, 0xf0, 0x5f, 0xc3, 0x5c, 0x44, 0x82, 0x97, 0x1, 0x45, 0xef, 0x60, 0x20, 0x1, 0x51, 0xb3, 0x23, 0xa0, 0x7, 0x6a, 0x89, 0xbf, 0x3, 0x57, 0x24, 0x0, 0x23, 0x10, 0x1, 0x4, 0x91, 0x47, 0xe3, 0x16, 0xf7, 0xf2, 0x1c, 0x44, 0x9c, 0x43, 0x3e, 0xca, 0x35, 0xbf, 0x4c, 0x44, 0x8, 0x44, 0x30, 0x8, 0xef, 0xf0, 0x1f, 0xc6, 0x5, 0xe5, 0x83, 0x57, 0x21, 0x1, 0x41, 0x46, 0x2c, 0x8, 0xc1, 0x7, 0x26, 0x85, 0x23, 0x19, 0xf1, 0x0, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xfe, 0x83, 0x57, 0xc1, 0x0, 0x49, 0x46, 0x23, 0x18, 0xf1, 0x4, 0xa6, 0x85, 0xa9, 0xbd, 0xf1, 0x77, 0x93, 0x87, 0x17, 0x40, 0xa9, 0xb5, 0x1c, 0x41, 0x13, 0x7, 0xf0, 0x6, 0x93, 0xf6, 0xf7, 0x7, 0x63, 0x8a, 0xe6, 0x0, 0x13, 0xd7, 0x77, 0x0, 0x7d, 0x8b, 0x9, 0xc7, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xc0, 0x5f, 0xd5, 0x1c, 0x41, 0x13, 0x95, 0xb7, 0x0, 0x13, 0x97, 0xc7, 0x0, 0x7d, 0x85, 0x61, 0x87, 0x2e, 0x7, 0x2a, 0x5, 0x59, 0x8d, 0x13, 0x97, 0x17, 0x0, 0x59, 0x87, 0xfd, 0x87, 0x59, 0x8d, 0xce, 0x7, 0x5d, 0x8d, 0x6, 0x5, 0x82, 0x80, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0xc0, 0xff, 0xd9, 0x9, 0xe5, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xbf, 0xfe, 0xb7, 0xb7, 0x81, 0x40, 0xe, 0x5, 0x93, 0x87, 0x87, 0x2c, 0xaa, 0x97, 0x8c, 0xc3, 0xd0, 0xc3, 0x82, 0x80, 0x9, 0xe5, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xff, 0xfc, 0xb7, 0xb7, 0x81, 0x40, 0xe, 0x5, 0x93, 0x87, 0x87, 0x2c, 0xaa, 0x97, 0x88, 0x43, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x63, 0xd8, 0x5, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xc0, 0x5f, 0xd5, 0x99, 0xe1, 0xef, 0xf0, 0x5f, 0xfa, 0xb7, 0xb7, 0x81, 0x40, 0x8e, 0x5, 0x93, 0x87, 0x87, 0x2c, 0xae, 0x97, 0x98, 0x43, 0x9, 0xc7, 0xb2, 0x40, 0xc8, 0x43, 0x41, 0x1, 0x2, 0x87, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x63, 0x44, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x39, 0x5, 0x89, 0x5, 0xc1, 0xef, 0xc0, 0xaf, 0xff, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0xb2, 0x40, 0xed, 0x9b, 0x1c, 0xc0, 0x22, 0x44, 0x41, 0x1, 0x6f, 0xc0, 0xff, 0x80, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x63, 0x45, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x34, 0x5, 0x89, 0xd, 0xc1, 0xef, 0xc0, 0xf, 0xfb, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0xb2, 0x40, 0x93, 0xe7, 0x47, 0x0, 0x1c, 0xc0, 0x22, 0x44, 0x41, 0x1, 0x6f, 0xc0, 0x2f, 0xfc, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x63, 0x45, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x2f, 0x5, 0x89, 0xd, 0xc1, 0xef, 0xc0, 0x4f, 0xf6, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0xb2, 0x40, 0x93, 0xe7, 0x87, 0x0, 0x1c, 0xc0, 0x22, 0x44, 0x41, 0x1, 0x6f, 0xc0, 0x6f, 0xf7, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x63, 0x44, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x2b, 0x5, 0x89, 0x5, 0xc1, 0xef, 0xc0, 0x8f, 0xf1, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0xb2, 0x40, 0xdd, 0x9b, 0x1c, 0xc0, 0x22, 0x44, 0x41, 0x1, 0x6f, 0xc0, 0xcf, 0xf2, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x63, 0x48, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x26, 0x93, 0x77, 0x15, 0x0, 0x13, 0x5, 0x20, 0x10, 0x8d, 0xc3, 0x22, 0x85, 0x39, 0x24, 0xef, 0xc0, 0x4f, 0xec, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0x93, 0xe7, 0x7, 0x10, 0x1c, 0xc0, 0xef, 0xc0, 0xcf, 0xed, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x63, 0x48, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x21, 0x93, 0x77, 0x15, 0x0, 0x13, 0x5, 0x20, 0x10, 0x8d, 0xc3, 0x22, 0x85, 0x65, 0x2a, 0xef, 0xc0, 0xef, 0xe6, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0x93, 0xf7, 0xf7, 0xf7, 0x1c, 0xc0, 0xef, 0xc0, 0x6f, 0xe8, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x63, 0x44, 0x5, 0x6, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x26, 0xc2, 0x7d, 0x15, 0xae, 0x84, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x1b, 0x93, 0x77, 0x15, 0x0, 0x13, 0x5, 0x20, 0x10, 0x8d, 0xc7, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x33, 0x6, 0xf4, 0x0, 0x93, 0xf7, 0x14, 0x0, 0xa, 0x6, 0x8d, 0xc3, 0x1c, 0x42, 0x93, 0xe7, 0x7, 0x1, 0x1c, 0xc2, 0x1c, 0x42, 0x89, 0x88, 0x89, 0xcc, 0x93, 0xe7, 0x17, 0x0, 0x1c, 0xc2, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x1c, 0x42, 0xbd, 0x9b, 0xcd, 0xb7, 0xf9, 0x9b, 0xed, 0xb7, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x63, 0x4b, 0x5, 0x6, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x26, 0xc2, 0x7d, 0x15, 0xae, 0x84, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x14, 0x93, 0x77, 0x15, 0x0, 0x13, 0x5, 0x20, 0x10, 0x9d, 0xc3, 0x8d, 0x47, 0x63, 0xe1, 0x97, 0x2, 0x9, 0x47, 0x63, 0x89, 0xe4, 0x2, 0x63, 0x8b, 0xf4, 0x2, 0x85, 0x47, 0x22, 0x85, 0x63, 0x8d, 0xf4, 0x0, 0xef, 0xf0, 0x7f, 0xd7, 0x22, 0x85, 0xef, 0xf0, 0x7f, 0xe0, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xef, 0xf0, 0xbf, 0xda, 0x22, 0x85, 0xef, 0xf0, 0xdf, 0xe3, 0xed, 0xb7, 0x22, 0x85, 0xef, 0xf0, 0xdf, 0xd9, 0xf1, 0xbf, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0xd4, 0xed, 0xb7, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x63, 0x46, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0xd, 0x93, 0x77, 0x15, 0x0, 0x13, 0x5, 0x20, 0x10, 0x99, 0xcf, 0xef, 0xc0, 0x2f, 0xd3, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0x93, 0xe7, 0x27, 0x0, 0x1c, 0xc0, 0xef, 0xc0, 0xaf, 0xd4, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x63, 0x45, 0x5, 0x4, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x86, 0x2a, 0x84, 0x37, 0x5, 0x0, 0x80, 0x7d, 0x15, 0x81, 0x45, 0x6, 0xc6, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x8, 0x93, 0x77, 0x15, 0x0, 0x13, 0x5, 0x20, 0x10, 0x91, 0xcf, 0xef, 0xc0, 0xf, 0xce, 0xb7, 0x47, 0x2, 0x18, 0x85, 0x7, 0x3e, 0x94, 0xa, 0x4, 0x1c, 0x40, 0xf5, 0x9b, 0x1c, 0xc0, 0xef, 0xc0, 0xaf, 0xcf, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0xf9, 0x47, 0x63, 0xcd, 0xa7, 0x0, 0xb7, 0xa7, 0x81, 0x40, 0xa, 0x5, 0x93, 0x87, 0x47, 0x7b, 0xaa, 0x97, 0x88, 0x43, 0x13, 0x45, 0xf5, 0xff, 0x7d, 0x81, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x30, 0xb0, 0x5f, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0x30, 0x90, 0x66, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x8, 0x98, 0x43, 0x41, 0x11, 0x6, 0xc6, 0x13, 0x67, 0x27, 0x0, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x40, 0x0, 0x1d, 0x46, 0x75, 0x9b, 0x98, 0xc3, 0x98, 0x43, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0x13, 0x67, 0x47, 0x0, 0x98, 0xc3, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x47, 0x8, 0x98, 0x43, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0xd0, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x16, 0xf0, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xc3, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x47, 0x15, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x4, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x8, 0x55, 0x8f, 0x98, 0xc3, 0x85, 0x46, 0x89, 0x47, 0x1, 0x47, 0xef, 0x30, 0xcf, 0xce, 0x85, 0x47, 0xd, 0x47, 0x8d, 0x46, 0x1d, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0xef, 0x30, 0xaf, 0xcd, 0x85, 0x47, 0x11, 0x47, 0x91, 0x46, 0x1d, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0xef, 0x30, 0x8f, 0xcc, 0x85, 0x47, 0x19, 0x47, 0x99, 0x46, 0x1d, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0xef, 0x30, 0x6f, 0xcb, 0xa1, 0x47, 0x1, 0x47, 0x8d, 0x46, 0x11, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0xef, 0x30, 0x4f, 0xca, 0x93, 0x7, 0x60, 0x6, 0x1, 0x47, 0x9d, 0x46, 0xd, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0xef, 0x30, 0xf, 0xc9, 0xa1, 0x47, 0x1, 0x47, 0x8d, 0x46, 0x5, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0xef, 0x30, 0xef, 0xc7, 0x93, 0x7, 0x60, 0x6, 0x1, 0x47, 0x9d, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0x90, 0x6, 0xef, 0x30, 0xaf, 0xc6, 0xb7, 0xe7, 0x0, 0x60, 0xb7, 0x56, 0x96, 0x0, 0x94, 0xcf, 0x37, 0xe7, 0x0, 0x60, 0x1c, 0x43, 0xb7, 0x86, 0xfc, 0xff, 0xfd, 0x16, 0xf5, 0x8f, 0xa1, 0x66, 0xd5, 0x8f, 0x1c, 0xc3, 0x1c, 0x43, 0xe1, 0x76, 0x93, 0x86, 0xf6, 0x7, 0xf5, 0x8f, 0x93, 0xe7, 0x7, 0x78, 0x1c, 0xc3, 0xb7, 0xe7, 0x0, 0x60, 0xd8, 0x43, 0xb7, 0x16, 0x0, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0xb7, 0x86, 0xc, 0x0, 0x55, 0x8f, 0xd8, 0xc3, 0xd8, 0x43, 0xb2, 0x40, 0xb7, 0x6, 0x0, 0x1, 0x55, 0x8f, 0xd8, 0xc3, 0x41, 0x1, 0x82, 0x80, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x11, 0x45, 0x6f, 0x40, 0x8f, 0x88, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x13, 0x5, 0xa0, 0x7, 0x6, 0xc6, 0xef, 0x40, 0x6f, 0x87, 0xb7, 0x7, 0x88, 0x40, 0xb2, 0x40, 0x3, 0xa5, 0xc7, 0xfe, 0x41, 0x1, 0x17, 0x23, 0x7f, 0xff, 0x67, 0x0, 0xa3, 0x65, 0x83, 0x47, 0x35, 0x0, 0xd, 0x47, 0xa1, 0x45, 0x91, 0x83, 0x63, 0x8b, 0xe7, 0x0, 0x63, 0x69, 0xf7, 0x2, 0x85, 0x45, 0x91, 0xc7, 0x9, 0x47, 0x89, 0x45, 0x63, 0x93, 0xe7, 0x0, 0x91, 0x45, 0xb7, 0x7, 0x88, 0x40, 0x3, 0xa5, 0xc7, 0xfe, 0xc1, 0x67, 0xfd, 0x17, 0x8, 0x41, 0x13, 0x7, 0x0, 0x10, 0x85, 0x66, 0x41, 0x66, 0xd2, 0x5, 0x17, 0x23, 0x7f, 0xff, 0x67, 0x0, 0xa3, 0x66, 0x11, 0x47, 0x89, 0x45, 0xe3, 0x9e, 0xe7, 0xfc, 0xc1, 0x45, 0xd9, 0xbf, 0x41, 0x11, 0xb7, 0x7, 0x88, 0x40, 0x22, 0xc4, 0x3, 0xa4, 0xc7, 0xfe, 0x6, 0xc6, 0xef, 0x40, 0xaf, 0x99, 0xb2, 0x40, 0x8, 0xc0, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x81, 0x45, 0x1, 0x45, 0x6, 0xd6, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x6a, 0xef, 0x20, 0x20, 0x49, 0xef, 0x20, 0x80, 0x15, 0xef, 0xf0, 0xdf, 0xfc, 0xef, 0x40, 0x4f, 0x9a, 0x19, 0xc5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xc0, 0x2f, 0xf8, 0x61, 0x46, 0x81, 0x45, 0x28, 0x0, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x94, 0x85, 0x67, 0x89, 0x7, 0x5, 0x45, 0x23, 0x15, 0xf1, 0x0, 0xef, 0x40, 0x8f, 0xac, 0x9, 0x45, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x60, 0x28, 0x0, 0xef, 0x40, 0xef, 0xa8, 0xef, 0x40, 0xaf, 0xa6, 0xef, 0xf0, 0x5f, 0xf1, 0xef, 0x30, 0x3f, 0xfa, 0x89, 0x45, 0x5, 0x45, 0xef, 0x20, 0x0, 0x4f, 0x28, 0x0, 0xef, 0xf0, 0x9f, 0xf2, 0x89, 0x45, 0x5, 0x45, 0xef, 0x20, 0x80, 0x50, 0xb2, 0x50, 0x45, 0x61, 0x6f, 0xf0, 0x7f, 0xee, 0xb7, 0xf7, 0xa, 0x60, 0x98, 0x4f, 0x41, 0x11, 0x6, 0xc6, 0x13, 0x67, 0x47, 0x0, 0x98, 0xcf, 0xb7, 0xf7, 0xa, 0x60, 0x98, 0x4b, 0x5, 0x45, 0x13, 0x67, 0x17, 0x0, 0x98, 0xcb, 0x25, 0x26, 0x5, 0x45, 0x91, 0x26, 0xb7, 0x27, 0xb, 0x60, 0x37, 0x47, 0xd8, 0x50, 0x93, 0x87, 0x7, 0xc2, 0x13, 0x7, 0x17, 0xaa, 0x98, 0xc3, 0x37, 0x27, 0xb, 0x60, 0x13, 0x7, 0xc7, 0xc1, 0x14, 0x43, 0x37, 0x6, 0x4, 0x0, 0xd1, 0x8e, 0x14, 0xc3, 0x23, 0xa0, 0x7, 0x0, 0x2d, 0x28, 0x29, 0x2c, 0x11, 0x2c, 0x1, 0x45, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x41, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x10, 0x98, 0x43, 0x13, 0x67, 0x17, 0x0, 0x98, 0xc3, 0x98, 0x43, 0x75, 0x9b, 0x98, 0xc3, 0xb7, 0x27, 0xc, 0x60, 0xd, 0x47, 0xf8, 0xc3, 0xd, 0x22, 0xd5, 0x22, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x1, 0x45, 0x6, 0xce, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x44, 0x1, 0x45, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x3d, 0xb1, 0x47, 0x63, 0x0, 0xf5, 0x6, 0xef, 0x80, 0xf, 0x9a, 0xa2, 0x45, 0xb7, 0x6, 0x70, 0x0, 0x93, 0x17, 0x45, 0x1, 0x15, 0x66, 0xf5, 0x8f, 0x13, 0x6, 0x86, 0x2, 0xd1, 0x8f, 0x37, 0x6, 0x0, 0x80, 0x6d, 0x8e, 0xd1, 0x8f, 0x3e, 0xc4, 0xfd, 0x8e, 0xb7, 0x7, 0x40, 0x0, 0x13, 0x77, 0x75, 0x0, 0x63, 0x93, 0xf6, 0x0, 0x1, 0x47, 0x22, 0x45, 0xb7, 0x7, 0x90, 0xff, 0xfd, 0x17, 0x7d, 0x8d, 0xb2, 0x47, 0xb7, 0x5, 0x0, 0x80, 0x52, 0x7, 0xfd, 0x8d, 0xb7, 0x27, 0x83, 0x57, 0x93, 0x87, 0x7, 0x40, 0x59, 0x8d, 0xdd, 0x8d, 0x2a, 0xc4, 0x2e, 0xc6, 0xef, 0x30, 0xd0, 0x76, 0x9, 0xa8, 0xef, 0x80, 0xef, 0xd2, 0xb7, 0x67, 0x62, 0x2, 0x93, 0x87, 0xf7, 0x9f, 0xe3, 0xfc, 0xa7, 0xf8, 0xb7, 0x27, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xc2, 0x98, 0x43, 0xb7, 0x6, 0x0, 0xc0, 0xfd, 0x16, 0x75, 0x8f, 0xb7, 0x15, 0xb, 0x60, 0x98, 0xc3, 0x93, 0x85, 0x5, 0xc4, 0x88, 0x41, 0x37, 0x7, 0x0, 0x80, 0x13, 0x6, 0xf7, 0xff, 0x71, 0x8d, 0x88, 0xc1, 0xb7, 0x35, 0xb, 0x60, 0x93, 0x85, 0x85, 0xc2, 0x88, 0x41, 0xf2, 0x40, 0x71, 0x8d, 0x88, 0xc1, 0x8c, 0x43, 0xf1, 0x8d, 0x8c, 0xc3, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x47, 0x16, 0x8c, 0x43, 0x6d, 0x8e, 0x90, 0xc3, 0x90, 0x43, 0xf1, 0x8e, 0x94, 0xc3, 0xb7, 0x27, 0xb, 0x60, 0x93, 0x87, 0x7, 0xc3, 0x94, 0x43, 0x37, 0x6, 0x0, 0x40, 0xd1, 0x8e, 0x94, 0xc3, 0xb7, 0x16, 0xb, 0x60, 0x93, 0x86, 0x46, 0xc4, 0x90, 0x42, 0x59, 0x8e, 0x90, 0xc2, 0xb7, 0x36, 0xb, 0x60, 0x93, 0x86, 0xc6, 0xc2, 0x90, 0x42, 0x59, 0x8e, 0x90, 0xc2, 0x94, 0x43, 0x55, 0x8f, 0x98, 0xc3, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0xb7, 0x27, 0xb, 0x60, 0x93, 0x87, 0x7, 0xc0, 0xa, 0x85, 0x6, 0xce, 0x3e, 0xc2, 0x22, 0xcc, 0x2, 0xc0, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x64, 0x81, 0x45, 0xa, 0x85, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x65, 0xa, 0x85, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x63, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xa, 0x85, 0xef, 0x60, 0xdf, 0xa3, 0xef, 0x80, 0xaf, 0x88, 0x2a, 0x84, 0xa, 0x85, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x61, 0x9, 0x65, 0x13, 0x5, 0x85, 0x32, 0xb3, 0x35, 0xa4, 0x2, 0x13, 0x6, 0x80, 0x3e, 0x81, 0x46, 0x33, 0x5, 0xa4, 0x2, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xc2, 0x2a, 0x86, 0x91, 0x46, 0x81, 0x45, 0xa, 0x85, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x5e, 0xa, 0x85, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x5e, 0xa, 0x85, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x5d, 0x85, 0x47, 0x3e, 0xc4, 0xb7, 0x87, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x28, 0x0, 0x3e, 0xc6, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x5b, 0x28, 0x0, 0x81, 0x45, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x5c, 0x28, 0x0, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x5a, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x6f, 0xf0, 0x3f, 0xb3, 0x6f, 0x50, 0xb0, 0x7e, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x21, 0x1, 0x45, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x25, 0xef, 0x80, 0xef, 0xba, 0xef, 0x80, 0x8f, 0x83, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x33, 0x4, 0xf5, 0x2, 0x37, 0x45, 0x1e, 0x1c, 0x13, 0x5, 0xf5, 0xdf, 0x37, 0x46, 0x1e, 0x1c, 0x13, 0x6, 0x6, 0xe0, 0x81, 0x46, 0x22, 0x95, 0xb3, 0x35, 0x85, 0x0, 0x97, 0x30, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xb7, 0x19, 0xe1, 0xef, 0xc0, 0x2f, 0xbf, 0xf1, 0x67, 0x93, 0x87, 0x7, 0x20, 0xb3, 0x87, 0xa7, 0x2, 0x12, 0x4, 0xfd, 0x75, 0x33, 0x54, 0xf4, 0x2, 0xb7, 0x7, 0x0, 0x60, 0x93, 0x86, 0x7, 0x0, 0xd8, 0x4a, 0x93, 0x87, 0x7, 0x0, 0x6d, 0x8f, 0x13, 0x16, 0x4, 0x1, 0x51, 0x82, 0x51, 0x8f, 0xd8, 0xca, 0xd8, 0x4a, 0x37, 0x6, 0x10, 0xff, 0x3d, 0x88, 0x7d, 0x16, 0x52, 0x4, 0x71, 0x8f, 0x41, 0x8f, 0xd8, 0xca, 0x37, 0x17, 0xb, 0x60, 0x13, 0x7, 0x7, 0x40, 0xe3, 0x8b, 0xe7, 0xfa, 0xb7, 0x66, 0x9, 0x60, 0x93, 0x86, 0x6, 0x0, 0xd8, 0x42, 0x7d, 0x15, 0x37, 0x16, 0xf0, 0xff, 0x3a, 0xc6, 0x32, 0x47, 0x13, 0x75, 0xf5, 0xf, 0x7d, 0x16, 0x32, 0x5, 0x71, 0x8f, 0x49, 0x8f, 0x3a, 0xc6, 0x32, 0x47, 0xd8, 0xc2, 0x3, 0xa7, 0x87, 0x9, 0x13, 0x67, 0x17, 0x0, 0x23, 0xac, 0xe7, 0x8, 0x3, 0xa7, 0x87, 0x9, 0x5, 0x8b, 0x6d, 0xff, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0xe9, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x6, 0xc6, 0xef, 0xc0, 0x6f, 0xbd, 0xb7, 0x37, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xc0, 0x98, 0x43, 0x6d, 0x9b, 0x98, 0xc3, 0x82, 0x80, 0xb7, 0x37, 0xb, 0x60, 0x93, 0x87, 0xc7, 0xc0, 0x98, 0x43, 0x75, 0x9b, 0x98, 0xc3, 0xb7, 0x37, 0xb, 0x60, 0x93, 0x87, 0x47, 0xc0, 0x98, 0x43, 0x11, 0xc5, 0xb7, 0x6, 0x0, 0x80, 0x55, 0x8f, 0x98, 0xc3, 0x82, 0x80, 0x6, 0x7, 0x5, 0x83, 0xe5, 0xbf, 0x39, 0x71, 0x13, 0x6, 0x80, 0x2, 0x81, 0x45, 0x28, 0x0, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x55, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0x5c, 0x94, 0x47, 0x90, 0x43, 0x83, 0xa8, 0x47, 0x0, 0x93, 0x95, 0x16, 0x1, 0x3, 0xa8, 0xc7, 0x0, 0xd8, 0x4b, 0x88, 0x4b, 0x99, 0xc5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xc0, 0xaf, 0xb5, 0x93, 0x4, 0x17, 0x0, 0x37, 0xb4, 0x81, 0x40, 0xb3, 0x34, 0x90, 0x0, 0x13, 0x4, 0x84, 0x3c, 0x93, 0xd7, 0x15, 0x1, 0x4, 0xc0, 0xfd, 0x55, 0x63, 0xd, 0xb7, 0x2, 0x2a, 0xd2, 0x37, 0xb5, 0x81, 0x40, 0x32, 0xc6, 0x32, 0xcc, 0x2c, 0x0, 0x13, 0x6, 0x80, 0x2, 0x13, 0x5, 0xc5, 0x3c, 0x42, 0xc4, 0x46, 0xc8, 0x36, 0xca, 0x36, 0xce, 0x3a, 0xd0, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x4f, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x3e, 0x1c, 0xd4, 0x23, 0x22, 0x4, 0x2, 0x85, 0x47, 0xe3, 0x91, 0xf4, 0xfa, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x21, 0x61, 0x82, 0x80, 0x8d, 0xe7, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x42, 0x4d, 0xb2, 0x4d, 0x21, 0x61, 0x82, 0x80, 0x39, 0x71, 0x66, 0xca, 0x6a, 0xc8, 0x6, 0xde, 0x3e, 0x8d, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x6e, 0xc6, 0x93, 0x77, 0x26, 0x0, 0xb2, 0x8c, 0x63, 0x93, 0x7, 0x1e, 0x93, 0x17, 0x15, 0x1, 0xaa, 0x8a, 0x93, 0xdd, 0x17, 0x1, 0xd5, 0xf7, 0x93, 0xf7, 0x16, 0x0, 0x36, 0x8b, 0x3a, 0x8a, 0x81, 0xc7, 0x93, 0xf7, 0x46, 0x1, 0xd1, 0xff, 0xa1, 0x67, 0xfd, 0x17, 0xbe, 0x95, 0xb7, 0xbb, 0x81, 0x40, 0xe1, 0x77, 0xb3, 0xf9, 0xf5, 0x0, 0x93, 0x87, 0x8b, 0x3c, 0x94, 0x43, 0x1, 0x4c, 0x93, 0x8b, 0x8b, 0x3c, 0x63, 0x95, 0x86, 0x1, 0x13, 0x5, 0x50, 0x10, 0xad, 0xbf, 0xd8, 0x4f, 0x33, 0x77, 0xeb, 0x0, 0x63, 0x1a, 0xeb, 0x0, 0x98, 0x53, 0x33, 0xf7, 0xec, 0x0, 0x63, 0x95, 0xec, 0x0, 0x98, 0x4f, 0x63, 0x7b, 0x37, 0x1b, 0x5, 0xc, 0x93, 0x87, 0x87, 0x2, 0xd9, 0xbf, 0x5, 0x66, 0x13, 0x6, 0x46, 0x80, 0x93, 0x5, 0xc0, 0x2, 0x5, 0x45, 0xef, 0x20, 0x9f, 0x84, 0xaa, 0x84, 0x1, 0xe5, 0x13, 0x5, 0x10, 0x10, 0x3d, 0xbf, 0x5c, 0x48, 0x23, 0x28, 0x5, 0x0, 0x23, 0x2a, 0x65, 0x1, 0x1c, 0xc1, 0x5c, 0xc1, 0x5c, 0x50, 0x13, 0x7, 0x45, 0x2, 0x5c, 0xd1, 0xc1, 0xc7, 0x98, 0xd7, 0x93, 0x7, 0x80, 0x2, 0xb3, 0x7, 0xfc, 0x2, 0x5, 0x66, 0x13, 0x6, 0x46, 0x80, 0x93, 0x5, 0xc0, 0x2, 0x5, 0x45, 0x33, 0x84, 0xfb, 0x0, 0x93, 0x87, 0x47, 0x2, 0x44, 0xd0, 0xde, 0x97, 0x9c, 0xd4, 0xef, 0x20, 0xef, 0xff, 0x2a, 0x89, 0x31, 0xc9, 0x5c, 0x44, 0x23, 0x28, 0x5, 0x0, 0x23, 0x2a, 0x65, 0x1, 0x1c, 0xc1, 0x5c, 0xc1, 0x1c, 0x54, 0x23, 0x22, 0x5, 0x2, 0x1c, 0xd5, 0x88, 0xc3, 0x93, 0x7, 0x45, 0x2, 0x1c, 0xd4, 0x93, 0x7, 0x80, 0x2, 0xb3, 0x7, 0xfc, 0x2, 0x13, 0x76, 0x1a, 0x0, 0xb3, 0x86, 0x59, 0x1, 0xde, 0x97, 0x3, 0xaa, 0x47, 0x2, 0x63, 0x15, 0xa, 0x2, 0x5, 0x66, 0x13, 0x6, 0x46, 0x80, 0x93, 0x5, 0xc0, 0x2, 0x5, 0x45, 0xef, 0x20, 0x2f, 0xfb, 0x2a, 0x84, 0x5, 0xe9, 0x63, 0x16, 0x9, 0xc, 0xbd, 0xd0, 0x26, 0x85, 0xef, 0xc0, 0xef, 0x9d, 0xb9, 0xbf, 0x18, 0xd4, 0xad, 0xbf, 0x83, 0x27, 0xa, 0x2, 0x63, 0x99, 0x97, 0xd, 0x3, 0x27, 0x8a, 0x1, 0x83, 0x27, 0xca, 0x1, 0x63, 0xec, 0xea, 0xa, 0x63, 0xf4, 0xd7, 0xc, 0x5d, 0xca, 0x75, 0xa8, 0x93, 0x7, 0x80, 0x2, 0xb3, 0x7, 0xfc, 0x2, 0x81, 0x46, 0xde, 0x97, 0xdc, 0x53, 0xd0, 0x43, 0x98, 0x43, 0x11, 0x8f, 0x81, 0xea, 0x63, 0x67, 0x37, 0x1, 0x33, 0x7, 0x37, 0x41, 0x10, 0xc0, 0x3e, 0x8a, 0x85, 0x46, 0x63, 0xf3, 0xed, 0x0, 0xba, 0x8d, 0xd0, 0x43, 0xdc, 0x53, 0xed, 0xf3, 0xad, 0xc2, 0x83, 0x27, 0x8a, 0x2, 0x23, 0x22, 0x44, 0x3, 0xc, 0x40, 0x1c, 0xd4, 0x80, 0xc3, 0x93, 0x7, 0x44, 0x2, 0x23, 0x24, 0xfa, 0x2, 0x93, 0x7, 0x80, 0x2, 0xb3, 0x7, 0xfc, 0x2, 0x33, 0x87, 0x59, 0x1, 0x66, 0x85, 0xce, 0x86, 0x56, 0x86, 0xde, 0x97, 0x23, 0xac, 0xb7, 0x1, 0x58, 0xcc, 0xb3, 0x87, 0xb9, 0x0, 0x37, 0x7, 0x0, 0x42, 0x5c, 0xc0, 0xd9, 0x8d, 0xd9, 0x8f, 0x5c, 0xc4, 0x23, 0x28, 0x34, 0x1, 0x23, 0x2a, 0x64, 0x1, 0x23, 0x2c, 0x54, 0x1, 0x23, 0x20, 0x94, 0x3, 0xc, 0xc4, 0xef, 0x30, 0x5f, 0xca, 0x1c, 0x44, 0x1, 0x45, 0x23, 0x20, 0xfd, 0x0, 0xfd, 0xb3, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xc0, 0xef, 0x8c, 0x4a, 0x85, 0xef, 0xc0, 0x8f, 0x91, 0xd, 0xbf, 0x13, 0x5, 0x60, 0x10, 0xd1, 0xbb, 0x19, 0xe6, 0xe3, 0x66, 0xd7, 0xdc, 0x63, 0xf4, 0xfa, 0x0, 0xe3, 0xe2, 0xd7, 0xdc, 0x3, 0x2a, 0x4a, 0x2, 0xf5, 0xbd, 0x83, 0x27, 0x8a, 0x0, 0x13, 0x5, 0x30, 0x10, 0x99, 0x8f, 0xd6, 0x97, 0x23, 0x20, 0xfd, 0x0, 0x7d, 0xb3, 0x13, 0x4, 0x80, 0x2, 0x33, 0x4, 0x8c, 0x2, 0x5e, 0x94, 0x5c, 0x50, 0xe3, 0x85, 0x7, 0xe4, 0x1, 0x49, 0x81, 0x44, 0x7d, 0xbd, 0x49, 0xc9, 0x41, 0x11, 0x26, 0xc2, 0xb7, 0xb4, 0x81, 0x40, 0x13, 0x87, 0x84, 0x3c, 0x14, 0x43, 0x6, 0xc6, 0x22, 0xc4, 0xaa, 0x87, 0x93, 0x84, 0x84, 0x3c, 0x13, 0x5, 0x50, 0x10, 0x89, 0xca, 0x54, 0x4b, 0xaa, 0x7, 0xa9, 0x83, 0x63, 0xe5, 0xd7, 0x0, 0x58, 0x47, 0x63, 0xe6, 0xe7, 0x6, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x54, 0x50, 0x63, 0xe, 0xe4, 0x2, 0x90, 0x54, 0x50, 0x42, 0x10, 0x42, 0x63, 0x9, 0x86, 0x2, 0x10, 0x40, 0x63, 0x16, 0xf6, 0x2, 0x1c, 0x54, 0xdc, 0x43, 0x98, 0x43, 0x9c, 0x42, 0x54, 0x43, 0x98, 0x4c, 0x95, 0x8f, 0x63, 0xf3, 0xe7, 0x0, 0xba, 0x87, 0xc, 0x48, 0x8, 0x44, 0x9c, 0xcc, 0xef, 0x30, 0xdf, 0xc3, 0x5c, 0x50, 0x18, 0x54, 0x81, 0xeb, 0x98, 0xd4, 0x39, 0xa0, 0x36, 0x84, 0x61, 0xf0, 0x13, 0x5, 0x50, 0x10, 0x45, 0xbf, 0x98, 0xd7, 0x18, 0x54, 0x22, 0x85, 0x1c, 0xc3, 0xef, 0xc0, 0x6f, 0x84, 0x1, 0x45, 0x45, 0xb7, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0xd8, 0x50, 0x3a, 0x84, 0xf9, 0xbf, 0x85, 0xc1, 0x41, 0x11, 0x29, 0x81, 0x22, 0xc4, 0x5, 0x89, 0x2e, 0x84, 0x81, 0x45, 0x6, 0xc6, 0xef, 0x10, 0x90, 0x66, 0x8, 0xc0, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0xb7, 0x7, 0x88, 0x40, 0x83, 0xa7, 0xc7, 0xfe, 0x3, 0xd7, 0x27, 0x0, 0x93, 0x7, 0x0, 0x2, 0x63, 0x17, 0xf7, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x5, 0x47, 0xa3, 0x82, 0xe7, 0x6a, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0x82, 0xa7, 0x6a, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xc7, 0x57, 0x6a, 0x1, 0x45, 0x89, 0xc7, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xc5, 0x47, 0x6a, 0x5, 0x89, 0x82, 0x80, 0x82, 0x80, 0x6f, 0xa0, 0x9f, 0xd4, 0x6f, 0xa0, 0xdf, 0xf1, 0x79, 0x71, 0x5a, 0xc8, 0x32, 0x8b, 0x5, 0x66, 0x22, 0xd4, 0x56, 0xca, 0x2a, 0x84, 0xae, 0x8a, 0x13, 0x6, 0x6, 0x80, 0xa1, 0x45, 0x5, 0x45, 0x4e, 0xce, 0x52, 0xcc, 0x6, 0xd6, 0x26, 0xd2, 0x4a, 0xd0, 0x36, 0x8a, 0xba, 0x89, 0x2, 0xc6, 0xef, 0x20, 0xcf, 0xd5, 0x3d, 0xcd, 0x5, 0x66, 0xaa, 0x84, 0x13, 0x6, 0x6, 0x80, 0x91, 0x45, 0x5, 0x45, 0xef, 0x20, 0xaf, 0xd4, 0x2a, 0x89, 0x35, 0xc1, 0x88, 0xc0, 0x85, 0x47, 0xc9, 0x46, 0x63, 0x13, 0xfb, 0x0, 0xa5, 0x46, 0x22, 0x85, 0x7c, 0x0, 0x5, 0x47, 0x5, 0x46, 0xd6, 0x85, 0xef, 0xf0, 0x3f, 0xc2, 0x2a, 0x84, 0x1d, 0xe5, 0xb2, 0x47, 0x23, 0x20, 0xf9, 0x0, 0x85, 0x47, 0xdc, 0xc0, 0xb2, 0x47, 0x1, 0x44, 0x23, 0x20, 0xfa, 0x0, 0x23, 0xa0, 0x99, 0x0, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0x45, 0x61, 0x82, 0x80, 0x13, 0x7, 0x30, 0x10, 0x81, 0x47, 0xe3, 0xb, 0xe5, 0xfc, 0x4a, 0x85, 0xef, 0xb0, 0x9f, 0xf2, 0x26, 0x85, 0xef, 0xb0, 0x3f, 0xf2, 0xd1, 0xbf, 0x13, 0x4, 0x10, 0x10, 0xd5, 0xbf, 0x13, 0x4, 0x10, 0x10, 0xe1, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x2a, 0x84, 0x81, 0x44, 0x13, 0x9, 0x50, 0x10, 0x5c, 0x40, 0x8, 0x40, 0x63, 0xcc, 0xf4, 0x0, 0xef, 0xb0, 0x7f, 0xef, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0xb0, 0x7f, 0xee, 0x93, 0x97, 0x24, 0x0, 0x3e, 0x95, 0x8, 0x41, 0xef, 0xf0, 0xbf, 0xe0, 0x63, 0x18, 0x25, 0x1, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xb0, 0xbf, 0xe7, 0x85, 0x4, 0xd9, 0xb7, 0x95, 0x47, 0x63, 0xfa, 0xa7, 0x0, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0xb0, 0x1f, 0xe6, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x87, 0x5d, 0x3e, 0x95, 0x3, 0x45, 0x5, 0x0, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x6, 0xce, 0x1, 0x44, 0x1, 0x49, 0x81, 0x44, 0x99, 0x49, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0xfc, 0x2a, 0x86, 0x81, 0x45, 0x5, 0x45, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x3f, 0x5, 0x4, 0x33, 0x69, 0xa9, 0x0, 0xcd, 0x8c, 0xe3, 0x12, 0x34, 0xff, 0x62, 0x44, 0xf2, 0x40, 0xb2, 0x49, 0x4a, 0x85, 0xa6, 0x85, 0x42, 0x49, 0xd2, 0x44, 0x5, 0x61, 0x6f, 0x30, 0xe0, 0x54, 0x5, 0x46, 0x6f, 0x30, 0x9f, 0xda, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0x3, 0xa7, 0x7, 0x11, 0xdc, 0x4f, 0x85, 0x46, 0x41, 0x83, 0xd, 0x8b, 0x63, 0x16, 0xd7, 0x2, 0xa1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x11, 0x47, 0x63, 0x8c, 0xe7, 0x2, 0x15, 0x47, 0x13, 0x5, 0x0, 0x5, 0x63, 0x8b, 0xe7, 0x2, 0xd, 0x47, 0x13, 0x5, 0x80, 0x7, 0x63, 0x86, 0xe7, 0x2, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xb0, 0x3f, 0xd4, 0x93, 0xf7, 0xf7, 0xf, 0x63, 0x8d, 0xd7, 0x0, 0x9, 0x47, 0x29, 0x45, 0x63, 0x8a, 0xe7, 0x0, 0xe5, 0xf7, 0x13, 0x5, 0x80, 0x2, 0x82, 0x80, 0x13, 0x5, 0x0, 0x6, 0x82, 0x80, 0x51, 0x45, 0x82, 0x80, 0x5d, 0x71, 0xb7, 0x7, 0x88, 0x40, 0x13, 0x6, 0x80, 0x3, 0x81, 0x45, 0x28, 0x0, 0x86, 0xc6, 0xa2, 0xc4, 0xca, 0xc0, 0xa6, 0xc2, 0x3, 0xa9, 0xc7, 0xfe, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xf5, 0x85, 0x47, 0x23, 0x8, 0xf1, 0x0, 0x23, 0xc, 0xf1, 0x0, 0x93, 0x7, 0x0, 0x5, 0x3e, 0xda, 0xef, 0xf0, 0xdf, 0xf6, 0x2a, 0xdc, 0x37, 0x95, 0x81, 0x40, 0x2c, 0x0, 0x13, 0x5, 0x85, 0x56, 0xef, 0x0, 0x30, 0x5f, 0x2a, 0x84, 0xd, 0xed, 0xb7, 0x94, 0x81, 0x40, 0x13, 0x85, 0x84, 0x54, 0xef, 0x30, 0xdf, 0xde, 0x2a, 0x84, 0xd, 0xe5, 0x13, 0x87, 0x84, 0x54, 0x83, 0x27, 0x49, 0x0, 0x58, 0x4b, 0x93, 0x84, 0x84, 0x54, 0x63, 0x69, 0xf7, 0x2, 0x37, 0x7, 0x0, 0x1, 0x63, 0x60, 0xf7, 0x2, 0x83, 0x27, 0x49, 0x0, 0xdc, 0xc8, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa8, 0x97, 0x6a, 0xb6, 0x40, 0x22, 0x85, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0x61, 0x61, 0x82, 0x80, 0xef, 0x30, 0xdf, 0xb4, 0x65, 0xd1, 0x2a, 0x84, 0xed, 0xb7, 0x13, 0x4, 0x40, 0x10, 0xd5, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xff, 0xd7, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x52, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xbf, 0xb2, 0x40, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x85, 0x54, 0x41, 0x1, 0x9, 0xa0, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x7, 0x83, 0xb7, 0x97, 0x81, 0x40, 0x93, 0x87, 0x7, 0x5c, 0x98, 0xc3, 0x37, 0x97, 0x81, 0x40, 0x23, 0xa2, 0x7, 0x0, 0x23, 0xa4, 0x7, 0x0, 0x23, 0xa6, 0x7, 0x0, 0x13, 0x7, 0x87, 0x59, 0x18, 0xc5, 0x5c, 0xc5, 0x1, 0x45, 0x82, 0x80, 0x18, 0x4d, 0xc1, 0x66, 0xfd, 0x16, 0xb3, 0x77, 0xd7, 0x0, 0x85, 0xc3, 0x63, 0x8e, 0xd7, 0x0, 0x13, 0x77, 0xf7, 0xf, 0xe5, 0x47, 0x63, 0xf3, 0xe7, 0x0, 0x69, 0x17, 0x85, 0x47, 0xb3, 0x97, 0xe7, 0x0, 0x1, 0x45, 0x9c, 0xc1, 0x82, 0x80, 0x81, 0x47, 0x19, 0x65, 0x15, 0x5, 0xdd, 0xbf, 0x1, 0x45, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x81, 0x45, 0x2a, 0x84, 0x71, 0x46, 0x48, 0x0, 0x6, 0xd6, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0xe3, 0x8, 0x40, 0x93, 0x7, 0x60, 0x6, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x41, 0x4c, 0x0, 0xdc, 0x43, 0x82, 0x97, 0x5, 0xe9, 0x81, 0x45, 0x71, 0x46, 0x48, 0x0, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xe1, 0x8, 0x40, 0x93, 0x7, 0x90, 0x9, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x41, 0x4c, 0x0, 0xdc, 0x43, 0x82, 0x97, 0x19, 0xe5, 0x5c, 0x40, 0x22, 0x85, 0xd8, 0x43, 0xfc, 0x4b, 0xc, 0x43, 0x82, 0x97, 0xb2, 0x50, 0x22, 0x54, 0x45, 0x61, 0x82, 0x80, 0x5c, 0x41, 0x41, 0x11, 0x22, 0xc4, 0xdc, 0x57, 0x6, 0xc6, 0x26, 0xc2, 0x81, 0x45, 0x2a, 0x84, 0x82, 0x97, 0x29, 0xed, 0x5c, 0x40, 0x22, 0x85, 0xd8, 0x43, 0xfc, 0x4b, 0xc, 0x43, 0x82, 0x97, 0xaa, 0x84, 0x31, 0xe5, 0x1c, 0x44, 0xdc, 0x53, 0xa9, 0xef, 0x8, 0x40, 0x1c, 0x41, 0xdc, 0x47, 0x82, 0x97, 0x5c, 0x4c, 0x22, 0x85, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xcc, 0x5c, 0x40, 0xd8, 0x43, 0xfc, 0x4b, 0x4c, 0x43, 0x82, 0x97, 0x1c, 0x44, 0xaa, 0x84, 0xdc, 0x53, 0x99, 0xc3, 0x1, 0x45, 0x82, 0x97, 0x93, 0x7, 0x60, 0x10, 0x63, 0x90, 0xf4, 0x2, 0x5c, 0x40, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0xdc, 0x57, 0x85, 0x45, 0x41, 0x1, 0x82, 0x87, 0xaa, 0x84, 0x93, 0x7, 0x60, 0x10, 0xe3, 0x89, 0xf4, 0xfa, 0xb2, 0x40, 0x22, 0x44, 0x26, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5, 0x45, 0x82, 0x97, 0x55, 0xb7, 0x5c, 0x41, 0x41, 0x11, 0x22, 0xc4, 0xdc, 0x57, 0x4a, 0xc0, 0x6, 0xc6, 0x26, 0xc2, 0x2e, 0x89, 0x81, 0x45, 0x2a, 0x84, 0x82, 0x97, 0x39, 0xed, 0x5c, 0x40, 0x22, 0x85, 0xd8, 0x43, 0xfc, 0x4b, 0xc, 0x43, 0x82, 0x97, 0xaa, 0x84, 0x21, 0xe9, 0x1c, 0x44, 0xdc, 0x53, 0xa5, 0xe3, 0x8, 0x40, 0xca, 0x85, 0x1c, 0x41, 0x9c, 0x4b, 0x82, 0x97, 0x5c, 0x4c, 0x22, 0x85, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xcc, 0x5c, 0x40, 0xd8, 0x43, 0xfc, 0x4b, 0x4c, 0x47, 0x82, 0x97, 0x1c, 0x44, 0xaa, 0x84, 0xdc, 0x53, 0x99, 0xc3, 0x1, 0x45, 0x82, 0x97, 0x93, 0x7, 0x60, 0x10, 0x63, 0x91, 0xf4, 0x2, 0x5c, 0x40, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0xdc, 0x57, 0x85, 0x45, 0x41, 0x1, 0x82, 0x87, 0xaa, 0x84, 0x93, 0x7, 0x60, 0x10, 0xe3, 0x87, 0xf4, 0xfa, 0xb2, 0x40, 0x22, 0x44, 0x2, 0x49, 0x26, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5, 0x45, 0x82, 0x97, 0x79, 0xbf, 0x5c, 0x41, 0x41, 0x11, 0x22, 0xc4, 0xdc, 0x57, 0x4a, 0xc0, 0x6, 0xc6, 0x26, 0xc2, 0x2e, 0x89, 0x81, 0x45, 0x2a, 0x84, 0x82, 0x97, 0x39, 0xed, 0x5c, 0x40, 0x22, 0x85, 0xd8, 0x43, 0xfc, 0x4b, 0xc, 0x43, 0x82, 0x97, 0xaa, 0x84, 0x21, 0xe9, 0x1c, 0x44, 0xdc, 0x53, 0xa5, 0xe3, 0x8, 0x40, 0xca, 0x85, 0x1c, 0x41, 0xdc, 0x4b, 0x82, 0x97, 0x5c, 0x4c, 0x22, 0x85, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xcc, 0x5c, 0x40, 0xd8, 0x43, 0xfc, 0x4b, 0xc, 0x47, 0x82, 0x97, 0x1c, 0x44, 0xaa, 0x84, 0xdc, 0x53, 0x99, 0xc3, 0x1, 0x45, 0x82, 0x97, 0x93, 0x7, 0x60, 0x10, 0x63, 0x91, 0xf4, 0x2, 0x5c, 0x40, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0xdc, 0x57, 0x85, 0x45, 0x41, 0x1, 0x82, 0x87, 0xaa, 0x84, 0x93, 0x7, 0x60, 0x10, 0xe3, 0x87, 0xf4, 0xfa, 0xb2, 0x40, 0x22, 0x44, 0x2, 0x49, 0x26, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5, 0x45, 0x82, 0x97, 0x79, 0xbf, 0x5c, 0x41, 0x1, 0x11, 0x26, 0xca, 0xd8, 0x43, 0xae, 0x84, 0xfc, 0x4b, 0xc, 0x43, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x82, 0x97, 0x9, 0xc5, 0x93, 0x7, 0x60, 0x10, 0x63, 0x17, 0xf5, 0x0, 0x8, 0x40, 0xa6, 0x85, 0x1c, 0x41, 0xdc, 0x4f, 0x82, 0x97, 0x5c, 0x40, 0x93, 0x5, 0xf1, 0x0, 0x22, 0x85, 0x9c, 0x57, 0x82, 0x97, 0x19, 0xe5, 0x83, 0x47, 0xf1, 0x0, 0x63, 0x84, 0x97, 0x0, 0x13, 0x5, 0x50, 0x10, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x8, 0x41, 0xb2, 0x85, 0x1c, 0x41, 0x9c, 0x4f, 0x82, 0x87, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x6, 0xd6, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0xfd, 0x57, 0x2a, 0x84, 0x2e, 0x89, 0x93, 0x84, 0x15, 0x0, 0x63, 0x93, 0xf5, 0x0, 0x85, 0x44, 0x5, 0x4b, 0xd1, 0x4a, 0x7d, 0x5a, 0x9, 0xa8, 0x63, 0x88, 0x64, 0x1, 0x1c, 0x44, 0x48, 0x44, 0x85, 0x45, 0xdc, 0x47, 0xfd, 0x14, 0x82, 0x97, 0x8, 0x40, 0x1c, 0x41, 0x9c, 0x5f, 0x82, 0x97, 0x65, 0xd5, 0x5c, 0x40, 0x70, 0x0, 0x85, 0x45, 0xfc, 0x53, 0x22, 0x85, 0x82, 0x97, 0x19, 0xed, 0xb2, 0x47, 0x13, 0xf7, 0x17, 0x0, 0xd, 0xe7, 0x58, 0x4c, 0x93, 0x76, 0x17, 0x0, 0x99, 0xc6, 0x79, 0x9b, 0x58, 0xcc, 0x89, 0x8b, 0x99, 0xc3, 0x13, 0x5, 0x60, 0x10, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0x45, 0x61, 0x82, 0x80, 0xa6, 0x89, 0x63, 0xf3, 0x9a, 0x0, 0xd1, 0x49, 0x1c, 0x44, 0x48, 0x44, 0xce, 0x85, 0xdc, 0x47, 0x82, 0x97, 0xe3, 0x3, 0x49, 0xfb, 0xb3, 0x84, 0x34, 0x41, 0xd9, 0xfc, 0x13, 0x5, 0x70, 0x10, 0xf1, 0xb7, 0x18, 0x49, 0x8d, 0x47, 0x13, 0xf8, 0x15, 0x0, 0x93, 0x16, 0x7, 0x1, 0xc1, 0x82, 0x63, 0x8e, 0xf6, 0x8, 0x93, 0x17, 0x7, 0x1, 0xc9, 0x83, 0x9d, 0xe3, 0x5, 0x46, 0x5c, 0x4d, 0x63, 0x8c, 0xc6, 0xa, 0x9, 0x46, 0x63, 0x99, 0xc6, 0xc, 0x89, 0x8b, 0xcd, 0xc3, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x62, 0x83, 0xc6, 0x37, 0x0, 0x93, 0x5, 0xb8, 0x3, 0x85, 0xa0, 0x91, 0x47, 0x63, 0x83, 0xf6, 0x4, 0x95, 0x47, 0x63, 0x9d, 0xf6, 0xc, 0x5c, 0x4d, 0x89, 0x8b, 0x9d, 0xc7, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x62, 0x83, 0xc6, 0x17, 0x0, 0x93, 0x5, 0xb8, 0xe, 0x85, 0x47, 0x13, 0x6, 0x0, 0x2, 0x63, 0x13, 0x8, 0x0, 0x61, 0x46, 0x8, 0x41, 0xfe, 0x7, 0x5d, 0x8f, 0x3, 0x28, 0x5, 0x0, 0x3, 0x28, 0xc8, 0x3, 0x2, 0x88, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x62, 0xd1, 0xbf, 0x5c, 0x4d, 0x89, 0x8b, 0x99, 0xcb, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x62, 0x83, 0xc6, 0x27, 0x0, 0x93, 0x5, 0xb8, 0x6, 0x81, 0x47, 0xd1, 0xb7, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x62, 0xf5, 0xb7, 0x5c, 0x4d, 0x89, 0x8b, 0x91, 0xcb, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x62, 0x83, 0xc6, 0x7, 0x0, 0x93, 0x5, 0xb8, 0xb, 0x45, 0xb7, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x62, 0xfd, 0xb7, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x62, 0x85, 0xb7, 0x89, 0x8b, 0x91, 0xcb, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x62, 0x83, 0xc6, 0x47, 0x0, 0x93, 0x5, 0xb8, 0x0, 0x4d, 0xbf, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x62, 0xfd, 0xb7, 0x89, 0x8b, 0x99, 0xcf, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x62, 0x83, 0xc6, 0x57, 0x0, 0x8d, 0x45, 0x81, 0x47, 0xe3, 0x0, 0x8, 0xf6, 0xcd, 0x45, 0x13, 0x6, 0x0, 0x2, 0xa1, 0xbf, 0xb7, 0x97, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x62, 0xd5, 0xb7, 0x19, 0x65, 0xd, 0x5, 0x82, 0x80, 0x3, 0x57, 0xa5, 0x1, 0x79, 0x71, 0x22, 0xd4, 0x6, 0xd6, 0x93, 0x6, 0x60, 0x4, 0x2a, 0x84, 0x85, 0x47, 0x63, 0xb, 0xd7, 0x4, 0x93, 0x6, 0x0, 0x2, 0x81, 0x47, 0x63, 0x16, 0xd7, 0x4, 0x71, 0x46, 0x81, 0x45, 0x48, 0x0, 0xa3, 0x1, 0x1, 0x0, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x9f, 0x89, 0x67, 0x93, 0x87, 0x17, 0x80, 0x23, 0x13, 0xf1, 0x0, 0x93, 0x7, 0x20, 0x3, 0x3e, 0xc4, 0x93, 0x7, 0x31, 0x0, 0x8, 0x40, 0x3e, 0xc8, 0x93, 0x7, 0xa0, 0x5, 0x23, 0x1c, 0xf1, 0x0, 0xa1, 0x47, 0x23, 0xd, 0xf1, 0x0, 0x1c, 0x41, 0x4c, 0x0, 0xdc, 0x43, 0x82, 0x97, 0x83, 0x47, 0x31, 0x0, 0x8d, 0x83, 0x85, 0x8b, 0x83, 0x56, 0xa4, 0x1, 0x13, 0x7, 0x10, 0xa, 0x63, 0x93, 0xe6, 0x0, 0x85, 0x47, 0xb2, 0x50, 0x22, 0x54, 0x13, 0xe5, 0x47, 0x0, 0x45, 0x61, 0x82, 0x80, 0x3, 0x57, 0xa5, 0x1, 0x93, 0x6, 0x0, 0x2, 0xaa, 0x87, 0x63, 0x8, 0xd7, 0x0, 0x93, 0x6, 0x10, 0xa, 0x13, 0x5, 0x60, 0x10, 0x63, 0x14, 0xd7, 0x2, 0x1, 0x11, 0x13, 0x7, 0x0, 0x8, 0x3a, 0xc4, 0x88, 0x43, 0x37, 0x77, 0x7a, 0x0, 0x13, 0x7, 0x57, 0x53, 0x3a, 0xc6, 0x1c, 0x41, 0x6, 0xce, 0x2c, 0x0, 0xfc, 0x4b, 0x82, 0x97, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x82, 0x80, 0x5c, 0x41, 0x19, 0x71, 0xda, 0xd0, 0x3, 0xab, 0xc7, 0x4, 0xbc, 0x5f, 0xa2, 0xdc, 0xa6, 0xda, 0xce, 0xd6, 0xd2, 0xd4, 0xd6, 0xd2, 0x86, 0xde, 0xca, 0xd8, 0xde, 0xce, 0xae, 0x8a, 0x81, 0x45, 0x2a, 0x8a, 0xb2, 0x89, 0x36, 0x84, 0x82, 0x97, 0x93, 0x7, 0x60, 0x10, 0xaa, 0x84, 0x63, 0x4, 0xf5, 0x0, 0x91, 0xe0, 0x9, 0xec, 0xf6, 0x50, 0x66, 0x54, 0x46, 0x59, 0xb6, 0x59, 0x26, 0x5a, 0x96, 0x5a, 0x6, 0x5b, 0xf6, 0x4b, 0x26, 0x85, 0xd6, 0x54, 0x9, 0x61, 0x82, 0x80, 0x13, 0x6, 0x0, 0x4, 0x93, 0x5, 0xf0, 0xf, 0x8, 0x8, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x90, 0x3, 0x25, 0xa, 0x0, 0x22, 0x86, 0x74, 0x0, 0x1c, 0x41, 0x5a, 0x87, 0xce, 0x85, 0xdc, 0x5b, 0x4e, 0x94, 0x82, 0x97, 0x32, 0x46, 0xaa, 0x86, 0x33, 0x9, 0xa6, 0x0, 0xb3, 0x8b, 0xc9, 0x40, 0x63, 0x73, 0x24, 0x1, 0x22, 0x89, 0x3, 0x25, 0xa, 0x0, 0xc, 0x8, 0xb3, 0x9, 0x39, 0x41, 0x1c, 0x41, 0x33, 0x4, 0x24, 0x41, 0xdc, 0x57, 0x82, 0x97, 0x1c, 0x8, 0x4e, 0x86, 0xaa, 0x84, 0xb3, 0x85, 0x77, 0x1, 0x56, 0x85, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x8b, 0xce, 0x9a, 0xca, 0x89, 0x41, 0xb7, 0x5c, 0x41, 0x19, 0x71, 0xd6, 0xd2, 0x83, 0xaa, 0xc7, 0x4, 0xa2, 0xdc, 0xa6, 0xda, 0xca, 0xd8, 0xce, 0xd6, 0x86, 0xde, 0xd2, 0xd4, 0xda, 0xd0, 0x2a, 0x89, 0xae, 0x89, 0xb2, 0x84, 0x36, 0x84, 0x1, 0xec, 0x1, 0x45, 0xf6, 0x50, 0x66, 0x54, 0xd6, 0x54, 0x46, 0x59, 0xb6, 0x59, 0x26, 0x5a, 0x96, 0x5a, 0x6, 0x5b, 0x9, 0x61, 0x82, 0x80, 0x13, 0x6, 0x0, 0x4, 0x93, 0x5, 0xf0, 0xf, 0x8, 0x10, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x86, 0x3, 0x25, 0x9, 0x0, 0x74, 0x8, 0x22, 0x86, 0x1c, 0x41, 0x56, 0x87, 0xa6, 0x85, 0x9c, 0x57, 0x26, 0x94, 0x82, 0x97, 0xf2, 0x47, 0xaa, 0x86, 0x33, 0x8a, 0xa7, 0x0, 0x63, 0x73, 0x44, 0x1, 0x22, 0x8a, 0x33, 0xb, 0x9a, 0x40, 0x9d, 0x8c, 0x1c, 0x10, 0x5a, 0x86, 0xce, 0x85, 0x33, 0x85, 0x97, 0x0, 0x36, 0xc6, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x82, 0x83, 0x27, 0x49, 0x0, 0x81, 0x45, 0x4a, 0x85, 0xdc, 0x57, 0x82, 0x97, 0xb2, 0x46, 0x41, 0xf9, 0x83, 0x27, 0x49, 0x0, 0x72, 0x46, 0xc, 0x10, 0xbc, 0x47, 0x4a, 0x85, 0xda, 0x99, 0x82, 0x97, 0x33, 0x4, 0x44, 0x41, 0x2d, 0xfd, 0xd2, 0x84, 0x8d, 0xbf, 0x1c, 0x45, 0x9c, 0x4f, 0x9d, 0xcf, 0x1, 0x11, 0x22, 0xcc, 0x2a, 0x84, 0x48, 0x45, 0x6, 0xce, 0x30, 0x0, 0xb3, 0x35, 0xb0, 0x0, 0x82, 0x97, 0x9, 0xed, 0xa2, 0x47, 0x85, 0x8b, 0x91, 0xc7, 0x1c, 0x44, 0x48, 0x44, 0x6c, 0x0, 0xdc, 0x4f, 0x82, 0x97, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x93, 0x7, 0x70, 0x10, 0x63, 0x4, 0xf5, 0x0, 0xef, 0xb0, 0x6f, 0xd6, 0x1, 0x45, 0xed, 0xb7, 0x1, 0x45, 0x82, 0x80, 0x39, 0x71, 0x81, 0x47, 0x1, 0x48, 0x22, 0xdc, 0x26, 0xda, 0x2a, 0x84, 0x71, 0x46, 0xae, 0x84, 0x48, 0x8, 0x81, 0x45, 0x6, 0xde, 0x3e, 0xc4, 0x42, 0xc6, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x79, 0xa1, 0x47, 0x23, 0xb, 0xf1, 0x0, 0x3c, 0x0, 0x8, 0x40, 0x3e, 0xd0, 0x93, 0x7, 0xb0, 0x4, 0x23, 0x14, 0xf1, 0x2, 0x93, 0x7, 0x0, 0x2, 0x23, 0x5, 0xf1, 0x2, 0x1c, 0x41, 0x4c, 0x8, 0xdc, 0x43, 0x82, 0x97, 0xb2, 0x45, 0x2a, 0x84, 0x22, 0x45, 0x93, 0x86, 0x15, 0x0, 0x93, 0x37, 0x15, 0x0, 0x63, 0x97, 0xf6, 0x0, 0x13, 0x7, 0xf5, 0xff, 0xf5, 0x57, 0x63, 0xee, 0xe7, 0x0, 0x97, 0x20, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xb4, 0x88, 0xc0, 0xf2, 0x50, 0x22, 0x85, 0x62, 0x54, 0xcc, 0xc0, 0xd2, 0x54, 0x21, 0x61, 0x82, 0x80, 0x13, 0x4, 0x60, 0x10, 0xf5, 0xb7, 0x5c, 0x41, 0x1, 0x11, 0x26, 0xca, 0xd8, 0x43, 0xae, 0x84, 0xfc, 0x4b, 0xc, 0x43, 0x22, 0xcc, 0x6, 0xce, 0x32, 0xc6, 0x36, 0xc4, 0x2a, 0x84, 0x82, 0x97, 0xa2, 0x46, 0x32, 0x46, 0x9, 0xc5, 0x93, 0x7, 0x60, 0x10, 0x63, 0x1e, 0xf5, 0x2, 0x8, 0x40, 0xa6, 0x85, 0x1c, 0x41, 0x9c, 0x53, 0x82, 0x97, 0x5c, 0x4c, 0x22, 0x85, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xcc, 0x5c, 0x40, 0xd8, 0x43, 0xfc, 0x4b, 0xc, 0x4b, 0x82, 0x97, 0x93, 0x7, 0x60, 0x10, 0x63, 0x1b, 0xf5, 0x0, 0x5c, 0x40, 0x22, 0x85, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0xdc, 0x57, 0x85, 0x45, 0x5, 0x61, 0x82, 0x87, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x7, 0x6b, 0x63, 0x82, 0xa7, 0x2, 0x13, 0x5, 0x60, 0x10, 0x82, 0x80, 0x13, 0x5, 0x60, 0x10, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x4e, 0xce, 0xb7, 0x99, 0x81, 0x40, 0x93, 0x87, 0xc9, 0x60, 0xdc, 0x4b, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x56, 0xca, 0x6, 0xd6, 0x52, 0xcc, 0x5a, 0xc8, 0x5e, 0xc6, 0xaa, 0x84, 0xae, 0x8a, 0x32, 0x85, 0xb6, 0x85, 0x32, 0x89, 0x36, 0x84, 0x82, 0x97, 0x93, 0x89, 0xc9, 0x60, 0x5d, 0xd9, 0x83, 0xa7, 0x9, 0x0, 0x7d, 0x4b, 0x93, 0xb, 0xf0, 0x3, 0x82, 0x97, 0x11, 0xe4, 0x83, 0xa7, 0x49, 0x0, 0x82, 0x97, 0x1, 0x45, 0x4d, 0xb7, 0x93, 0x77, 0xf9, 0x3, 0x99, 0xeb, 0x13, 0xa, 0x0, 0x4, 0x63, 0xec, 0x8b, 0x0, 0x13, 0xa, 0x0, 0x2, 0x63, 0x68, 0x8b, 0x0, 0x41, 0x4a, 0x29, 0xa0, 0x93, 0x77, 0xf9, 0x1, 0x41, 0x4a, 0xfd, 0xd7, 0x83, 0xa7, 0x89, 0x0, 0xd6, 0x85, 0x4a, 0x85, 0x52, 0x86, 0x82, 0x97, 0xdc, 0x40, 0x81, 0x45, 0x26, 0x85, 0xdc, 0x57, 0x82, 0x97, 0x25, 0xf5, 0x83, 0xa7, 0xc9, 0x0, 0x82, 0x97, 0xdc, 0x40, 0xa2, 0x86, 0x4a, 0x86, 0xfc, 0x43, 0xd6, 0x85, 0x26, 0x85, 0x82, 0x97, 0x29, 0xf9, 0xdc, 0x40, 0x26, 0x85, 0xd8, 0x43, 0xfc, 0x4b, 0xc, 0x4b, 0x82, 0x97, 0x31, 0xf1, 0x83, 0xa7, 0x9, 0x1, 0x33, 0x4, 0x44, 0x41, 0xd2, 0x9a, 0x82, 0x97, 0x52, 0x99, 0x61, 0xb7, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x91, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x1, 0x45, 0xef, 0xb0, 0xef, 0xbf, 0x5c, 0x41, 0x2e, 0x84, 0x70, 0x0, 0xfc, 0x53, 0x85, 0x45, 0x82, 0x97, 0x1, 0xe9, 0xb2, 0x47, 0x85, 0x83, 0x93, 0xc7, 0x17, 0x0, 0x85, 0x8b, 0x23, 0x0, 0xf4, 0x0, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x2a, 0x84, 0x2e, 0x89, 0xb2, 0x84, 0x81, 0x45, 0x71, 0x46, 0x48, 0x0, 0x6, 0xd6, 0x2, 0xc0, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x59, 0x85, 0x47, 0x23, 0x3, 0xf1, 0x0, 0x1c, 0x40, 0x23, 0x1c, 0x21, 0x1, 0xa, 0xc8, 0xdc, 0x43, 0x4c, 0x0, 0x22, 0x85, 0x82, 0x97, 0x82, 0x47, 0xb2, 0x50, 0x22, 0x54, 0x9c, 0xc0, 0x2, 0x59, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x2a, 0x84, 0x8, 0x41, 0x26, 0xca, 0x70, 0x0, 0xae, 0x84, 0x93, 0x5, 0x50, 0x3, 0x6, 0xce, 0xef, 0xf0, 0x7f, 0xfa, 0xd, 0xe1, 0x8, 0x40, 0x30, 0x0, 0x95, 0x45, 0xef, 0xf0, 0xbf, 0xf9, 0x19, 0xe9, 0xb2, 0x47, 0x41, 0x67, 0x13, 0x7, 0x7, 0xf0, 0xa2, 0x7, 0xf9, 0x8f, 0x3, 0x47, 0x81, 0x0, 0xd9, 0x8f, 0x9c, 0xc0, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x39, 0x71, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0xaa, 0x84, 0x2e, 0x89, 0x32, 0x84, 0x81, 0x45, 0x71, 0x46, 0x48, 0x8, 0x6, 0xde, 0x36, 0xc6, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x50, 0x7c, 0x0, 0x3e, 0xce, 0x9c, 0x40, 0xd, 0x80, 0xa3, 0xa, 0x81, 0x0, 0xdc, 0x43, 0x23, 0x14, 0x21, 0x3, 0x4c, 0x8, 0x26, 0x85, 0x82, 0x97, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0x21, 0x61, 0x82, 0x80, 0x8, 0x41, 0xae, 0x86, 0x41, 0x46, 0x85, 0x45, 0x6f, 0xf0, 0x5f, 0xfb, 0x8, 0x41, 0x2e, 0x86, 0x93, 0x5, 0x50, 0x3, 0x6f, 0xf0, 0xff, 0xf1, 0x1, 0x11, 0x22, 0xcc, 0x2e, 0x84, 0x6c, 0x0, 0x6, 0xce, 0xef, 0xf0, 0xbf, 0xfe, 0x9, 0xe5, 0xb2, 0x47, 0x86, 0x7, 0x91, 0x8b, 0x1c, 0xc0, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1c, 0x49, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0xf1, 0x17, 0x5, 0x47, 0x63, 0x6f, 0xf7, 0x2, 0xae, 0x89, 0x6c, 0x0, 0xaa, 0x84, 0x32, 0x8a, 0x36, 0x89, 0x2, 0x96, 0x2a, 0x84, 0x1d, 0xe5, 0xb2, 0x47, 0x33, 0xe9, 0x27, 0x1, 0x63, 0x82, 0x27, 0x3, 0xdc, 0x40, 0x81, 0x45, 0x26, 0x85, 0xdc, 0x57, 0x82, 0x97, 0xca, 0x85, 0x26, 0x85, 0x82, 0x99, 0xdc, 0x40, 0x2a, 0x84, 0x5, 0xc1, 0xdc, 0x57, 0x85, 0x45, 0x26, 0x85, 0x82, 0x97, 0x11, 0xa0, 0x1, 0x44, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0xd8, 0x43, 0xfc, 0x4b, 0x26, 0x85, 0xc, 0x43, 0x82, 0x97, 0x93, 0x7, 0x60, 0x10, 0x2a, 0x84, 0x63, 0x12, 0xf5, 0x2, 0xdc, 0x40, 0x85, 0x45, 0x26, 0x85, 0xdc, 0x57, 0x82, 0x97, 0x6c, 0x0, 0x26, 0x85, 0x2, 0x9a, 0x2a, 0x84, 0x61, 0xf5, 0xb2, 0x47, 0xe3, 0x82, 0x27, 0xfd, 0x13, 0x4, 0x80, 0x10, 0x75, 0xbf, 0x6d, 0xd5, 0x65, 0xbf, 0x37, 0xf6, 0x80, 0x40, 0xb7, 0xf5, 0x80, 0x40, 0x93, 0x6, 0x0, 0x20, 0x13, 0x6, 0x26, 0xf4, 0x93, 0x85, 0xa5, 0xfc, 0x6f, 0xf0, 0xff, 0xf4, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x2a, 0x84, 0x71, 0x46, 0xae, 0x84, 0x48, 0x0, 0x81, 0x45, 0x6, 0xd6, 0x2, 0xc0, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x3d, 0x8d, 0x47, 0x23, 0x3, 0xf1, 0x0, 0x93, 0x7, 0xf0, 0x9, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x40, 0xa, 0xc8, 0x4c, 0x0, 0xdc, 0x43, 0x22, 0x85, 0x82, 0x97, 0x82, 0x47, 0x37, 0x7, 0x0, 0x1, 0x7d, 0x17, 0x13, 0x5, 0x80, 0x10, 0x63, 0x81, 0xe7, 0x2, 0x99, 0xcf, 0x93, 0xf6, 0x7, 0xf0, 0x13, 0xd7, 0x7, 0x1, 0x55, 0x8f, 0x42, 0x7, 0xc2, 0x7, 0xb7, 0x6, 0xff, 0x0, 0x41, 0x83, 0xf5, 0x8f, 0xd9, 0x8f, 0x9c, 0xc0, 0x1, 0x45, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x2a, 0x84, 0xae, 0x84, 0x71, 0x46, 0x81, 0x45, 0x48, 0x0, 0x6, 0xd6, 0x2, 0xc0, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x36, 0x85, 0x47, 0x23, 0x3, 0xf1, 0x0, 0x95, 0x47, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x40, 0xa, 0xc8, 0x4c, 0x0, 0xdc, 0x43, 0x22, 0x85, 0x82, 0x97, 0x1, 0xe5, 0x82, 0x47, 0x23, 0x80, 0xf4, 0x0, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x71, 0x46, 0x2a, 0x84, 0x81, 0x45, 0x48, 0x0, 0x6, 0xd6, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x32, 0x93, 0x7, 0x70, 0xc, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x40, 0x4c, 0x0, 0x22, 0x85, 0xdc, 0x43, 0x82, 0x97, 0xb2, 0x50, 0x22, 0x54, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x2a, 0x84, 0xae, 0x84, 0x71, 0x46, 0x81, 0x45, 0x48, 0x0, 0x6, 0xd6, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x2f, 0x91, 0x47, 0x91, 0xe0, 0x99, 0x47, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x40, 0x4c, 0x0, 0x22, 0x85, 0xdc, 0x43, 0x82, 0x97, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x1, 0x45, 0x45, 0x61, 0x82, 0x80, 0x5c, 0x51, 0x85, 0x8b, 0x99, 0xcb, 0x13, 0xf5, 0x15, 0x0, 0x93, 0x77, 0x16, 0x0, 0xd, 0xc5, 0xfd, 0x15, 0x99, 0xc3, 0x5, 0x6, 0x11, 0xa0, 0x9, 0x6, 0x8c, 0xc2, 0xb3, 0xf5, 0xe5, 0x2, 0x93, 0x7, 0x0, 0x4, 0x33, 0x5, 0xb7, 0x40, 0x63, 0xf4, 0xc7, 0x0, 0x13, 0x6, 0x0, 0x4, 0x63, 0x73, 0xa6, 0x0, 0x32, 0x85, 0x82, 0x80, 0xed, 0xd3, 0xe9, 0xbf, 0x5c, 0x51, 0x85, 0x8b, 0x99, 0xcb, 0x13, 0xf7, 0x15, 0x0, 0x93, 0x77, 0x16, 0x0, 0x19, 0xcf, 0xfd, 0x15, 0x99, 0xc3, 0x5, 0x6, 0x11, 0xa0, 0x9, 0x6, 0x8c, 0xc2, 0x93, 0x7, 0x0, 0x4, 0x32, 0x85, 0x63, 0xf4, 0xc7, 0x0, 0x13, 0x5, 0x0, 0x4, 0x82, 0x80, 0xfd, 0xd7, 0xdd, 0xb7, 0x58, 0x41, 0xb7, 0x37, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x63, 0x1c, 0xf7, 0x0, 0x41, 0x11, 0x2e, 0x85, 0xb2, 0x85, 0x6, 0xc6, 0xef, 0x20, 0xdf, 0xe4, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0xb0, 0xef, 0x85, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0xb7, 0x7, 0x0, 0x1, 0x63, 0xe4, 0xf5, 0x0, 0xef, 0xf0, 0x1f, 0xfe, 0x2a, 0x84, 0xae, 0x84, 0x71, 0x46, 0x81, 0x45, 0x48, 0x0, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x21, 0xe1, 0x47, 0xa3, 0x3, 0xf1, 0x0, 0x93, 0x7, 0x0, 0x2, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x40, 0x26, 0xc4, 0x4c, 0x0, 0xdc, 0x43, 0x22, 0x85, 0x82, 0x97, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0xb7, 0x7, 0x0, 0x1, 0x63, 0xe4, 0xf5, 0x0, 0xef, 0xf0, 0x7f, 0xf9, 0x2a, 0x84, 0xae, 0x84, 0x71, 0x46, 0x81, 0x45, 0x48, 0x0, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x1c, 0xe1, 0x47, 0xa3, 0x3, 0xf1, 0x0, 0x93, 0x7, 0x80, 0xd, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x40, 0x26, 0xc4, 0x4c, 0x0, 0xdc, 0x43, 0x22, 0x85, 0x82, 0x97, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x33, 0x7, 0xd6, 0x0, 0xb7, 0x7, 0x0, 0x1, 0x63, 0xf4, 0xe7, 0x0, 0xef, 0xf0, 0x5f, 0xf4, 0x2a, 0x84, 0xae, 0x89, 0xb2, 0x84, 0x81, 0x45, 0x71, 0x46, 0x48, 0x0, 0x36, 0x89, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x17, 0xe1, 0x47, 0xa3, 0x3, 0xf1, 0x0, 0x89, 0x47, 0x23, 0x1c, 0xf1, 0x0, 0x1c, 0x40, 0xa3, 0x2, 0x21, 0x1, 0x26, 0xc4, 0xdc, 0x43, 0x4e, 0xc6, 0x4c, 0x0, 0x22, 0x85, 0x82, 0x97, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x21, 0x61, 0x82, 0x80, 0xb7, 0x7, 0x80, 0xbf, 0xaa, 0x97, 0xb7, 0x6, 0x8, 0x0, 0xd8, 0x4d, 0x63, 0xe0, 0xd7, 0x2, 0xb7, 0x7, 0x0, 0xb0, 0xaa, 0x97, 0x91, 0x66, 0x63, 0xea, 0xd7, 0x0, 0x11, 0xcf, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x47, 0x66, 0x1c, 0xc1, 0x6f, 0x0, 0x50, 0x62, 0x6d, 0xfb, 0xb7, 0x97, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x63, 0xc5, 0xbf, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x6, 0xc6, 0xef, 0xa0, 0x1f, 0xa1, 0x23, 0x2c, 0x4, 0x6a, 0xef, 0xa0, 0x7f, 0xa3, 0x37, 0x36, 0x80, 0x40, 0x1, 0x47, 0x93, 0x6, 0x84, 0x6b, 0x13, 0x6, 0x66, 0xa9, 0x93, 0x5, 0x0, 0x40, 0x59, 0x45, 0xef, 0x60, 0x8f, 0xb2, 0x19, 0xc1, 0xef, 0xa0, 0xbf, 0xe7, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xa0, 0x7f, 0x9d, 0x37, 0xb7, 0x81, 0x40, 0x93, 0x6, 0x47, 0x41, 0x81, 0x47, 0x13, 0x7, 0x47, 0x41, 0x21, 0x46, 0x8c, 0x42, 0x99, 0xe9, 0x8a, 0x7, 0x3e, 0x97, 0x0, 0xc3, 0xef, 0xa0, 0x7f, 0x9e, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x85, 0x7, 0x91, 0x6, 0xe3, 0x92, 0xc7, 0xfe, 0xef, 0xa0, 0x1f, 0x9d, 0x13, 0x5, 0x10, 0x10, 0xe5, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0xef, 0xa0, 0x1f, 0x99, 0x37, 0xb7, 0x81, 0x40, 0x93, 0x6, 0x47, 0x3f, 0x81, 0x47, 0x13, 0x7, 0x47, 0x3f, 0x21, 0x46, 0x8c, 0x42, 0x99, 0xe9, 0x8a, 0x7, 0x3e, 0x97, 0x0, 0xc3, 0xef, 0xa0, 0x1f, 0x9a, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x85, 0x7, 0x91, 0x6, 0xe3, 0x92, 0xc7, 0xfe, 0xef, 0xa0, 0xbf, 0x98, 0x13, 0x5, 0x10, 0x10, 0xe5, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x4, 0x44, 0x41, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x13, 0x9, 0x4, 0x2, 0x85, 0x44, 0x1c, 0x40, 0x81, 0xc7, 0x82, 0x97, 0x11, 0xe1, 0x81, 0x44, 0x11, 0x4, 0xe3, 0x1a, 0x24, 0xff, 0x81, 0xc8, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0x50, 0x5f, 0xb7, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x99, 0xe1, 0x6f, 0xf0, 0xff, 0xf2, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x99, 0xe1, 0x6f, 0xf0, 0x9f, 0xf6, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x6f, 0xf0, 0xff, 0xf5, 0x41, 0x11, 0x1d, 0x45, 0x6, 0xc6, 0x22, 0xc4, 0xef, 0x70, 0x3f, 0xaa, 0xaa, 0x85, 0xd, 0xe9, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0xb8, 0x47, 0xf1, 0x76, 0xfd, 0x16, 0x13, 0x67, 0x17, 0x0, 0xb8, 0xc7, 0xb8, 0x47, 0x13, 0x67, 0x27, 0x0, 0xb8, 0xc7, 0xb8, 0x47, 0x75, 0x9b, 0xb8, 0xc7, 0xb7, 0x97, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0xb8, 0x47, 0x75, 0x8f, 0xb8, 0xc7, 0x1d, 0x45, 0xef, 0x70, 0xdf, 0xa8, 0x37, 0xb4, 0x81, 0x40, 0x15, 0x66, 0x85, 0x46, 0x13, 0x6, 0x6, 0xe2, 0x89, 0x45, 0x13, 0x5, 0xc4, 0x6b, 0xef, 0x50, 0x4f, 0xa9, 0x13, 0x5, 0xc4, 0x6b, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xe7, 0x9, 0x66, 0x13, 0x5, 0xc4, 0x6b, 0x85, 0x46, 0x13, 0x6, 0x6, 0x71, 0x81, 0x45, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xe5, 0x9, 0x66, 0x13, 0x5, 0xc4, 0x6b, 0x8d, 0x46, 0x13, 0x6, 0x6, 0x71, 0x85, 0x45, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xe4, 0x13, 0x5, 0xc4, 0x6b, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xe4, 0x13, 0x5, 0xc4, 0x6b, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x17, 0x13, 0x7f, 0xff, 0x67, 0x0, 0xa3, 0xe2, 0x37, 0x35, 0x80, 0x40, 0x41, 0x11, 0x81, 0x45, 0x13, 0x5, 0x85, 0xb6, 0x6, 0xc6, 0xef, 0xf0, 0x1f, 0xf3, 0x61, 0x45, 0xef, 0x10, 0x8f, 0xfc, 0x61, 0x46, 0x93, 0x5, 0x80, 0x3, 0x1, 0x45, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x18, 0x81, 0x45, 0x61, 0x45, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x17, 0x61, 0x45, 0x91, 0x45, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x15, 0xb2, 0x40, 0x61, 0x45, 0x41, 0x1, 0x6f, 0x10, 0x8f, 0xef, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x6c, 0xaa, 0x86, 0x1, 0x47, 0xdc, 0x43, 0x1, 0x45, 0x91, 0xe7, 0x13, 0x47, 0x17, 0x0, 0x23, 0x80, 0xe5, 0x0, 0x82, 0x80, 0x63, 0x87, 0xd7, 0x0, 0x3, 0xc6, 0xc7, 0x0, 0x9, 0xc6, 0x9c, 0x43, 0xe5, 0xb7, 0x5, 0x45, 0xed, 0xbf, 0x5, 0x47, 0xdd, 0xbf, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x6c, 0xaa, 0x86, 0x1, 0x47, 0xdc, 0x43, 0x1, 0x45, 0x91, 0xe7, 0x13, 0x47, 0x17, 0x0, 0x23, 0x80, 0xe5, 0x0, 0x82, 0x80, 0xd0, 0x43, 0x63, 0x7, 0xd6, 0x0, 0x3, 0xc6, 0xc7, 0x0, 0x9, 0xc6, 0x9c, 0x43, 0xdd, 0xb7, 0x3e, 0x85, 0xed, 0xbf, 0x5, 0x47, 0xdd, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x83, 0x27, 0x44, 0x6c, 0x6, 0xc6, 0x88, 0x43, 0xf9, 0x29, 0x83, 0x27, 0x44, 0x6c, 0xdc, 0x43, 0x89, 0xe7, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x23, 0x86, 0x7, 0x0, 0x9c, 0x43, 0xc5, 0xbf, 0x79, 0x71, 0x26, 0xd2, 0x4a, 0xd0, 0xae, 0x84, 0x2a, 0x89, 0xc1, 0x45, 0x5, 0x45, 0x4e, 0xce, 0x6, 0xd6, 0x22, 0xd4, 0x52, 0xcc, 0xb2, 0x89, 0xef, 0xa0, 0x9f, 0xcf, 0x41, 0xc5, 0x2a, 0x84, 0x63, 0x1, 0x9, 0x6, 0x44, 0xc1, 0x37, 0xba, 0x81, 0x40, 0xef, 0xa0, 0xcf, 0xf3, 0x83, 0x24, 0x4a, 0x6c, 0xb5, 0xc4, 0x93, 0x5, 0xf1, 0x0, 0x63, 0xf, 0x9, 0x4, 0x48, 0x40, 0xef, 0xf0, 0x5f, 0xf6, 0x31, 0xe1, 0xdc, 0x40, 0x1c, 0xc0, 0x83, 0xc7, 0xd4, 0x0, 0xc0, 0xc0, 0x99, 0xc7, 0x88, 0x40, 0xd9, 0x29, 0x83, 0x27, 0x4a, 0x6c, 0xa3, 0x86, 0x7, 0x0, 0x83, 0x47, 0xf1, 0x0, 0x99, 0xc3, 0xef, 0xf0, 0x5f, 0xf7, 0xef, 0xa0, 0xef, 0xf2, 0x81, 0x44, 0x23, 0xa0, 0x89, 0x0, 0xb2, 0x50, 0x22, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x26, 0x85, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x4, 0xc5, 0x4d, 0xb7, 0x93, 0x4, 0x20, 0x10, 0xef, 0xa0, 0xaf, 0xf0, 0x22, 0x85, 0xef, 0xa0, 0x7f, 0xc3, 0xf1, 0xbf, 0x22, 0x85, 0xef, 0xf0, 0x9f, 0xed, 0x5d, 0xb7, 0x93, 0x4, 0x30, 0x10, 0xe5, 0xb7, 0x93, 0x4, 0x10, 0x10, 0xe1, 0xb7, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0xa0, 0x1f, 0xbc, 0x1, 0x11, 0x19, 0x45, 0x6, 0xce, 0x2, 0xc2, 0x2, 0xc4, 0x2, 0xc6, 0xef, 0x0, 0xff, 0xde, 0xef, 0x90, 0x3f, 0xf6, 0x4c, 0x0, 0xef, 0xa0, 0xef, 0xd7, 0x85, 0x47, 0x63, 0x4, 0xf5, 0x0, 0xef, 0xf0, 0x1f, 0xfd, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0x8a, 0xa7, 0x58, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0x84, 0xa7, 0x6c, 0x22, 0x45, 0xef, 0x10, 0xcf, 0x82, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x6c, 0x99, 0xcf, 0x1, 0x11, 0x6, 0xce, 0xaa, 0x85, 0x1, 0xe5, 0xef, 0x90, 0x1f, 0xf2, 0xaa, 0x85, 0x70, 0x0, 0x5, 0x45, 0xef, 0xf0, 0xbf, 0xee, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x2a, 0x84, 0x81, 0x44, 0x37, 0x9, 0x81, 0x40, 0x19, 0xe4, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x93, 0x77, 0x14, 0x0, 0x8d, 0xc7, 0x26, 0x85, 0xef, 0xa0, 0x2f, 0xcb, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0xa0, 0xdf, 0xb1, 0xef, 0xf0, 0xdf, 0xf9, 0x19, 0xc1, 0xef, 0xa0, 0x3f, 0xa9, 0xa6, 0x85, 0x13, 0x5, 0x9, 0x8c, 0xef, 0xf0, 0xbf, 0xce, 0x6d, 0xf9, 0x5, 0x80, 0x85, 0x4, 0xc1, 0xb7, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x13, 0x4, 0x20, 0x10, 0x35, 0xc1, 0x58, 0x41, 0x85, 0x47, 0x2a, 0x89, 0x13, 0x4, 0x20, 0x10, 0x63, 0xec, 0xe7, 0x4, 0xb7, 0xb9, 0x81, 0x40, 0x83, 0xa7, 0x49, 0x6c, 0x13, 0x4, 0x30, 0x10, 0xa1, 0xe7, 0xc1, 0x45, 0x5, 0x45, 0xef, 0xa0, 0x5f, 0xb6, 0xaa, 0x84, 0x31, 0xc9, 0x83, 0x47, 0x89, 0x0, 0xb7, 0x5, 0x81, 0x40, 0x2a, 0x86, 0x23, 0x6, 0xf5, 0x0, 0x93, 0x85, 0x25, 0x9c, 0x4a, 0x85, 0x39, 0x2c, 0x2a, 0x84, 0x1d, 0xed, 0x3, 0x25, 0x49, 0x0, 0x23, 0xa2, 0x99, 0x6c, 0x88, 0xc4, 0x19, 0xc1, 0xef, 0xf0, 0xdf, 0xf4, 0x83, 0xa7, 0x49, 0x6c, 0xd8, 0x43, 0x9, 0xcf, 0x88, 0x43, 0xa3, 0x86, 0x7, 0x0, 0x35, 0x2e, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x5, 0x47, 0xa3, 0x86, 0xe7, 0x0, 0xed, 0xb7, 0x13, 0x4, 0x10, 0x10, 0x26, 0x85, 0xef, 0xa0, 0xbf, 0xab, 0xf9, 0xbf, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x6c, 0xb1, 0xc3, 0x79, 0x71, 0x6, 0xd6, 0xef, 0x90, 0xdf, 0xe0, 0x2a, 0xc6, 0xef, 0xa0, 0xf, 0xd4, 0x32, 0x45, 0x93, 0x5, 0xf1, 0x1, 0xef, 0xf0, 0x3f, 0xd7, 0xaa, 0x87, 0x13, 0x5, 0x50, 0x10, 0x81, 0xcb, 0x5, 0x47, 0x23, 0x86, 0xe7, 0x0, 0x83, 0x47, 0xf1, 0x1, 0x89, 0xeb, 0x1, 0x45, 0x2a, 0xc6, 0xef, 0xa0, 0x8f, 0xd4, 0xb2, 0x50, 0x32, 0x45, 0x45, 0x61, 0x82, 0x80, 0xef, 0xf0, 0xff, 0xd7, 0xf5, 0xb7, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xf0, 0xbf, 0xfa, 0xb2, 0x40, 0x5, 0x45, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x4e, 0xce, 0xb7, 0xb9, 0x81, 0x40, 0x83, 0xa7, 0x49, 0x6c, 0x6, 0xd6, 0x22, 0xd4, 0xdc, 0x43, 0x26, 0xd2, 0x4a, 0xd0, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x66, 0xc2, 0x6a, 0xc0, 0xdd, 0xcf, 0x2a, 0x84, 0x2e, 0x89, 0xb2, 0x84, 0x19, 0xc5, 0xb7, 0xa5, 0x81, 0x40, 0x93, 0x85, 0x5, 0xdc, 0x4a, 0x85, 0x2, 0x94, 0x83, 0xa7, 0x49, 0x6c, 0xb7, 0xaa, 0x81, 0x40, 0x37, 0xab, 0x81, 0x40, 0x83, 0xac, 0x47, 0x0, 0x5, 0x4a, 0xb7, 0xab, 0x81, 0x40, 0x93, 0x8a, 0x4a, 0xdb, 0x13, 0xb, 0xcb, 0xd9, 0x9, 0x4c, 0x63, 0x91, 0xc, 0x2, 0x1, 0x45, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x92, 0x4c, 0x2, 0x4d, 0x45, 0x61, 0x82, 0x80, 0x83, 0xc7, 0xcc, 0x0, 0xb1, 0xe3, 0x3, 0xa5, 0x4c, 0x0, 0x31, 0xc1, 0xef, 0x90, 0xef, 0xf6, 0xaa, 0x89, 0x3, 0xa5, 0x4c, 0x0, 0x29, 0xcd, 0xef, 0xa0, 0x4f, 0xaf, 0x63, 0x67, 0xaa, 0x4, 0xb3, 0x17, 0xaa, 0x0, 0x81, 0xc4, 0x98, 0x40, 0x5d, 0x8f, 0x98, 0xc0, 0x63, 0x94, 0x47, 0x3, 0x5a, 0x8d, 0x19, 0xc8, 0x93, 0x85, 0xcb, 0xe1, 0x4a, 0x85, 0x2, 0x94, 0xce, 0x85, 0x4a, 0x85, 0x2, 0x94, 0xea, 0x85, 0x4a, 0x85, 0x2, 0x94, 0x83, 0xac, 0xc, 0x0, 0x49, 0xbf, 0x83, 0xa9, 0x8c, 0x0, 0xc1, 0xb7, 0x63, 0x84, 0x87, 0x1, 0x56, 0x8d, 0xe1, 0xbf, 0x37, 0xad, 0x81, 0x40, 0x13, 0xd, 0x8d, 0xda, 0xf9, 0xb7, 0x7d, 0x55, 0xb5, 0xbf, 0x8d, 0x47, 0xcd, 0xfc, 0xed, 0xb7, 0x85, 0x47, 0xd5, 0xf8, 0x75, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0xef, 0xa0, 0xaf, 0xbf, 0x37, 0xb4, 0x81, 0x40, 0x83, 0x27, 0x44, 0x6c, 0x88, 0x43, 0x41, 0x22, 0x83, 0x27, 0x44, 0x6c, 0x70, 0x0, 0x81, 0x45, 0x1, 0x45, 0x3, 0xc4, 0xc7, 0x0, 0x2, 0xc6, 0xef, 0xf0, 0x9f, 0xee, 0x11, 0xc5, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0xa0, 0xcf, 0xbf, 0xef, 0xa0, 0x8f, 0xbf, 0x93, 0x7, 0x0, 0x0, 0x89, 0xc7, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x0, 0x0, 0x0, 0xb2, 0x47, 0x99, 0xe7, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0xa0, 0xdf, 0x8b, 0x19, 0xc4, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x45, 0x5, 0x61, 0x6f, 0xf0, 0x3f, 0xcf, 0x85, 0x8b, 0x81, 0xcb, 0x62, 0x44, 0xf2, 0x40, 0x13, 0x5, 0x40, 0x6, 0x5, 0x61, 0x6f, 0x30, 0xef, 0x98, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x61, 0xcd, 0x41, 0x11, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x22, 0xc4, 0xaa, 0x84, 0x32, 0x89, 0x13, 0x5, 0x30, 0x10, 0x45, 0xce, 0x37, 0xb7, 0x81, 0x40, 0x2e, 0x86, 0x13, 0x7, 0xc7, 0x43, 0x81, 0x45, 0x81, 0x46, 0x13, 0x5, 0x50, 0x3, 0xef, 0x50, 0x1f, 0xc9, 0x19, 0x45, 0xef, 0x70, 0xaf, 0xd0, 0xaa, 0x85, 0xd, 0xe9, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0xd8, 0x5f, 0xf1, 0x76, 0xfd, 0x16, 0x13, 0x67, 0x17, 0x0, 0xd8, 0xdf, 0xd8, 0x5f, 0x13, 0x67, 0x27, 0x0, 0xd8, 0xdf, 0xd8, 0x5f, 0x75, 0x9b, 0xd8, 0xdf, 0xb7, 0x87, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0xb8, 0x47, 0x75, 0x8f, 0xb8, 0xc7, 0x19, 0x45, 0xef, 0x70, 0x4f, 0xcf, 0x37, 0xb4, 0x81, 0x40, 0x15, 0x66, 0x85, 0x46, 0x13, 0x6, 0x6, 0xe2, 0x85, 0x45, 0x13, 0x5, 0x44, 0x43, 0xef, 0x40, 0xdf, 0xcf, 0x13, 0x5, 0x44, 0x43, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x8d, 0x90, 0x40, 0x13, 0x5, 0x44, 0x43, 0x85, 0x46, 0x6, 0x6, 0x81, 0x45, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x8c, 0x90, 0x40, 0x13, 0x5, 0x44, 0x43, 0x8d, 0x46, 0xa, 0x6, 0x85, 0x45, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x8a, 0x13, 0x5, 0x44, 0x43, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x8a, 0x13, 0x4, 0x44, 0x43, 0x23, 0x20, 0x89, 0x0, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x5, 0xc9, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x84, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x87, 0x22, 0x85, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x88, 0x22, 0x85, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x86, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x15, 0xc5, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x84, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x84, 0x22, 0x85, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x84, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x17, 0x13, 0x7f, 0xff, 0x67, 0x0, 0xa3, 0x82, 0x82, 0x80, 0xd, 0xcd, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x2a, 0x84, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x81, 0x22, 0x85, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x81, 0x22, 0x85, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x81, 0x22, 0x85, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x7f, 0xb2, 0x40, 0x22, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0xb7, 0xa7, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x80, 0x1c, 0xc1, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x43, 0x13, 0x67, 0x27, 0x0, 0x98, 0xc3, 0x82, 0x80, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x38, 0x9c, 0x43, 0xaa, 0x86, 0x41, 0x67, 0x8d, 0x83, 0x8d, 0x8b, 0x91, 0xcb, 0x5, 0x46, 0x21, 0x67, 0x63, 0x87, 0xc7, 0x0, 0x9, 0x46, 0x9, 0x67, 0x63, 0x93, 0xc7, 0x0, 0x11, 0x67, 0x22, 0x7, 0x1, 0x45, 0x63, 0xf0, 0xe6, 0x6, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x38, 0x9c, 0x43, 0x41, 0x67, 0x8d, 0x83, 0x8d, 0x8b, 0x91, 0xcb, 0x5, 0x46, 0x21, 0x67, 0x63, 0x87, 0xc7, 0x0, 0x9, 0x46, 0x9, 0x67, 0x63, 0x93, 0xc7, 0x0, 0x11, 0x67, 0x22, 0x7, 0x1, 0x45, 0x63, 0xfa, 0xe5, 0x2, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x38, 0x9c, 0x43, 0xfd, 0x15, 0x33, 0x85, 0xd5, 0x0, 0x8d, 0x83, 0x8d, 0x8b, 0x41, 0x67, 0x91, 0xcb, 0x85, 0x46, 0x21, 0x67, 0x63, 0x87, 0xd7, 0x0, 0x89, 0x46, 0x9, 0x67, 0x63, 0x93, 0xd7, 0x0, 0x11, 0x67, 0x22, 0x7, 0x33, 0x35, 0xe5, 0x0, 0x82, 0x80, 0xb7, 0x26, 0x0, 0x60, 0x37, 0x27, 0x0, 0x60, 0x81, 0x47, 0x93, 0x86, 0x6, 0x38, 0x13, 0x7, 0xc7, 0x37, 0x13, 0x6, 0x0, 0x10, 0x9c, 0xc2, 0x23, 0x20, 0x7, 0x0, 0x85, 0x7, 0xe3, 0x9c, 0xc7, 0xfe, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x10, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x99, 0x37, 0x27, 0x0, 0x60, 0x13, 0x7, 0x47, 0x38, 0x1c, 0x43, 0xb2, 0x40, 0x9d, 0x9b, 0x93, 0xe7, 0x87, 0x0, 0x1c, 0xc3, 0x41, 0x1, 0x6f, 0xf0, 0xbf, 0xfb, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x38, 0x9c, 0x43, 0x8d, 0x83, 0x8d, 0x8b, 0x81, 0xcf, 0x5, 0x47, 0x63, 0x8e, 0xe7, 0x0, 0x89, 0x46, 0x39, 0x45, 0x63, 0x87, 0xd7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xa0, 0x8f, 0xd7, 0x41, 0x45, 0x33, 0x95, 0xa5, 0x0, 0x82, 0x80, 0x3d, 0x45, 0xe5, 0xbf, 0x1, 0x11, 0x26, 0xca, 0xae, 0x84, 0x56, 0xc2, 0x85, 0x45, 0xaa, 0x8a, 0x26, 0x85, 0x4a, 0xc8, 0x4e, 0xc6, 0x6, 0xce, 0x22, 0xcc, 0x52, 0xc4, 0xb2, 0x89, 0x3a, 0x89, 0xef, 0xf0, 0xdf, 0xed, 0x19, 0xe1, 0xef, 0xa0, 0x6f, 0xd4, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x38, 0x9c, 0x43, 0x2a, 0x8a, 0x41, 0x47, 0x8d, 0x83, 0x8d, 0x8b, 0x91, 0xcb, 0x85, 0x46, 0x3d, 0x47, 0x63, 0x87, 0xd7, 0x0, 0x89, 0x46, 0x39, 0x47, 0x63, 0x83, 0xd7, 0x0, 0x35, 0x47, 0xb7, 0x26, 0x0, 0x60, 0xb7, 0x27, 0x0, 0x60, 0x33, 0xd7, 0xe4, 0x0, 0x1, 0x44, 0x93, 0x86, 0x6, 0x38, 0x93, 0x87, 0xc7, 0x37, 0x85, 0x45, 0x13, 0x5, 0x0, 0x10, 0x80, 0xc2, 0x90, 0x43, 0x13, 0x76, 0x6, 0x20, 0x19, 0xee, 0x5, 0x4, 0xe3, 0x1a, 0xa4, 0xfe, 0x1, 0x4a, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x92, 0x4a, 0x52, 0x85, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0xe3, 0x92, 0xb9, 0xfe, 0x80, 0xc2, 0x90, 0x43, 0x13, 0x76, 0xf6, 0x1f, 0xe3, 0x1c, 0xc7, 0xfc, 0x85, 0x45, 0x56, 0x85, 0xef, 0xf0, 0xdf, 0xf2, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x38, 0x9c, 0x43, 0xb3, 0xf4, 0xa4, 0x2, 0x41, 0x47, 0x8d, 0x83, 0x8d, 0x8b, 0x89, 0xcb, 0x3d, 0x47, 0x63, 0x87, 0x37, 0x1, 0x89, 0x46, 0x39, 0x47, 0x63, 0x83, 0xd7, 0x0, 0x35, 0x47, 0x33, 0x14, 0xe4, 0x0, 0x45, 0x8c, 0xb7, 0x7, 0x0, 0x42, 0x5d, 0x8c, 0x23, 0x20, 0x89, 0x0, 0x79, 0xbf, 0xb7, 0x7, 0x0, 0xbe, 0xae, 0x97, 0x37, 0x7, 0x80, 0x0, 0x1, 0x45, 0x63, 0xf9, 0xe7, 0x0, 0xb7, 0x7, 0x0, 0xbe, 0xfd, 0x17, 0x3e, 0x96, 0xb2, 0x95, 0x33, 0xb5, 0xe5, 0x0, 0x82, 0x80, 0x1, 0x11, 0x85, 0x45, 0x22, 0xcc, 0x26, 0xca, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0xb2, 0x84, 0xbe, 0x8a, 0x6, 0xce, 0x4a, 0xc8, 0x2a, 0x8a, 0xb6, 0x89, 0x3a, 0x84, 0xef, 0xf0, 0x5f, 0xeb, 0xb3, 0xf7, 0xa4, 0x2, 0x99, 0xc3, 0xef, 0xa0, 0x4f, 0xc4, 0xb3, 0xf7, 0xa9, 0x2, 0x2a, 0x89, 0xfd, 0xfb, 0xa2, 0x85, 0x4e, 0x85, 0xef, 0xf0, 0x5f, 0xdc, 0x75, 0xd5, 0x8d, 0x46, 0x22, 0x86, 0xa6, 0x85, 0x52, 0x85, 0xef, 0xf0, 0xdf, 0xf9, 0x79, 0xdd, 0x7d, 0x14, 0x4a, 0x94, 0x33, 0x54, 0x24, 0x3, 0x52, 0x85, 0xa2, 0x85, 0xef, 0xf0, 0xbf, 0xe7, 0xb7, 0x27, 0x0, 0x60, 0x23, 0xa0, 0xaa, 0x0, 0x93, 0x87, 0x47, 0x38, 0x9c, 0x43, 0x41, 0x47, 0x8d, 0x83, 0x8d, 0x8b, 0x91, 0xcb, 0x85, 0x46, 0x3d, 0x47, 0x63, 0x87, 0xd7, 0x0, 0x89, 0x46, 0x39, 0x47, 0x63, 0x83, 0xd7, 0x0, 0x35, 0x47, 0xb3, 0xd6, 0xe9, 0x0, 0x37, 0x26, 0x0, 0x60, 0xb7, 0x5, 0x80, 0x0, 0x37, 0x15, 0xb, 0x60, 0x37, 0x28, 0x0, 0x60, 0xb7, 0x28, 0x0, 0x60, 0x36, 0x94, 0x13, 0x6, 0x46, 0x38, 0x5, 0x4e, 0x89, 0x4e, 0xfd, 0x15, 0x13, 0x5, 0x5, 0x80, 0x13, 0x8, 0x8, 0x38, 0x93, 0x88, 0xc8, 0x37, 0x63, 0x9b, 0x86, 0x0, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x1c, 0x42, 0x41, 0x47, 0x8d, 0x83, 0x8d, 0x8b, 0x81, 0xcb, 0x3d, 0x47, 0x63, 0x86, 0xc7, 0x1, 0x39, 0x47, 0x63, 0x83, 0xd7, 0x1, 0x35, 0x47, 0x33, 0xf3, 0xb4, 0x0, 0x33, 0x53, 0xe3, 0x0, 0x58, 0x59, 0x23, 0x20, 0x68, 0x0, 0xca, 0x94, 0x49, 0x83, 0x1d, 0x8b, 0x93, 0x57, 0x27, 0x0, 0x13, 0x5f, 0x17, 0x0, 0xb3, 0xc7, 0xe7, 0x1, 0xb9, 0x8f, 0x85, 0x8b, 0xaa, 0x7, 0xd5, 0x8f, 0x93, 0xe7, 0x7, 0x20, 0x23, 0xa0, 0xf8, 0x0, 0x85, 0x6, 0x45, 0xb7, 0x1, 0x11, 0x26, 0xca, 0xae, 0x84, 0x85, 0x45, 0x22, 0xcc, 0x4e, 0xc6, 0x6, 0xce, 0x4a, 0xc8, 0xaa, 0x89, 0x32, 0x84, 0xef, 0xf0, 0x9f, 0xda, 0xb3, 0xf7, 0xa4, 0x2, 0x99, 0xc3, 0xef, 0xa0, 0x8f, 0xb3, 0x2a, 0x89, 0x8d, 0x46, 0x22, 0x86, 0xa6, 0x85, 0x4e, 0x85, 0xef, 0xf0, 0x1f, 0xea, 0x7d, 0xd5, 0x93, 0x7, 0xf4, 0xff, 0xca, 0x97, 0xb3, 0xd7, 0x27, 0x3, 0x37, 0x26, 0x0, 0x60, 0xb7, 0x5, 0x80, 0x0, 0x37, 0x25, 0x0, 0x60, 0x37, 0x28, 0x0, 0x60, 0x13, 0x6, 0x46, 0x38, 0x85, 0x48, 0x9, 0x43, 0xfd, 0x15, 0x13, 0x5, 0x5, 0x38, 0x13, 0x8, 0xc8, 0x37, 0x81, 0xeb, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x18, 0x42, 0xc1, 0x46, 0xd, 0x83, 0xd, 0x8b, 0x1, 0xcb, 0xbd, 0x46, 0x63, 0x6, 0x17, 0x1, 0xb9, 0x46, 0x63, 0x3, 0x67, 0x0, 0xb5, 0x46, 0x33, 0xf7, 0xb4, 0x0, 0x33, 0x57, 0xd7, 0x0, 0x18, 0xc1, 0x23, 0x20, 0x8, 0x0, 0xca, 0x94, 0xfd, 0x17, 0xd9, 0xb7, 0x37, 0x87, 0xc, 0x60, 0x13, 0x7, 0x47, 0x13, 0x14, 0x43, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x6c, 0x85, 0x8a, 0xa3, 0x80, 0xd7, 0x0, 0x14, 0x43, 0x85, 0x8a, 0x23, 0x80, 0xd7, 0x0, 0x14, 0x43, 0x18, 0x43, 0x85, 0x8a, 0x5, 0x8b, 0xa3, 0x82, 0xd7, 0x0, 0x23, 0x82, 0xe7, 0x0, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x6, 0xc6, 0x13, 0x4, 0xc4, 0x6c, 0xef, 0xf0, 0x1f, 0xfc, 0x3, 0x45, 0x4, 0x0, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x6b, 0xb7, 0x87, 0xc, 0x60, 0xd8, 0x43, 0xb2, 0x40, 0xd8, 0xc3, 0xd8, 0x43, 0x75, 0x9b, 0xd8, 0xc3, 0xd8, 0x43, 0x79, 0x9b, 0xd8, 0xc3, 0xd8, 0x43, 0xd8, 0xc3, 0x93, 0x7, 0x10, 0x10, 0x23, 0x11, 0xf4, 0x0, 0x23, 0x13, 0xf4, 0x0, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x85, 0x47, 0x63, 0x6, 0xf5, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xa0, 0x6f, 0xa3, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x6c, 0x63, 0x95, 0xa5, 0x0, 0x23, 0x81, 0xc7, 0x0, 0x82, 0x80, 0x81, 0xe5, 0xa3, 0x81, 0xc7, 0x0, 0x82, 0x80, 0x9, 0x47, 0xe3, 0x9e, 0xe5, 0xfc, 0x23, 0x81, 0xc7, 0x0, 0xc5, 0xbf, 0x85, 0x47, 0x63, 0x6, 0xf5, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xa0, 0x2f, 0xa0, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x6c, 0x63, 0x95, 0xa5, 0x0, 0x3, 0xc5, 0x27, 0x0, 0x82, 0x80, 0x81, 0xe5, 0x3, 0xc5, 0x37, 0x0, 0x82, 0x80, 0x9, 0x47, 0xe3, 0x9e, 0xe5, 0xfc, 0x3, 0xc5, 0x27, 0x0, 0x83, 0xc7, 0x37, 0x0, 0x7d, 0x8d, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x85, 0x47, 0x63, 0x4, 0xf5, 0x0, 0xef, 0xa0, 0x8f, 0x9c, 0x2e, 0xc6, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x60, 0xb2, 0x45, 0xf2, 0x40, 0x1, 0x46, 0x5, 0x45, 0x5, 0x61, 0x6f, 0xf0, 0x1f, 0xf7, 0x1, 0x11, 0x6, 0xce, 0x85, 0x47, 0x63, 0x4, 0xf5, 0x0, 0xef, 0xa0, 0x2f, 0x9a, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xc5, 0xc7, 0x6c, 0x2e, 0xc6, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x5d, 0xb2, 0x45, 0xf2, 0x40, 0x5, 0x46, 0x5, 0x45, 0x5, 0x61, 0x6f, 0xf0, 0x3f, 0xf4, 0x1, 0x11, 0x6, 0xce, 0x85, 0x47, 0x63, 0x4, 0xf5, 0x0, 0xef, 0xa0, 0x4f, 0x97, 0x2e, 0xc6, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x5b, 0xb2, 0x45, 0xf2, 0x40, 0x1, 0x46, 0x5, 0x45, 0x5, 0x61, 0x6f, 0xf0, 0xdf, 0xf1, 0x1, 0x11, 0x6, 0xce, 0x85, 0x47, 0x63, 0x4, 0xf5, 0x0, 0xef, 0xa0, 0xef, 0x94, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xc5, 0xc7, 0x6c, 0x2e, 0xc6, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x58, 0xb2, 0x45, 0xf2, 0x40, 0x5, 0x46, 0x5, 0x45, 0x5, 0x61, 0x6f, 0xf0, 0xff, 0xee, 0x6f, 0xf0, 0xff, 0xf1, 0xb7, 0x6, 0x0, 0xbe, 0xaa, 0x96, 0x37, 0x6, 0x80, 0x0, 0x63, 0xf6, 0xc6, 0x2, 0xb7, 0x6, 0x0, 0xbe, 0xfd, 0x16, 0xb3, 0x87, 0xd5, 0x0, 0xaa, 0x97, 0x1, 0x47, 0x63, 0xfe, 0xc7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x4f, 0xb2, 0x40, 0x5, 0x47, 0x3a, 0x85, 0x41, 0x1, 0x82, 0x80, 0x1, 0x47, 0x3a, 0x85, 0x82, 0x80, 0x85, 0x47, 0x63, 0xf6, 0xa7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xa0, 0xf, 0x8e, 0x63, 0x16, 0xf5, 0x0, 0x17, 0x3, 0x7f, 0xff, 0x67, 0x0, 0xe3, 0x4a, 0x1, 0x45, 0x82, 0x80, 0xaa, 0x87, 0xcc, 0x57, 0x8, 0x59, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x63, 0x54, 0xb5, 0x0, 0xef, 0xa0, 0xcf, 0x8b, 0x33, 0x4, 0xb5, 0x0, 0x7d, 0x14, 0x33, 0x44, 0xb4, 0x2, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x3d, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x4e, 0xce, 0x83, 0xa9, 0x5, 0x2, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x52, 0xcc, 0x56, 0xca, 0x5a, 0xc8, 0x5e, 0xc6, 0x62, 0xc4, 0x95, 0x47, 0x63, 0xcb, 0x37, 0x13, 0xdc, 0x4d, 0x3, 0x2c, 0x5, 0x0, 0x2a, 0x84, 0xae, 0x84, 0x91, 0xc7, 0x5, 0x47, 0x63, 0x8c, 0xe7, 0xa, 0xef, 0xa0, 0xaf, 0x86, 0x37, 0x39, 0x0, 0x60, 0x13, 0x9, 0x9, 0x0, 0x83, 0xcb, 0x84, 0x0, 0x3, 0xcb, 0x44, 0x0, 0x83, 0xaa, 0x84, 0x2, 0x3, 0xaa, 0xc4, 0x2, 0x13, 0x6, 0x0, 0x3, 0x81, 0x45, 0x22, 0x85, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x29, 0x26, 0x85, 0x23, 0x22, 0x24, 0x1, 0xa3, 0x6, 0x74, 0x1, 0x23, 0x7, 0x64, 0x1, 0x23, 0x20, 0x84, 0x1, 0x23, 0x24, 0x34, 0x1, 0x23, 0x2a, 0x54, 0x1, 0x23, 0x24, 0x44, 0x3, 0x3, 0xa9, 0x44, 0x1, 0xef, 0xf0, 0x1f, 0xf5, 0xb7, 0x67, 0x62, 0x2, 0x93, 0x87, 0x7, 0xa0, 0x33, 0xd5, 0xa7, 0x2, 0x9d, 0x56, 0x33, 0xc7, 0xa7, 0x2, 0x81, 0x47, 0x63, 0x46, 0xd9, 0x0, 0x5, 0x9, 0xe5, 0x47, 0xb3, 0x47, 0xf9, 0x2, 0x26, 0x85, 0xb3, 0xc7, 0xe7, 0x2, 0x23, 0x6, 0xf4, 0x0, 0xdc, 0x4c, 0xb9, 0xef, 0xef, 0xf0, 0xff, 0xf1, 0x13, 0x77, 0xf5, 0xf, 0x85, 0x47, 0x63, 0x1a, 0xf7, 0x2, 0xb7, 0x7, 0x0, 0x80, 0x1c, 0xc8, 0x83, 0xc7, 0x44, 0x2, 0xbd, 0xeb, 0x1, 0x45, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x22, 0x4c, 0x45, 0x61, 0x82, 0x80, 0x37, 0x19, 0x8, 0x60, 0x13, 0x9, 0x9, 0x0, 0x81, 0xbf, 0x13, 0x75, 0xf5, 0xf, 0x7d, 0x15, 0x89, 0x47, 0xb3, 0x47, 0xf5, 0x2, 0x13, 0x17, 0x5, 0x1, 0xb7, 0x6, 0xff, 0x0, 0x75, 0x8f, 0xa2, 0x7, 0xd9, 0x8f, 0xc9, 0x8f, 0x65, 0xbf, 0xef, 0xf0, 0x3f, 0xec, 0x93, 0x77, 0xf5, 0xf, 0x5, 0x47, 0xe3, 0x84, 0xe7, 0xfa, 0x85, 0x83, 0x13, 0x75, 0xf5, 0xf, 0xfd, 0x17, 0x11, 0x67, 0x7d, 0x15, 0x13, 0x7, 0x7, 0xfc, 0x9a, 0x7, 0xf9, 0x8f, 0xb7, 0xf6, 0xf, 0x0, 0x13, 0x17, 0xc5, 0x0, 0x75, 0x8f, 0x49, 0x8f, 0xd9, 0x8f, 0x59, 0xb7, 0x1c, 0x4c, 0x93, 0xe7, 0x37, 0x0, 0x1c, 0xcc, 0x83, 0xc7, 0x44, 0x3, 0x23, 0x6, 0xf4, 0x2, 0xb5, 0xbf, 0x13, 0x5, 0x20, 0x10, 0xa5, 0xbf, 0x48, 0x41, 0xb7, 0x37, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x1d, 0x8d, 0x33, 0x35, 0xa0, 0x0, 0x82, 0x80, 0x48, 0x41, 0xb7, 0x37, 0x0, 0x60, 0x93, 0x87, 0x7, 0x0, 0x1d, 0x8d, 0x33, 0x35, 0xa0, 0x0, 0x82, 0x80, 0x79, 0x71, 0x52, 0xcc, 0x13, 0xa, 0x36, 0x0, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x56, 0xca, 0x5a, 0xc8, 0x6, 0xd6, 0x4e, 0xce, 0xaa, 0x8a, 0xae, 0x84, 0x32, 0x84, 0x13, 0x5a, 0x2a, 0x0, 0x1, 0x49, 0x11, 0x4b, 0x63, 0x4c, 0x49, 0x1, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0x45, 0x61, 0x82, 0x80, 0x2, 0xc6, 0xa2, 0x89, 0x63, 0x73, 0x8b, 0x0, 0x91, 0x49, 0xa6, 0x85, 0x4e, 0x86, 0x68, 0x0, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x12, 0x93, 0x7, 0x49, 0x1, 0x32, 0x47, 0x8a, 0x7, 0xd6, 0x97, 0x98, 0xc7, 0x33, 0x4, 0x34, 0x41, 0xce, 0x94, 0x5, 0x9, 0x75, 0xbf, 0x79, 0x71, 0x33, 0xe7, 0xc5, 0x0, 0x4a, 0xd0, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0xd, 0x8b, 0x2a, 0x89, 0xae, 0x87, 0x5, 0xe3, 0x22, 0x54, 0xb2, 0x50, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x93, 0x5, 0x85, 0x5, 0x3e, 0x85, 0x45, 0x61, 0x17, 0x3, 0x7f, 0xff, 0x67, 0x0, 0xe3, 0xd, 0x13, 0xa, 0x36, 0x0, 0x32, 0x84, 0x13, 0x5a, 0x2a, 0x0, 0x81, 0x44, 0x91, 0x4a, 0x63, 0x1b, 0x9a, 0x0, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x45, 0x61, 0x82, 0x80, 0xa2, 0x89, 0x63, 0xf3, 0x8a, 0x0, 0x91, 0x49, 0x13, 0x87, 0x44, 0x1, 0xa, 0x7, 0x4a, 0x97, 0x18, 0x47, 0x3e, 0x85, 0x4e, 0x86, 0x6c, 0x0, 0x3a, 0xc6, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x9, 0xb3, 0x7, 0x35, 0x1, 0x33, 0x4, 0x34, 0x41, 0x85, 0x4, 0x7d, 0xbf, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x0, 0x3, 0xa7, 0x7, 0x11, 0xdc, 0x4f, 0x85, 0x46, 0x41, 0x83, 0xd, 0x8b, 0x63, 0x16, 0xd7, 0x2, 0xa1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x11, 0x47, 0x63, 0x8c, 0xe7, 0x2, 0x15, 0x47, 0x13, 0x5, 0x0, 0x5, 0x63, 0x8b, 0xe7, 0x2, 0xd, 0x47, 0x13, 0x5, 0x80, 0x7, 0x63, 0x86, 0xe7, 0x2, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x90, 0xff, 0xde, 0x93, 0xf7, 0xf7, 0xf, 0x63, 0x8d, 0xd7, 0x0, 0x9, 0x47, 0x29, 0x45, 0x63, 0x8a, 0xe7, 0x0, 0xe5, 0xf7, 0x13, 0x5, 0x80, 0x2, 0x82, 0x80, 0x13, 0x5, 0x0, 0x6, 0x82, 0x80, 0x51, 0x45, 0x82, 0x80, 0x58, 0x41, 0x1c, 0x43, 0xfd, 0xff, 0x82, 0x80, 0x1, 0x11, 0x13, 0x18, 0x7, 0x1, 0x6, 0xce, 0x5c, 0x41, 0x13, 0x58, 0x8, 0x1, 0x63, 0x5b, 0x7, 0x2, 0x8d, 0x48, 0x11, 0x43, 0x63, 0x13, 0x18, 0x1, 0x9, 0x43, 0xe1, 0x58, 0xb3, 0xc8, 0x68, 0x2, 0x37, 0x3, 0x1, 0xff, 0x7d, 0x13, 0x21, 0x6, 0xc6, 0x96, 0x83, 0xa8, 0xc7, 0x3, 0x93, 0xf8, 0xd8, 0xff, 0x23, 0xae, 0x17, 0x3, 0x83, 0xa8, 0xc7, 0x2, 0xb3, 0xf8, 0x68, 0x0, 0x23, 0xa6, 0x17, 0x3, 0x93, 0x98, 0x5, 0x1, 0x13, 0x3, 0xf0, 0xf, 0x93, 0xd8, 0x8, 0x1, 0x63, 0x73, 0xb3, 0xe, 0x8c, 0x4f, 0x37, 0x3, 0x0, 0x80, 0xb3, 0xe5, 0x65, 0x0, 0x8c, 0xcf, 0x2, 0xc2, 0x92, 0x45, 0x41, 0x73, 0xb3, 0xf5, 0x65, 0x0, 0xb3, 0xe5, 0x15, 0x1, 0x2e, 0xc2, 0x92, 0x45, 0xb7, 0x8, 0x0, 0xf0, 0xb3, 0xe5, 0x15, 0x1, 0x2e, 0xc2, 0x92, 0x45, 0x8c, 0xd3, 0xcc, 0x4f, 0x93, 0x8, 0xf6, 0xff, 0xea, 0x8, 0x9a, 0x5, 0x99, 0x81, 0xb3, 0xe5, 0x15, 0x1, 0xcc, 0xcf, 0x8c, 0x4f, 0xb7, 0x8, 0x0, 0xc0, 0x33, 0x36, 0xc0, 0x0, 0xfd, 0x18, 0xb3, 0xf5, 0x15, 0x1, 0x7a, 0x6, 0x4d, 0x8e, 0x90, 0xcf, 0x3, 0x46, 0xc5, 0x0, 0x37, 0x5, 0x0, 0xe0, 0x7d, 0x15, 0xb2, 0x96, 0x90, 0x4f, 0xb3, 0x35, 0xd0, 0x0, 0xf6, 0x5, 0x69, 0x8e, 0x4d, 0x8e, 0x90, 0xcf, 0xd0, 0x4f, 0xfd, 0x16, 0x93, 0xf6, 0xf6, 0x3, 0x13, 0x76, 0x6, 0xfc, 0xd1, 0x8e, 0xd4, 0xcf, 0x94, 0x4f, 0x37, 0x6, 0x0, 0xf0, 0x7d, 0x16, 0xf1, 0x8e, 0x94, 0xcf, 0x94, 0x57, 0x37, 0x6, 0x0, 0xf8, 0x7d, 0x16, 0x93, 0xf6, 0x6, 0xc0, 0x94, 0xd7, 0x94, 0x4f, 0xf1, 0x8e, 0x94, 0xcf, 0xd4, 0x53, 0x37, 0xc6, 0x6f, 0xfe, 0x7d, 0x16, 0x93, 0xf6, 0x6, 0xc0, 0xd4, 0xd3, 0x94, 0x47, 0x36, 0xc6, 0xb2, 0x46, 0xf1, 0x8e, 0x36, 0xc6, 0xb2, 0x46, 0x9, 0x66, 0xd1, 0x8e, 0x36, 0xc6, 0x8d, 0x46, 0x63, 0xe, 0xd8, 0x6, 0x93, 0x16, 0x7, 0x1, 0xc9, 0x82, 0xa1, 0xe6, 0x5, 0x47, 0x63, 0xd, 0xe8, 0x4, 0x9, 0x47, 0x63, 0x8, 0xe8, 0x6, 0x32, 0x47, 0xf9, 0x76, 0xfd, 0x16, 0x75, 0x8f, 0x99, 0xa0, 0x8c, 0x4f, 0x37, 0x3, 0x0, 0x80, 0xb3, 0xe5, 0x65, 0x0, 0x8c, 0xcf, 0x2, 0xc4, 0xa2, 0x45, 0x41, 0x73, 0xb3, 0xf5, 0x65, 0x0, 0xb3, 0xe5, 0x15, 0x1, 0x2e, 0xc4, 0xa2, 0x45, 0xb7, 0x8, 0x0, 0x70, 0x92, 0x5, 0x91, 0x81, 0xb3, 0xe5, 0x15, 0x1, 0x2e, 0xc4, 0xa2, 0x45, 0x29, 0xbf, 0x11, 0x47, 0x63, 0x0, 0xe8, 0x2, 0x15, 0x47, 0x63, 0x18, 0xe8, 0x2, 0x32, 0x47, 0xb7, 0x6, 0x0, 0x1, 0x55, 0x8f, 0x3a, 0xc6, 0x32, 0x47, 0xf2, 0x40, 0x1, 0x45, 0x98, 0xc7, 0x5, 0x61, 0x82, 0x80, 0x32, 0x47, 0xb7, 0x6, 0x10, 0x0, 0xed, 0xb7, 0x32, 0x47, 0xb7, 0x6, 0x80, 0x0, 0xcd, 0xb7, 0x32, 0x47, 0x91, 0x66, 0xf1, 0xbf, 0xef, 0x90, 0x3f, 0xc2, 0x1, 0x11, 0x26, 0xca, 0xae, 0x84, 0x9c, 0x48, 0x22, 0xcc, 0x4a, 0xc8, 0x6, 0xce, 0x4e, 0xc6, 0x52, 0xc4, 0x89, 0x8b, 0x40, 0x41, 0x58, 0x49, 0x83, 0xd5, 0x45, 0x1, 0x3, 0xca, 0x64, 0x1, 0x2a, 0x89, 0x91, 0xc3, 0x98, 0x4c, 0x83, 0x27, 0x9, 0x0, 0x3, 0xc6, 0x34, 0x0, 0xd2, 0x86, 0xdc, 0x5f, 0x4a, 0x85, 0x82, 0x97, 0xdc, 0x40, 0x5c, 0xc0, 0x83, 0xc9, 0x24, 0x0, 0x63, 0x95, 0x9, 0x2, 0x1c, 0x4c, 0xb7, 0x6, 0x0, 0xe0, 0x33, 0x37, 0x40, 0x1, 0xfd, 0x16, 0x76, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0x1c, 0xcc, 0x5c, 0x4c, 0x7d, 0x1a, 0x13, 0x7a, 0xfa, 0x3, 0x93, 0xf7, 0x7, 0xfc, 0xb3, 0xe7, 0x47, 0x1, 0x5c, 0xcc, 0x3, 0xc6, 0x14, 0x0, 0x1c, 0x4c, 0xb7, 0x6, 0x0, 0xf8, 0x33, 0x37, 0xc0, 0x0, 0xfd, 0x16, 0x6e, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0x1c, 0xcc, 0x81, 0x47, 0x11, 0xc6, 0x93, 0x17, 0x36, 0x0, 0xfd, 0x17, 0x93, 0xf7, 0xf7, 0x3f, 0x58, 0x50, 0x22, 0x85, 0x13, 0x77, 0x7, 0xc0, 0xd9, 0x8f, 0x5c, 0xd0, 0x8c, 0x44, 0xef, 0xf0, 0x3f, 0xc6, 0x1c, 0x4c, 0xb7, 0x6, 0x0, 0xf0, 0x33, 0x37, 0x30, 0x1, 0xfd, 0x16, 0x72, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0x1c, 0xcc, 0x1, 0x47, 0x63, 0x86, 0x9, 0x0, 0x8e, 0x9, 0xfd, 0x19, 0x13, 0xf7, 0xf9, 0x3f, 0x1c, 0x54, 0x93, 0xf7, 0x7, 0xc0, 0xd9, 0x8f, 0x1c, 0xd4, 0x9c, 0x48, 0x37, 0x7, 0x6, 0x0, 0xa1, 0x8b, 0x99, 0xe3, 0x37, 0x7, 0x4, 0x0, 0x1c, 0x40, 0x4a, 0x85, 0xd9, 0x8f, 0x1c, 0xc0, 0x83, 0x27, 0x9, 0x0, 0xbc, 0x43, 0x82, 0x97, 0x3, 0xc6, 0x24, 0x0, 0x9, 0xc6, 0xcc, 0x44, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0xc7, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x40, 0x41, 0x26, 0xca, 0x6, 0xce, 0x1c, 0x4c, 0xb6, 0x84, 0x13, 0x97, 0x17, 0x0, 0x63, 0x53, 0x7, 0x0, 0x5c, 0x4c, 0x50, 0xc0, 0x18, 0x4c, 0x93, 0x97, 0x34, 0x0, 0x37, 0x6, 0x0, 0xf0, 0xb3, 0x36, 0xf0, 0x0, 0x7d, 0x16, 0xf2, 0x6, 0x71, 0x8f, 0x55, 0x8f, 0x18, 0xcc, 0x1, 0x47, 0x81, 0xc7, 0xfd, 0x17, 0x13, 0xf7, 0xf7, 0x3f, 0x2e, 0xc6, 0x1c, 0x54, 0x93, 0xf7, 0x7, 0xc0, 0xd9, 0x8f, 0x1c, 0xd4, 0x1c, 0x40, 0x37, 0x7, 0x4, 0x0, 0xd9, 0x8f, 0x1c, 0xc0, 0x1c, 0x41, 0xbc, 0x43, 0x82, 0x97, 0xb2, 0x45, 0x89, 0xc4, 0x26, 0x86, 0x22, 0x85, 0xef, 0xf0, 0xff, 0xbf, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x54, 0x41, 0x37, 0x6, 0x40, 0x0, 0x98, 0x42, 0x51, 0x8f, 0x98, 0xc2, 0x18, 0x4d, 0x5, 0x8b, 0x1, 0xe7, 0x1c, 0x41, 0xbc, 0x43, 0x82, 0x87, 0x82, 0x80, 0x5c, 0x41, 0x37, 0x6, 0x0, 0x5c, 0xd8, 0x4f, 0x1a, 0x7, 0x19, 0x83, 0x51, 0x8f, 0xd8, 0xcf, 0x98, 0x4f, 0x37, 0x6, 0x0, 0x40, 0x51, 0x8f, 0x37, 0x6, 0x0, 0x1, 0x98, 0xcf, 0x13, 0x7, 0xf6, 0xff, 0xf9, 0x8d, 0xcc, 0xc3, 0x23, 0xa4, 0x7, 0x0, 0x98, 0x43, 0x51, 0x8f, 0x98, 0xc3, 0x1c, 0x4d, 0x85, 0x8b, 0x81, 0xe7, 0x1c, 0x41, 0xbc, 0x43, 0x82, 0x87, 0x82, 0x80, 0x5c, 0x41, 0x37, 0x6, 0x0, 0x5c, 0xa2, 0x5, 0xd8, 0x4f, 0xa1, 0x81, 0x1a, 0x7, 0x19, 0x83, 0x51, 0x8f, 0xd8, 0xcf, 0x98, 0x4f, 0x37, 0x6, 0x0, 0x40, 0x51, 0x8f, 0x98, 0xcf, 0xcc, 0xc3, 0x98, 0x43, 0x37, 0x6, 0x80, 0x0, 0x51, 0x8f, 0x98, 0xc3, 0x1c, 0x4d, 0x85, 0x8b, 0x81, 0xe7, 0x1c, 0x41, 0xbc, 0x43, 0x82, 0x87, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x40, 0x41, 0x26, 0xc2, 0x6, 0xc6, 0x58, 0x4c, 0xb2, 0x87, 0x36, 0x86, 0x1a, 0x7, 0xb7, 0x6, 0x0, 0x5c, 0x19, 0x83, 0x55, 0x8f, 0x58, 0xcc, 0x18, 0x4c, 0xb7, 0x6, 0x0, 0x40, 0xa2, 0x7, 0x55, 0x8f, 0x18, 0xcc, 0xa1, 0x83, 0x13, 0x17, 0x86, 0x1, 0xd9, 0x8f, 0x5c, 0xc0, 0x1c, 0x4c, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xf9, 0x8f, 0xaa, 0x84, 0x1c, 0xcc, 0x22, 0x85, 0xef, 0xf0, 0x3f, 0xab, 0x1c, 0x40, 0x37, 0x7, 0x0, 0x2, 0xb2, 0x40, 0xd9, 0x8f, 0x1c, 0xc0, 0x9c, 0x40, 0x22, 0x44, 0x26, 0x85, 0xbc, 0x43, 0x92, 0x44, 0x41, 0x1, 0x82, 0x87, 0x5c, 0x41, 0x41, 0x11, 0x6, 0xc6, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x20, 0x99, 0xe1, 0xb7, 0x6, 0x0, 0x40, 0x55, 0x8f, 0x98, 0xc3, 0x1c, 0x41, 0xbc, 0x43, 0x82, 0x97, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x5c, 0x41, 0x88, 0x43, 0x83, 0xa7, 0x47, 0xa, 0x3d, 0x89, 0x85, 0x8b, 0x86, 0x7, 0x13, 0x35, 0x15, 0x0, 0x5d, 0x8d, 0x82, 0x80, 0x1, 0x11, 0x21, 0x46, 0x71, 0x5, 0x22, 0xcc, 0x6, 0xce, 0x2e, 0x84, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0xbc, 0xb7, 0x37, 0x0, 0x60, 0x93, 0x87, 0x7, 0x8, 0x98, 0x53, 0x3, 0x46, 0x54, 0x0, 0xc1, 0x66, 0x3a, 0xc6, 0x32, 0x47, 0xfd, 0x16, 0xc1, 0x75, 0x75, 0x8e, 0x6d, 0x8f, 0x51, 0x8f, 0x3a, 0xc6, 0x32, 0x47, 0x3, 0x46, 0x64, 0x0, 0xb7, 0x5, 0xc0, 0xff, 0x98, 0xd3, 0xd8, 0x53, 0x42, 0x6, 0xfd, 0x15, 0x3a, 0xc4, 0x22, 0x47, 0x1, 0x45, 0x75, 0x8f, 0x51, 0x8f, 0x3a, 0xc4, 0x22, 0x47, 0xd8, 0xd3, 0xd0, 0x4f, 0x18, 0x40, 0x6d, 0x8e, 0xd0, 0xcf, 0xd0, 0x4f, 0x42, 0x7, 0x41, 0x83, 0x32, 0xc2, 0x12, 0x46, 0xb7, 0x5, 0xc0, 0xff, 0x75, 0x8f, 0x93, 0x85, 0xf5, 0x3, 0x6d, 0x8e, 0x1a, 0x7, 0x51, 0x8f, 0x3a, 0xc2, 0x12, 0x47, 0x3, 0x46, 0x44, 0x0, 0xf2, 0x40, 0xd8, 0xcf, 0x98, 0x53, 0x42, 0x6, 0x62, 0x44, 0x3a, 0xc0, 0x2, 0x47, 0x75, 0x8f, 0x51, 0x8f, 0x3a, 0xc0, 0x2, 0x47, 0x98, 0xd3, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x37, 0x34, 0x0, 0x60, 0x13, 0x7, 0x4, 0x0, 0x13, 0x7, 0x7, 0x8, 0x1c, 0x4f, 0xb7, 0x6, 0x5, 0x0, 0x6, 0xce, 0x3e, 0xc6, 0xb2, 0x47, 0x26, 0xca, 0x13, 0x4, 0x4, 0x0, 0xc2, 0x7, 0xc1, 0x83, 0xd5, 0x8f, 0x3e, 0xc6, 0xb2, 0x47, 0x1c, 0xcf, 0x5c, 0x4f, 0x93, 0xe7, 0x47, 0x0, 0x5c, 0xcf, 0x5c, 0x4f, 0x93, 0xe7, 0x87, 0x0, 0x5c, 0xcf, 0x5c, 0x4f, 0x14, 0x55, 0x93, 0xe7, 0x7, 0x2, 0x5c, 0xcf, 0x58, 0x53, 0x83, 0x47, 0xc5, 0x2, 0x19, 0x83, 0x5, 0x8b, 0xb3, 0x87, 0xd7, 0x2, 0x93, 0x6, 0x0, 0x8, 0x11, 0xe3, 0x91, 0x46, 0x3, 0x27, 0x44, 0xa, 0x11, 0x46, 0x19, 0x83, 0x5, 0x8b, 0xb3, 0xd6, 0xd7, 0x2, 0x19, 0xc3, 0x13, 0x6, 0x0, 0x8, 0x58, 0x44, 0xb3, 0xf7, 0xc7, 0x2, 0xb3, 0x37, 0xf0, 0x0, 0xb6, 0x97, 0xfd, 0x76, 0x8d, 0x6, 0x93, 0xf7, 0xf7, 0x3f, 0x75, 0x8f, 0x8a, 0x7, 0xd9, 0x8f, 0x5c, 0xc4, 0x13, 0x4, 0x4, 0x8, 0x5c, 0x50, 0x93, 0xe7, 0x7, 0x2, 0x5c, 0xd0, 0x5c, 0x50, 0x93, 0xe7, 0x7, 0x4, 0x5c, 0xd0, 0xef, 0xf0, 0x3f, 0xa1, 0xaa, 0x84, 0xef, 0xf0, 0xdf, 0xa0, 0xf9, 0x46, 0xb3, 0x7, 0xd5, 0x2, 0x13, 0x7, 0x80, 0x3e, 0x37, 0x6, 0x0, 0x82, 0x7d, 0x16, 0xb3, 0x84, 0xd4, 0x2, 0xb3, 0xe7, 0xe7, 0x2, 0xb3, 0xc4, 0xe4, 0x2, 0x37, 0x27, 0x0, 0x60, 0x13, 0x7, 0x7, 0x0, 0x14, 0x4b, 0xb3, 0x37, 0xf0, 0x0, 0xf1, 0x8e, 0xa6, 0x97, 0x93, 0xf7, 0xf7, 0x3, 0xe6, 0x7, 0xd5, 0x8f, 0x1c, 0xcb, 0x5c, 0x50, 0x85, 0x66, 0x93, 0x86, 0x6, 0xf8, 0x93, 0xe7, 0x7, 0x8, 0x5c, 0xd0, 0x7c, 0x4b, 0xd5, 0x8f, 0x7c, 0xcb, 0x5c, 0x4c, 0x37, 0x7, 0x0, 0xa, 0x9e, 0x7, 0x9d, 0x83, 0xd9, 0x8f, 0x5c, 0xcc, 0x5c, 0x4c, 0x37, 0x7, 0x0, 0x1, 0xd9, 0x8f, 0x5c, 0xcc, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0xb7, 0x37, 0x0, 0x60, 0x93, 0x87, 0x7, 0x8, 0xd8, 0x4f, 0xb7, 0x6, 0x0, 0xa, 0x13, 0x67, 0x7, 0x1, 0xd8, 0xcf, 0xd8, 0x4f, 0x1e, 0x7, 0x1d, 0x83, 0x55, 0x8f, 0xd8, 0xcf, 0xd8, 0x4f, 0xb7, 0x6, 0x80, 0x0, 0x55, 0x8f, 0xd8, 0xcf, 0x82, 0x80, 0xb7, 0x37, 0x0, 0x60, 0x93, 0x87, 0x7, 0x8, 0x98, 0x4f, 0x41, 0x11, 0xb7, 0x6, 0x5, 0x0, 0x3a, 0xc6, 0x32, 0x47, 0x42, 0x7, 0x41, 0x83, 0x55, 0x8f, 0x3a, 0xc6, 0x32, 0x47, 0xb7, 0x6, 0x0, 0xa, 0x98, 0xcf, 0xd8, 0x4f, 0x6d, 0x9b, 0xd8, 0xcf, 0xd8, 0x4f, 0x5d, 0x9b, 0xd8, 0xcf, 0xd8, 0x4f, 0x13, 0x77, 0xf7, 0xfd, 0xd8, 0xcf, 0xd8, 0x4f, 0x1e, 0x7, 0x1d, 0x83, 0x55, 0x8f, 0xd8, 0xcf, 0xd8, 0x4f, 0xb7, 0x6, 0x0, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0xd8, 0xcf, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x37, 0x0, 0x60, 0x93, 0x87, 0x7, 0x8, 0xd8, 0x4f, 0xb7, 0x6, 0x0, 0xa, 0x3d, 0x9b, 0xd8, 0xcf, 0xd8, 0x4f, 0x1e, 0x7, 0x1d, 0x83, 0x55, 0x8f, 0xd8, 0xcf, 0xd8, 0x4f, 0xb7, 0x6, 0x80, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0xd8, 0xcf, 0x82, 0x80, 0x5c, 0x41, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0x23, 0xac, 0x7, 0x0, 0x23, 0xa4, 0x7, 0x0, 0xd4, 0x5b, 0x18, 0x45, 0x2a, 0x84, 0xf9, 0x9a, 0x33, 0x36, 0xe0, 0x0, 0xd1, 0x8e, 0xd4, 0xdb, 0xd4, 0x5b, 0x7d, 0x17, 0x33, 0x37, 0xe0, 0x0, 0xf5, 0x9a, 0x6, 0x7, 0x55, 0x8f, 0xd8, 0xdb, 0x18, 0x49, 0xd8, 0xcb, 0x3, 0x47, 0xe5, 0x0, 0x94, 0x4b, 0x13, 0x6, 0xf7, 0xff, 0x7d, 0x8a, 0x16, 0x6, 0x93, 0xf6, 0xf6, 0xc1, 0xd1, 0x8e, 0x94, 0xcb, 0x94, 0x4f, 0x33, 0x37, 0xe0, 0x0, 0x1a, 0x7, 0x93, 0xf6, 0xf6, 0xfb, 0x55, 0x8f, 0x98, 0xcf, 0x3, 0x47, 0xd5, 0x0, 0x94, 0x4f, 0x33, 0x36, 0xe0, 0x0, 0x1e, 0x6, 0x93, 0xf6, 0xf6, 0xf7, 0xd1, 0x8e, 0x94, 0xcf, 0x94, 0x4b, 0x7d, 0x17, 0x7d, 0x8b, 0x81, 0x9a, 0x55, 0x8f, 0x98, 0xcb, 0x4, 0x4d, 0x93, 0xf7, 0x14, 0x0, 0x91, 0xcf, 0xef, 0xf0, 0xdf, 0xdb, 0x89, 0x88, 0x22, 0x85, 0x81, 0xcc, 0xef, 0xf0, 0xdf, 0xec, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0xef, 0xf0, 0x7f, 0xee, 0xdd, 0xb7, 0xef, 0xf0, 0x3f, 0xf3, 0xed, 0xb7, 0x58, 0x41, 0x83, 0x27, 0xc7, 0x9, 0x93, 0xe7, 0x17, 0x0, 0x23, 0x2e, 0xf7, 0x8, 0x82, 0x80, 0x58, 0x41, 0x83, 0x27, 0xc7, 0x9, 0x93, 0xe7, 0x27, 0x0, 0x23, 0x2e, 0xf7, 0x8, 0x82, 0x80, 0x37, 0x57, 0x9, 0x60, 0x1c, 0x43, 0x93, 0xe7, 0x97, 0x0, 0x1c, 0xc3, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x34, 0x98, 0x43, 0x79, 0x9b, 0x98, 0xc3, 0x82, 0x80, 0x37, 0x57, 0x9, 0x60, 0x1c, 0x43, 0xf9, 0x9b, 0x1c, 0xc3, 0x82, 0x80, 0xb7, 0x26, 0x0, 0x60, 0x93, 0x86, 0x6, 0x34, 0x3, 0xa8, 0x6, 0x0, 0x13, 0x57, 0x56, 0x0, 0x41, 0x11, 0x13, 0x78, 0xc8, 0xff, 0xd, 0x8b, 0x33, 0x67, 0x7, 0x1, 0x6, 0xc6, 0x98, 0xc2, 0xb7, 0x26, 0x0, 0x60, 0x93, 0x86, 0x86, 0x34, 0x98, 0x42, 0x37, 0x8, 0x0, 0xfc, 0x33, 0x77, 0x7, 0x1, 0x13, 0x18, 0x65, 0x0, 0x13, 0x58, 0x68, 0x0, 0x33, 0x67, 0x7, 0x1, 0x13, 0x75, 0xf5, 0x3, 0x98, 0xc2, 0xb3, 0x7, 0xa6, 0x0, 0x13, 0x7, 0x0, 0x4, 0x63, 0x74, 0xf7, 0x0, 0xef, 0x90, 0xcf, 0xdd, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x7, 0x30, 0x3e, 0x95, 0x97, 0x0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x82, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0xc7, 0x34, 0x98, 0x43, 0xb2, 0x40, 0x13, 0x67, 0x17, 0x0, 0x98, 0xc3, 0x41, 0x1, 0x82, 0x80, 0x37, 0x27, 0x0, 0x60, 0x13, 0x7, 0x87, 0x35, 0x85, 0x46, 0x1c, 0x43, 0x8d, 0x8b, 0xe3, 0x8e, 0xd7, 0xfe, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x7, 0x35, 0x98, 0x43, 0x8d, 0x46, 0x13, 0x67, 0x17, 0x0, 0x98, 0xc3, 0x37, 0x27, 0x0, 0x60, 0x13, 0x7, 0x87, 0x35, 0x1c, 0x43, 0x8d, 0x8b, 0xe3, 0x9e, 0xd7, 0xfe, 0x82, 0x80, 0xb7, 0x27, 0x0, 0x60, 0x93, 0x87, 0x47, 0x35, 0x98, 0x43, 0x13, 0x67, 0x17, 0x0, 0x98, 0xc3, 0x82, 0x80, 0x33, 0x75, 0xb5, 0x2, 0x13, 0x35, 0x15, 0x0, 0x82, 0x80, 0x14, 0x41, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0x63, 0x8c, 0xf6, 0x2, 0x37, 0x7, 0x0, 0x60, 0xb7, 0x67, 0x9, 0x60, 0x13, 0x7, 0x7, 0x0, 0x93, 0x87, 0x7, 0x0, 0x63, 0x90, 0xe6, 0x2, 0xdc, 0x43, 0xd1, 0x83, 0x8d, 0x8b, 0x89, 0x46, 0x21, 0x47, 0x63, 0x87, 0xd7, 0x0, 0x8d, 0x46, 0x25, 0x47, 0x63, 0x83, 0xd7, 0x0, 0x11, 0x47, 0x98, 0xc1, 0x82, 0x80, 0x9c, 0x4b, 0xd5, 0xb7, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0x9c, 0x57, 0x9, 0x47, 0xe3, 0xd6, 0x7, 0xfe, 0x29, 0x47, 0xdd, 0xb7, 0x18, 0x41, 0x41, 0x11, 0x5c, 0x4b, 0x3e, 0xc0, 0xb7, 0x17, 0xb, 0x60, 0x93, 0x87, 0x7, 0x40, 0x63, 0x19, 0xf7, 0x2, 0x83, 0x27, 0x87, 0x8, 0x3e, 0xc2, 0x92, 0x47, 0x2, 0x47, 0x82, 0x46, 0xb1, 0x83, 0x52, 0x7, 0xd1, 0x82, 0x93, 0xf7, 0xf7, 0xf, 0xbd, 0x8a, 0x41, 0x83, 0x85, 0x7, 0x55, 0x8f, 0xb3, 0x7, 0xf7, 0x2, 0x12, 0x6, 0x33, 0x56, 0xf6, 0x2, 0x90, 0xc1, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x6, 0x0, 0x60, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x86, 0x6, 0x0, 0x93, 0x87, 0x7, 0x0, 0x63, 0x16, 0xd7, 0x0, 0xdc, 0x43, 0x3e, 0xc4, 0xa2, 0x47, 0xc1, 0xb7, 0x9c, 0x4b, 0x3e, 0xc6, 0xb2, 0x47, 0x65, 0xbf, 0x18, 0x41, 0x8d, 0x89, 0x92, 0x5, 0x1c, 0x53, 0x93, 0x6, 0x7, 0x8, 0x93, 0xf7, 0xf7, 0xfc, 0xcd, 0x8f, 0x1c, 0xd3, 0x9c, 0x4e, 0x93, 0xe7, 0x17, 0x0, 0x9c, 0xce, 0x83, 0x27, 0x87, 0x9, 0x85, 0x8b, 0xed, 0xff, 0x82, 0x80, 0x1c, 0x41, 0x9c, 0x53, 0x91, 0x83, 0x8d, 0x8b, 0x9c, 0xc1, 0x82, 0x80, 0x18, 0x41, 0x8d, 0x89, 0x8a, 0x5, 0x1c, 0x53, 0x93, 0x6, 0x7, 0x8, 0xcd, 0x9b, 0xcd, 0x8f, 0x1c, 0xd3, 0x9c, 0x4e, 0x93, 0xe7, 0x17, 0x0, 0x9c, 0xce, 0x83, 0x27, 0x87, 0x9, 0x85, 0x8b, 0xed, 0xff, 0x82, 0x80, 0x1c, 0x41, 0x9c, 0x53, 0x89, 0x83, 0x8d, 0x8b, 0x9c, 0xc1, 0x82, 0x80, 0x1c, 0x41, 0x99, 0xc5, 0x98, 0x53, 0x93, 0xf6, 0x15, 0x0, 0x79, 0x9b, 0x55, 0x8f, 0x98, 0xd3, 0x98, 0x53, 0x89, 0x89, 0x93, 0x86, 0x7, 0x8, 0x75, 0x9b, 0x4d, 0x8f, 0x98, 0xd3, 0x98, 0x4e, 0x13, 0x67, 0x17, 0x0, 0x98, 0xce, 0x3, 0xa7, 0x87, 0x9, 0x5, 0x8b, 0x6d, 0xff, 0x82, 0x80, 0x14, 0x41, 0x81, 0x47, 0x98, 0x52, 0x5, 0x83, 0x5, 0x8b, 0x9, 0xc7, 0x9c, 0x52, 0x85, 0x8b, 0x93, 0xe7, 0x27, 0x0, 0x9c, 0xc1, 0x82, 0x80, 0x54, 0x41, 0x41, 0x77, 0xd2, 0x5, 0xdc, 0x42, 0x3d, 0x7, 0xc1, 0x81, 0xf9, 0x8f, 0xcd, 0x8f, 0xdc, 0xc2, 0x82, 0x80, 0x58, 0x41, 0x85, 0x89, 0x8e, 0x5, 0x1c, 0x4f, 0xdd, 0x9b, 0xcd, 0x8f, 0x1c, 0xcf, 0x82, 0x80, 0x5c, 0x41, 0xd8, 0x43, 0x79, 0x9b, 0xd8, 0xc3, 0xd8, 0x43, 0x75, 0x9b, 0xd8, 0xc3, 0xd8, 0x43, 0x5d, 0x9b, 0xd8, 0xc3, 0xd8, 0x43, 0x6d, 0x9b, 0xd8, 0xc3, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x95, 0x47, 0x63, 0xd4, 0xb7, 0x0, 0xef, 0x90, 0xef, 0xba, 0x8d, 0x47, 0x63, 0x8a, 0xf5, 0x4, 0x63, 0xc1, 0xb7, 0x2, 0x85, 0x47, 0x63, 0x8b, 0xf5, 0x2, 0x89, 0x47, 0x63, 0x8d, 0xf5, 0x2, 0xfd, 0xf1, 0x58, 0x41, 0x5c, 0x43, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xc3, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x11, 0x47, 0x5c, 0x41, 0x63, 0x80, 0xe5, 0x4, 0xd8, 0x43, 0x13, 0x67, 0x87, 0x0, 0xd8, 0xc3, 0xd8, 0x4b, 0x71, 0x9b, 0x13, 0x67, 0x27, 0x0, 0x25, 0xa8, 0x58, 0x41, 0x5c, 0x43, 0x93, 0xe7, 0x27, 0x0, 0xd9, 0xbf, 0x58, 0x41, 0x5c, 0x43, 0x93, 0xe7, 0x47, 0x0, 0xf1, 0xb7, 0x58, 0x41, 0x5c, 0x43, 0x93, 0xe7, 0x87, 0x0, 0x5c, 0xc3, 0x5c, 0x4b, 0xf1, 0x9b, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xcb, 0x65, 0xbf, 0xd8, 0x43, 0x13, 0x67, 0x87, 0x0, 0xd8, 0xc3, 0xd8, 0x4b, 0x71, 0x9b, 0xd8, 0xcb, 0x65, 0xb7, 0x5c, 0x41, 0x98, 0x47, 0x79, 0x9b, 0x98, 0xc7, 0x98, 0x47, 0x75, 0x9b, 0x98, 0xc7, 0x98, 0x47, 0x5d, 0x9b, 0x98, 0xc7, 0x98, 0x47, 0x6d, 0x9b, 0x98, 0xc7, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x95, 0x47, 0x63, 0xd4, 0xb7, 0x0, 0xef, 0x90, 0x8f, 0xb0, 0x8d, 0x47, 0x63, 0x8a, 0xf5, 0x4, 0x63, 0xc1, 0xb7, 0x2, 0x85, 0x47, 0x63, 0x8b, 0xf5, 0x2, 0x89, 0x47, 0x63, 0x8d, 0xf5, 0x2, 0xfd, 0xf1, 0x58, 0x41, 0x1c, 0x47, 0x93, 0xe7, 0x17, 0x0, 0x1c, 0xc7, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x11, 0x47, 0x5c, 0x41, 0x63, 0x80, 0xe5, 0x4, 0x98, 0x47, 0x13, 0x67, 0x87, 0x0, 0x98, 0xc7, 0xd8, 0x4b, 0x71, 0x9b, 0x13, 0x67, 0x27, 0x0, 0x25, 0xa8, 0x58, 0x41, 0x1c, 0x47, 0x93, 0xe7, 0x27, 0x0, 0xd9, 0xbf, 0x58, 0x41, 0x1c, 0x47, 0x93, 0xe7, 0x47, 0x0, 0xf1, 0xb7, 0x58, 0x41, 0x1c, 0x47, 0x93, 0xe7, 0x87, 0x0, 0x1c, 0xc7, 0x5c, 0x4b, 0xf1, 0x9b, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xcb, 0x65, 0xbf, 0x98, 0x47, 0x13, 0x67, 0x87, 0x0, 0x98, 0xc7, 0xd8, 0x4b, 0x71, 0x9b, 0xd8, 0xcb, 0x65, 0xb7, 0x5c, 0x41, 0xd8, 0x47, 0x79, 0x9b, 0xd8, 0xc7, 0xd8, 0x47, 0x75, 0x9b, 0xd8, 0xc7, 0xd8, 0x47, 0x5d, 0x9b, 0xd8, 0xc7, 0xd8, 0x47, 0x6d, 0x9b, 0xd8, 0xc7, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x95, 0x47, 0x63, 0xd4, 0xb7, 0x0, 0xef, 0x90, 0x2f, 0xa6, 0x8d, 0x47, 0x63, 0x8a, 0xf5, 0x4, 0x63, 0xc1, 0xb7, 0x2, 0x85, 0x47, 0x63, 0x8b, 0xf5, 0x2, 0x89, 0x47, 0x63, 0x8d, 0xf5, 0x2, 0xfd, 0xf1, 0x58, 0x41, 0x5c, 0x47, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xc7, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x11, 0x47, 0x5c, 0x41, 0x63, 0x80, 0xe5, 0x4, 0xd8, 0x47, 0x13, 0x67, 0x87, 0x0, 0xd8, 0xc7, 0xd8, 0x4b, 0x71, 0x9b, 0x13, 0x67, 0x27, 0x0, 0x25, 0xa8, 0x58, 0x41, 0x5c, 0x47, 0x93, 0xe7, 0x27, 0x0, 0xd9, 0xbf, 0x58, 0x41, 0x5c, 0x47, 0x93, 0xe7, 0x47, 0x0, 0xf1, 0xb7, 0x58, 0x41, 0x5c, 0x47, 0x93, 0xe7, 0x87, 0x0, 0x5c, 0xc7, 0x5c, 0x4b, 0xf1, 0x9b, 0x93, 0xe7, 0x17, 0x0, 0x5c, 0xcb, 0x65, 0xbf, 0xd8, 0x47, 0x13, 0x67, 0x87, 0x0, 0xd8, 0xc7, 0xd8, 0x4b, 0x71, 0x9b, 0xd8, 0xcb, 0x65, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0xaa, 0x84, 0x2e, 0x84, 0xef, 0x10, 0x5f, 0xe5, 0x1, 0xed, 0xd8, 0x40, 0x5, 0x88, 0x1c, 0x4f, 0xf9, 0x9b, 0xc1, 0x8f, 0x1c, 0xcf, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0xb7, 0x81, 0x40, 0x83, 0x27, 0x47, 0x6d, 0x19, 0xc8, 0x93, 0x86, 0x17, 0x0, 0x23, 0x2a, 0xd7, 0x6c, 0x85, 0xe3, 0xd8, 0x40, 0x1c, 0x4f, 0x93, 0xe7, 0x17, 0x0, 0xe1, 0xbf, 0xfd, 0x17, 0x23, 0x2a, 0xf7, 0x6c, 0x99, 0xe7, 0xd8, 0x40, 0x1c, 0x4f, 0xf9, 0x9b, 0x1c, 0xcf, 0xef, 0x90, 0xcf, 0x98, 0x83, 0x27, 0x47, 0x6d, 0xe3, 0x40, 0xf0, 0xfc, 0xd5, 0xbf, 0x98, 0x41, 0x1c, 0x41, 0xd8, 0xc7, 0xd8, 0x41, 0x98, 0xcb, 0x98, 0x45, 0xd8, 0xcb, 0x82, 0x80, 0x79, 0x71, 0x33, 0xe7, 0xc5, 0x0, 0x4a, 0xd0, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0xd, 0x8b, 0x2a, 0x89, 0xae, 0x87, 0x5, 0xe3, 0x22, 0x54, 0xb2, 0x50, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x93, 0x5, 0x85, 0x9, 0x3e, 0x85, 0x45, 0x61, 0x17, 0xf3, 0x7e, 0xff, 0x67, 0x0, 0x63, 0x39, 0x13, 0xa, 0x36, 0x0, 0x32, 0x84, 0x13, 0x5a, 0x2a, 0x0, 0x81, 0x44, 0x91, 0x4a, 0x63, 0x1b, 0x9a, 0x0, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x45, 0x61, 0x82, 0x80, 0xa2, 0x89, 0x63, 0xf3, 0x8a, 0x0, 0x91, 0x49, 0x13, 0x87, 0x44, 0x2, 0xa, 0x7, 0x4a, 0x97, 0x18, 0x47, 0x3e, 0x85, 0x4e, 0x86, 0x6c, 0x0, 0x3a, 0xc6, 0x97, 0xf0, 0x7e, 0xff, 0xe7, 0x80, 0x0, 0x35, 0xb3, 0x7, 0x35, 0x1, 0x33, 0x4, 0x34, 0x41, 0x85, 0x4, 0x7d, 0xbf, 0x58, 0x41, 0x1c, 0x43, 0x93, 0x96, 0x77, 0x0, 0xe3, 0xcd, 0x6, 0xfe, 0x82, 0x80, 0x5c, 0x41, 0xb7, 0x5, 0x10, 0x0, 0x37, 0x8, 0x40, 0xf8, 0x23, 0xa8, 0x7, 0x0, 0x23, 0xa4, 0x7, 0x0, 0x13, 0x87, 0x7, 0x8, 0x34, 0x57, 0x7d, 0x18, 0x93, 0xe6, 0x16, 0x0, 0x34, 0xd7, 0x34, 0x57, 0x93, 0xe6, 0x26, 0x0, 0x34, 0xd7, 0x34, 0x57, 0x93, 0xe6, 0x46, 0x0, 0x34, 0xd7, 0x23, 0xa8, 0x7, 0x2, 0x98, 0x5b, 0xb7, 0x6, 0x8, 0x0, 0x4d, 0x8f, 0x98, 0xdb, 0x98, 0x5b, 0x55, 0x8f, 0x98, 0xdb, 0x98, 0x5b, 0xb7, 0x6, 0xfc, 0xff, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xdb, 0x94, 0x53, 0x18, 0x45, 0xf9, 0x9a, 0x33, 0x36, 0xe0, 0x0, 0xd1, 0x8e, 0x94, 0xd3, 0x94, 0x53, 0x7d, 0x17, 0x33, 0x37, 0xe0, 0x0, 0xf5, 0x9a, 0x6, 0x7, 0x55, 0x8f, 0x98, 0xd3, 0x18, 0x49, 0xd8, 0xc7, 0x3, 0x47, 0xe5, 0x0, 0xd4, 0x4b, 0x13, 0x6, 0xf7, 0xff, 0x7d, 0x8a, 0x5a, 0x6, 0xb3, 0xf6, 0x6, 0x1, 0xd1, 0x8e, 0xd4, 0xcb, 0x94, 0x4b, 0x33, 0x37, 0xe0, 0x0, 0x1a, 0x7, 0x93, 0xf6, 0xf6, 0xfb, 0x55, 0x8f, 0x98, 0xcb, 0x3, 0x47, 0xd5, 0x0, 0x94, 0x4b, 0x1, 0x45, 0x33, 0x36, 0xe0, 0x0, 0x1e, 0x6, 0x93, 0xf6, 0xf6, 0xf7, 0xd1, 0x8e, 0x94, 0xcb, 0xd4, 0x4b, 0x7d, 0x17, 0x37, 0x6, 0xc2, 0xff, 0x7d, 0x16, 0x7d, 0x8b, 0xf1, 0x8e, 0x46, 0x7, 0x55, 0x8f, 0xd8, 0xcb, 0x98, 0x47, 0x4d, 0x8f, 0x98, 0xc7, 0x82, 0x80, 0x5c, 0x41, 0x79, 0x71, 0x6, 0xd6, 0x83, 0xa8, 0x87, 0x0, 0x13, 0x5e, 0xf7, 0x1, 0xe, 0xe, 0x93, 0xf8, 0x78, 0xff, 0xb3, 0xe8, 0xc8, 0x1, 0x23, 0xa4, 0x17, 0x1, 0x83, 0xa8, 0x87, 0x0, 0x37, 0xe, 0x4, 0x0, 0x41, 0x63, 0xb3, 0xe8, 0xc8, 0x1, 0x23, 0xa4, 0x17, 0x1, 0x83, 0xa8, 0x87, 0x0, 0x37, 0xe, 0x8, 0x0, 0x7d, 0x13, 0xb3, 0xe8, 0xc8, 0x1, 0x23, 0xa4, 0x17, 0x1, 0x93, 0x8, 0xf0, 0xf, 0x33, 0x78, 0x67, 0x0, 0xc1, 0x7e, 0x63, 0xf7, 0xb8, 0xe, 0x83, 0xa8, 0x7, 0x1, 0x37, 0xe, 0x0, 0x80, 0xb3, 0xe8, 0xc8, 0x1, 0x23, 0xa8, 0x17, 0x1, 0x2, 0xc6, 0x93, 0xf8, 0xf5, 0xf, 0xb2, 0x45, 0xb3, 0xf8, 0x68, 0x0, 0xb3, 0xf5, 0xd5, 0x1, 0xb3, 0xe5, 0x15, 0x1, 0x2e, 0xc6, 0xb2, 0x45, 0xb7, 0x8, 0x0, 0xf0, 0xb3, 0xe5, 0x15, 0x1, 0x2e, 0xc6, 0xb2, 0x45, 0x8c, 0xcf, 0xcc, 0x4b, 0x93, 0x8, 0xf6, 0xff, 0xee, 0x8, 0x96, 0x5, 0x95, 0x81, 0xb3, 0xe5, 0x15, 0x1, 0xcc, 0xcb, 0x8c, 0x4b, 0xb7, 0x8, 0x0, 0xc0, 0x33, 0x36, 0xc0, 0x0, 0xfd, 0x18, 0xb3, 0xf5, 0x15, 0x1, 0x7a, 0x6, 0x4d, 0x8e, 0x90, 0xcb, 0x3, 0x46, 0xc5, 0x0, 0x37, 0x5, 0x0, 0xe0, 0x7d, 0x15, 0xb2, 0x96, 0x90, 0x4b, 0xb3, 0x35, 0xd0, 0x0, 0xf6, 0x5, 0x69, 0x8e, 0x4d, 0x8e, 0x90, 0xcb, 0xd0, 0x4b, 0xfd, 0x16, 0x93, 0xf6, 0xf6, 0xf, 0x32, 0xce, 0x72, 0x46, 0x13, 0x76, 0x6, 0xf0, 0xd1, 0x8e, 0x36, 0xce, 0xf2, 0x46, 0x37, 0x6, 0x0, 0xf0, 0x7d, 0x16, 0xd4, 0xcb, 0x94, 0x4b, 0xf1, 0x8e, 0x94, 0xcb, 0x94, 0x4b, 0x37, 0x6, 0x0, 0xf8, 0x7d, 0x16, 0xf1, 0x8e, 0x94, 0xcb, 0x94, 0x47, 0x51, 0x76, 0x13, 0x6, 0xf6, 0xc9, 0x36, 0xca, 0x94, 0x4b, 0x36, 0xcc, 0xd2, 0x46, 0xf1, 0x8e, 0x36, 0xca, 0xe2, 0x46, 0x75, 0x76, 0x7d, 0x16, 0xf1, 0x8e, 0x36, 0xcc, 0x8d, 0x46, 0x63, 0x5, 0xd8, 0x8, 0x93, 0x16, 0x7, 0x1, 0xc9, 0x82, 0xa9, 0xea, 0x9, 0x47, 0x63, 0x9, 0xe8, 0x8, 0x52, 0x47, 0xb2, 0x50, 0x1, 0x45, 0x98, 0xc7, 0x62, 0x47, 0x98, 0xcb, 0x45, 0x61, 0x82, 0x80, 0x83, 0xa8, 0x7, 0x1, 0x37, 0xe, 0x0, 0x80, 0xc2, 0x5, 0xb3, 0xe8, 0xc8, 0x1, 0x23, 0xa8, 0x17, 0x1, 0x2, 0xc8, 0xc2, 0x48, 0xc1, 0x81, 0xb3, 0xf5, 0x65, 0x0, 0xb3, 0xf8, 0xd8, 0x1, 0xb3, 0xe5, 0xb8, 0x0, 0x2e, 0xc8, 0xc2, 0x45, 0xb7, 0x8, 0x0, 0x70, 0x92, 0x5, 0x91, 0x81, 0xb3, 0xe5, 0x15, 0x1, 0x2e, 0xc8, 0xc2, 0x45, 0x9, 0xbf, 0x11, 0x47, 0x63, 0x2, 0xe8, 0x2, 0x15, 0x47, 0x63, 0x12, 0xe8, 0x4, 0x52, 0x47, 0xa1, 0x66, 0x55, 0x8f, 0x3a, 0xca, 0x52, 0x47, 0x13, 0x67, 0x7, 0x4, 0x3a, 0xca, 0x62, 0x47, 0x89, 0x66, 0x55, 0x8f, 0x3a, 0xcc, 0x49, 0xbf, 0x52, 0x47, 0xa1, 0x66, 0x55, 0x8f, 0xfd, 0xb7, 0x52, 0x47, 0x91, 0x66, 0x55, 0x8f, 0x3a, 0xca, 0x52, 0x47, 0x13, 0x67, 0x7, 0x2, 0x3a, 0xca, 0x62, 0x47, 0x85, 0x66, 0xf9, 0xbf, 0x52, 0x47, 0x91, 0x66, 0x55, 0x8f, 0xcd, 0xbf, 0xef, 0x80, 0xdf, 0xe4, 0x39, 0x71, 0x26, 0xda, 0xae, 0x84, 0x9c, 0x48, 0x22, 0xdc, 0x4e, 0xd6, 0x6, 0xde, 0x4a, 0xd8, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0x89, 0x8b, 0x40, 0x41, 0x58, 0x49, 0x83, 0xd5, 0x45, 0x1, 0x3, 0xc9, 0x64, 0x1, 0xaa, 0x89, 0x91, 0xc3, 0x98, 0x4c, 0x83, 0xa7, 0x9, 0x0, 0x3, 0xc6, 0x34, 0x0, 0xca, 0x86, 0xdc, 0x5f, 0x4e, 0x85, 0x82, 0x97, 0x3, 0xc6, 0x34, 0x0, 0x93, 0x6, 0x0, 0x2, 0xdc, 0x40, 0x1, 0x47, 0x63, 0x5, 0xd6, 0x0, 0x7d, 0x57, 0x33, 0x57, 0xc7, 0x0, 0x93, 0x6, 0x0, 0x2, 0x91, 0x8e, 0xb3, 0x97, 0xd7, 0x0, 0xd9, 0x8f, 0x5c, 0xc0, 0x3, 0xca, 0x24, 0x0, 0x63, 0x19, 0xa, 0x2, 0x1c, 0x48, 0xb7, 0x6, 0x0, 0xe0, 0x33, 0x37, 0x20, 0x1, 0xfd, 0x16, 0x76, 0x7, 0xf5, 0x8f, 0xd9, 0x8f, 0x1c, 0xc8, 0x5c, 0x48, 0x7d, 0x19, 0x13, 0x79, 0xf9, 0xf, 0x3e, 0xc4, 0xa2, 0x47, 0x93, 0xf7, 0x7, 0xf0, 0xb3, 0xe7, 0x27, 0x1, 0x3e, 0xc4, 0xa2, 0x47, 0x5c, 0xc8, 0x3, 0xc9, 0x14, 0x0, 0x18, 0x48, 0x37, 0x6, 0x0, 0xf8, 0xb3, 0x36, 0x20, 0x1, 0x7d, 0x16, 0xee, 0x6, 0x71, 0x8f, 0x55, 0x8f, 0x18, 0xc8, 0x93, 0x17, 0x39, 0x0, 0x63, 0xb, 0x9, 0x0, 0x58, 0x4c, 0xfd, 0x17, 0xba, 0x7, 0xb7, 0x6, 0xfc, 0xff, 0xb9, 0x83, 0x75, 0x8f, 0xd9, 0x8f, 0x5c, 0xcc, 0x3, 0xac, 0x84, 0x0, 0x93, 0xb, 0x39, 0x0, 0x93, 0xdb, 0x2b, 0x0, 0x81, 0x4a, 0x91, 0x4c, 0x63, 0xc2, 0x7a, 0x9, 0x18, 0x48, 0x37, 0x6, 0x0, 0xf0, 0xb3, 0x36, 0x40, 0x1, 0x7d, 0x16, 0xf2, 0x6, 0x71, 0x8f, 0x55, 0x8f, 0x18, 0xc8, 0x93, 0x17, 0x3a, 0x0, 0x63, 0xb, 0xa, 0x0, 0x58, 0x4c, 0xfd, 0x17, 0xba, 0x7, 0xb7, 0x6, 0xfc, 0xff, 0xb9, 0x83, 0x75, 0x8f, 0xd9, 0x8f, 0x5c, 0xcc, 0x1c, 0x40, 0x37, 0x7, 0x80, 0x0, 0xd9, 0x8f, 0x1c, 0xc0, 0x1c, 0x40, 0x13, 0x97, 0x87, 0x0, 0xe3, 0x4d, 0x7, 0xfe, 0x1c, 0x40, 0x37, 0x7, 0x0, 0x1, 0x4e, 0x85, 0xd9, 0x8f, 0x1c, 0xc0, 0x83, 0xa7, 0x9, 0x0, 0xbc, 0x43, 0x82, 0x97, 0x3, 0xc6, 0x24, 0x0, 0x9, 0xc6, 0xcc, 0x44, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0xb9, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x1, 0x45, 0x21, 0x61, 0x82, 0x80, 0x2, 0xc6, 0x4a, 0x8b, 0x63, 0xf3, 0x2c, 0x1, 0x11, 0x4b, 0xe2, 0x85, 0x5a, 0x86, 0x68, 0x0, 0x97, 0xf0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0xf3, 0x93, 0x87, 0x4a, 0x2, 0x32, 0x47, 0x8a, 0x7, 0xa2, 0x97, 0x98, 0xc7, 0x33, 0x9, 0x69, 0x41, 0x5a, 0x9c, 0x85, 0xa, 0x81, 0xbf, 0x1, 0x11, 0x22, 0xcc, 0x40, 0x41, 0x6, 0xce, 0x32, 0x87, 0x36, 0x86, 0x14, 0x48, 0x81, 0x47, 0x13, 0x98, 0x16, 0x0, 0x63, 0x55, 0x8, 0x0, 0x5c, 0x48, 0xed, 0x83, 0x85, 0x7, 0xe1, 0x9b, 0x13, 0x8, 0x0, 0x2, 0x81, 0x46, 0x63, 0x85, 0x7, 0x1, 0xfd, 0x56, 0xb3, 0xd6, 0xf6, 0x0, 0x13, 0x8, 0x0, 0x2, 0xb3, 0x7, 0xf8, 0x40, 0x33, 0x17, 0xf7, 0x0, 0x55, 0x8f, 0x58, 0xc0, 0x18, 0x48, 0x93, 0x17, 0x36, 0x0, 0x37, 0x8, 0x0, 0xf0, 0xb3, 0x36, 0xf0, 0x0, 0x7d, 0x18, 0xf2, 0x6, 0x33, 0x77, 0x7, 0x1, 0x55, 0x8f, 0x18, 0xc8, 0x91, 0xcb, 0x58, 0x4c, 0xfd, 0x17, 0xba, 0x7, 0xb7, 0x6, 0xfc, 0xff, 0xb9, 0x83, 0x75, 0x8f, 0xd9, 0x8f, 0x5c, 0xcc, 0x1c, 0x40, 0x37, 0x7, 0x80, 0x0, 0xd9, 0x8f, 0x1c, 0xc0, 0x1c, 0x40, 0x13, 0x97, 0x87, 0x0, 0xe3, 0x4d, 0x7, 0xfe, 0x1c, 0x40, 0x37, 0x7, 0x0, 0x1, 0x32, 0xc6, 0xd9, 0x8f, 0x1c, 0xc0, 0x1c, 0x41, 0x2e, 0xc4, 0xbc, 0x43, 0x82, 0x97, 0x32, 0x46, 0xa2, 0x45, 0x1, 0xc6, 0x22, 0x85, 0xef, 0xf0, 0xff, 0xaa, 0xf2, 0x40, 0x62, 0x44, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x5, 0x45, 0x82, 0x80, 0x5, 0x45, 0x82, 0x80, 0x5c, 0x41, 0x88, 0x43, 0x61, 0x81, 0x5, 0x89, 0x13, 0x45, 0x15, 0x0, 0x82, 0x80, 0x1c, 0x41, 0x37, 0x6, 0x0, 0x80, 0x93, 0x86, 0x7, 0x8, 0xd8, 0x42, 0x51, 0x8f, 0xd8, 0xc2, 0xd8, 0x4f, 0xb7, 0x6, 0x0, 0x20, 0x55, 0x8f, 0xd8, 0xcf, 0x82, 0x80, 0x1c, 0x41, 0xb7, 0x6, 0x0, 0xe0, 0xfd, 0x16, 0xd8, 0x4f, 0x75, 0x8f, 0xd8, 0xcf, 0x93, 0x87, 0x7, 0x8, 0xd8, 0x43, 0x6, 0x7, 0x5, 0x83, 0xd8, 0xc3, 0x82, 0x80, 0x18, 0x41, 0xb7, 0x6, 0x0, 0x20, 0x3c, 0x4b, 0xd5, 0x8f, 0x3c, 0xcb, 0x82, 0x80, 0x14, 0x41, 0x37, 0x7, 0x0, 0xe0, 0x7d, 0x17, 0xbc, 0x4a, 0xf9, 0x8f, 0xbc, 0xca, 0x82, 0x80, 0x18, 0x41, 0xb7, 0x6, 0x0, 0x40, 0x5c, 0x4f, 0xd5, 0x8f, 0x5c, 0xcf, 0x82, 0x80, 0x14, 0x41, 0x37, 0x7, 0x0, 0xc0, 0x7d, 0x17, 0xdc, 0x4e, 0xf9, 0x8f, 0xdc, 0xce, 0x82, 0x80, 0xb7, 0xa7, 0x9, 0x60, 0x18, 0x41, 0x54, 0x41, 0x93, 0x87, 0x47, 0x8c, 0x85, 0xc5, 0x1, 0xcf, 0xb7, 0x47, 0xb, 0x60, 0x5, 0x46, 0x93, 0x87, 0x47, 0x8c, 0x63, 0x16, 0xc7, 0x0, 0xb7, 0x97, 0x9, 0x60, 0x93, 0x87, 0x47, 0xc, 0x90, 0x43, 0x5, 0x47, 0x33, 0x17, 0xd7, 0x0, 0x51, 0x8f, 0x98, 0xc3, 0x82, 0x80, 0x1, 0xcf, 0xb7, 0x47, 0xb, 0x60, 0x5, 0x46, 0x93, 0x87, 0x47, 0x8c, 0x63, 0x16, 0xc7, 0x0, 0xb7, 0x97, 0x9, 0x60, 0x93, 0x87, 0x47, 0xc, 0x90, 0x43, 0x5, 0x47, 0x33, 0x17, 0xd7, 0x0, 0x13, 0x47, 0xf7, 0xff, 0x71, 0x8f, 0xd9, 0xbf, 0x79, 0x71, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x6, 0xd6, 0x2a, 0x84, 0x81, 0x44, 0x5, 0x49, 0x91, 0x49, 0x26, 0xc6, 0xa2, 0x85, 0x28, 0x0, 0x85, 0x4, 0x4a, 0xc4, 0xef, 0xf0, 0x7f, 0xf8, 0xe3, 0x99, 0x34, 0xff, 0x89, 0x47, 0xa2, 0x85, 0x28, 0x0, 0x3e, 0xc4, 0x2, 0xc6, 0xef, 0xf0, 0x5f, 0xf7, 0xa2, 0x85, 0x28, 0x0, 0x4a, 0xc6, 0xef, 0xf0, 0xbf, 0xf6, 0xa2, 0x85, 0x28, 0x0, 0x2, 0xc4, 0x2, 0xc6, 0xef, 0xf0, 0xff, 0xf5, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0xb7, 0x7, 0x0, 0xb0, 0xaa, 0x97, 0x11, 0x67, 0xb3, 0xb7, 0xe7, 0x0, 0x37, 0x7, 0x80, 0xbf, 0x3a, 0x95, 0x37, 0x7, 0x8, 0x0, 0x33, 0x35, 0xe5, 0x0, 0x5d, 0x8d, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0xb7, 0x7, 0x0, 0x8, 0x73, 0x90, 0x7, 0xbd, 0xb7, 0x7, 0x0, 0x60, 0x85, 0x7, 0x73, 0x90, 0x7, 0xbc, 0x37, 0x7, 0x0, 0xc, 0x73, 0x10, 0x17, 0xbd, 0x37, 0x7, 0x0, 0x20, 0x5, 0x7, 0x73, 0x10, 0x17, 0xbc, 0xb7, 0x6, 0x0, 0x10, 0x73, 0x90, 0x26, 0xbd, 0x73, 0x90, 0x27, 0xbc, 0x37, 0x46, 0x1, 0x10, 0x73, 0x10, 0x36, 0xbd, 0x73, 0x10, 0x37, 0xbc, 0x37, 0x5, 0x20, 0x10, 0x73, 0x10, 0x45, 0xbd, 0x73, 0x90, 0x47, 0xbc, 0xb7, 0x5, 0x22, 0x10, 0x73, 0x90, 0x55, 0xbd, 0x73, 0x10, 0x57, 0xbc, 0x37, 0x8, 0x80, 0x10, 0x73, 0x10, 0x68, 0xbd, 0x73, 0x90, 0x67, 0xbc, 0x37, 0x8, 0xa0, 0x10, 0x73, 0x10, 0x78, 0xbd, 0x73, 0x10, 0x77, 0xbc, 0x37, 0x8, 0x0, 0x14, 0x73, 0x10, 0x88, 0xbd, 0x73, 0x90, 0x87, 0xbc, 0x37, 0x18, 0x0, 0x14, 0x73, 0x10, 0x98, 0xbd, 0x73, 0x10, 0x97, 0xbc, 0x37, 0x8, 0x0, 0x18, 0x73, 0x10, 0xa8, 0xbd, 0x73, 0x90, 0xa7, 0xbc, 0x37, 0x8, 0x4, 0x18, 0x73, 0x10, 0xb8, 0xbd, 0x73, 0x10, 0xb7, 0xbc, 0x37, 0x7, 0x0, 0x40, 0x7d, 0x17, 0x73, 0x10, 0xc7, 0xbd, 0x73, 0x90, 0xc7, 0xbc, 0xb7, 0x7, 0x0, 0xa, 0xfd, 0x17, 0x73, 0x90, 0x7, 0x3b, 0x93, 0x7, 0xf0, 0x9, 0xf3, 0xa7, 0x7, 0x3a, 0x73, 0x90, 0x16, 0x3b, 0xa1, 0x66, 0xf3, 0xa7, 0x6, 0x3a, 0x73, 0x10, 0x26, 0x3b, 0x37, 0x7, 0x8d, 0x0, 0xf3, 0x27, 0x7, 0x3a, 0xb7, 0x27, 0xc, 0x60, 0xf0, 0x5b, 0x93, 0x87, 0x47, 0x7, 0x9, 0x8a, 0x63, 0xe, 0x6, 0x12, 0x9c, 0x43, 0x89, 0x8b, 0x91, 0xeb, 0x97, 0xf0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x37, 0x24, 0xc, 0x60, 0x7c, 0x58, 0x13, 0x4, 0x44, 0x7, 0x89, 0x8b, 0x91, 0xeb, 0x97, 0xe0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x40, 0x89, 0x8b, 0x91, 0xeb, 0x97, 0xe0, 0x7e, 0xff, 0xe7, 0x80, 0xa0, 0x7c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb7, 0x7, 0x21, 0x10, 0xfd, 0x17, 0x73, 0x90, 0x57, 0x3b, 0xa9, 0x67, 0x93, 0x87, 0x7, 0xf0, 0xf3, 0xa7, 0x17, 0x3a, 0x13, 0x8, 0xf0, 0xf, 0xf3, 0x37, 0x28, 0x3a, 0xc1, 0x66, 0x93, 0x86, 0x6, 0xf0, 0xf3, 0xb7, 0x26, 0x3a, 0x37, 0x5, 0xff, 0x0, 0xf3, 0x37, 0x25, 0x3a, 0xb7, 0x7, 0x80, 0x10, 0x73, 0x90, 0x87, 0x3b, 0x93, 0x5, 0x0, 0x8, 0xf3, 0xa7, 0x25, 0x3a, 0x21, 0x66, 0xb7, 0xb7, 0x81, 0x40, 0x7d, 0x16, 0x93, 0x87, 0x87, 0x70, 0xb2, 0x97, 0xb7, 0xe8, 0xff, 0x3f, 0x89, 0x83, 0xb3, 0xf7, 0x17, 0x1, 0x73, 0x90, 0x97, 0x3b, 0x25, 0x67, 0x13, 0x7, 0x7, 0xd0, 0xf3, 0x27, 0x27, 0x3a, 0xb7, 0xc7, 0x81, 0x40, 0x93, 0x87, 0x47, 0x93, 0xb2, 0x97, 0x89, 0x83, 0xb3, 0xf7, 0x17, 0x1, 0x73, 0x90, 0xa7, 0x3b, 0xb7, 0x7, 0x89, 0x0, 0xf3, 0xa7, 0x27, 0x3a, 0xb7, 0x7, 0x0, 0xff, 0xf3, 0xb7, 0x27, 0x3a, 0x73, 0x38, 0x38, 0x3a, 0xf3, 0xb6, 0x36, 0x3a, 0x73, 0x35, 0x35, 0x3a, 0xb7, 0x7, 0x0, 0x14, 0x73, 0x90, 0xb7, 0x3b, 0xb7, 0x6, 0x0, 0x80, 0xf3, 0xa6, 0x26, 0x3a, 0x73, 0x90, 0xc7, 0x3b, 0xf3, 0xa5, 0x35, 0x3a, 0xb7, 0x7, 0x0, 0x50, 0x93, 0x87, 0x7, 0x0, 0x89, 0x87, 0x73, 0x90, 0xd7, 0x3b, 0x73, 0x27, 0x37, 0x3a, 0xb7, 0x17, 0x0, 0x14, 0x73, 0x90, 0xe7, 0x3b, 0xb7, 0x7, 0x8b, 0x0, 0xf3, 0xa7, 0x37, 0x3a, 0xb7, 0x7, 0x2, 0x18, 0xfd, 0x17, 0x73, 0x90, 0xf7, 0x3b, 0xb7, 0x7, 0x0, 0x9b, 0xf3, 0xa7, 0x37, 0x3a, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xc1, 0x67, 0x93, 0x87, 0x7, 0xf0, 0xf3, 0xb7, 0x17, 0x3a, 0xb7, 0x7, 0xff, 0x0, 0xf3, 0xb7, 0x17, 0x3a, 0xb7, 0x7, 0x0, 0xff, 0xf3, 0xb7, 0x17, 0x3a, 0x73, 0x10, 0x55, 0x3b, 0xf3, 0xa6, 0x16, 0x3a, 0xb7, 0x67, 0x81, 0x40, 0x93, 0x87, 0x7, 0xbc, 0x89, 0x87, 0x73, 0x90, 0x67, 0x3b, 0x73, 0x27, 0x17, 0x3a, 0x73, 0x90, 0x75, 0x3b, 0xb7, 0x7, 0x0, 0x8b, 0xf3, 0xa7, 0x17, 0x3a, 0xf5, 0xb5, 0xb7, 0x37, 0xb, 0x60, 0x93, 0x87, 0x7, 0x80, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x1, 0x1, 0x45, 0x55, 0x8f, 0x98, 0xc3, 0x82, 0x80, 0x2e, 0x86, 0xaa, 0x85, 0x95, 0x46, 0x13, 0x85, 0x41, 0x84, 0x6f, 0x0, 0x70, 0x72, 0x13, 0x7, 0xf5, 0xff, 0xa5, 0x46, 0xaa, 0x87, 0x63, 0xea, 0xe6, 0xa, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x32, 0x84, 0x9, 0x46, 0x2e, 0x85, 0x13, 0x7, 0x20, 0x10, 0x63, 0x67, 0xb6, 0x2, 0xd, 0xc4, 0x19, 0x47, 0x63, 0x8b, 0xe7, 0x6, 0x63, 0x66, 0xf7, 0x2, 0x11, 0x47, 0x63, 0x8d, 0xe7, 0x6, 0x15, 0x47, 0x63, 0x8f, 0xe7, 0x6, 0x63, 0x83, 0xc7, 0x4, 0xd, 0x47, 0x63, 0x8e, 0xe7, 0x2, 0xef, 0x20, 0x40, 0x6c, 0x7d, 0x57, 0x29, 0xed, 0xb2, 0x40, 0x22, 0x44, 0x3a, 0x85, 0x41, 0x1, 0x82, 0x80, 0x63, 0x8a, 0xd7, 0x0, 0x29, 0x47, 0x63, 0x86, 0xe7, 0x2, 0x1d, 0x47, 0x63, 0x91, 0xe7, 0x2, 0x85, 0x20, 0xc5, 0xb7, 0xef, 0x20, 0x80, 0x64, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x33, 0x5, 0xf5, 0x2, 0xf9, 0xb7, 0x65, 0x20, 0xe9, 0xb7, 0x1d, 0x22, 0xd9, 0xb7, 0xcd, 0x20, 0xc9, 0xb7, 0xef, 0x20, 0xa0, 0x62, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x33, 0x5, 0xf5, 0x2, 0x5, 0x81, 0x7d, 0xb7, 0x37, 0x25, 0x4e, 0xe, 0x13, 0x5, 0x5, 0xc0, 0x8, 0xc0, 0x1, 0x47, 0x55, 0xb7, 0x37, 0xb5, 0xc4, 0x4, 0x13, 0x5, 0x5, 0x40, 0xcd, 0xbf, 0x37, 0x75, 0x89, 0x9, 0x13, 0x5, 0x5, 0x80, 0xe5, 0xb7, 0x13, 0x7, 0x20, 0x10, 0x3a, 0x85, 0x82, 0x80, 0x5, 0x47, 0x63, 0xc, 0xe5, 0x4, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x9, 0x47, 0xaa, 0x87, 0x63, 0x9, 0xe5, 0x2, 0x1, 0x45, 0x95, 0xe3, 0x37, 0xb4, 0x81, 0x40, 0x93, 0x7, 0x4, 0x44, 0xdc, 0x43, 0x13, 0x4, 0x4, 0x44, 0x89, 0xeb, 0x93, 0x5, 0x40, 0x6, 0x5, 0x45, 0xef, 0x40, 0x3f, 0xe4, 0xef, 0x50, 0x4f, 0xa9, 0x48, 0xc0, 0x48, 0x40, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x93, 0x5, 0x40, 0x6, 0x5, 0x45, 0xef, 0x40, 0x9f, 0xe2, 0xef, 0x50, 0xaf, 0xa7, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0xa2, 0xa7, 0x44, 0xcd, 0xb7, 0x21, 0x65, 0x82, 0x80, 0x85, 0x47, 0x63, 0xb, 0xf5, 0x0, 0x89, 0x47, 0x63, 0xa, 0xf5, 0x0, 0xd, 0xe9, 0xb7, 0x17, 0xb, 0x60, 0xc8, 0x43, 0x6f, 0x50, 0x4f, 0xa5, 0x6f, 0x20, 0xe0, 0x55, 0x41, 0x11, 0x93, 0x5, 0x0, 0x40, 0x7d, 0x55, 0x22, 0xc4, 0x6, 0xc6, 0xef, 0x40, 0xbf, 0xde, 0x2a, 0x84, 0x19, 0xc1, 0xef, 0x30, 0x6f, 0xe0, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0xe1, 0xbf, 0x1, 0x45, 0x82, 0x80, 0x85, 0x47, 0x63, 0xa, 0xf5, 0x2, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x37, 0xb4, 0x81, 0x40, 0x13, 0x4, 0x4, 0x44, 0x19, 0xe1, 0x1c, 0x40, 0x91, 0xeb, 0x89, 0x65, 0x93, 0x85, 0x5, 0x71, 0x11, 0x45, 0xef, 0x40, 0xff, 0xda, 0xef, 0x50, 0xf, 0xa0, 0x8, 0xc0, 0x8, 0x40, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0x5, 0xb, 0x1, 0x13, 0x5, 0x5, 0x76, 0x82, 0x80, 0xb7, 0x7, 0xb, 0x60, 0x83, 0xa7, 0x7, 0x40, 0x89, 0x83, 0x85, 0x8b, 0x99, 0xe3, 0x6f, 0xf0, 0x3f, 0xfb, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x20, 0x60, 0x4f, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0x33, 0x5, 0xf5, 0x2, 0xb2, 0x40, 0x41, 0x1, 0x5, 0x81, 0x82, 0x80, 0x93, 0x97, 0xc5, 0x1, 0x11, 0x81, 0x5d, 0x8d, 0x91, 0x81, 0x82, 0x80, 0x93, 0x57, 0xc5, 0x1, 0x92, 0x5, 0x12, 0x5, 0xdd, 0x8d, 0x82, 0x80, 0x5d, 0x71, 0xb7, 0x7, 0xb, 0x60, 0x86, 0xc6, 0xa2, 0xc4, 0xa6, 0xc2, 0xca, 0xc0, 0x2e, 0xc6, 0x2a, 0xc4, 0x93, 0x87, 0x7, 0x0, 0xd8, 0x47, 0x37, 0x6, 0x0, 0x40, 0x93, 0x6, 0xf6, 0xff, 0xb7, 0x8, 0x0, 0x80, 0x75, 0x8f, 0x33, 0x67, 0x17, 0x1, 0xb7, 0xa6, 0xa, 0x60, 0xd8, 0xc7, 0x93, 0x86, 0x6, 0x80, 0xd8, 0x46, 0x37, 0x8, 0x0, 0x10, 0x13, 0x3, 0xf8, 0xff, 0x33, 0x77, 0x67, 0x0, 0x51, 0x8f, 0xd8, 0xc6, 0x37, 0xf7, 0xa, 0x60, 0x13, 0x7, 0x7, 0x0, 0x14, 0x53, 0x13, 0x54, 0x85, 0x0, 0x37, 0x5, 0x0, 0xf1, 0x7d, 0x15, 0xe9, 0x8e, 0x37, 0x5, 0x0, 0x4, 0xc9, 0x8e, 0x14, 0xd3, 0x14, 0x53, 0x93, 0x87, 0x7, 0x8, 0xb7, 0x4, 0x40, 0x0, 0xb3, 0xf6, 0x66, 0x0, 0xd1, 0x8e, 0x14, 0xd3, 0xf8, 0x4f, 0xfd, 0x14, 0xad, 0x81, 0x33, 0x67, 0x17, 0x1, 0xf8, 0xcf, 0xb8, 0x4b, 0xda, 0x5, 0x9d, 0x46, 0x33, 0x67, 0x7, 0x1, 0xb8, 0xcb, 0xb7, 0x7, 0xb, 0x60, 0x93, 0x87, 0x87, 0x41, 0x98, 0x43, 0x39, 0x46, 0x13, 0x5, 0xd0, 0x6, 0x65, 0x8f, 0xd9, 0x8d, 0x8c, 0xc3, 0xb2, 0x47, 0x1, 0x47, 0x81, 0x45, 0x8d, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0xef, 0xf0, 0xee, 0x9d, 0x37, 0x7, 0xb, 0x60, 0xb2, 0x47, 0x13, 0x7, 0xc7, 0x41, 0x14, 0x43, 0xd5, 0x83, 0xda, 0x7, 0xe5, 0x8e, 0xd5, 0x8f, 0x1c, 0xc3, 0x9d, 0x46, 0x85, 0x47, 0x1d, 0x47, 0x15, 0x46, 0x81, 0x45, 0x13, 0x5, 0xd0, 0x6, 0xef, 0xf0, 0x6e, 0x9b, 0x81, 0x45, 0x85, 0x47, 0x1d, 0x47, 0x9d, 0x46, 0x1d, 0x46, 0x13, 0x5, 0xd0, 0x6, 0xef, 0xf0, 0x4e, 0x9a, 0xef, 0x50, 0x8f, 0xcc, 0xaa, 0x84, 0xef, 0x50, 0x6f, 0xcf, 0x37, 0x6, 0xb, 0x60, 0x14, 0x56, 0x37, 0x7, 0x0, 0x8, 0x7d, 0x17, 0x93, 0x97, 0xb4, 0x1, 0xf9, 0x8e, 0xdd, 0x8e, 0x14, 0xd6, 0x37, 0x6, 0xb, 0x60, 0x74, 0x4e, 0x6e, 0x5, 0xb7, 0x64, 0x9, 0x60, 0xf9, 0x8e, 0xd5, 0x8f, 0xb7, 0x6, 0xb, 0x60, 0x7c, 0xce, 0x93, 0x86, 0xc6, 0x9, 0x9c, 0x42, 0x93, 0x84, 0x4, 0x0, 0x13, 0x74, 0xf4, 0x3f, 0xf9, 0x8f, 0xc9, 0x8f, 0x9c, 0xc2, 0x93, 0x86, 0x4, 0x10, 0x9c, 0x5a, 0x41, 0x67, 0x13, 0x7, 0x7, 0xf0, 0xd9, 0x8f, 0x9c, 0xda, 0x3, 0x49, 0x81, 0x0, 0x1, 0x45, 0x97, 0xe0, 0x7e, 0xff, 0xe7, 0x80, 0xa0, 0x31, 0x4a, 0x85, 0xef, 0x40, 0xaf, 0xc4, 0xdc, 0x4c, 0x41, 0x77, 0x13, 0x7, 0xf7, 0xf, 0x3e, 0xce, 0xf2, 0x47, 0x8, 0x10, 0xf9, 0x8f, 0x93, 0xe7, 0x7, 0x50, 0x3e, 0xce, 0xf2, 0x47, 0xdc, 0xcc, 0xef, 0x40, 0xcf, 0xb1, 0xc, 0x18, 0x22, 0x85, 0xb2, 0x54, 0xef, 0x40, 0x2f, 0x92, 0x19, 0xe1, 0xef, 0x80, 0xcf, 0xcb, 0x8, 0x18, 0xef, 0x40, 0x2f, 0x98, 0x73, 0x25, 0x20, 0x7e, 0xb3, 0x35, 0xa4, 0x2, 0x26, 0x86, 0x81, 0x46, 0x33, 0x5, 0xa4, 0x2, 0x97, 0xf0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0xc1, 0x73, 0x10, 0x25, 0x7e, 0xa2, 0x47, 0x37, 0x7, 0xfc, 0xff, 0x13, 0x7, 0xf7, 0xf, 0xf9, 0x8f, 0x22, 0x4, 0x5d, 0x8c, 0xb7, 0x7, 0x70, 0x0, 0x22, 0xc4, 0xe1, 0x8f, 0x37, 0x7, 0x10, 0x0, 0x63, 0x98, 0xe7, 0x2, 0x5, 0x45, 0xef, 0x30, 0x3f, 0xf3, 0x5, 0x45, 0xef, 0x30, 0xff, 0xf8, 0x22, 0x45, 0x49, 0x81, 0xd, 0x89, 0xef, 0x40, 0x6f, 0x84, 0x22, 0x45, 0x51, 0x81, 0x1d, 0x89, 0xef, 0x30, 0x7f, 0xfa, 0xb6, 0x40, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0x61, 0x61, 0x82, 0x80, 0x37, 0x7, 0x30, 0x0, 0x63, 0x95, 0xe7, 0x0, 0xef, 0x30, 0xdf, 0xf1, 0xf9, 0xb7, 0x37, 0x7, 0x20, 0x0, 0xe3, 0x94, 0xe7, 0xfc, 0x5, 0x45, 0xef, 0x30, 0x7f, 0xf2, 0x7d, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0x6, 0xc6, 0xef, 0x70, 0x5f, 0xf9, 0x0, 0x5c, 0xef, 0x70, 0xdf, 0xfb, 0xb2, 0x40, 0x13, 0x35, 0x14, 0x0, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x4a, 0xc0, 0x32, 0x89, 0x30, 0x41, 0x26, 0xc2, 0x4, 0x5d, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x5, 0xe2, 0x1c, 0x41, 0x85, 0xef, 0x8, 0x45, 0xef, 0x70, 0x9f, 0x92, 0x23, 0x24, 0x4, 0x0, 0x85, 0x4, 0x4, 0xdc, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x63, 0x13, 0x9, 0x2, 0x48, 0x41, 0x97, 0xe0, 0x7e, 0xff, 0xe7, 0x80, 0x0, 0x63, 0x5c, 0x40, 0x38, 0x40, 0xba, 0x97, 0x18, 0x44, 0x5c, 0xc0, 0x63, 0xf4, 0xe7, 0x0, 0x1, 0x45, 0xc9, 0xbf, 0x1c, 0x40, 0x5c, 0xc0, 0xe5, 0xbf, 0x48, 0x45, 0x97, 0xe0, 0x7e, 0xff, 0xe7, 0x80, 0xe0, 0x60, 0x38, 0x40, 0x5c, 0x44, 0xb3, 0x6, 0xe0, 0x40, 0x99, 0x8f, 0x18, 0x40, 0x5c, 0xc4, 0x63, 0xf5, 0xe7, 0x0, 0x1c, 0x44, 0xb6, 0x97, 0x5c, 0xc4, 0x89, 0x47, 0x1, 0x45, 0xe3, 0x12, 0xf9, 0xfa, 0xc5, 0xd0, 0xfd, 0x14, 0x71, 0xbf, 0xaa, 0x87, 0xb0, 0x43, 0x2e, 0x85, 0x11, 0xce, 0xd8, 0x47, 0x94, 0x47, 0x32, 0x97, 0xd8, 0xc7, 0x63, 0x64, 0xd7, 0x0, 0x98, 0x43, 0xd8, 0xc7, 0xcc, 0x47, 0x17, 0xe3, 0x7e, 0xff, 0x67, 0x0, 0x63, 0x5c, 0x82, 0x80, 0x1, 0x11, 0x26, 0xca, 0x24, 0x45, 0x6, 0xce, 0x22, 0xcc, 0x4a, 0xc8, 0x2a, 0xc6, 0x99, 0xe4, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0xaf, 0xbc, 0x98, 0x5c, 0xdc, 0x5c, 0xe3, 0x78, 0xf7, 0xfe, 0x98, 0x5c, 0x1, 0x49, 0x63, 0x76, 0xf7, 0x2, 0x3, 0xc4, 0x54, 0x4, 0x1, 0x46, 0x6c, 0x0, 0x26, 0x85, 0xef, 0xf0, 0xff, 0xf1, 0x62, 0x4, 0x61, 0x84, 0xfd, 0x57, 0x2a, 0x89, 0x63, 0x10, 0xf4, 0x2, 0xdc, 0x50, 0x91, 0xc7, 0x13, 0x85, 0x44, 0x2, 0xef, 0x70, 0xf, 0xdc, 0x15, 0xe5, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x4a, 0x85, 0x42, 0x49, 0x5, 0x61, 0x82, 0x80, 0xef, 0x70, 0xaf, 0x96, 0xe3, 0x77, 0xa4, 0xfe, 0x93, 0x7, 0xf0, 0x7, 0xe3, 0x1, 0xf4, 0xfa, 0x5, 0x4, 0x62, 0x4, 0x61, 0x84, 0xa3, 0x82, 0x84, 0x4, 0xe1, 0xbf, 0x5, 0x49, 0xd1, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0xef, 0x70, 0x5f, 0xe4, 0x83, 0x44, 0x54, 0x4, 0x13, 0x9, 0x44, 0x2, 0xe2, 0x4, 0xe1, 0x84, 0x63, 0x50, 0x90, 0x2, 0x3c, 0x44, 0x99, 0xcb, 0x22, 0x85, 0xef, 0xf0, 0x9f, 0xf5, 0x19, 0xc1, 0xef, 0x70, 0xef, 0xed, 0xfd, 0x14, 0xe2, 0x4, 0xe1, 0x84, 0xdd, 0xb7, 0x5c, 0x50, 0x85, 0xef, 0xfd, 0x57, 0xa3, 0x2, 0xf4, 0x4, 0xef, 0x70, 0xdf, 0xe3, 0xef, 0x70, 0xbf, 0xe0, 0x83, 0x44, 0x44, 0x4, 0x13, 0x9, 0x4, 0x1, 0xe2, 0x4, 0xe1, 0x84, 0x63, 0x54, 0x90, 0x0, 0x1c, 0x48, 0x99, 0xef, 0xfd, 0x57, 0x23, 0x2, 0xf4, 0x4, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0x70, 0x1f, 0xe1, 0x4a, 0x85, 0xef, 0x70, 0x8f, 0xd1, 0x4d, 0xbf, 0x4a, 0x85, 0xef, 0x70, 0xf, 0xd1, 0x19, 0xc1, 0xef, 0x70, 0x8f, 0xe8, 0xfd, 0x14, 0xe2, 0x4, 0xe1, 0x84, 0xe9, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0xf, 0xac, 0x5c, 0x5d, 0x2a, 0x84, 0xe5, 0xdb, 0x38, 0x41, 0xb3, 0xb7, 0xe7, 0x2, 0xe5, 0xf7, 0xae, 0x84, 0xef, 0x70, 0xdf, 0xd9, 0x34, 0x40, 0x5c, 0x5c, 0x18, 0x40, 0x23, 0x2c, 0x4, 0x2, 0xb3, 0x87, 0xf6, 0x2, 0x58, 0xc0, 0x33, 0x6, 0xf7, 0x0, 0x95, 0x8f, 0x3e, 0x97, 0xfd, 0x57, 0x23, 0x2, 0xf4, 0x4, 0x10, 0xc4, 0x58, 0xc4, 0xa3, 0x2, 0xf4, 0x4, 0x95, 0xe0, 0x1c, 0x48, 0x81, 0xcb, 0x13, 0x5, 0x4, 0x1, 0xef, 0x70, 0x4f, 0xca, 0x19, 0xc1, 0xef, 0x70, 0x1f, 0xde, 0xef, 0x70, 0xdf, 0xd8, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x5, 0x45, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x4, 0x1, 0xef, 0x80, 0x2f, 0x95, 0x13, 0x5, 0x44, 0x2, 0xef, 0x80, 0xaf, 0x94, 0xc5, 0xb7, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x99, 0xe6, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0xcf, 0xa3, 0x75, 0xd9, 0x36, 0x84, 0x5, 0xce, 0xfd, 0xd5, 0x93, 0x7, 0x40, 0x5, 0x3e, 0xc6, 0x32, 0x47, 0xe3, 0x12, 0xf7, 0xfe, 0xb2, 0x47, 0x85, 0x47, 0x23, 0x3, 0xf4, 0x4, 0x91, 0xe1, 0x22, 0x86, 0x48, 0xdc, 0x2c, 0xc0, 0x10, 0xc0, 0x22, 0x85, 0x85, 0x45, 0xef, 0xf0, 0xdf, 0xf3, 0xf2, 0x40, 0x23, 0x24, 0x4, 0x4, 0x22, 0x85, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0xf1, 0xd5, 0x5d, 0xbf, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x29, 0xc9, 0xb3, 0x37, 0xb5, 0x2, 0x2a, 0x89, 0xae, 0x84, 0xa1, 0xe7, 0x33, 0x5, 0xb5, 0x2, 0x93, 0x7, 0xb0, 0xfa, 0x63, 0xef, 0xa7, 0x2, 0x13, 0x5, 0x45, 0x5, 0xef, 0x70, 0x9f, 0xe6, 0x2a, 0x84, 0xd, 0xc1, 0x23, 0x3, 0x5, 0x4, 0xaa, 0x87, 0x99, 0xc0, 0x93, 0x7, 0x45, 0x5, 0x1c, 0xc0, 0x23, 0x2e, 0x24, 0x3, 0x24, 0xc0, 0x85, 0x45, 0x22, 0x85, 0xef, 0xf0, 0x1f, 0xee, 0x23, 0x24, 0x4, 0x4, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0x4f, 0x99, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x80, 0x2f, 0x98, 0x2a, 0x84, 0xef, 0x70, 0xdf, 0xc6, 0x1c, 0x40, 0x1, 0x45, 0x91, 0xe3, 0x8, 0x44, 0x2a, 0xc6, 0xef, 0x70, 0xdf, 0xc8, 0xf2, 0x40, 0x62, 0x44, 0x32, 0x45, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x11, 0xcd, 0x2e, 0x84, 0x63, 0x6c, 0xb5, 0x0, 0x9, 0x46, 0x81, 0x45, 0xef, 0xf0, 0x7f, 0xf5, 0x11, 0xc1, 0x0, 0xdd, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0x6f, 0x93, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x32, 0xc6, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x80, 0x4f, 0x91, 0x2a, 0x84, 0xae, 0x89, 0xb6, 0x84, 0x99, 0xe1, 0x3c, 0x41, 0xed, 0xf7, 0x89, 0x47, 0x63, 0x96, 0xf4, 0x0, 0x58, 0x5c, 0x85, 0x47, 0xe3, 0x1f, 0xf7, 0xfc, 0xef, 0x70, 0x6f, 0xcb, 0x2a, 0x89, 0x5, 0xcd, 0x1, 0x49, 0x89, 0x4a, 0x7d, 0x5a, 0x13, 0xb, 0x4, 0x1, 0xef, 0x70, 0x5f, 0xbd, 0x18, 0x5c, 0x5c, 0x5c, 0x63, 0x75, 0xf7, 0x2, 0x26, 0x86, 0xce, 0x85, 0x22, 0x85, 0x3, 0x29, 0x84, 0x3, 0xef, 0xf0, 0x1f, 0xc4, 0x3c, 0x44, 0x9d, 0xe3, 0x5c, 0x50, 0x8d, 0xcb, 0x13, 0x5, 0x44, 0x2, 0xef, 0x70, 0xaf, 0xae, 0x25, 0xa0, 0xb2, 0x47, 0xe9, 0xd7, 0x61, 0xbf, 0xe3, 0x8d, 0x54, 0xfd, 0xb2, 0x47, 0x8d, 0xef, 0xef, 0x70, 0x9f, 0xbc, 0x1, 0x45, 0x39, 0xa8, 0x89, 0x47, 0x63, 0x94, 0xf4, 0x0, 0x63, 0x18, 0x9, 0x0, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0xcb, 0x19, 0xc1, 0xef, 0x70, 0xff, 0xbf, 0xef, 0x70, 0xbf, 0xba, 0x5, 0x45, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0x21, 0x61, 0x82, 0x80, 0x63, 0x15, 0x9, 0x0, 0x28, 0x8, 0xef, 0x70, 0x8f, 0xb7, 0xef, 0x70, 0x7f, 0xb8, 0xef, 0x60, 0x5f, 0xe3, 0xef, 0x70, 0x1f, 0xb5, 0x83, 0x47, 0x44, 0x4, 0xe2, 0x7, 0xe1, 0x87, 0x63, 0x94, 0x47, 0x1, 0x23, 0x2, 0x4, 0x4, 0x83, 0x47, 0x54, 0x4, 0xe2, 0x7, 0xe1, 0x87, 0x63, 0x94, 0x47, 0x1, 0xa3, 0x2, 0x4, 0x4, 0xef, 0x70, 0xbf, 0xb5, 0x6c, 0x0, 0x28, 0x8, 0xef, 0x70, 0x6f, 0xb5, 0x1d, 0xed, 0xef, 0x70, 0xff, 0xb1, 0x18, 0x5c, 0x5c, 0x5c, 0x63, 0x11, 0xf7, 0x2, 0xef, 0x70, 0x1f, 0xb4, 0xb2, 0x45, 0x5a, 0x85, 0xef, 0x70, 0x6f, 0xa1, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0xcb, 0xef, 0x60, 0x9f, 0xfb, 0x19, 0xe9, 0xef, 0x70, 0x9f, 0xb7, 0x1, 0xa8, 0xef, 0x70, 0x3f, 0xb2, 0x22, 0x85, 0xef, 0xf0, 0xff, 0xc9, 0xef, 0x60, 0x3f, 0xfa, 0x5, 0x49, 0x1, 0xbf, 0x22, 0x85, 0xef, 0xf0, 0x1f, 0xc9, 0xef, 0x60, 0x5f, 0xf9, 0x89, 0xb7, 0x41, 0x11, 0x2a, 0x87, 0xae, 0x86, 0x1, 0x46, 0x81, 0x45, 0x5, 0x45, 0x22, 0xc4, 0x6, 0xc6, 0xef, 0xf0, 0xbf, 0xd8, 0x2a, 0x84, 0x1, 0xcd, 0x23, 0x24, 0x5, 0x0, 0x23, 0x20, 0x5, 0x0, 0x23, 0x26, 0x5, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0xf0, 0xbf, 0xe8, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x70, 0xff, 0xf9, 0x4, 0x45, 0x2a, 0x84, 0xef, 0x70, 0xcf, 0xb4, 0x81, 0x47, 0x63, 0x97, 0xa4, 0x0, 0x5c, 0x44, 0xfd, 0x17, 0x5c, 0xc4, 0x81, 0xcb, 0x85, 0x47, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x3e, 0x85, 0x41, 0x1, 0x82, 0x80, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x22, 0x85, 0xef, 0xf0, 0xdf, 0xe3, 0xdd, 0xb7, 0x41, 0x11, 0x2a, 0x86, 0x81, 0x45, 0x5, 0x45, 0x22, 0xc4, 0x6, 0xc6, 0xef, 0xf0, 0x5f, 0xd6, 0x2a, 0x84, 0x1, 0xcd, 0x23, 0x24, 0x5, 0x0, 0x23, 0x20, 0x5, 0x0, 0x23, 0x26, 0x5, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0xf0, 0x1f, 0xe1, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x56, 0xca, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xbf, 0xf1, 0x2a, 0x84, 0xb2, 0x89, 0x36, 0x89, 0x99, 0xe1, 0x3c, 0x41, 0xed, 0xf7, 0x89, 0x47, 0x63, 0x16, 0xf9, 0x0, 0x58, 0x5c, 0x85, 0x47, 0xe3, 0x1f, 0xf7, 0xfc, 0x2e, 0xc6, 0xef, 0x70, 0xff, 0x9b, 0x18, 0x5c, 0x5c, 0x5c, 0xb2, 0x45, 0x2a, 0x8a, 0x63, 0x66, 0xf7, 0x0, 0x89, 0x47, 0x81, 0x44, 0x63, 0x10, 0xf9, 0x4, 0x83, 0x44, 0x54, 0x4, 0x4a, 0x86, 0x22, 0x85, 0x83, 0x2a, 0x84, 0x3, 0xe2, 0x4, 0xef, 0xf0, 0x7f, 0xa4, 0xe1, 0x84, 0xfd, 0x57, 0x63, 0x97, 0xf4, 0x4, 0x3c, 0x44, 0x8d, 0xcf, 0x89, 0x47, 0x63, 0x14, 0xf9, 0x0, 0x63, 0x9b, 0xa, 0x0, 0x22, 0x85, 0xef, 0xf0, 0x7f, 0xad, 0x11, 0xc5, 0x63, 0x85, 0x9, 0x0, 0x85, 0x47, 0x23, 0xa0, 0xf9, 0x0, 0x85, 0x44, 0x52, 0x85, 0xef, 0x70, 0x3f, 0x98, 0xb2, 0x50, 0x22, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x26, 0x85, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x5c, 0x50, 0xed, 0xd3, 0x13, 0x5, 0x44, 0x2, 0xef, 0x70, 0xf, 0x8b, 0xf1, 0xb7, 0xef, 0x60, 0x9f, 0xc6, 0xe3, 0xf9, 0xa4, 0xfc, 0x93, 0x7, 0xf0, 0x7, 0xe3, 0x88, 0xf4, 0xf4, 0x85, 0x4, 0xe2, 0x4, 0xe1, 0x84, 0xa3, 0x2, 0x94, 0x4, 0x75, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xdf, 0xe4, 0x3c, 0x41, 0x2a, 0x84, 0xe5, 0xfb, 0x1c, 0x41, 0x2e, 0x89, 0x99, 0xe3, 0x1c, 0x45, 0xfd, 0xf3, 0xef, 0x70, 0xdf, 0x8f, 0x1c, 0x5c, 0x58, 0x5c, 0xaa, 0x89, 0x63, 0xf8, 0xe7, 0x6, 0x83, 0x44, 0x54, 0x4, 0x85, 0x7, 0x1c, 0xdc, 0xe2, 0x4, 0xe1, 0x84, 0xfd, 0x57, 0x63, 0x91, 0xf4, 0x4, 0x3c, 0x44, 0x9d, 0xc7, 0x22, 0x85, 0xef, 0xf0, 0x1f, 0xa3, 0x9, 0xed, 0x5, 0x44, 0x4e, 0x85, 0xef, 0x70, 0x7f, 0x8e, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0xe3, 0x4, 0x9, 0xfe, 0x85, 0x47, 0x23, 0x20, 0xf9, 0x0, 0xf9, 0xbf, 0x5c, 0x50, 0xe9, 0xdf, 0x13, 0x5, 0x44, 0x2, 0xef, 0x70, 0xcf, 0x80, 0xf9, 0xb7, 0xef, 0x60, 0x5f, 0xbc, 0xe3, 0xf5, 0xa4, 0xfc, 0x93, 0x7, 0xf0, 0x7, 0xe3, 0x8d, 0xf4, 0xf6, 0x85, 0x4, 0xe2, 0x4, 0xe1, 0x84, 0xa3, 0x2, 0x94, 0x4, 0x55, 0xbf, 0x1, 0x44, 0x4d, 0xbf, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x32, 0xc6, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xff, 0xd9, 0x2a, 0x84, 0x2e, 0x89, 0x99, 0xe1, 0x3c, 0x41, 0xf5, 0xf7, 0xef, 0x70, 0xf, 0x95, 0xaa, 0x84, 0x39, 0xc5, 0x81, 0x44, 0x7d, 0x5a, 0x93, 0xa, 0x44, 0x2, 0xef, 0x70, 0x1f, 0x87, 0x83, 0x29, 0x84, 0x3, 0x63, 0x81, 0x9, 0x4, 0xca, 0x85, 0x22, 0x85, 0xfd, 0x19, 0xef, 0xf0, 0x9f, 0x96, 0x23, 0x2c, 0x34, 0x3, 0x1c, 0x48, 0x81, 0xcb, 0x13, 0x5, 0x4, 0x1, 0xef, 0x60, 0xbf, 0xf8, 0x19, 0xc1, 0xef, 0x70, 0x7f, 0x8c, 0xef, 0x70, 0x3f, 0x87, 0x5, 0x45, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x21, 0x61, 0x82, 0x80, 0xb2, 0x47, 0xd5, 0xdb, 0x49, 0xbf, 0xb2, 0x47, 0x89, 0xe7, 0xef, 0x70, 0x1f, 0x85, 0x1, 0x45, 0xf9, 0xbf, 0x81, 0xe4, 0x28, 0x8, 0xef, 0x70, 0x2f, 0x83, 0xef, 0x70, 0x1f, 0x84, 0xef, 0x60, 0xff, 0xae, 0xef, 0x70, 0xbf, 0x80, 0x83, 0x47, 0x44, 0x4, 0xe2, 0x7, 0xe1, 0x87, 0x63, 0x94, 0x47, 0x1, 0x23, 0x2, 0x4, 0x4, 0x83, 0x47, 0x54, 0x4, 0xe2, 0x7, 0xe1, 0x87, 0x63, 0x94, 0x47, 0x1, 0xa3, 0x2, 0x4, 0x4, 0xef, 0x70, 0x5f, 0x81, 0x6c, 0x0, 0x28, 0x8, 0xef, 0x70, 0xf, 0x81, 0xd, 0xe9, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0x83, 0x19, 0xcd, 0xb2, 0x45, 0x56, 0x85, 0xef, 0x60, 0x9f, 0xed, 0x22, 0x85, 0xef, 0xf0, 0x7f, 0x97, 0xef, 0x60, 0xbf, 0xc7, 0x19, 0xe1, 0xef, 0x70, 0xbf, 0x83, 0x85, 0x44, 0x99, 0xb7, 0x22, 0x85, 0xef, 0xf0, 0x3f, 0x96, 0xef, 0x60, 0x7f, 0xc6, 0xcd, 0xbf, 0x22, 0x85, 0xef, 0xf0, 0x7f, 0x95, 0xef, 0x60, 0xbf, 0xc5, 0x22, 0x85, 0xef, 0xf0, 0x1f, 0x80, 0x65, 0xd1, 0xa5, 0xbf, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x2e, 0xc6, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xbf, 0xc8, 0x3c, 0x41, 0x2a, 0x84, 0xe5, 0xfb, 0xef, 0x70, 0xf, 0x84, 0xaa, 0x84, 0x29, 0xc5, 0x1, 0x49, 0x81, 0x44, 0xfd, 0x59, 0x13, 0xa, 0x44, 0x2, 0xef, 0x70, 0xef, 0xf5, 0x1c, 0x5c, 0xa1, 0xc3, 0xfd, 0x17, 0x1c, 0xdc, 0x1c, 0x40, 0x81, 0xe7, 0xef, 0x70, 0x2f, 0xa9, 0x8, 0xc4, 0x1c, 0x48, 0x81, 0xcb, 0x13, 0x5, 0x4, 0x1, 0xef, 0x60, 0xdf, 0xe7, 0x19, 0xc1, 0xef, 0x70, 0x8f, 0xfb, 0xef, 0x70, 0x4f, 0xf6, 0x5, 0x45, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x21, 0x61, 0x82, 0x80, 0xb2, 0x47, 0x1, 0x49, 0xc5, 0xdf, 0x61, 0xbf, 0xb2, 0x47, 0x89, 0xe7, 0xef, 0x70, 0x2f, 0xf4, 0x1, 0x45, 0xf9, 0xbf, 0x81, 0xe4, 0x28, 0x8, 0xef, 0x60, 0x5f, 0xf2, 0xef, 0x70, 0x2f, 0xf3, 0xef, 0x60, 0x1f, 0x9e, 0xef, 0x70, 0xcf, 0xef, 0x83, 0x47, 0x44, 0x4, 0xe2, 0x7, 0xe1, 0x87, 0x63, 0x94, 0x37, 0x1, 0x23, 0x2, 0x4, 0x4, 0x83, 0x47, 0x54, 0x4, 0xe2, 0x7, 0xe1, 0x87, 0x63, 0x94, 0x37, 0x1, 0xa3, 0x2, 0x4, 0x4, 0xef, 0x70, 0x6f, 0xf0, 0x6c, 0x0, 0x28, 0x8, 0xef, 0x60, 0x3f, 0xf0, 0x39, 0xe1, 0x22, 0x85, 0xef, 0xf0, 0xcf, 0xf2, 0xd, 0xc9, 0x1c, 0x40, 0x89, 0xeb, 0xef, 0x70, 0xef, 0xeb, 0x8, 0x44, 0xef, 0x60, 0x5f, 0xfa, 0x2a, 0x89, 0xef, 0x70, 0xf, 0xee, 0xb2, 0x45, 0x52, 0x85, 0xef, 0x60, 0x7f, 0xdb, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0x85, 0xef, 0x60, 0x9f, 0xb5, 0x19, 0xe1, 0xef, 0x70, 0x8f, 0xf1, 0x85, 0x44, 0x1d, 0xbf, 0x22, 0x85, 0xef, 0xf0, 0x1f, 0x84, 0xef, 0x60, 0x5f, 0xb4, 0xcd, 0xbf, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0x83, 0xef, 0x60, 0x9f, 0xb3, 0x22, 0x85, 0xef, 0xf0, 0xef, 0xed, 0x65, 0xd1, 0xe3, 0x2, 0x9, 0xf6, 0xef, 0x70, 0xf, 0xe7, 0x4c, 0x50, 0x89, 0xc5, 0x1c, 0x58, 0xe5, 0x45, 0x9c, 0x43, 0x9d, 0x8d, 0x8, 0x44, 0xef, 0x70, 0x2f, 0x8d, 0x99, 0xb7, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x70, 0x9f, 0xb5, 0x4, 0x45, 0x2e, 0xc6, 0x2a, 0x84, 0xef, 0x60, 0x5f, 0xf0, 0xb2, 0x45, 0x63, 0x9b, 0xa4, 0x0, 0x5c, 0x44, 0x5, 0x45, 0x85, 0x7, 0x5c, 0xc4, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x22, 0x85, 0xef, 0xf0, 0xdf, 0xe8, 0x65, 0xd9, 0x5c, 0x44, 0x85, 0x7, 0x5c, 0xc4, 0xe5, 0xb7, 0x79, 0x71, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xbf, 0xb0, 0x2a, 0x84, 0x32, 0x89, 0x99, 0xe1, 0x3c, 0x41, 0xf5, 0xf7, 0x2e, 0xc6, 0xef, 0x70, 0xef, 0xdb, 0x83, 0x29, 0x84, 0x3, 0x2a, 0x8a, 0x63, 0x87, 0x9, 0x6, 0x83, 0x44, 0x44, 0x4, 0xb2, 0x45, 0x22, 0x85, 0xe2, 0x4, 0xef, 0xf0, 0xcf, 0xed, 0xfd, 0x19, 0xe1, 0x84, 0x23, 0x2c, 0x34, 0x3, 0xfd, 0x57, 0x63, 0x9b, 0xf4, 0x2, 0x1c, 0x48, 0x99, 0xcb, 0x13, 0x5, 0x4, 0x1, 0xef, 0x60, 0x5f, 0xcf, 0x11, 0xc5, 0x63, 0x5, 0x9, 0x0, 0x85, 0x47, 0x23, 0x20, 0xf9, 0x0, 0x5, 0x44, 0x52, 0x85, 0xef, 0x70, 0x2f, 0xd9, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0xef, 0x60, 0x9f, 0x88, 0xe3, 0xf1, 0xa4, 0xfe, 0x93, 0x7, 0xf0, 0x7, 0xe3, 0x80, 0xf4, 0xf8, 0x85, 0x4, 0xe2, 0x4, 0xe1, 0x84, 0x23, 0x2, 0x94, 0x4, 0xf1, 0xb7, 0x1, 0x44, 0xe9, 0xb7, 0x1, 0xe9, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x6, 0xc6, 0xef, 0x70, 0x3f, 0xa7, 0x83, 0x47, 0x65, 0x4, 0x99, 0xe3, 0x6f, 0x70, 0x8f, 0xf0, 0x82, 0x80, 0x17, 0x95, 0x0, 0x0, 0x3, 0x25, 0x85, 0xd9, 0x82, 0x80, 0x17, 0x95, 0x0, 0x0, 0x3, 0x25, 0xa5, 0xda, 0x21, 0xcd, 0x17, 0x95, 0x0, 0x0, 0x13, 0x5, 0xc5, 0xd9, 0xc, 0x41, 0x13, 0x86, 0x15, 0x0, 0x10, 0xc1, 0x1, 0x45, 0xb1, 0xe1, 0x1, 0x49, 0x37, 0x25, 0xc, 0x60, 0xc, 0x41, 0x93, 0xf5, 0xf5, 0xcf, 0xc, 0xc1, 0x17, 0x95, 0x0, 0x0, 0x3, 0x25, 0x25, 0xd6, 0x23, 0x20, 0x25, 0x0, 0x17, 0x91, 0x0, 0x0, 0x3, 0x21, 0xe1, 0xd5, 0x17, 0x95, 0x0, 0x0, 0x3, 0x25, 0x25, 0xd5, 0x8a, 0x85, 0x37, 0x26, 0xc, 0x60, 0x8, 0xde, 0x4c, 0xde, 0x37, 0x25, 0xc, 0x60, 0xc, 0x41, 0x93, 0xe5, 0x5, 0x30, 0xc, 0xc1, 0x4a, 0x85, 0x82, 0x80, 0xaa, 0x8d, 0x17, 0x95, 0x0, 0x0, 0x3, 0x25, 0x65, 0xd4, 0x39, 0xcd, 0x17, 0x96, 0x0, 0x0, 0x13, 0x6, 0x86, 0xd3, 0x8, 0x42, 0x1, 0xc5, 0x7d, 0x15, 0x8, 0xc2, 0x31, 0xe5, 0x97, 0x9b, 0x0, 0x0, 0x93, 0x8b, 0xab, 0xd1, 0x3, 0xa5, 0xb, 0x0, 0x19, 0xc5, 0x6, 0x8d, 0xef, 0x60, 0x5f, 0xb0, 0xea, 0x80, 0x23, 0xa0, 0xb, 0x0, 0x37, 0x25, 0xc, 0x60, 0xc, 0x41, 0x93, 0xf5, 0xf5, 0xcf, 0xc, 0xc1, 0x17, 0x95, 0x0, 0x0, 0x3, 0x25, 0x85, 0xce, 0x3, 0x21, 0x5, 0x0, 0x6c, 0x41, 0x8, 0x59, 0x37, 0x26, 0xc, 0x60, 0x8, 0xde, 0x4c, 0xde, 0x37, 0x25, 0xc, 0x60, 0xc, 0x41, 0x93, 0xe5, 0x5, 0x30, 0xc, 0xc1, 0x6e, 0x85, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x2a, 0x84, 0x6, 0xce, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0xb2, 0x84, 0x2e, 0x8a, 0xef, 0x70, 0xaf, 0xc3, 0x3, 0x29, 0x4, 0x0, 0x83, 0x29, 0x44, 0x0, 0x33, 0x67, 0x49, 0x1, 0xb3, 0xe7, 0x99, 0x0, 0x18, 0xc0, 0x5c, 0xc0, 0xef, 0x70, 0xcf, 0xc3, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x22, 0x4a, 0x4a, 0x85, 0xce, 0x85, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x39, 0x71, 0x5c, 0x41, 0x26, 0xda, 0xb7, 0x14, 0x12, 0x12, 0x22, 0xdc, 0x4a, 0xd8, 0x4e, 0xd6, 0x6, 0xde, 0x93, 0x84, 0x24, 0x21, 0x2a, 0x84, 0xae, 0x89, 0x32, 0x89, 0x63, 0x89, 0x97, 0x0, 0x51, 0x46, 0x81, 0x45, 0x97, 0xe0, 0x7e, 0xff, 0xe7, 0x80, 0x80, 0xaf, 0x44, 0xc0, 0x1c, 0x48, 0x8d, 0xe3, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0x7, 0xe6, 0x93, 0x5, 0x4, 0x1, 0x68, 0x0, 0x2, 0xca, 0x2, 0xce, 0x4e, 0xc6, 0x4a, 0xc8, 0x3e, 0xcc, 0x95, 0x2a, 0x19, 0xc1, 0xef, 0x70, 0x9f, 0x87, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x21, 0x61, 0x82, 0x80, 0x58, 0x41, 0xb7, 0x17, 0x12, 0x12, 0x93, 0x87, 0x27, 0x21, 0x63, 0x10, 0xf7, 0x2, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0x8, 0x49, 0x6, 0xc6, 0x4d, 0x2a, 0xb2, 0x40, 0x23, 0x28, 0x4, 0x0, 0x23, 0x22, 0x4, 0x0, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x37, 0xb4, 0x81, 0x40, 0x3, 0x25, 0x84, 0x6d, 0x6, 0xc6, 0x9, 0xc5, 0xef, 0x60, 0x6f, 0xd8, 0x23, 0x2c, 0x4, 0x6c, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x39, 0x71, 0x4e, 0xd6, 0x52, 0xd4, 0xb7, 0x29, 0xde, 0xf0, 0x37, 0xa, 0x0, 0x1, 0x56, 0xd2, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0xb7, 0xba, 0x81, 0x40, 0x93, 0x89, 0xe9, 0xe1, 0x7d, 0x1a, 0x7d, 0x56, 0x85, 0x45, 0x1, 0x45, 0xef, 0x60, 0x9f, 0xeb, 0xef, 0x0, 0xf, 0xf7, 0x1, 0x49, 0x3, 0xa4, 0xca, 0x6d, 0xef, 0xe0, 0x1e, 0xdb, 0xaa, 0x84, 0xae, 0x8b, 0x61, 0xc0, 0x3, 0x2c, 0x44, 0x0, 0x83, 0x2c, 0x4, 0x0, 0x63, 0xe3, 0x85, 0xb, 0x63, 0x14, 0xbc, 0x0, 0x63, 0x6f, 0x95, 0x9, 0x1c, 0x4c, 0x99, 0xc3, 0x58, 0x4c, 0xd8, 0xcf, 0x58, 0x4c, 0x1c, 0xc3, 0x1c, 0x48, 0x63, 0x97, 0x37, 0x1, 0x22, 0x85, 0xef, 0x70, 0xbf, 0x87, 0x5, 0x49, 0xd1, 0xb7, 0x3, 0x2b, 0xc4, 0x0, 0x3, 0x29, 0x84, 0x0, 0x33, 0x7b, 0x4b, 0x1, 0xb3, 0x67, 0x69, 0x1, 0xad, 0xc3, 0x83, 0x47, 0xf4, 0x0, 0x89, 0x8b, 0xb9, 0xc7, 0x33, 0x85, 0x94, 0x41, 0xb3, 0xb7, 0xa4, 0x0, 0xb3, 0x85, 0x8b, 0x41, 0x9d, 0x8d, 0x4a, 0x86, 0xda, 0x86, 0x97, 0xe0, 0x7e, 0xff, 0xe7, 0x80, 0x0, 0xef, 0x85, 0x47, 0x63, 0xd8, 0xa7, 0x2, 0xca, 0x94, 0x33, 0xb9, 0x24, 0x1, 0x5e, 0x9b, 0x5a, 0x99, 0x4, 0xc0, 0x23, 0x22, 0x24, 0x1, 0x85, 0x45, 0x22, 0x85, 0xef, 0x0, 0x4f, 0xe2, 0x48, 0x48, 0x4, 0x48, 0x2a, 0xc6, 0xef, 0x0, 0x4f, 0xec, 0x32, 0x45, 0x82, 0x94, 0xef, 0x0, 0xcf, 0xec, 0x61, 0xbf, 0xb3, 0x84, 0x2c, 0x1, 0x33, 0xb9, 0x94, 0x1, 0x62, 0x9b, 0xc9, 0xbf, 0x81, 0x47, 0x1, 0x48, 0x1c, 0xc0, 0x23, 0x22, 0x4, 0x1, 0xd9, 0xbf, 0x1, 0x46, 0x66, 0x85, 0xe2, 0x85, 0xef, 0xe0, 0xbe, 0xd1, 0xef, 0x0, 0x4f, 0xe9, 0x1d, 0xb7, 0xe3, 0xd, 0x9, 0xfe, 0x1, 0x46, 0x7d, 0x55, 0xfd, 0x55, 0xf5, 0xb7, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x87, 0x6d, 0xb9, 0xcf, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x26, 0xc2, 0x13, 0x5, 0x20, 0x10, 0x31, 0xc0, 0x1c, 0x40, 0xa1, 0xc3, 0xae, 0x84, 0x95, 0xcd, 0x1c, 0x44, 0x85, 0xef, 0x5, 0x66, 0x13, 0x6, 0x46, 0x80, 0x93, 0x5, 0x0, 0x2, 0x5, 0x45, 0xef, 0xd0, 0xbe, 0xd6, 0xaa, 0x87, 0x13, 0x5, 0x10, 0x10, 0x85, 0xc3, 0x18, 0x40, 0x83, 0x46, 0x4, 0x1, 0x1, 0x45, 0x98, 0xcb, 0x58, 0x40, 0x86, 0x6, 0xd8, 0xcb, 0x18, 0x44, 0x33, 0x37, 0xe0, 0x0, 0x55, 0x8f, 0xa3, 0x87, 0xe7, 0x0, 0x9c, 0xc0, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x2d, 0xc5, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x2a, 0x84, 0x4a, 0xc8, 0xef, 0xe0, 0x3e, 0xc6, 0x2a, 0x89, 0xae, 0x84, 0xef, 0x0, 0xf, 0xe1, 0x1c, 0x40, 0x58, 0x40, 0x13, 0x5, 0x30, 0x10, 0xd9, 0x8f, 0x8d, 0xeb, 0x83, 0x47, 0xf4, 0x0, 0x37, 0x7, 0x0, 0xff, 0x23, 0x20, 0x24, 0x1, 0xf9, 0x9b, 0xa3, 0x7, 0xf4, 0x0, 0xb7, 0x27, 0xde, 0xf0, 0x93, 0x87, 0xe7, 0xe1, 0x1c, 0xc8, 0x5c, 0x44, 0x44, 0xc0, 0x23, 0x24, 0x4, 0x0, 0xf9, 0x8f, 0x5c, 0xc4, 0x81, 0x45, 0x22, 0x85, 0xef, 0x0, 0xaf, 0xd1, 0x2a, 0xc6, 0xef, 0x0, 0xef, 0xdb, 0xf2, 0x40, 0x62, 0x44, 0x32, 0x45, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0xb7, 0xb7, 0x81, 0x40, 0x3, 0xa7, 0x87, 0x6d, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x13, 0x4, 0x30, 0x10, 0x21, 0xe3, 0xb7, 0xa5, 0x81, 0x40, 0x37, 0x35, 0x81, 0x40, 0x93, 0x87, 0x87, 0x6d, 0x1, 0x48, 0x59, 0x47, 0x81, 0x46, 0x5, 0x66, 0x93, 0x85, 0xc5, 0xe6, 0x13, 0x5, 0x85, 0xa3, 0xef, 0x60, 0x9f, 0xe3, 0x85, 0x47, 0x13, 0x4, 0x10, 0x10, 0x63, 0x1c, 0xf5, 0x0, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x45, 0x1a, 0xef, 0x70, 0xbf, 0xe5, 0x2a, 0x84, 0x19, 0xc1, 0xef, 0xf0, 0x5f, 0xda, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x6f, 0xf0, 0x5f, 0xfa, 0x18, 0x45, 0xaa, 0x87, 0x93, 0x76, 0x27, 0x0, 0x91, 0xc6, 0x10, 0x55, 0x54, 0x55, 0x1, 0x45, 0x63, 0x13, 0xd6, 0x2, 0x94, 0x5f, 0x1, 0x45, 0x63, 0x5f, 0xd0, 0x0, 0x94, 0x57, 0xdc, 0x53, 0x63, 0x95, 0xf6, 0x0, 0x93, 0x77, 0x47, 0x0, 0x99, 0xc7, 0xd, 0x8b, 0x5, 0x45, 0x1, 0xe7, 0xc8, 0x42, 0xd, 0x81, 0x5, 0x89, 0x82, 0x80, 0x18, 0x51, 0x50, 0x59, 0x93, 0x76, 0x37, 0x0, 0x89, 0xca, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x70, 0xef, 0xdf, 0x3, 0x28, 0x5, 0x3, 0xaa, 0x87, 0xe3, 0x65, 0x7, 0xff, 0xe3, 0x73, 0xc7, 0xfe, 0x33, 0x5, 0xe6, 0x40, 0x9d, 0x46, 0xe3, 0xde, 0xa6, 0xfc, 0x93, 0x86, 0x35, 0x0, 0xf1, 0x9a, 0xa1, 0x6, 0x63, 0x78, 0xd5, 0x0, 0x9, 0x45, 0x48, 0xc3, 0x23, 0x20, 0x7, 0x0, 0x23, 0xa0, 0x7, 0x3, 0x98, 0x53, 0xc, 0xc3, 0x23, 0x22, 0x7, 0x0, 0x13, 0x5, 0x87, 0x0, 0x36, 0x97, 0x19, 0x8e, 0x9d, 0x46, 0x63, 0xe3, 0xc6, 0x0, 0x42, 0x87, 0xd4, 0x57, 0x98, 0xd3, 0x63, 0x16, 0xd7, 0x0, 0x98, 0x47, 0x13, 0x67, 0x47, 0x0, 0x98, 0xc7, 0x82, 0x80, 0x5d, 0x71, 0xa6, 0xc2, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x5a, 0xd8, 0x5e, 0xd6, 0x62, 0xd4, 0x66, 0xd2, 0x6a, 0xd0, 0x86, 0xc6, 0xa2, 0xc4, 0xaa, 0x84, 0x2e, 0x89, 0xb2, 0x89, 0x36, 0x8a, 0x3a, 0x8b, 0xbe, 0x8b, 0x42, 0xc6, 0x81, 0x4a, 0x1, 0x4d, 0x5, 0x4c, 0x93, 0xc, 0x5, 0x5, 0xef, 0x70, 0xef, 0x85, 0x26, 0x85, 0xef, 0xf0, 0xdf, 0xf1, 0x2a, 0x84, 0x63, 0x11, 0x85, 0x9, 0x9c, 0x44, 0x2, 0xca, 0xd8, 0x48, 0x89, 0x8b, 0xd2, 0x86, 0x9d, 0xcf, 0x5e, 0x86, 0x81, 0x45, 0x26, 0x85, 0x2, 0x97, 0x9c, 0x44, 0x23, 0x20, 0xa9, 0x0, 0x85, 0x8b, 0x9d, 0xcb, 0xd2, 0x47, 0x63, 0x9c, 0x87, 0x5, 0xdc, 0x48, 0xda, 0x86, 0x1, 0x46, 0x4c, 0x8, 0x26, 0x85, 0x82, 0x97, 0x23, 0xa0, 0xa9, 0x0, 0x83, 0x27, 0x9, 0x0, 0x63, 0x6b, 0xf5, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xaf, 0xd1, 0x1, 0x46, 0x4c, 0x8, 0xd1, 0xb7, 0xd2, 0x47, 0xf5, 0xf7, 0x22, 0x8d, 0xef, 0x70, 0x8f, 0x82, 0x41, 0xdc, 0xb6, 0x40, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x22, 0x5c, 0x92, 0x5c, 0x6a, 0x85, 0x2, 0x5d, 0x61, 0x61, 0x82, 0x80, 0x23, 0xa0, 0x9, 0x0, 0xd9, 0xbf, 0xb2, 0x47, 0x5, 0x44, 0xe9, 0xdb, 0x63, 0x95, 0xa, 0x0, 0x28, 0x8, 0xef, 0x60, 0xf, 0xfe, 0x6c, 0x0, 0x28, 0x8, 0xef, 0x60, 0xef, 0xfe, 0x2a, 0x84, 0x9, 0xe9, 0xb2, 0x45, 0x66, 0x85, 0x85, 0x4a, 0xef, 0x60, 0xaf, 0xeb, 0xef, 0x70, 0x8f, 0x82, 0x75, 0xb7, 0x85, 0x4a, 0x5, 0x44, 0x5d, 0xb7, 0x5d, 0x71, 0xa6, 0xc2, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x5a, 0xd8, 0x5e, 0xd6, 0x86, 0xc6, 0xa2, 0xc4, 0x2a, 0xc6, 0x2e, 0x8a, 0x32, 0x89, 0xb6, 0x84, 0x3a, 0xc4, 0x81, 0x4a, 0x81, 0x4b, 0x81, 0x49, 0x5, 0x4b, 0xef, 0x60, 0x9f, 0xf7, 0x32, 0x45, 0xa6, 0x85, 0x5c, 0x45, 0x82, 0x97, 0x2a, 0x84, 0x63, 0x15, 0x65, 0x7, 0x32, 0x45, 0x63, 0x0, 0x9, 0x4, 0xa6, 0x85, 0xef, 0xf0, 0xbf, 0xe5, 0x23, 0x20, 0xa9, 0x0, 0xa2, 0x89, 0xef, 0x60, 0x3f, 0xf8, 0x61, 0xdc, 0x63, 0x89, 0xa, 0x0, 0xb2, 0x47, 0x81, 0x46, 0x1, 0x46, 0xe8, 0x53, 0x6c, 0x0, 0xef, 0xf0, 0xef, 0xb1, 0xb6, 0x40, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x4e, 0x85, 0xf2, 0x59, 0x61, 0x61, 0x82, 0x80, 0x1c, 0x49, 0x26, 0x86, 0xd2, 0x85, 0x82, 0x97, 0x32, 0x45, 0x7c, 0x51, 0xa1, 0xe7, 0x3c, 0x49, 0xdd, 0xdf, 0x13, 0x5, 0x5, 0x5, 0xef, 0x60, 0xaf, 0xe4, 0xe3, 0x1a, 0x65, 0xfb, 0xef, 0x60, 0x5f, 0xf8, 0x75, 0xb7, 0xa2, 0x47, 0x5, 0x44, 0xc5, 0xd7, 0x63, 0x95, 0xb, 0x0, 0x28, 0x8, 0xef, 0x60, 0xf, 0xf1, 0x2c, 0x0, 0x28, 0x8, 0xef, 0x60, 0xef, 0xf1, 0x2a, 0x84, 0x11, 0xed, 0x32, 0x45, 0xa2, 0x45, 0x85, 0x4b, 0x13, 0x5, 0xc5, 0x3, 0xef, 0x60, 0x6f, 0xde, 0xef, 0x60, 0x5f, 0xf5, 0xbd, 0xbf, 0x85, 0x4a, 0x85, 0x49, 0xa5, 0xbf, 0x85, 0x4b, 0x5, 0x44, 0x8d, 0xbf, 0x9, 0xe9, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0x6, 0xc6, 0xef, 0x70, 0x6f, 0xbc, 0x36, 0x87, 0x91, 0xe9, 0x75, 0xf6, 0x1c, 0x45, 0x89, 0x8b, 0x91, 0xc3, 0x11, 0xca, 0xb2, 0x86, 0x1, 0x46, 0x6f, 0xf0, 0x3f, 0xf0, 0x5c, 0x41, 0xe3, 0xf7, 0xc7, 0xfe, 0x1, 0x45, 0x82, 0x80, 0x5, 0x45, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x19, 0xc1, 0xae, 0x86, 0x99, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xcf, 0xb8, 0x32, 0x88, 0x81, 0x47, 0x1, 0x47, 0x1, 0x46, 0x6c, 0x0, 0xef, 0xf0, 0xff, 0xdd, 0x5, 0x47, 0x81, 0x47, 0x63, 0x13, 0xe5, 0x0, 0xb2, 0x47, 0xf2, 0x40, 0x3e, 0x85, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x19, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0x8f, 0xb5, 0x2e, 0xc6, 0xed, 0xd9, 0x2a, 0x84, 0xef, 0x60, 0xff, 0xe3, 0x1c, 0x4c, 0xb2, 0x45, 0x22, 0x85, 0x82, 0x97, 0x5c, 0x5c, 0x91, 0xcb, 0x13, 0x5, 0xc4, 0x3, 0xef, 0x60, 0x6f, 0xd6, 0x85, 0x47, 0x63, 0x14, 0xf5, 0x0, 0xef, 0x60, 0xff, 0xe9, 0x62, 0x44, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0x60, 0x5f, 0xe4, 0xb7, 0x7, 0xf7, 0x9f, 0x93, 0x87, 0xc7, 0xfc, 0xaa, 0x97, 0xed, 0x9b, 0x81, 0xeb, 0xb7, 0xf7, 0x0, 0x60, 0x98, 0x4f, 0xf1, 0x76, 0xfd, 0x16, 0x75, 0x8f, 0x98, 0xcf, 0x18, 0x41, 0x9d, 0x66, 0x93, 0x97, 0xc5, 0x0, 0xf5, 0x8f, 0xe5, 0x76, 0xfd, 0x16, 0x75, 0x8f, 0xd9, 0x8f, 0x1c, 0xc1, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x13, 0x85, 0xc1, 0xb5, 0x93, 0x84, 0xc1, 0xb5, 0x61, 0x46, 0x81, 0x45, 0x4a, 0xc0, 0x6, 0xc6, 0x13, 0x89, 0x44, 0x2, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x4a, 0x13, 0x84, 0xc1, 0xb5, 0x88, 0x50, 0x9, 0xc5, 0xef, 0xf0, 0x9f, 0x84, 0x23, 0xa0, 0x4, 0x2, 0x91, 0x4, 0xe3, 0x99, 0x24, 0xff, 0x28, 0x4c, 0x9, 0xc5, 0xef, 0xf0, 0x7f, 0x83, 0x23, 0x2c, 0x4, 0x4, 0x68, 0x44, 0x19, 0xc1, 0xef, 0xf0, 0xbf, 0x82, 0x1c, 0x4c, 0x88, 0x53, 0xef, 0x70, 0xf, 0xaf, 0x8, 0x4c, 0xef, 0x70, 0xaf, 0xae, 0xb2, 0x40, 0x23, 0x2c, 0x4, 0x0, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0xfd, 0x56, 0x63, 0x18, 0xd5, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xef, 0xa6, 0xb7, 0xa7, 0x81, 0x40, 0x13, 0x17, 0x25, 0x0, 0x93, 0x87, 0x87, 0x73, 0xba, 0x97, 0x84, 0x43, 0x2a, 0x84, 0xe3, 0x81, 0xd4, 0xfe, 0x9c, 0x40, 0x26, 0x85, 0x32, 0x89, 0x93, 0xe7, 0x7, 0x20, 0x9c, 0xc0, 0xef, 0xf0, 0x7f, 0xf2, 0x9c, 0x40, 0x5, 0x67, 0x13, 0x7, 0x7, 0xc0, 0xd9, 0x8f, 0x9c, 0xc0, 0x22, 0x85, 0xef, 0xa0, 0xcf, 0xe8, 0x63, 0xa, 0x9, 0x0, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x6f, 0xa0, 0x2f, 0xe2, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x26, 0xd2, 0x22, 0xd4, 0x13, 0x84, 0xc1, 0xb5, 0x8, 0x4c, 0x6, 0xd6, 0x4a, 0xd0, 0x4e, 0xce, 0x2, 0xc2, 0xef, 0x10, 0x40, 0x41, 0x8, 0x4c, 0x5, 0x49, 0xef, 0x10, 0x80, 0x48, 0x3d, 0xed, 0x8, 0x4c, 0xef, 0x10, 0x60, 0x61, 0x92, 0x47, 0x99, 0xc3, 0xef, 0x60, 0x1f, 0xd4, 0x2, 0xc6, 0x8, 0x4c, 0xef, 0x10, 0xa0, 0x72, 0x51, 0xed, 0xb2, 0x47, 0x99, 0xc3, 0xef, 0x60, 0xff, 0xd2, 0x8, 0x4c, 0x2c, 0x0, 0x93, 0x84, 0xc1, 0xb5, 0xef, 0x10, 0x50, 0x6, 0x1, 0x49, 0x2, 0xc6, 0xa1, 0x49, 0xa2, 0x47, 0xb3, 0xd7, 0x27, 0x1, 0x85, 0x8b, 0x91, 0xcb, 0x1c, 0x48, 0x81, 0xc7, 0x13, 0x75, 0xf9, 0xf, 0x82, 0x97, 0x88, 0x50, 0x6c, 0x0, 0xef, 0xf0, 0x4f, 0xb4, 0x5, 0x9, 0x91, 0x4, 0xe3, 0x10, 0x39, 0xff, 0xb2, 0x47, 0x99, 0xc3, 0xef, 0x60, 0x1f, 0xcf, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x28, 0x4c, 0x81, 0x46, 0x50, 0x0, 0x6c, 0x0, 0xef, 0xf0, 0x8f, 0xa4, 0x63, 0x1a, 0x25, 0x1, 0x8, 0x4c, 0x30, 0x0, 0x6c, 0x0, 0xef, 0x10, 0xa0, 0x49, 0x9, 0xe9, 0xa2, 0x47, 0xed, 0xd3, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0xcf, 0x95, 0x1, 0x49, 0x85, 0x49, 0xa2, 0x47, 0xe3, 0x71, 0xf9, 0xf6, 0x68, 0x44, 0x4c, 0x0, 0xef, 0xf0, 0x8f, 0xae, 0xe3, 0x11, 0x35, 0xff, 0x5, 0x9, 0xf5, 0xb7, 0xef, 0x60, 0xff, 0xc2, 0x8, 0x4c, 0xef, 0x10, 0xa0, 0x66, 0x2a, 0x89, 0xef, 0x60, 0x1f, 0xc5, 0xe3, 0x7, 0x9, 0xf4, 0x28, 0x40, 0x6c, 0x0, 0xef, 0xf0, 0x4f, 0xac, 0xd5, 0xb7, 0x1, 0x11, 0x22, 0xcc, 0x13, 0x84, 0xc1, 0xb5, 0x8, 0x4c, 0xfd, 0x57, 0x6c, 0x0, 0x6, 0xce, 0x26, 0xca, 0x3e, 0xc6, 0xef, 0x10, 0x60, 0x77, 0x8, 0x4c, 0xef, 0x10, 0xa0, 0x32, 0xaa, 0x84, 0x1, 0xed, 0xef, 0x60, 0xff, 0xbe, 0x8, 0x4c, 0xef, 0x10, 0xc0, 0x67, 0xef, 0x60, 0x3f, 0xc1, 0x8, 0x4c, 0x85, 0x45, 0xef, 0x10, 0x20, 0x2f, 0xf2, 0x40, 0x62, 0x44, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x26, 0xca, 0x4a, 0xc8, 0x6, 0xce, 0x22, 0xcc, 0x93, 0x84, 0xc1, 0xb5, 0x5, 0x49, 0x88, 0x4c, 0x70, 0x0, 0x2c, 0x0, 0x2, 0xc6, 0xef, 0x10, 0x40, 0x43, 0x2a, 0x84, 0x15, 0xed, 0xa8, 0x4c, 0x81, 0x46, 0x7d, 0x56, 0x2c, 0x0, 0xef, 0xe0, 0x3f, 0xf8, 0x63, 0x5, 0x25, 0x3, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x70, 0x4f, 0x8a, 0xe8, 0x44, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0xe0, 0x7f, 0xf6, 0xe3, 0x14, 0x25, 0xff, 0x5, 0x4, 0xb2, 0x47, 0xe3, 0x66, 0xf4, 0xfe, 0x75, 0xbf, 0x1, 0x44, 0xdd, 0xbf, 0x93, 0x7, 0x50, 0x10, 0x63, 0x1c, 0xf5, 0x2, 0x88, 0x4c, 0xef, 0x10, 0x40, 0x33, 0x2a, 0x84, 0x15, 0xe5, 0xa8, 0x40, 0x81, 0x45, 0xef, 0xf0, 0x8f, 0xbc, 0x2a, 0x84, 0x9, 0xc9, 0xef, 0x60, 0x5f, 0xb5, 0x88, 0x4c, 0xef, 0x10, 0x80, 0x63, 0xef, 0x60, 0x9f, 0xb7, 0xdd, 0xb7, 0xef, 0x60, 0x5f, 0xb4, 0x88, 0x4c, 0xef, 0x10, 0x60, 0x60, 0xef, 0x60, 0x9f, 0xb6, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0x5, 0x61, 0x82, 0x80, 0x79, 0x71, 0x37, 0x36, 0x81, 0x40, 0x22, 0xd4, 0x78, 0x0, 0x2a, 0x84, 0x81, 0x46, 0x13, 0x6, 0x6, 0xc, 0x81, 0x45, 0x13, 0x5, 0x0, 0x4, 0x52, 0xcc, 0x6, 0xd6, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x56, 0xca, 0x5a, 0xc8, 0x2, 0xc6, 0xef, 0x20, 0x8f, 0xc3, 0x2a, 0x8a, 0x2d, 0xe5, 0x83, 0xa7, 0xc1, 0xb5, 0x63, 0x97, 0x7, 0x1a, 0x13, 0x6, 0xc0, 0x6, 0x81, 0x45, 0x13, 0x85, 0xc1, 0xb5, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x1c, 0xb7, 0x7, 0x40, 0xb3, 0x93, 0x89, 0xc1, 0xb5, 0xfd, 0x17, 0x13, 0x87, 0x81, 0xbb, 0x61, 0x46, 0xa2, 0x85, 0x13, 0x85, 0xc1, 0xb5, 0x23, 0xa2, 0xf9, 0x4, 0x23, 0xa8, 0xf9, 0x4, 0x23, 0xa0, 0xe9, 0x6, 0x23, 0xa2, 0xf9, 0x6, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x1a, 0x5, 0x66, 0x13, 0x6, 0x46, 0x80, 0x85, 0x45, 0x13, 0x5, 0x80, 0x5, 0xef, 0xd0, 0x8e, 0xdc, 0x23, 0xac, 0xa9, 0x0, 0xaa, 0x84, 0x5, 0xe1, 0xef, 0xf0, 0x9f, 0xcb, 0x13, 0xa, 0x10, 0x10, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0xd2, 0x4a, 0x42, 0x4b, 0x52, 0x85, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x5c, 0x40, 0x58, 0x48, 0x85, 0x65, 0x5c, 0xc5, 0x1c, 0x40, 0xd, 0x83, 0x5, 0x8b, 0x1c, 0xc9, 0x83, 0x47, 0x45, 0x1, 0x93, 0x85, 0xc5, 0x80, 0xf9, 0x9b, 0xd9, 0x8f, 0x23, 0xa, 0xf5, 0x0, 0x8, 0x44, 0x5c, 0x44, 0x88, 0xcc, 0xdc, 0xcc, 0x5, 0x5, 0xd1, 0x47, 0x33, 0x5, 0xf5, 0x2, 0xc8, 0xd0, 0xef, 0xd0, 0xe, 0xc4, 0x88, 0xd0, 0x4d, 0xd5, 0x3, 0xa5, 0x89, 0x1, 0x13, 0x89, 0xc1, 0xb5, 0x81, 0x44, 0xef, 0x0, 0x30, 0x78, 0x81, 0x45, 0x7d, 0x55, 0xef, 0xe0, 0xff, 0xdd, 0x23, 0xa0, 0xa9, 0x4, 0x21, 0x4b, 0xa5, 0x4a, 0x63, 0x89, 0x64, 0x1, 0xd, 0x46, 0x81, 0x45, 0x5, 0x45, 0xef, 0xe0, 0x1f, 0xd3, 0x23, 0x20, 0xa9, 0x2, 0x83, 0x27, 0x9, 0x2, 0xb5, 0xdb, 0x85, 0x4, 0x11, 0x9, 0xe3, 0x92, 0x54, 0xff, 0x83, 0xa5, 0x89, 0x0, 0x2e, 0x85, 0xef, 0xe0, 0xdf, 0xda, 0x23, 0xa6, 0xa9, 0x4, 0x31, 0xdd, 0x8, 0x44, 0x1, 0x46, 0x91, 0x45, 0xef, 0xe0, 0x5f, 0xd0, 0x23, 0xac, 0xa9, 0x4, 0x31, 0xd5, 0x37, 0xb9, 0x81, 0x40, 0x13, 0xb, 0xc9, 0x8a, 0x83, 0x2a, 0x8b, 0x1, 0xb2, 0x47, 0x3, 0x25, 0xb, 0x0, 0x44, 0x48, 0x1, 0x46, 0xd6, 0x85, 0x23, 0xae, 0xf9, 0x0, 0xef, 0xf0, 0x1f, 0xc5, 0x3, 0x25, 0x4b, 0x0, 0x89, 0x80, 0x85, 0x88, 0x26, 0x86, 0xd6, 0x85, 0xef, 0xf0, 0x1f, 0xc4, 0x3, 0x25, 0x8b, 0x0, 0x26, 0x86, 0xd6, 0x85, 0xef, 0xf0, 0x5f, 0xc3, 0x5c, 0x48, 0x13, 0x9, 0xc9, 0x8a, 0x89, 0x8b, 0x99, 0xe7, 0x3, 0x25, 0xc9, 0x0, 0x26, 0x86, 0xd6, 0x85, 0xef, 0xf0, 0xff, 0xc1, 0x5c, 0x48, 0x85, 0x8b, 0x99, 0xe7, 0x3, 0x25, 0x9, 0x1, 0x26, 0x86, 0xd6, 0x85, 0xef, 0xf0, 0xdf, 0xc0, 0x3, 0x25, 0x49, 0x1, 0x26, 0x86, 0xd6, 0x85, 0xef, 0xf0, 0x1f, 0xc0, 0xb7, 0x67, 0x9, 0x60, 0x93, 0x87, 0x7, 0x8, 0x98, 0x5b, 0x13, 0x67, 0x17, 0x0, 0x98, 0xdb, 0x98, 0x5b, 0x13, 0x67, 0x27, 0x0, 0x98, 0xdb, 0x98, 0x5b, 0x75, 0x9b, 0x98, 0xdb, 0x3, 0xa5, 0x89, 0x1, 0xef, 0x0, 0xb0, 0x76, 0xef, 0xf0, 0x1f, 0xd8, 0x65, 0xbd, 0x13, 0xa, 0x30, 0x10, 0x4d, 0xbd, 0x1, 0x11, 0x93, 0x87, 0xc1, 0xb5, 0x2a, 0xc6, 0x88, 0x4f, 0x6c, 0x0, 0x6, 0xce, 0xef, 0x10, 0x60, 0x4b, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0x9d, 0x47, 0x63, 0xe2, 0xa7, 0x2, 0x85, 0x47, 0x1, 0x11, 0xb3, 0x97, 0xa7, 0x0, 0x3e, 0xc6, 0x93, 0x87, 0xc1, 0xb5, 0x88, 0x4f, 0x6c, 0x0, 0x6, 0xce, 0xef, 0x10, 0xc0, 0x49, 0xf2, 0x40, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x4e, 0xc6, 0x6, 0xce, 0x26, 0xca, 0x4a, 0xc8, 0x52, 0xc4, 0xae, 0x89, 0x13, 0x4, 0x20, 0x10, 0xb9, 0xc5, 0xb7, 0x7, 0x80, 0xbf, 0xaa, 0x97, 0x37, 0x7, 0x8, 0x0, 0xaa, 0x84, 0x13, 0x4, 0x20, 0x10, 0x63, 0xfe, 0xe7, 0x2, 0x93, 0x77, 0x35, 0x0, 0x95, 0xeb, 0x13, 0x89, 0xc1, 0xb5, 0x3, 0x25, 0xc9, 0x4, 0xb6, 0x85, 0x32, 0x8a, 0xef, 0xf0, 0xcf, 0x92, 0x85, 0x47, 0x13, 0x4, 0x70, 0x10, 0x63, 0x1e, 0xf5, 0x0, 0xef, 0x60, 0x3f, 0x8b, 0x3, 0x25, 0x89, 0x1, 0xd2, 0x86, 0x4e, 0x86, 0xa6, 0x85, 0xef, 0x10, 0x80, 0x28, 0x2a, 0x84, 0xef, 0x60, 0xdf, 0x8c, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x93, 0x87, 0xc1, 0xb5, 0x22, 0xcc, 0x2a, 0x84, 0xa8, 0x4f, 0x2e, 0x86, 0x6c, 0x0, 0x6, 0xce, 0x2, 0xc6, 0xef, 0xe0, 0xbf, 0xfc, 0xaa, 0x87, 0x19, 0xc0, 0x32, 0x47, 0x18, 0xc0, 0x5, 0x47, 0x13, 0x5, 0x70, 0x10, 0x63, 0x93, 0xe7, 0x0, 0x1, 0x45, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x73, 0x24, 0x20, 0x7e, 0xfd, 0x56, 0x22, 0x86, 0xef, 0xf0, 0xbf, 0xf4, 0x19, 0xe9, 0xfd, 0x55, 0x68, 0x0, 0xef, 0xf0, 0x5f, 0xfb, 0x11, 0xe5, 0xb2, 0x47, 0x63, 0x84, 0x87, 0x0, 0x13, 0x5, 0x30, 0x10, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x21, 0xc1, 0x5c, 0x45, 0x1, 0x11, 0x2a, 0xc6, 0x6, 0xce, 0x13, 0x5, 0x20, 0x10, 0x85, 0xc7, 0xef, 0x60, 0x5f, 0x81, 0xb2, 0x45, 0x93, 0x87, 0xc1, 0xb5, 0x98, 0x45, 0xd4, 0x45, 0x19, 0xcf, 0x54, 0xc7, 0xd4, 0x45, 0x88, 0x4f, 0x98, 0xc2, 0x23, 0xa6, 0x5, 0x0, 0xef, 0x10, 0x0, 0x32, 0xef, 0x60, 0x3f, 0x82, 0x1, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xb4, 0xd3, 0xd5, 0xb7, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x1, 0x11, 0xb7, 0x7, 0x80, 0xbf, 0x22, 0xcc, 0x6, 0xce, 0x26, 0xca, 0xaa, 0x97, 0x37, 0x7, 0x8, 0x0, 0x1, 0x44, 0x63, 0xf2, 0xe7, 0x4, 0x93, 0x77, 0x35, 0x0, 0x2a, 0xc6, 0x1, 0x44, 0x85, 0xef, 0x85, 0x65, 0x93, 0x85, 0xc5, 0x80, 0x41, 0x45, 0xef, 0xd0, 0xce, 0x9a, 0x2a, 0x84, 0x5, 0xc5, 0x93, 0x84, 0xc1, 0xb5, 0xaa, 0x85, 0x32, 0x46, 0x88, 0x4c, 0xef, 0x10, 0x60, 0x22, 0xef, 0x60, 0xef, 0xf9, 0xbc, 0x50, 0x23, 0x24, 0x4, 0x0, 0x5c, 0xc4, 0x80, 0xc3, 0x93, 0x7, 0x84, 0x0, 0xbc, 0xd0, 0xef, 0x60, 0x8f, 0xfb, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x5, 0x61, 0x82, 0x80, 0x3d, 0xc5, 0x41, 0x11, 0x26, 0xc2, 0x93, 0x84, 0xc1, 0xb5, 0x4a, 0xc0, 0x2a, 0x89, 0xa8, 0x40, 0x6, 0xc6, 0x22, 0xc4, 0xef, 0xe0, 0x3f, 0xfd, 0x31, 0xcd, 0xef, 0x60, 0xf, 0xf6, 0x88, 0x4c, 0xef, 0x10, 0xa0, 0x1c, 0x2a, 0x84, 0x1, 0xc5, 0x1c, 0x41, 0x63, 0xd8, 0x7, 0x0, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x1, 0x45, 0xef, 0x60, 0x5f, 0xc5, 0xbc, 0x50, 0x23, 0x24, 0x5, 0x0, 0x5c, 0xc5, 0x88, 0xc3, 0x93, 0x7, 0x85, 0x0, 0xbc, 0xd0, 0xef, 0x60, 0xef, 0xf5, 0x23, 0x20, 0x89, 0x0, 0x1c, 0x40, 0x13, 0x5, 0xc0, 0x10, 0x13, 0x97, 0x17, 0x0, 0x63, 0x53, 0x7, 0x0, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x13, 0x5, 0x20, 0x10, 0x82, 0x80, 0x13, 0x5, 0x70, 0x10, 0xed, 0xb7, 0x19, 0xc5, 0x89, 0xc5, 0x1c, 0x41, 0x92, 0x7, 0xc9, 0x83, 0x9c, 0xc1, 0x48, 0x41, 0x82, 0x80, 0xb7, 0x7, 0x88, 0x40, 0x3, 0xa7, 0x47, 0xfb, 0x39, 0xeb, 0x41, 0x11, 0x6, 0xc6, 0x1, 0xed, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x45, 0xe9, 0xef, 0x10, 0xf0, 0x58, 0x13, 0x5, 0x20, 0x10, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x10, 0x41, 0x9, 0x47, 0x63, 0xa, 0xe6, 0x0, 0x37, 0xa5, 0x81, 0x40, 0x89, 0x45, 0x13, 0x5, 0x85, 0xeb, 0xef, 0x10, 0xe0, 0x28, 0xc5, 0xb7, 0x70, 0x45, 0xb7, 0xc5, 0xad, 0xde, 0x93, 0x85, 0xf5, 0xea, 0x63, 0x7, 0xb6, 0x0, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x85, 0xf0, 0xd5, 0xb7, 0x23, 0xaa, 0xa7, 0xfa, 0x1, 0x45, 0xd1, 0xb7, 0x1, 0x45, 0x82, 0x80, 0x83, 0xa5, 0x81, 0xbc, 0x37, 0xa5, 0x81, 0x40, 0x41, 0x11, 0x13, 0x5, 0x85, 0xe7, 0x6, 0xc6, 0xef, 0x10, 0x40, 0x25, 0xb2, 0x40, 0x41, 0x1, 0x81, 0xaa, 0x79, 0x71, 0x22, 0xd4, 0x37, 0x94, 0x81, 0x40, 0x13, 0x4, 0x84, 0x69, 0x1c, 0x40, 0x6, 0xd6, 0x26, 0xd2, 0x2, 0xce, 0x13, 0x5, 0x30, 0x10, 0x9d, 0xcb, 0xb7, 0x4, 0x88, 0x40, 0x83, 0xa7, 0x44, 0xfb, 0x9c, 0x53, 0x82, 0x97, 0x83, 0xa7, 0x44, 0xfb, 0x1d, 0xc5, 0x9c, 0x4b, 0x8, 0x40, 0x6c, 0x8, 0x82, 0x97, 0xf2, 0x47, 0x99, 0xc7, 0x83, 0xa7, 0x44, 0xfb, 0x2a, 0xc6, 0xdc, 0x43, 0x82, 0x97, 0x32, 0x45, 0x7d, 0x15, 0x33, 0x35, 0xa0, 0x0, 0x33, 0x5, 0xa0, 0x40, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x9c, 0x4f, 0x8, 0x40, 0xfd, 0x55, 0x82, 0x97, 0xd5, 0xb7, 0x79, 0x71, 0x22, 0xd4, 0x37, 0x94, 0x81, 0x40, 0x13, 0x4, 0x84, 0x69, 0x1c, 0x40, 0x6, 0xd6, 0x26, 0xd2, 0x2, 0xce, 0x13, 0x5, 0x30, 0x10, 0x9d, 0xcb, 0xb7, 0x4, 0x88, 0x40, 0x83, 0xa7, 0x44, 0xfb, 0x9c, 0x53, 0x82, 0x97, 0x83, 0xa7, 0x44, 0xfb, 0x1d, 0xc5, 0xdc, 0x4b, 0x8, 0x40, 0x6c, 0x8, 0x82, 0x97, 0xf2, 0x47, 0x99, 0xc7, 0x83, 0xa7, 0x44, 0xfb, 0x2a, 0xc6, 0xdc, 0x43, 0x82, 0x97, 0x32, 0x45, 0x7d, 0x15, 0x33, 0x35, 0xa0, 0x0, 0x33, 0x5, 0xa0, 0x40, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0xdc, 0x4f, 0x8, 0x40, 0x82, 0x97, 0xdd, 0xb7, 0x13, 0x7, 0x60, 0x2, 0xaa, 0x87, 0x63, 0x8, 0xe5, 0x2, 0x63, 0x6d, 0xa7, 0x0, 0x5, 0x47, 0x1, 0x45, 0x63, 0x83, 0xe7, 0x2, 0x9, 0x47, 0x5, 0x45, 0x63, 0x8f, 0xe7, 0x0, 0x13, 0x5, 0xf0, 0xf, 0x82, 0x80, 0x93, 0x7, 0x35, 0xfd, 0x5, 0x47, 0x13, 0x5, 0xf0, 0xf, 0x63, 0x65, 0xf7, 0x0, 0xd, 0x45, 0x82, 0x80, 0x9, 0x45, 0x82, 0x80, 0x91, 0xcd, 0xa5, 0x47, 0x63, 0x1, 0xf5, 0x4, 0x63, 0xec, 0xa7, 0x0, 0x91, 0x47, 0x63, 0x4, 0xf5, 0x2, 0x9d, 0x47, 0x63, 0x6, 0xf5, 0x2, 0x23, 0xa0, 0x5, 0x0, 0x7d, 0x55, 0x82, 0x80, 0x93, 0x7, 0xd0, 0x2, 0x63, 0x4, 0xf5, 0x2, 0x93, 0x7, 0xe0, 0x2, 0xe3, 0x16, 0xf5, 0xfe, 0x83, 0xa7, 0xc1, 0xbd, 0x19, 0xa0, 0x83, 0xa7, 0xc1, 0xbc, 0x9c, 0xc1, 0x1, 0x45, 0x82, 0x80, 0x83, 0xa7, 0x1, 0xbd, 0xdd, 0xbf, 0x83, 0xa7, 0x41, 0xbd, 0xc5, 0xbf, 0x83, 0xa7, 0x81, 0xbd, 0xed, 0xb7, 0x41, 0x11, 0xb7, 0x97, 0x81, 0x40, 0x26, 0xc2, 0x93, 0x84, 0x87, 0x69, 0x98, 0x40, 0x4a, 0xc0, 0x6, 0xc6, 0x22, 0xc4, 0x13, 0x89, 0x87, 0x69, 0x1d, 0xef, 0x37, 0x4, 0x88, 0x40, 0x83, 0x27, 0x44, 0xfb, 0x85, 0x45, 0x5, 0x45, 0x9c, 0x47, 0x82, 0x97, 0x88, 0xc0, 0xd, 0xe5, 0x83, 0x27, 0x44, 0xfb, 0xdc, 0x57, 0x82, 0x97, 0xaa, 0x85, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0x85, 0x6d, 0xef, 0x10, 0xc0, 0xb, 0x13, 0x4, 0x10, 0x10, 0x22, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x49, 0x29, 0xd, 0xc5, 0x37, 0x4, 0x88, 0x40, 0x83, 0x27, 0x44, 0xfb, 0xdc, 0x57, 0x82, 0x97, 0xaa, 0x85, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x6f, 0xef, 0x10, 0xc0, 0x8, 0x83, 0x27, 0x44, 0xfb, 0x3, 0x25, 0x9, 0x0, 0xdc, 0x47, 0x82, 0x97, 0xd1, 0xb7, 0xef, 0xf0, 0x1f, 0xe3, 0x7d, 0x54, 0x61, 0xf1, 0xa1, 0x24, 0xb7, 0x7, 0x88, 0x40, 0x83, 0xa7, 0x47, 0xfb, 0x2a, 0x84, 0x9c, 0x5b, 0x82, 0x97, 0x9, 0xc9, 0x93, 0x5, 0x20, 0x3, 0x11, 0x45, 0xed, 0x20, 0xa9, 0x22, 0xef, 0xf0, 0xff, 0xe6, 0x79, 0xbf, 0x85, 0x45, 0x21, 0x45, 0xcd, 0xbf, 0xb7, 0xf7, 0xa, 0x60, 0x90, 0x47, 0x41, 0x11, 0x9c, 0x47, 0x26, 0xc2, 0x4a, 0xc0, 0x6, 0xc6, 0x22, 0xc4, 0x3d, 0x8a, 0x21, 0x47, 0xaa, 0x84, 0x2e, 0x89, 0x63, 0x10, 0xe6, 0x2, 0xb7, 0x7, 0x88, 0x40, 0x83, 0xa7, 0x47, 0xfb, 0x9c, 0x5b, 0x82, 0x97, 0x37, 0x6, 0xfa, 0x0, 0x39, 0xc9, 0x37, 0x26, 0xf4, 0x0, 0x13, 0x6, 0x6, 0x40, 0xb1, 0xa0, 0xc2, 0x7, 0x13, 0xd4, 0x47, 0x1, 0x91, 0x47, 0x63, 0x1e, 0xf6, 0x4, 0xb7, 0x7, 0x88, 0x40, 0x83, 0xa7, 0x47, 0xfb, 0x5, 0x4, 0xbc, 0x47, 0x82, 0x97, 0x37, 0x46, 0xf, 0x0, 0x13, 0x6, 0x6, 0x24, 0x37, 0x8, 0x0, 0x12, 0x33, 0x6, 0xc5, 0x2, 0x13, 0x7, 0xa0, 0x7, 0x33, 0x7, 0x87, 0x2, 0x93, 0x56, 0xf6, 0x41, 0xb3, 0x35, 0x88, 0x2, 0x33, 0x5, 0x88, 0x2, 0xba, 0x95, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x40, 0x0, 0x2a, 0x86, 0x81, 0x46, 0x13, 0x95, 0x34, 0x1, 0x93, 0xd5, 0xd4, 0x0, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x0, 0xff, 0x23, 0x20, 0xa9, 0x0, 0x5, 0x45, 0xd, 0xa8, 0x89, 0x47, 0x63, 0x13, 0xf6, 0x2, 0x5, 0x4, 0x37, 0x5, 0x0, 0x12, 0x13, 0x7, 0xa0, 0x7, 0x37, 0x36, 0x31, 0x1, 0xb3, 0x35, 0x85, 0x2, 0x13, 0x6, 0x6, 0xd0, 0x81, 0x46, 0x33, 0x7, 0x87, 0x2, 0x33, 0x5, 0x85, 0x2, 0x55, 0xbf, 0x85, 0x47, 0x1, 0x45, 0xe3, 0xd, 0xf6, 0xfa, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x21, 0x47, 0xaa, 0x87, 0x63, 0x17, 0xe5, 0x0, 0x5, 0x47, 0x63, 0x8b, 0xe5, 0x0, 0x1, 0x45, 0x82, 0x80, 0x11, 0x47, 0x63, 0x1a, 0xe5, 0x2, 0x13, 0x7, 0x10, 0x3, 0xe3, 0x79, 0xb7, 0xfe, 0x37, 0xf7, 0xa, 0x60, 0x8, 0x47, 0xbd, 0x8b, 0xfd, 0x15, 0x41, 0x99, 0xc9, 0x8f, 0x1c, 0xc7, 0xc1, 0x66, 0x1c, 0x47, 0xfd, 0x16, 0x92, 0x5, 0xf5, 0x8d, 0xc1, 0x76, 0xbd, 0x6, 0xf5, 0x8f, 0xdd, 0x8d, 0xc, 0xc7, 0x5, 0x45, 0x29, 0xa8, 0x9, 0x47, 0x63, 0x15, 0xe5, 0x0, 0x13, 0x7, 0x70, 0x2, 0xe9, 0xb7, 0x85, 0x46, 0x1, 0x45, 0x63, 0x94, 0xd7, 0x0, 0xe3, 0x62, 0xb7, 0xfc, 0x82, 0x80, 0x5d, 0x71, 0xa2, 0xc4, 0x37, 0xf4, 0xa, 0x60, 0x1c, 0x4c, 0xa6, 0xc2, 0xb7, 0xb4, 0x81, 0x40, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x86, 0xc6, 0x93, 0xe7, 0x27, 0x0, 0x93, 0x84, 0x44, 0x83, 0x37, 0xf9, 0xa, 0x60, 0x1c, 0xcc, 0x13, 0x8a, 0x44, 0x1, 0x13, 0x4, 0x4, 0x40, 0x95, 0x4a, 0x93, 0x9, 0xc9, 0x4d, 0x51, 0x46, 0xa6, 0x85, 0x28, 0x0, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x60, 0x9e, 0x51, 0x46, 0xd2, 0x85, 0x68, 0x8, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x80, 0x9d, 0x38, 0x0, 0x81, 0x47, 0x14, 0x43, 0x63, 0x99, 0x86, 0x2, 0x8a, 0x7, 0x18, 0x18, 0xba, 0x97, 0x83, 0xa7, 0xc7, 0xfe, 0x1c, 0xc0, 0x11, 0x4, 0xe3, 0x16, 0x34, 0xfd, 0x83, 0x27, 0x89, 0x1, 0xb6, 0x40, 0x26, 0x44, 0xf5, 0x9b, 0x23, 0x2c, 0xf9, 0x0, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x61, 0x61, 0x82, 0x80, 0x85, 0x7, 0x11, 0x7, 0xe3, 0x94, 0x57, 0xfd, 0x81, 0x47, 0xc9, 0xbf, 0xb7, 0xb7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0x44, 0x3, 0xc7, 0x7, 0x0, 0x21, 0xe3, 0x37, 0x97, 0x81, 0x40, 0xb7, 0x6, 0x88, 0x40, 0x13, 0x7, 0x87, 0x69, 0x23, 0xa2, 0xe6, 0xfc, 0xb7, 0x6, 0x88, 0x40, 0x13, 0x87, 0xc1, 0xbe, 0x23, 0xae, 0xe6, 0xfa, 0x37, 0x97, 0x81, 0x40, 0xb7, 0x6, 0x88, 0x40, 0x13, 0x7, 0x87, 0x6a, 0x23, 0xa0, 0xe6, 0xfc, 0x13, 0x87, 0xc1, 0xbc, 0xb7, 0x6, 0x88, 0x40, 0x23, 0xa8, 0xe6, 0xfa, 0x5, 0x47, 0x23, 0x80, 0xe7, 0x0, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x4a, 0xc0, 0x26, 0xc2, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x40, 0xf8, 0xaa, 0x85, 0x37, 0xa5, 0x81, 0x40, 0x13, 0x5, 0x45, 0xf8, 0xef, 0x0, 0xf0, 0x60, 0xef, 0xf0, 0x3f, 0xf9, 0x37, 0x9, 0x88, 0x40, 0x83, 0x27, 0x89, 0xfb, 0x1, 0x44, 0x8d, 0xeb, 0xb7, 0x4, 0x88, 0x40, 0x83, 0xa7, 0x44, 0xfb, 0x13, 0x5, 0x40, 0x3, 0xdc, 0x53, 0x82, 0x97, 0x23, 0x2c, 0xa9, 0xfa, 0xd, 0xe5, 0x83, 0xa7, 0x44, 0xfb, 0x13, 0x4, 0x10, 0x10, 0xdc, 0x57, 0x82, 0x97, 0xaa, 0x85, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x71, 0xef, 0x0, 0xf0, 0x5c, 0x22, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0x7, 0xb1, 0x1c, 0xc1, 0xb7, 0x47, 0x81, 0x40, 0x93, 0x87, 0x7, 0x81, 0x5c, 0xc1, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0x87, 0xb1, 0x1c, 0xc5, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0x47, 0xb1, 0x5c, 0xc5, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0x87, 0xb0, 0x1c, 0xc9, 0xb7, 0x47, 0x81, 0x40, 0x93, 0x87, 0xa7, 0x84, 0x5c, 0xc9, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0xc7, 0xb1, 0x1c, 0xcd, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0x7, 0xb3, 0x5c, 0xcd, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0xc7, 0xb2, 0x1c, 0xd1, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0x87, 0xb2, 0x5c, 0xd1, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0x87, 0xb3, 0x1c, 0xd5, 0xb7, 0x17, 0x0, 0x40, 0x93, 0x87, 0xc7, 0xb3, 0x5c, 0xd5, 0xb7, 0x47, 0x81, 0x40, 0x93, 0x87, 0xe7, 0x94, 0x1c, 0xd9, 0x85, 0xbf, 0x1, 0x11, 0x4a, 0xc8, 0x52, 0xc4, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4e, 0xc6, 0x2a, 0x8a, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x80, 0xec, 0x7d, 0x59, 0x6d, 0xe5, 0x83, 0xa4, 0xc1, 0xbe, 0x13, 0x84, 0xc1, 0xbe, 0xed, 0xc8, 0x2a, 0x89, 0x63, 0x16, 0xa, 0x2, 0x83, 0xc7, 0x4, 0x0, 0x3, 0x47, 0x44, 0x0, 0xfd, 0x17, 0x63, 0x4f, 0xf7, 0x0, 0x83, 0x57, 0x64, 0x0, 0x13, 0x7, 0x0, 0x4, 0x63, 0x88, 0xe7, 0x0, 0xfd, 0x17, 0xc2, 0x7, 0xc1, 0x83, 0x5, 0x47, 0x63, 0x64, 0xf7, 0xc, 0x5, 0x4a, 0xb7, 0x9, 0x88, 0x40, 0x83, 0xa7, 0x49, 0xfb, 0x13, 0x5, 0x4, 0x2, 0xdc, 0x5b, 0x82, 0x97, 0x81, 0x47, 0x63, 0x17, 0xa, 0x0, 0x83, 0x47, 0x44, 0x0, 0x85, 0x7, 0x93, 0xf7, 0xf7, 0xf, 0x23, 0x2, 0xf4, 0x0, 0x3, 0xc7, 0x4, 0x0, 0x7d, 0x17, 0x63, 0x9e, 0xe7, 0x0, 0x3, 0x57, 0x64, 0x0, 0x93, 0x6, 0x0, 0x4, 0x63, 0x8, 0xd7, 0x0, 0x7d, 0x17, 0x42, 0x7, 0x41, 0x83, 0x85, 0x46, 0x63, 0xe4, 0xe6, 0x2, 0x4c, 0x44, 0x3, 0xc7, 0x14, 0x0, 0x8a, 0x7, 0xa6, 0x97, 0x33, 0x7, 0xb7, 0x2, 0x83, 0xc5, 0x27, 0x0, 0x83, 0xa7, 0x49, 0xfb, 0x1, 0x46, 0x13, 0x85, 0xc1, 0xc0, 0xbc, 0x43, 0xb3, 0x5, 0xb7, 0x2, 0x82, 0x97, 0x83, 0x47, 0x44, 0x0, 0x81, 0x49, 0x13, 0x97, 0x27, 0x0, 0x1c, 0x40, 0xba, 0x97, 0x3, 0xc7, 0x37, 0x0, 0x19, 0xc3, 0x83, 0x29, 0x44, 0x3, 0x3, 0xc7, 0x47, 0x0, 0x9, 0xe7, 0x83, 0xc7, 0x57, 0x0, 0x81, 0x44, 0x91, 0xc3, 0x44, 0x48, 0x97, 0xd0, 0x7e, 0xff, 0xe7, 0x80, 0x60, 0xdf, 0x89, 0x45, 0x11, 0x45, 0xef, 0xf0, 0x6e, 0xe6, 0x63, 0x84, 0x9, 0x0, 0x1, 0x45, 0x82, 0x99, 0x99, 0xc0, 0x1, 0x45, 0x82, 0x94, 0xf2, 0x40, 0x62, 0x44, 0x4a, 0x85, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x81, 0x44, 0x81, 0x49, 0x7d, 0x59, 0xe9, 0xb7, 0x1, 0x45, 0x6f, 0xf0, 0x1f, 0xee, 0x41, 0x11, 0x22, 0xc4, 0x4a, 0xc0, 0x13, 0x89, 0xc1, 0xbe, 0x83, 0x27, 0x9, 0x1, 0x26, 0xc2, 0x6, 0xc6, 0x13, 0x84, 0xc1, 0xbe, 0xb7, 0x4, 0x88, 0x40, 0x8d, 0xef, 0x83, 0xa7, 0x44, 0xfb, 0x85, 0x45, 0x5, 0x45, 0x9c, 0x47, 0x82, 0x97, 0x23, 0x28, 0xa9, 0x0, 0x5, 0xe5, 0x83, 0xa7, 0x44, 0xfb, 0xdc, 0x57, 0x82, 0x97, 0xaa, 0x85, 0x37, 0x95, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x74, 0xef, 0x0, 0x50, 0x3d, 0x13, 0x5, 0x10, 0x10, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x93, 0x87, 0x1, 0xbe, 0x1c, 0xc0, 0x83, 0xa7, 0x44, 0xfb, 0xb7, 0x45, 0x81, 0x40, 0x13, 0x5, 0x4, 0x2, 0xdc, 0x5f, 0x1, 0x46, 0x93, 0x85, 0xe5, 0xd7, 0x82, 0x97, 0x1, 0x45, 0xd9, 0xbf, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x85, 0x82, 0x80, 0x19, 0x71, 0xda, 0xd0, 0x37, 0xbb, 0x81, 0x40, 0xde, 0xce, 0x13, 0x5, 0xb, 0x6e, 0xb7, 0xbb, 0x81, 0x40, 0xa6, 0xda, 0xce, 0xd6, 0x86, 0xde, 0xa2, 0xdc, 0xca, 0xd8, 0xd2, 0xd4, 0xd6, 0xd2, 0xe2, 0xcc, 0xe6, 0xca, 0xea, 0xc8, 0xee, 0xc6, 0xef, 0xd0, 0x6e, 0xf8, 0x83, 0xa9, 0x4b, 0x6e, 0x81, 0x44, 0x63, 0x9e, 0x9, 0x2, 0x78, 0x8, 0x34, 0x8, 0x1, 0x46, 0x85, 0x65, 0x21, 0x65, 0xef, 0xa0, 0xf, 0xd2, 0xaa, 0x84, 0x5, 0xe5, 0x62, 0x49, 0x5, 0x6a, 0x95, 0x6a, 0x4a, 0x9a, 0x1, 0x44, 0x93, 0x8a, 0xaa, 0xa, 0x37, 0xbc, 0x81, 0x40, 0x37, 0xd, 0xff, 0xfb, 0xc1, 0x6d, 0x63, 0x1b, 0x2a, 0x3, 0x23, 0xa2, 0x8b, 0x6e, 0x72, 0x45, 0xef, 0xa0, 0x6f, 0xda, 0x13, 0x5, 0xb, 0x6e, 0xef, 0xd0, 0x4e, 0xf5, 0xf6, 0x50, 0x66, 0x54, 0x46, 0x59, 0xb6, 0x59, 0x26, 0x5a, 0x96, 0x5a, 0x6, 0x5b, 0xf6, 0x4b, 0x66, 0x4c, 0xd6, 0x4c, 0x46, 0x4d, 0xb6, 0x4d, 0x26, 0x85, 0xd6, 0x54, 0x9, 0x61, 0x82, 0x80, 0x13, 0x6, 0x0, 0x2, 0xca, 0x85, 0x8, 0x10, 0x97, 0xc0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x60, 0x83, 0x57, 0x1, 0x2, 0xe3, 0x9d, 0x57, 0xfb, 0x85, 0x45, 0x13, 0x5, 0x40, 0x3, 0xef, 0x60, 0x6f, 0xcb, 0xaa, 0x8c, 0x49, 0xc9, 0x3, 0x27, 0xc, 0x6b, 0x83, 0x46, 0x21, 0x2, 0x85, 0x67, 0x18, 0xc1, 0x12, 0x57, 0x54, 0xc1, 0x5c, 0xc9, 0x58, 0xc5, 0x22, 0x57, 0x23, 0x6, 0x5, 0x2, 0x36, 0xc6, 0x18, 0xc9, 0x3, 0x47, 0x31, 0x2, 0x18, 0xc5, 0x72, 0x57, 0x13, 0x76, 0x17, 0x0, 0x5, 0x83, 0x5, 0x8b, 0xa3, 0x4, 0xc5, 0x2, 0x23, 0x5, 0xe5, 0x2, 0xef, 0xd0, 0x7e, 0xf9, 0xb2, 0x46, 0x5, 0xe5, 0xa3, 0x84, 0xc, 0x2, 0x41, 0x46, 0x6c, 0x10, 0x13, 0x85, 0x8c, 0x1, 0x97, 0xc0, 0x7e, 0xff, 0xe7, 0x80, 0x40, 0x5b, 0x63, 0x93, 0x9, 0x2, 0x23, 0xa8, 0x8c, 0x2, 0x66, 0x84, 0x13, 0x9, 0x9, 0x2, 0xe6, 0x89, 0x89, 0xb7, 0x91, 0xc6, 0x2, 0x57, 0x33, 0x77, 0xed, 0x0, 0xe3, 0x1b, 0xb7, 0xfd, 0x5, 0x47, 0xa3, 0x84, 0xec, 0x2, 0xf1, 0xb7, 0x3, 0xa7, 0x9, 0x3, 0x23, 0xa8, 0xec, 0x2, 0x23, 0xa8, 0x99, 0x3, 0xe1, 0xbf, 0x4, 0x58, 0x22, 0x85, 0xef, 0x60, 0xaf, 0xbd, 0x26, 0x84, 0x7d, 0xf8, 0x93, 0x4, 0x10, 0x10, 0x19, 0xbf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x11, 0xe5, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0xef, 0x60, 0x8f, 0xb6, 0x5c, 0x45, 0x2a, 0x84, 0x89, 0xef, 0x22, 0x85, 0xef, 0x60, 0xcf, 0xba, 0x1, 0x44, 0xf2, 0x40, 0x22, 0x85, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x37, 0xb9, 0x81, 0x40, 0x13, 0x5, 0x9, 0x6e, 0xef, 0xd0, 0xce, 0xe1, 0x93, 0x9, 0xf0, 0xf, 0x44, 0x44, 0x99, 0xcc, 0x1c, 0x40, 0x63, 0x85, 0x37, 0x1, 0xd8, 0x40, 0x63, 0x9b, 0xe7, 0x2, 0x5c, 0x40, 0x63, 0x85, 0x37, 0x1, 0x98, 0x44, 0x63, 0x95, 0xe7, 0x2, 0x8, 0x44, 0x19, 0xe9, 0x13, 0x5, 0x9, 0x6e, 0xef, 0xd0, 0x8e, 0xe0, 0x5c, 0x44, 0xdd, 0xd7, 0x1c, 0xc8, 0x9c, 0x5b, 0x5c, 0xc4, 0x7d, 0xb7, 0x93, 0x85, 0x84, 0x1, 0x97, 0xc0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x4e, 0x65, 0xd1, 0x9c, 0x58, 0x5c, 0xc4, 0x6d, 0xbf, 0x1, 0x11, 0x4e, 0xc6, 0xb7, 0xb9, 0x81, 0x40, 0x83, 0xa7, 0x49, 0x6e, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x6, 0xce, 0x2a, 0x84, 0xae, 0x84, 0x32, 0x89, 0x95, 0xcb, 0x93, 0x7, 0xf0, 0xf, 0x63, 0x2, 0xf4, 0x4, 0x51, 0x45, 0xef, 0x60, 0x4f, 0xb1, 0xd, 0xc5, 0x3, 0xa7, 0x49, 0x6e, 0x0, 0xc1, 0x62, 0x44, 0xf2, 0x40, 0xb2, 0x49, 0x44, 0xc1, 0x23, 0x24, 0x25, 0x1, 0xd2, 0x44, 0x42, 0x49, 0x58, 0xc5, 0x23, 0x28, 0x5, 0x0, 0x5, 0x61, 0x6f, 0xf0, 0x9f, 0xf2, 0xef, 0xf0, 0x1f, 0xdd, 0x69, 0xd5, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x1, 0x45, 0x5, 0x61, 0x82, 0x80, 0xe3, 0x80, 0x84, 0xfc, 0xf5, 0xb7, 0x1, 0xe9, 0x41, 0x11, 0x81, 0x46, 0x1, 0x46, 0x81, 0x45, 0x6, 0xc6, 0xef, 0x60, 0x8f, 0xa7, 0x8, 0x49, 0x82, 0x80, 0x41, 0x11, 0x26, 0xc2, 0x4a, 0xc0, 0xaa, 0x84, 0x2e, 0x89, 0x1, 0x46, 0x93, 0x5, 0xf0, 0xf, 0x13, 0x5, 0xf0, 0xf, 0x22, 0xc4, 0x6, 0xc6, 0xef, 0xf0, 0xbf, 0xf6, 0x2a, 0x84, 0x26, 0x99, 0x1, 0xe8, 0x5, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x22, 0x85, 0xef, 0xf0, 0xbf, 0xfb, 0x83, 0x47, 0xa5, 0x2, 0x81, 0xcf, 0x5c, 0x45, 0x63, 0xe8, 0xf4, 0x0, 0x18, 0x49, 0xba, 0x97, 0x63, 0xf6, 0xf4, 0x0, 0x1, 0x45, 0xe1, 0xbf, 0xe3, 0xee, 0x27, 0xff, 0x22, 0x85, 0xef, 0xf0, 0x1f, 0xea, 0x2a, 0x84, 0xd9, 0xb7, 0xb7, 0x7, 0xb, 0x60, 0x83, 0xa7, 0x7, 0x40, 0x37, 0x15, 0x2, 0x0, 0x13, 0x5, 0x5, 0x34, 0x8d, 0x8b, 0x91, 0xc3, 0x21, 0x65, 0x82, 0x80, 0xb7, 0x17, 0xb, 0x60, 0xc1, 0x7, 0x9c, 0x43, 0x13, 0x5, 0x80, 0x2, 0x93, 0x96, 0x7, 0x1, 0xc1, 0x82, 0x13, 0xd7, 0x7, 0x1, 0x63, 0x9d, 0xe6, 0x0, 0x13, 0x87, 0xf7, 0xff, 0xf5, 0x56, 0x63, 0xe8, 0xe6, 0x0, 0x41, 0x65, 0x79, 0x15, 0x7d, 0x8d, 0x19, 0xe1, 0x13, 0x5, 0x80, 0x2, 0x82, 0x80, 0x5, 0x47, 0x63, 0xe, 0xe5, 0x0, 0xaa, 0x87, 0x9, 0x47, 0x45, 0x45, 0x63, 0x8b, 0xe7, 0x0, 0x99, 0xe3, 0x6f, 0xf0, 0xdf, 0xfb, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x60, 0xf, 0x93, 0x13, 0x5, 0x0, 0x1e, 0x82, 0x80, 0x1, 0x11, 0x37, 0x67, 0x9, 0x60, 0x13, 0x6, 0x7, 0x0, 0x6, 0xce, 0x22, 0xcc, 0x83, 0x27, 0x6, 0x11, 0x85, 0x46, 0x13, 0x7, 0x7, 0x0, 0xc1, 0x83, 0x8d, 0x8b, 0x63, 0x8a, 0xd7, 0x2, 0x89, 0x46, 0x9, 0x45, 0x63, 0x85, 0xd7, 0x0, 0x1, 0x45, 0x91, 0xc3, 0xd, 0x45, 0x83, 0x27, 0x87, 0x11, 0x3e, 0xc4, 0xa2, 0x47, 0x3, 0x27, 0x7, 0x11, 0x93, 0xf7, 0xf7, 0xf, 0x3a, 0xc6, 0x32, 0x44, 0x85, 0x7, 0x13, 0x74, 0xf4, 0xf, 0x5, 0x4, 0x33, 0x4, 0xf4, 0x2, 0x15, 0xa8, 0x83, 0x26, 0x86, 0x11, 0x83, 0x27, 0x86, 0x11, 0xc1, 0x82, 0x3e, 0xc0, 0x82, 0x47, 0x85, 0x8a, 0xa1, 0x83, 0x93, 0xf7, 0xf7, 0xf, 0x91, 0xe3, 0x9d, 0xea, 0x3, 0x27, 0x7, 0x11, 0x85, 0x7, 0x5, 0x45, 0x3a, 0xc2, 0x12, 0x44, 0x21, 0x80, 0x13, 0x74, 0xf4, 0xf, 0x5, 0x4, 0x33, 0x4, 0xf4, 0x2, 0xef, 0xf0, 0xbf, 0xf5, 0xb7, 0x47, 0xf, 0x0, 0x93, 0x87, 0x7, 0x24, 0xf2, 0x40, 0x33, 0x5, 0xf5, 0x2, 0x33, 0x55, 0x85, 0x2, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x5, 0x45, 0x11, 0x44, 0xc5, 0xb7, 0x88, 0xc5, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x26, 0xc2, 0x4, 0x45, 0x51, 0x46, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x97, 0xc0, 0x7e, 0xff, 0xe7, 0x80, 0x80, 0x2c, 0xb2, 0x40, 0x4, 0xc4, 0x22, 0x44, 0x92, 0x44, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x54, 0x41, 0x18, 0x41, 0x22, 0xc4, 0x0, 0x45, 0x26, 0xc2, 0x6, 0xc6, 0x51, 0x4, 0x36, 0x97, 0xae, 0x87, 0xaa, 0x84, 0xb2, 0x85, 0x63, 0x63, 0xe4, 0x0, 0x15, 0x8c, 0x81, 0xeb, 0x80, 0xc4, 0x1, 0x45, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x22, 0x85, 0x82, 0x97, 0x7d, 0xd5, 0xc5, 0xbf, 0xaa, 0x87, 0xd4, 0x43, 0x8, 0x49, 0x90, 0x43, 0x13, 0x7, 0x45, 0x1, 0x36, 0x96, 0x63, 0x63, 0xc7, 0x0, 0x15, 0x8f, 0x63, 0x86, 0xe5, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x60, 0x6f, 0x80, 0xd0, 0x47, 0x33, 0x7, 0xd6, 0x0, 0x9, 0x8f, 0x33, 0x77, 0xd7, 0x2, 0xd1, 0x46, 0x33, 0x55, 0xd7, 0x2, 0xb3, 0x6, 0xd5, 0x2, 0xe3, 0x91, 0xe6, 0xfe, 0x90, 0xcb, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0x3c, 0x45, 0x2a, 0x84, 0xb2, 0x84, 0x81, 0xca, 0x99, 0xc3, 0xef, 0x50, 0x3f, 0xfd, 0x5c, 0x5d, 0x3c, 0xc5, 0x91, 0x47, 0x5c, 0xd9, 0x3c, 0x44, 0x81, 0xcf, 0x9c, 0x4b, 0x1, 0x45, 0x9c, 0xc1, 0x3c, 0x44, 0x9c, 0x47, 0x3c, 0xc4, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x4c, 0x5c, 0x91, 0xc9, 0x3c, 0x40, 0xf1, 0xdb, 0x78, 0x40, 0x13, 0x5, 0x4, 0x2, 0x98, 0xc7, 0xef, 0xf0, 0xbf, 0xf7, 0x88, 0xc0, 0x23, 0x2e, 0x4, 0x2, 0x23, 0x20, 0x4, 0x4, 0x13, 0x5, 0x50, 0x10, 0xd1, 0xbf, 0x2a, 0x87, 0x1c, 0x4b, 0x48, 0x45, 0x63, 0x86, 0xa7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x50, 0xbf, 0xf7, 0x3, 0x28, 0x87, 0x0, 0x13, 0x5, 0x50, 0x10, 0x63, 0x84, 0x7, 0x3, 0x83, 0x28, 0x47, 0x0, 0x8, 0x43, 0xd1, 0x7, 0x46, 0x95, 0x63, 0xe4, 0xa7, 0x0, 0xb3, 0x87, 0x17, 0x41, 0x91, 0xe2, 0x3e, 0x88, 0x23, 0x26, 0x7, 0x1, 0x9c, 0xc1, 0x19, 0xc2, 0x23, 0x20, 0x6, 0x1, 0x1, 0x45, 0x82, 0x80, 0x79, 0x71, 0xb7, 0x87, 0x1, 0x60, 0x22, 0xd4, 0x26, 0xd2, 0x6, 0xd6, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x93, 0x87, 0x7, 0x0, 0x5c, 0xc1, 0xb7, 0x77, 0x1, 0x60, 0x93, 0x87, 0x7, 0x0, 0x1c, 0xc1, 0xb7, 0x67, 0x1, 0x60, 0x93, 0x87, 0x7, 0x0, 0x1c, 0xc5, 0x85, 0x47, 0x5c, 0xd9, 0x93, 0x7, 0xc5, 0x4, 0x3c, 0xc9, 0x1c, 0x51, 0x93, 0x4, 0x5, 0x2, 0x2a, 0x84, 0x23, 0x26, 0x5, 0x4, 0x1c, 0xd5, 0x5c, 0xd5, 0x1c, 0xd9, 0x1, 0x46, 0x81, 0x45, 0x26, 0x85, 0x2, 0xc4, 0x2, 0xc6, 0xef, 0xf0, 0xbf, 0xe9, 0x25, 0xe5, 0x2a, 0x89, 0x37, 0x4a, 0x81, 0x40, 0x1c, 0x4c, 0x63, 0xd8, 0x27, 0x3, 0x85, 0x46, 0x70, 0x0, 0x2c, 0x0, 0x26, 0x85, 0x2, 0xc6, 0xef, 0xf0, 0xff, 0xf4, 0x15, 0xe5, 0xa2, 0x45, 0xb2, 0x47, 0x63, 0x93, 0xf5, 0x2, 0x22, 0x54, 0xb2, 0x50, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x26, 0x85, 0x92, 0x54, 0x45, 0x61, 0x6f, 0xf0, 0x7f, 0xe9, 0x81, 0x46, 0x1, 0x46, 0x6c, 0x0, 0x26, 0x85, 0xef, 0xf0, 0x5f, 0xf2, 0x19, 0xc1, 0xef, 0x50, 0x7f, 0xea, 0xb2, 0x49, 0x93, 0x5, 0xa, 0x1d, 0x26, 0x85, 0x4e, 0x86, 0xef, 0xf0, 0x1f, 0xe4, 0x19, 0xe5, 0xce, 0x85, 0x26, 0x85, 0xef, 0xf0, 0xdf, 0xe6, 0x5, 0x9, 0x4d, 0xb7, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x18, 0x41, 0xf1, 0x76, 0xfd, 0x16, 0x23, 0x26, 0x7, 0x0, 0x1c, 0x43, 0x93, 0xe7, 0x7, 0x4, 0x1c, 0xc3, 0x1c, 0x43, 0xf5, 0x8f, 0x1c, 0xc3, 0x1c, 0x43, 0x93, 0x6, 0x7, 0x8, 0x93, 0xf7, 0xf7, 0xfd, 0x1c, 0xc3, 0x1c, 0x43, 0xbd, 0x9b, 0x1c, 0xc3, 0x3c, 0x5b, 0x93, 0xf7, 0xf7, 0xfb, 0x3c, 0xdb, 0x3c, 0x5b, 0x93, 0xf7, 0xf7, 0xfd, 0x3c, 0xdb, 0x3c, 0x5b, 0xbd, 0x9b, 0x3c, 0xdb, 0x9c, 0x56, 0x93, 0xe7, 0x17, 0x0, 0x9c, 0xd6, 0x83, 0x46, 0x45, 0x1, 0x1c, 0x45, 0x85, 0x8a, 0xb1, 0xe2, 0xd4, 0x43, 0x93, 0xe6, 0x46, 0x0, 0xd4, 0xc3, 0x14, 0x49, 0x9, 0x46, 0x5c, 0x41, 0x63, 0x85, 0xc6, 0x4, 0x63, 0x6b, 0xd6, 0x2, 0xb5, 0xe6, 0x93, 0x87, 0x7, 0x18, 0xb4, 0x5b, 0x93, 0xe6, 0x6, 0x3e, 0xb4, 0xdb, 0xb4, 0x5b, 0x81, 0x9a, 0xb4, 0xdb, 0xb4, 0x5b, 0x37, 0x86, 0xf, 0x0, 0xd1, 0x8e, 0xb4, 0xdb, 0xb4, 0x5b, 0x61, 0x76, 0x13, 0x6, 0xf6, 0x3f, 0xf1, 0x8e, 0xb4, 0xdb, 0x39, 0xa0, 0xd4, 0x43, 0xed, 0x9a, 0xc1, 0xb7, 0xd, 0x46, 0x63, 0x86, 0xc6, 0x4, 0x5c, 0x47, 0x93, 0xe7, 0xf7, 0xf, 0x5c, 0xc7, 0x82, 0x80, 0x93, 0x87, 0x7, 0x18, 0xb4, 0x5b, 0x93, 0xe6, 0x6, 0x3e, 0xb4, 0xdb, 0xb4, 0x5b, 0x81, 0x9a, 0xb4, 0xdb, 0xb4, 0x5b, 0x37, 0x86, 0xf0, 0xff, 0x7d, 0x16, 0xf1, 0x8e, 0xb4, 0xdb, 0xb4, 0x5b, 0x21, 0x66, 0x13, 0x6, 0x6, 0xc0, 0xd1, 0x8e, 0x7d, 0xbf, 0x93, 0x87, 0x7, 0x18, 0xb4, 0x5b, 0x93, 0xf6, 0xf6, 0xc1, 0xb4, 0xdb, 0xb4, 0x5b, 0x93, 0xe6, 0xf6, 0x1, 0x51, 0xbf, 0x93, 0x87, 0x7, 0x18, 0xb4, 0x5b, 0x93, 0xf6, 0xf6, 0xc1, 0xb4, 0xdb, 0xb4, 0x5b, 0x93, 0xe6, 0xf6, 0x1, 0xc1, 0xb7, 0x18, 0x45, 0x85, 0x89, 0x86, 0x5, 0x5c, 0x43, 0xf5, 0x9b, 0xcd, 0x8f, 0x5c, 0xc3, 0x82, 0x80, 0x14, 0x41, 0x41, 0x77, 0x7d, 0x17, 0xdc, 0x46, 0xf9, 0x8f, 0xdc, 0xc6, 0x82, 0x80, 0x58, 0x59, 0x85, 0x47, 0x63, 0x12, 0xf7, 0x6, 0x89, 0x47, 0x5c, 0xd9, 0x1c, 0x41, 0xb7, 0x6, 0x0, 0x20, 0x98, 0x43, 0x13, 0x67, 0x27, 0x0, 0x98, 0xc3, 0x98, 0x43, 0x75, 0x9b, 0x98, 0xc3, 0x37, 0x97, 0x81, 0x40, 0x13, 0x7, 0x87, 0x77, 0xb8, 0xc3, 0xd8, 0x5f, 0x55, 0x8f, 0xd8, 0xdf, 0xd8, 0x43, 0x93, 0x16, 0xf7, 0x0, 0xe3, 0xdd, 0x6, 0xfe, 0xd8, 0x5f, 0xb7, 0x6, 0x0, 0x10, 0x37, 0x6, 0x80, 0x0, 0x55, 0x8f, 0xd8, 0xdf, 0x54, 0x41, 0x1, 0x45, 0x3, 0xa7, 0x46, 0xd, 0x51, 0x8f, 0x23, 0xaa, 0xe6, 0xc, 0x98, 0x4b, 0xb7, 0x6, 0x2, 0x0, 0x55, 0x8f, 0x98, 0xcb, 0xd8, 0x47, 0x55, 0x8f, 0xd8, 0xc7, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x14, 0x41, 0x2a, 0x87, 0x9c, 0x46, 0xc5, 0x83, 0x13, 0xf5, 0x17, 0x0, 0x11, 0xcd, 0x58, 0x5b, 0x8d, 0x47, 0x63, 0x6, 0xf7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x50, 0x5f, 0xcd, 0x9c, 0x4a, 0x37, 0x7, 0x2, 0x0, 0xd9, 0x8f, 0x9c, 0xca, 0x82, 0x80, 0x58, 0x59, 0x85, 0x47, 0x63, 0x13, 0xf7, 0x6, 0x1c, 0x41, 0x37, 0x7, 0x10, 0x0, 0x91, 0x66, 0x23, 0xaa, 0xe7, 0xe, 0x58, 0x5d, 0x23, 0x2c, 0x5, 0x2, 0xfd, 0x16, 0xd, 0xe3, 0x5c, 0x55, 0x18, 0x55, 0x63, 0x8c, 0xe7, 0x0, 0x54, 0x51, 0x18, 0x51, 0xd1, 0x7, 0x36, 0x97, 0x63, 0xe3, 0xe7, 0x0, 0x95, 0x8f, 0x91, 0x66, 0xfd, 0x16, 0x91, 0xef, 0x1, 0x45, 0x82, 0x80, 0x1c, 0x43, 0x10, 0x5d, 0xb9, 0x83, 0xf5, 0x8f, 0xc2, 0x7, 0xc1, 0x83, 0xb2, 0x97, 0x1c, 0xdd, 0x5c, 0xc7, 0x18, 0x47, 0xe9, 0xb7, 0x98, 0x43, 0x10, 0x5d, 0x39, 0x83, 0x75, 0x8f, 0x42, 0x7, 0x41, 0x83, 0x32, 0x97, 0x18, 0xdd, 0xd8, 0xc7, 0x9c, 0x47, 0xc1, 0xbf, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x5c, 0x59, 0x41, 0x11, 0x22, 0xc4, 0x93, 0x86, 0xd7, 0xff, 0x6, 0xc6, 0xd, 0x47, 0x2a, 0x84, 0x93, 0xb6, 0x16, 0x0, 0x63, 0x96, 0xe7, 0x0, 0x5c, 0x5d, 0x91, 0xe7, 0xef, 0x50, 0x9f, 0xc3, 0x11, 0x47, 0xe3, 0x9d, 0xe7, 0xfe, 0x23, 0x20, 0x6, 0x0, 0x22, 0x85, 0xef, 0xf0, 0x5f, 0xc4, 0x93, 0x7, 0x50, 0x10, 0x63, 0x14, 0xf5, 0x0, 0x89, 0x47, 0x5c, 0xd8, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x79, 0x71, 0x54, 0x59, 0x26, 0xd2, 0x4a, 0xd0, 0x4e, 0xce, 0x6, 0xd6, 0x22, 0xd4, 0x52, 0xcc, 0x23, 0x20, 0x6, 0x0, 0x85, 0x47, 0xaa, 0x84, 0xae, 0x89, 0x32, 0x89, 0x63, 0x8c, 0xf6, 0x0, 0x91, 0x47, 0x63, 0x89, 0xf6, 0x0, 0x95, 0x47, 0x1, 0x44, 0x63, 0x84, 0xf6, 0x2, 0x13, 0x4, 0x30, 0x10, 0xb1, 0xa8, 0xfd, 0x16, 0x93, 0xb6, 0x16, 0x0, 0x4a, 0x86, 0xce, 0x85, 0x26, 0x85, 0xef, 0xf0, 0xdf, 0xbe, 0x93, 0x7, 0x50, 0x10, 0x2a, 0x84, 0x63, 0x14, 0xf5, 0x0, 0x95, 0x47, 0xdc, 0xd8, 0xd8, 0x58, 0x95, 0x47, 0x63, 0x1c, 0xf7, 0x2, 0x13, 0x8a, 0x4, 0x2, 0x81, 0x46, 0x70, 0x0, 0x2c, 0x0, 0x52, 0x85, 0x2, 0xc4, 0x2, 0xc6, 0xef, 0xf0, 0xff, 0xc1, 0x2a, 0x84, 0x5, 0xe9, 0xa2, 0x45, 0xb2, 0x47, 0x63, 0x84, 0xf5, 0x0, 0xef, 0x50, 0x7f, 0xb9, 0x9c, 0x49, 0x52, 0x85, 0x23, 0xa0, 0xf9, 0x0, 0xef, 0xf0, 0x9f, 0xb6, 0x23, 0x20, 0xa9, 0x0, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x62, 0x4a, 0x45, 0x61, 0x82, 0x80, 0x93, 0x7, 0x50, 0x10, 0xe3, 0x15, 0xf5, 0xfe, 0xdc, 0x40, 0xbc, 0x53, 0xb2, 0x7, 0xb1, 0x83, 0x9c, 0xdc, 0x85, 0x47, 0xdc, 0xd8, 0xe1, 0xbf, 0x58, 0x59, 0x89, 0x47, 0x63, 0x1e, 0xf7, 0x8, 0x5c, 0x5d, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x8d, 0xef, 0x58, 0x45, 0x2, 0xc4, 0x2, 0xc6, 0x85, 0x47, 0x13, 0x5, 0x5, 0x2, 0x81, 0x46, 0x63, 0x3, 0xf7, 0x0, 0x85, 0x46, 0x70, 0x0, 0x2c, 0x0, 0xef, 0xf0, 0x5f, 0xba, 0x11, 0xed, 0xa2, 0x47, 0xb7, 0x6, 0x0, 0x40, 0x5c, 0xdc, 0xb2, 0x47, 0x98, 0x43, 0x3c, 0xc0, 0x55, 0x8f, 0x98, 0xc3, 0x98, 0x47, 0x78, 0xc0, 0x23, 0xa4, 0x7, 0x0, 0x50, 0x5c, 0x21, 0xce, 0x34, 0x40, 0x99, 0xe2, 0xef, 0x50, 0x5f, 0xb0, 0x1c, 0x40, 0xb7, 0x5, 0x0, 0x10, 0x1, 0x45, 0xd8, 0x5f, 0x4d, 0x8f, 0xd8, 0xdf, 0x98, 0x43, 0x13, 0x67, 0x27, 0x0, 0x98, 0xc3, 0x98, 0x43, 0x75, 0x9b, 0x98, 0xc3, 0xb0, 0xc3, 0xd8, 0x5f, 0x37, 0x6, 0x0, 0x20, 0x51, 0x8f, 0xd8, 0xdf, 0xd8, 0x46, 0xb7, 0x6, 0x10, 0x0, 0x13, 0x86, 0xf6, 0xff, 0x71, 0x8f, 0x93, 0x87, 0x7, 0x8, 0x55, 0x8f, 0xf8, 0xdb, 0x8d, 0x47, 0x5c, 0xd8, 0xf2, 0x40, 0x62, 0x44, 0x5, 0x61, 0x82, 0x80, 0x13, 0x5, 0x30, 0x10, 0x82, 0x80, 0x13, 0x5, 0x50, 0x10, 0xfd, 0xb7, 0x79, 0x71, 0x22, 0xd4, 0x2a, 0x84, 0x8, 0x5d, 0x93, 0x17, 0xe6, 0x0, 0x37, 0xc7, 0xff, 0xf, 0x32, 0x95, 0x4a, 0x6, 0xf9, 0x8f, 0x49, 0x82, 0x37, 0x7, 0x0, 0x80, 0x59, 0x8e, 0x58, 0x44, 0x6, 0xd6, 0x2e, 0xc8, 0x7d, 0x17, 0x13, 0x37, 0x17, 0x0, 0x7a, 0x7, 0xd1, 0x8f, 0xb7, 0x45, 0x81, 0x40, 0xd9, 0x8f, 0x8, 0xdc, 0x2a, 0xcc, 0x70, 0x0, 0x13, 0x5, 0x4, 0x2, 0x93, 0x85, 0x65, 0x1d, 0x3e, 0xc6, 0x36, 0xce, 0x2, 0xca, 0xef, 0xf0, 0xdf, 0xa0, 0x18, 0x40, 0xc1, 0x66, 0x5c, 0x47, 0xd5, 0x8f, 0x5c, 0xc7, 0xb2, 0x50, 0x22, 0x54, 0x45, 0x61, 0x82, 0x80, 0x78, 0x49, 0xaa, 0x87, 0x9, 0xcb, 0x14, 0x43, 0x1, 0x45, 0x63, 0xc7, 0x6, 0x0, 0x18, 0x47, 0x5, 0x45, 0xf8, 0xcb, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x1c, 0x41, 0xc8, 0x43, 0x39, 0x81, 0x5, 0x89, 0x9, 0xc5, 0x98, 0x4b, 0x91, 0x66, 0x55, 0x8f, 0x98, 0xcb, 0x82, 0x80, 0xaa, 0x87, 0x68, 0x45, 0x19, 0xc5, 0x18, 0x45, 0xf8, 0xc7, 0x1, 0xe7, 0x13, 0x87, 0xc7, 0x4, 0xb8, 0xcb, 0x82, 0x80, 0x5c, 0x4d, 0x23, 0xa4, 0x5, 0x0, 0xd0, 0xc1, 0xca, 0x7, 0xc9, 0x83, 0x9c, 0xc1, 0x82, 0x80, 0x1c, 0x41, 0x98, 0x43, 0x13, 0x67, 0x17, 0x0, 0x98, 0xc3, 0x98, 0x43, 0x79, 0x9b, 0x98, 0xc3, 0x78, 0x45, 0x11, 0xcf, 0x14, 0x43, 0x63, 0xdd, 0x6, 0x0, 0xb8, 0xc7, 0xf8, 0x43, 0xb7, 0x6, 0x0, 0x20, 0x55, 0x8f, 0xf8, 0xc3, 0xd8, 0x47, 0x91, 0x66, 0x55, 0x8f, 0xd8, 0xc7, 0x82, 0x80, 0x18, 0x47, 0xc5, 0xb7, 0x14, 0x41, 0x85, 0x67, 0xfc, 0xd2, 0x7c, 0x45, 0x99, 0xc7, 0x98, 0x43, 0x63, 0x56, 0x7, 0x0, 0x11, 0x67, 0x5, 0x7, 0x81, 0xe7, 0x82, 0x80, 0x9c, 0x47, 0xfd, 0xb7, 0x9c, 0x47, 0xf8, 0xd2, 0xd5, 0xbf, 0x7c, 0x45, 0x81, 0xc7, 0x98, 0x43, 0x63, 0x56, 0x7, 0x0, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x50, 0x9f, 0x99, 0x98, 0x47, 0x78, 0xc5, 0x1, 0xe7, 0x13, 0x7, 0xc5, 0x4, 0x38, 0xc9, 0x98, 0x43, 0xb7, 0x6, 0x0, 0x80, 0x23, 0xa4, 0x7, 0x0, 0x55, 0x8f, 0x98, 0xc3, 0x38, 0x49, 0x1c, 0xc3, 0xa1, 0x7, 0x18, 0x41, 0x3c, 0xc9, 0x91, 0x67, 0x85, 0x7, 0x7c, 0xd3, 0x82, 0x80, 0x9c, 0x41, 0x37, 0x7, 0x0, 0x80, 0xd9, 0x8f, 0x9c, 0xc1, 0x78, 0x45, 0x3c, 0x49, 0x19, 0xc3, 0x13, 0x87, 0x87, 0xff, 0x23, 0xa4, 0x5, 0x0, 0x8c, 0xc3, 0x93, 0x87, 0x85, 0x0, 0x3c, 0xc9, 0x7c, 0x49, 0x91, 0xe3, 0x6c, 0xc9, 0x1c, 0x41, 0x19, 0xef, 0xac, 0xc7, 0xf8, 0x43, 0xb7, 0x6, 0x0, 0x20, 0x55, 0x8f, 0xf8, 0xc3, 0xd8, 0x47, 0x91, 0x66, 0x55, 0x8f, 0xd8, 0xc7, 0x11, 0x67, 0x5, 0x7, 0xf8, 0xd3, 0x82, 0x80, 0xf8, 0x43, 0xb7, 0x6, 0x0, 0x40, 0x55, 0x8f, 0xf8, 0xc3, 0xfd, 0xb7, 0x5c, 0x41, 0x98, 0x41, 0x23, 0xaa, 0xe7, 0xc, 0x82, 0x80, 0x5c, 0x41, 0x98, 0x41, 0x23, 0xae, 0xe7, 0xc, 0x82, 0x80, 0x18, 0x41, 0x41, 0x11, 0x83, 0xc6, 0x5, 0x0, 0x7c, 0x4f, 0x3e, 0xc6, 0xb2, 0x47, 0x93, 0xf7, 0x7, 0xf0, 0xd5, 0x8f, 0x3e, 0xc6, 0xb2, 0x47, 0x7c, 0xcf, 0x41, 0x1, 0x82, 0x80, 0x18, 0x41, 0x1c, 0x47, 0x93, 0xf7, 0xf7, 0xf, 0x9c, 0xc1, 0x1c, 0xcb, 0x82, 0x80, 0x1d, 0x71, 0x2a, 0x86, 0xae, 0x86, 0xa, 0x85, 0x93, 0x5, 0xf0, 0x4, 0x86, 0xce, 0x97, 0xc0, 0x7e, 0xff, 0xe7, 0x80, 0xe0, 0xc8, 0xf6, 0x40, 0x25, 0x61, 0x82, 0x80, 0x39, 0x71, 0x2e, 0xd2, 0x4c, 0x10, 0x6, 0xce, 0x32, 0xd4, 0x36, 0xd6, 0x3a, 0xd8, 0x3e, 0xda, 0x42, 0xdc, 0x46, 0xde, 0x2e, 0xc6, 0xef, 0xf0, 0xff, 0xfc, 0xf2, 0x40, 0x21, 0x61, 0x82, 0x80, 0xd, 0xc5, 0x41, 0x11, 0x22, 0xc4, 0x2a, 0x84, 0x8, 0x41, 0x6, 0xc6, 0x26, 0xc2, 0x1, 0xe9, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x6f, 0x50, 0x1f, 0x95, 0x4, 0x49, 0x13, 0x5, 0x5, 0x3, 0xd, 0x28, 0x26, 0x85, 0xdd, 0xb7, 0x82, 0x80, 0xb7, 0x55, 0x81, 0x40, 0x37, 0xb5, 0x81, 0x40, 0x41, 0x11, 0x93, 0x85, 0x85, 0x9b, 0x13, 0x5, 0x85, 0x6e, 0x6, 0xc6, 0xef, 0x50, 0x1f, 0xf2, 0xb2, 0x40, 0x13, 0x35, 0x15, 0x0, 0xb7, 0xb7, 0x81, 0x40, 0x23, 0x86, 0xa7, 0x6e, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x50, 0x1f, 0x84, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x9d, 0xc9, 0xaa, 0x84, 0x2e, 0x84, 0x1, 0xc5, 0x1c, 0x55, 0x91, 0xe3, 0xe5, 0x29, 0x78, 0x50, 0x83, 0x17, 0xc4, 0x0, 0x5, 0x8b, 0x19, 0xe7, 0x93, 0xf7, 0x7, 0x20, 0x8d, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0x1e, 0xbf, 0x83, 0x17, 0xc4, 0x0, 0x99, 0xef, 0x7c, 0x50, 0x85, 0x8b, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0x1e, 0xc8, 0x1, 0x49, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x4a, 0x85, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0xa2, 0x85, 0x26, 0x85, 0xa5, 0x28, 0x1c, 0x58, 0x2a, 0x89, 0x99, 0xc7, 0xc, 0x50, 0x26, 0x85, 0x82, 0x97, 0x63, 0x53, 0x5, 0x0, 0x7d, 0x59, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x8, 0x89, 0xc7, 0xc, 0x48, 0x26, 0x85, 0xef, 0x50, 0x1f, 0x8a, 0x4c, 0x58, 0x91, 0xc9, 0x93, 0x7, 0x44, 0x4, 0x63, 0x85, 0xf5, 0x0, 0x26, 0x85, 0xef, 0x50, 0xff, 0x88, 0x23, 0x2a, 0x4, 0x2, 0x2c, 0x44, 0x91, 0xc5, 0x26, 0x85, 0xef, 0x50, 0x1f, 0x88, 0x23, 0x24, 0x4, 0x4, 0x69, 0x26, 0x7c, 0x50, 0x23, 0x16, 0x4, 0x0, 0x85, 0x8b, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0x1e, 0xc1, 0x28, 0x4c, 0xef, 0xc0, 0x9e, 0xb2, 0xbd, 0x2e, 0x69, 0xb7, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xef, 0x50, 0xef, 0x9b, 0xb2, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x1d, 0xbf, 0x83, 0x97, 0xc5, 0x0, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0x4a, 0xc8, 0x4e, 0xc6, 0x13, 0xf7, 0x87, 0x0, 0xaa, 0x84, 0x2e, 0x84, 0x71, 0xef, 0x5, 0x67, 0x13, 0x7, 0x7, 0x80, 0x5d, 0x8f, 0x23, 0x96, 0xe5, 0x0, 0xd8, 0x41, 0x63, 0x45, 0xe0, 0x0, 0xb8, 0x41, 0x63, 0x51, 0xe0, 0xc, 0x58, 0x54, 0x55, 0xcf, 0x3, 0xa9, 0x4, 0x0, 0x93, 0x96, 0x37, 0x1, 0x23, 0xa0, 0x4, 0x0, 0xc, 0x50, 0x63, 0xd4, 0x6, 0x8, 0x70, 0x48, 0x83, 0x57, 0xc4, 0x0, 0x91, 0x8b, 0x99, 0xc7, 0x5c, 0x40, 0x1d, 0x8e, 0x5c, 0x58, 0x99, 0xc3, 0x3c, 0x40, 0x1d, 0x8e, 0x5c, 0x54, 0xc, 0x50, 0x81, 0x46, 0x26, 0x85, 0x82, 0x97, 0xfd, 0x57, 0x63, 0x1d, 0xf5, 0x0, 0x98, 0x40, 0xf5, 0x47, 0x63, 0xea, 0xe7, 0xa, 0xb7, 0x7, 0x40, 0x20, 0x85, 0x7, 0xb3, 0xd7, 0xe7, 0x0, 0x85, 0x8b, 0xd5, 0xc3, 0x3, 0x17, 0xc4, 0x0, 0xfd, 0x77, 0x93, 0x87, 0xf7, 0x7f, 0xf9, 0x8f, 0x23, 0x16, 0xf4, 0x0, 0x1c, 0x48, 0x23, 0x22, 0x4, 0x0, 0x1c, 0xc0, 0x93, 0x17, 0x37, 0x1, 0x63, 0xd8, 0x7, 0x0, 0xfd, 0x57, 0x63, 0x14, 0xf5, 0x0, 0x9c, 0x40, 0x91, 0xe3, 0x68, 0xc8, 0x4c, 0x58, 0x23, 0xa0, 0x24, 0x1, 0x8d, 0xcd, 0x93, 0x7, 0x44, 0x4, 0x63, 0x85, 0xf5, 0x0, 0x26, 0x85, 0xef, 0x50, 0x8f, 0xf8, 0x23, 0x2a, 0x4, 0x2, 0x1d, 0xa0, 0x1, 0x46, 0x85, 0x46, 0x26, 0x85, 0x2, 0x97, 0xfd, 0x57, 0x2a, 0x86, 0xe3, 0x19, 0xf5, 0xf6, 0x9c, 0x40, 0xb5, 0xd7, 0x75, 0x47, 0x63, 0x85, 0xe7, 0x0, 0x59, 0x47, 0x63, 0x9f, 0xe7, 0x2, 0x23, 0xa0, 0x24, 0x1, 0x1, 0x45, 0x89, 0xa0, 0x83, 0xa9, 0x5, 0x1, 0xe3, 0x8c, 0x9, 0xfe, 0x3, 0xa9, 0x5, 0x0, 0x8d, 0x8b, 0x23, 0xa0, 0x35, 0x1, 0x33, 0x9, 0x39, 0x41, 0x1, 0x47, 0x91, 0xe3, 0xd8, 0x49, 0x18, 0xc4, 0xe3, 0x5f, 0x20, 0xfd, 0x1c, 0x54, 0xc, 0x50, 0xca, 0x86, 0x4e, 0x86, 0x26, 0x85, 0x82, 0x97, 0x63, 0x40, 0xa0, 0x2, 0x83, 0x17, 0xc4, 0x0, 0x7d, 0x55, 0x93, 0xe7, 0x7, 0x4, 0x23, 0x16, 0xf4, 0x0, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0xaa, 0x99, 0x33, 0x9, 0xa9, 0x40, 0xe9, 0xb7, 0x9c, 0x49, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x81, 0xeb, 0x81, 0x44, 0xb2, 0x40, 0x22, 0x44, 0x26, 0x85, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xaa, 0x84, 0x2e, 0x84, 0x1, 0xc5, 0x1c, 0x55, 0x91, 0xe3, 0xd1, 0x2c, 0x83, 0x17, 0xc4, 0x0, 0xed, 0xd3, 0x78, 0x50, 0x5, 0x8b, 0x19, 0xe7, 0x93, 0xf7, 0x7, 0x20, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0xbe, 0x9c, 0x26, 0x85, 0xa2, 0x85, 0x95, 0x3d, 0x7c, 0x50, 0xaa, 0x84, 0x85, 0x8b, 0xf1, 0xf3, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0xcd, 0xff, 0x28, 0x4c, 0xef, 0xc0, 0xfe, 0xa4, 0x4d, 0xbf, 0x19, 0xe9, 0xb7, 0x5, 0x0, 0x40, 0x13, 0x86, 0x81, 0xc2, 0x93, 0x85, 0x45, 0x5b, 0x13, 0x85, 0x41, 0xc3, 0x6f, 0x0, 0xc0, 0x6e, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xef, 0x40, 0xff, 0xfe, 0xb2, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x17, 0xc3, 0x7e, 0xff, 0x67, 0x0, 0x43, 0x90, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x23, 0x16, 0xb5, 0x0, 0x23, 0x17, 0xc5, 0x0, 0x23, 0x20, 0x5, 0x0, 0x23, 0x22, 0x5, 0x0, 0x23, 0x24, 0x5, 0x0, 0x23, 0x22, 0x5, 0x6, 0x23, 0x28, 0x5, 0x0, 0x23, 0x2a, 0x5, 0x0, 0x23, 0x2c, 0x5, 0x0, 0x21, 0x46, 0x81, 0x45, 0x13, 0x5, 0xc5, 0x5, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x7b, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0xa7, 0x48, 0x5c, 0xd0, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0x7, 0x4c, 0x1c, 0xd4, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0x27, 0x51, 0x5c, 0xd4, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0xa7, 0x54, 0x1c, 0xd8, 0xb7, 0xb7, 0x81, 0x40, 0x0, 0xd0, 0x93, 0x87, 0x7, 0x45, 0x63, 0xa, 0xf4, 0x0, 0x13, 0x87, 0x87, 0x6, 0x63, 0x6, 0xe4, 0x0, 0x93, 0x87, 0x7, 0xd, 0x63, 0x19, 0xf4, 0x0, 0x13, 0x5, 0x84, 0x5, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x6f, 0xc0, 0x5e, 0x89, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x55, 0x81, 0x40, 0x13, 0x86, 0x81, 0xc2, 0x93, 0x85, 0x65, 0xa1, 0x13, 0x85, 0x41, 0xc3, 0x25, 0xa5, 0x41, 0x11, 0x4c, 0x41, 0x26, 0xc2, 0xb7, 0xb4, 0x81, 0x40, 0x22, 0xc4, 0x6, 0xc6, 0x93, 0x84, 0x4, 0x45, 0x2a, 0x84, 0x63, 0x84, 0x95, 0x0, 0xef, 0xf0, 0xdf, 0xc9, 0xc, 0x44, 0x93, 0x87, 0x84, 0x6, 0x63, 0x85, 0xf5, 0x0, 0x22, 0x85, 0xef, 0xf0, 0xdf, 0xc8, 0x4c, 0x44, 0x93, 0x84, 0x4, 0xd, 0x63, 0x89, 0x95, 0x0, 0x22, 0x85, 0x22, 0x44, 0xb2, 0x40, 0x92, 0x44, 0x41, 0x1, 0x6f, 0xf0, 0x5f, 0xc7, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0xfc, 0x51, 0x85, 0x8b, 0x99, 0xef, 0x83, 0xd7, 0xc5, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x91, 0xeb, 0xa8, 0x4d, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xc0, 0xbe, 0x86, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0xfc, 0x51, 0x85, 0x8b, 0x99, 0xef, 0x83, 0xd7, 0xc5, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x91, 0xeb, 0xa8, 0x4d, 0x41, 0x11, 0x6, 0xc6, 0xef, 0xc0, 0x7e, 0x8e, 0xb2, 0x40, 0x1, 0x45, 0x41, 0x1, 0x82, 0x80, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x37, 0xb5, 0x81, 0x40, 0xb7, 0x57, 0x81, 0x40, 0x22, 0xc4, 0x37, 0xb7, 0x81, 0x40, 0x13, 0x4, 0x5, 0x45, 0x93, 0x87, 0x7, 0xd5, 0x1, 0x46, 0x91, 0x45, 0x13, 0x5, 0x5, 0x45, 0x6, 0xc6, 0x23, 0x2a, 0xf7, 0x6e, 0x59, 0x3d, 0x13, 0x5, 0x84, 0x6, 0x5, 0x46, 0xa1, 0x45, 0x71, 0x35, 0x13, 0x5, 0x4, 0xd, 0x22, 0x44, 0xb2, 0x40, 0x9, 0x46, 0xc9, 0x45, 0x41, 0x1, 0xb5, 0xbd, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x1d, 0x6f, 0xc0, 0xae, 0xfe, 0x37, 0xb5, 0x81, 0x40, 0x13, 0x5, 0xc5, 0x1d, 0x6f, 0xc0, 0x1e, 0x88, 0x41, 0x11, 0x4a, 0xc0, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x2a, 0x89, 0xf1, 0x3f, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x6f, 0x91, 0xe3, 0x79, 0x37, 0x93, 0x84, 0x81, 0xc2, 0x80, 0x44, 0xdc, 0x40, 0xfd, 0x17, 0x63, 0xd2, 0x7, 0x2, 0x9c, 0x40, 0xc5, 0xe3, 0x93, 0x5, 0xc0, 0x1a, 0x4a, 0x85, 0xef, 0x50, 0xef, 0xc9, 0x2a, 0x84, 0x3d, 0xe9, 0x23, 0xa0, 0x4, 0x0, 0x5d, 0x3f, 0xb1, 0x47, 0x23, 0x20, 0xf9, 0x0, 0x91, 0xa8, 0x3, 0x17, 0xc4, 0x0, 0x31, 0xef, 0xc1, 0x77, 0x85, 0x7, 0x5c, 0xc4, 0x13, 0x5, 0x84, 0x5, 0x23, 0x22, 0x4, 0x6, 0xef, 0xc0, 0x6e, 0xf2, 0x51, 0x3f, 0x21, 0x46, 0x23, 0x20, 0x4, 0x0, 0x23, 0x24, 0x4, 0x0, 0x23, 0x22, 0x4, 0x0, 0x23, 0x28, 0x4, 0x0, 0x23, 0x2a, 0x4, 0x0, 0x23, 0x2c, 0x4, 0x0, 0x81, 0x45, 0x13, 0x5, 0xc4, 0x5, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x0, 0x5d, 0x23, 0x2a, 0x4, 0x2, 0x23, 0x2c, 0x4, 0x2, 0x23, 0x24, 0x4, 0x4, 0x23, 0x26, 0x4, 0x4, 0xb2, 0x40, 0x22, 0x85, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x13, 0x4, 0x84, 0x6, 0x9d, 0xbf, 0x91, 0x47, 0x23, 0x20, 0x5, 0x0, 0x5c, 0xc1, 0x31, 0x5, 0x8, 0xc4, 0x13, 0x6, 0x0, 0x1a, 0x81, 0x45, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x59, 0x80, 0xc0, 0x84, 0x40, 0x89, 0xbf, 0x41, 0x11, 0x22, 0xc4, 0x6, 0xc6, 0x2a, 0x84, 0x9, 0x3f, 0x1c, 0x54, 0x89, 0xc7, 0x22, 0x44, 0xb2, 0x40, 0x41, 0x1, 0x9, 0xbf, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0x27, 0xd6, 0x1c, 0xd4, 0xb7, 0xb7, 0x81, 0x40, 0x83, 0xa7, 0x47, 0x6f, 0xfd, 0xf3, 0x7d, 0x35, 0xcd, 0xb7, 0x41, 0x11, 0x6, 0xc6, 0xe5, 0x35, 0xb2, 0x40, 0xb7, 0x55, 0x81, 0x40, 0x13, 0x86, 0x81, 0xc2, 0x93, 0x85, 0x5, 0xdb, 0x1, 0x45, 0x41, 0x1, 0x39, 0xa9, 0xb7, 0x55, 0x81, 0x40, 0x41, 0x11, 0x13, 0x86, 0x81, 0xc2, 0x93, 0x85, 0x65, 0xdd, 0x1, 0x45, 0x6, 0xc6, 0x29, 0x21, 0xb2, 0x40, 0x41, 0x1, 0xd9, 0xb5, 0x79, 0x71, 0x4e, 0xce, 0xae, 0x89, 0xb2, 0x85, 0x70, 0x0, 0x4a, 0xd0, 0x6, 0xd6, 0x22, 0xd4, 0x26, 0xd2, 0x2a, 0x89, 0xef, 0x0, 0x50, 0x27, 0x15, 0xc9, 0xaa, 0x84, 0x4a, 0x85, 0xef, 0xf0, 0x3f, 0xeb, 0x2a, 0x84, 0x5, 0xc5, 0x32, 0x46, 0xce, 0x85, 0x93, 0x6, 0x60, 0x1b, 0x4a, 0x85, 0xef, 0x70, 0x7f, 0x82, 0xaa, 0x89, 0x63, 0x54, 0x5, 0x2, 0xef, 0xf0, 0xff, 0xe7, 0x28, 0x4c, 0x23, 0x16, 0x4, 0x0, 0xef, 0xc0, 0x6e, 0xe2, 0xef, 0xf0, 0xdf, 0xe7, 0x1, 0x44, 0xb2, 0x50, 0x22, 0x85, 0x22, 0x54, 0x92, 0x54, 0x2, 0x59, 0xf2, 0x49, 0x45, 0x61, 0x82, 0x80, 0x7c, 0x50, 0x85, 0x8b, 0x89, 0xeb, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0xae, 0xe3, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0xa7, 0x48, 0x5c, 0xd0, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0x7, 0x4c, 0x1c, 0xd4, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0x27, 0x51, 0xc2, 0x4, 0x5c, 0xd4, 0xb7, 0x57, 0x81, 0x40, 0xc1, 0x84, 0x93, 0x87, 0xa7, 0x54, 0x23, 0x16, 0x94, 0x0, 0x23, 0x17, 0x34, 0x1, 0x0, 0xd0, 0x1c, 0xd8, 0x93, 0xf4, 0x4, 0x10, 0x91, 0xc4, 0x89, 0x46, 0x1, 0x46, 0xa2, 0x85, 0x4a, 0x85, 0x15, 0x28, 0x7c, 0x50, 0x85, 0x8b, 0xc1, 0xfb, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0xd9, 0xf3, 0x28, 0x4c, 0xef, 0xc0, 0xe, 0xe8, 0xbd, 0xbf, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2e, 0xc6, 0xef, 0x40, 0x3f, 0xc3, 0xa2, 0x85, 0x62, 0x44, 0x32, 0x46, 0xf2, 0x40, 0x5, 0x61, 0x19, 0xbf, 0xc5, 0xa1, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0xae, 0x84, 0x2a, 0x84, 0x32, 0xc6, 0xef, 0x40, 0x3f, 0xc1, 0xa2, 0x85, 0x62, 0x44, 0xb2, 0x46, 0xf2, 0x40, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x7d, 0xa9, 0x1c, 0x46, 0x99, 0xe3, 0x1, 0x45, 0x82, 0x80, 0x83, 0xd7, 0xc5, 0x0, 0x39, 0x71, 0x22, 0xdc, 0x4e, 0xd6, 0x56, 0xd2, 0x6, 0xde, 0x26, 0xda, 0x4a, 0xd8, 0x52, 0xd4, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0x6a, 0xc8, 0x6e, 0xc6, 0xa1, 0x8b, 0xaa, 0x89, 0x2e, 0x84, 0xb2, 0x8a, 0xcd, 0xc7, 0x9c, 0x49, 0xdd, 0xc3, 0x83, 0x17, 0xc4, 0x0, 0x3, 0xaa, 0xa, 0x0, 0x13, 0xf7, 0x27, 0x0, 0x75, 0xef, 0x85, 0x8b, 0x63, 0x88, 0x7, 0x16, 0x81, 0x4b, 0x1, 0x45, 0x1, 0x4b, 0x1, 0x49, 0x63, 0xf, 0x9, 0x24, 0x11, 0xed, 0x4a, 0x86, 0xa9, 0x45, 0x5a, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x80, 0x42, 0x93, 0xb, 0x19, 0x0, 0x1, 0xc5, 0x5, 0x5, 0xb3, 0xb, 0x65, 0x41, 0x5e, 0x8c, 0x63, 0x73, 0x79, 0x1, 0x4a, 0x8c, 0x8, 0x40, 0x1c, 0x48, 0x4, 0x44, 0x54, 0x48, 0x63, 0xfe, 0xa7, 0x22, 0xb6, 0x94, 0x63, 0xdb, 0x84, 0x23, 0xda, 0x85, 0x26, 0x86, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xa0, 0x38, 0x1c, 0x40, 0xa2, 0x85, 0x4e, 0x85, 0xa6, 0x97, 0x1c, 0xc0, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x47, 0x63, 0x1f, 0x5, 0xe, 0xb3, 0x8b, 0x9b, 0x40, 0x5, 0x45, 0x63, 0x99, 0xb, 0x0, 0xa2, 0x85, 0x4e, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x46, 0x75, 0xe1, 0x83, 0xa7, 0x8a, 0x0, 0x26, 0x9b, 0x33, 0x9, 0x99, 0x40, 0x85, 0x8f, 0x23, 0xa4, 0xfa, 0x0, 0xb5, 0xff, 0x99, 0xa0, 0xa2, 0x85, 0x4e, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x45, 0x21, 0xd9, 0x7d, 0x55, 0x1d, 0xa8, 0x3, 0x29, 0xa, 0x0, 0x83, 0x24, 0x4a, 0x0, 0x21, 0xa, 0x1c, 0x54, 0xc, 0x50, 0xed, 0xd8, 0xa6, 0x86, 0x63, 0x73, 0x9b, 0x0, 0xda, 0x86, 0x4a, 0x86, 0x4e, 0x85, 0x82, 0x97, 0x63, 0x5f, 0xa0, 0x8, 0x83, 0xa7, 0x8a, 0x0, 0x2a, 0x99, 0x89, 0x8c, 0x89, 0x8f, 0x23, 0xa4, 0xfa, 0x0, 0xe9, 0xff, 0x1, 0x45, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x42, 0x4d, 0xb2, 0x4d, 0x21, 0x61, 0x82, 0x80, 0x37, 0xb, 0x0, 0x80, 0x1, 0x49, 0x81, 0x44, 0x13, 0xb, 0xb, 0xf8, 0x75, 0xb7, 0x3, 0x2b, 0xa, 0x0, 0x3, 0x29, 0x4a, 0x0, 0x21, 0xa, 0x83, 0x17, 0xc4, 0x0, 0x8, 0x40, 0x3, 0x2d, 0x84, 0x0, 0xe3, 0x6, 0x9, 0xfe, 0x13, 0xf7, 0x7, 0x20, 0x65, 0xc7, 0x63, 0x66, 0xa9, 0x9, 0x13, 0xf7, 0x7, 0x48, 0x51, 0xc3, 0x44, 0x48, 0xc, 0x48, 0xb3, 0x4, 0x9c, 0x2, 0xb3, 0xd, 0xb5, 0x40, 0x13, 0x87, 0x1d, 0x0, 0x4a, 0x97, 0xb3, 0xc4, 0x94, 0x3, 0x63, 0xf3, 0xe4, 0x0, 0xba, 0x84, 0x93, 0xf7, 0x7, 0x40, 0xc9, 0xcf, 0xa6, 0x85, 0x4e, 0x85, 0xef, 0x50, 0x6f, 0x8f, 0x2a, 0x8d, 0x1d, 0xe1, 0xb1, 0x47, 0x23, 0xa0, 0xf9, 0x0, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xe7, 0x7, 0x4, 0x23, 0x16, 0xf4, 0x0, 0x15, 0xbf, 0xb7, 0xb, 0x0, 0x80, 0x1, 0x4b, 0x1, 0x49, 0xfd, 0x1b, 0xd, 0x4c, 0x89, 0x4c, 0x49, 0xbf, 0xc, 0x48, 0x6e, 0x86, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x24, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0xf7, 0xb7, 0x93, 0xe7, 0x7, 0x8, 0x23, 0x16, 0xf4, 0x0, 0x23, 0x28, 0xa4, 0x1, 0x44, 0xc8, 0x6e, 0x9d, 0xb3, 0x84, 0xb4, 0x41, 0x23, 0x20, 0xa4, 0x1, 0x4, 0xc4, 0x4a, 0x8d, 0xca, 0x84, 0x63, 0x73, 0xa9, 0x1, 0x4a, 0x8d, 0x8, 0x40, 0x6a, 0x86, 0xda, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x60, 0x21, 0x1c, 0x44, 0xb3, 0x87, 0xa7, 0x41, 0x1c, 0xc4, 0x1c, 0x40, 0xea, 0x97, 0x1c, 0xc0, 0x83, 0xa7, 0x8a, 0x0, 0x26, 0x9b, 0x33, 0x9, 0x99, 0x40, 0x85, 0x8f, 0x23, 0xa4, 0xfa, 0x0, 0x95, 0xf7, 0xcd, 0xbd, 0x26, 0x86, 0x4e, 0x85, 0xef, 0x50, 0xaf, 0x86, 0x2a, 0x8d, 0x4d, 0xf5, 0xc, 0x48, 0x4e, 0x85, 0xef, 0x50, 0x8f, 0x85, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0xf7, 0xf7, 0x23, 0x16, 0xf4, 0x0, 0x91, 0xbf, 0x1c, 0x48, 0x63, 0xe5, 0xa7, 0x0, 0x54, 0x48, 0x63, 0x7b, 0xd9, 0x2, 0xea, 0x84, 0x63, 0x73, 0xa9, 0x1, 0xca, 0x84, 0x26, 0x86, 0xda, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x1b, 0x1c, 0x44, 0x18, 0x40, 0x85, 0x8f, 0x26, 0x97, 0x1c, 0xc4, 0x18, 0xc0, 0xd9, 0xff, 0xa2, 0x85, 0x4e, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0x29, 0x41, 0xd9, 0x31, 0xbf, 0xca, 0x87, 0x63, 0xf3, 0x2b, 0x1, 0xde, 0x87, 0xb3, 0xc7, 0xd7, 0x2, 0x18, 0x54, 0xc, 0x50, 0x5a, 0x86, 0x4e, 0x85, 0xb3, 0x86, 0xd7, 0x2, 0x2, 0x97, 0xaa, 0x84, 0xe3, 0x48, 0xa0, 0xf6, 0xed, 0xbd, 0x3, 0x2b, 0xa, 0x0, 0x3, 0x29, 0x4a, 0x0, 0x1, 0x45, 0x21, 0xa, 0x59, 0xbb, 0x63, 0x4b, 0xdc, 0x0, 0x1c, 0x54, 0xc, 0x50, 0x5a, 0x86, 0x4e, 0x85, 0x82, 0x97, 0xaa, 0x84, 0xe3, 0x40, 0xa0, 0xde, 0xd9, 0xbd, 0x62, 0x86, 0xda, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x14, 0x1c, 0x44, 0xe2, 0x84, 0xb3, 0x87, 0x87, 0x41, 0x1c, 0xc4, 0x1c, 0x40, 0xe2, 0x97, 0x1c, 0xc0, 0x7d, 0xbb, 0x79, 0x71, 0x22, 0xd4, 0x4a, 0xd0, 0x4e, 0xce, 0x52, 0xcc, 0x5a, 0xc8, 0x5e, 0xc6, 0x6, 0xd6, 0x26, 0xd2, 0x56, 0xca, 0xaa, 0x89, 0x2e, 0x8a, 0x32, 0x84, 0x1, 0x49, 0x5, 0x4b, 0xfd, 0x5b, 0x4, 0x44, 0x83, 0x2a, 0x44, 0x0, 0xfd, 0x1a, 0x63, 0xd0, 0xa, 0x2, 0x0, 0x40, 0x6d, 0xf8, 0xb2, 0x50, 0x22, 0x54, 0x92, 0x54, 0xf2, 0x49, 0x62, 0x4a, 0xd2, 0x4a, 0x42, 0x4b, 0xb2, 0x4b, 0x4a, 0x85, 0x2, 0x59, 0x45, 0x61, 0x82, 0x80, 0x83, 0xd7, 0xc4, 0x0, 0x63, 0x7b, 0xfb, 0x0, 0x83, 0x97, 0xe4, 0x0, 0x63, 0x87, 0x77, 0x1, 0xa6, 0x85, 0x4e, 0x85, 0x2, 0x9a, 0x33, 0x69, 0xa9, 0x0, 0x93, 0x84, 0x84, 0x6, 0xc1, 0xb7, 0x79, 0x71, 0x26, 0xd2, 0xaa, 0x84, 0x2e, 0x85, 0x22, 0xd4, 0x6, 0xd6, 0x2e, 0x84, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xa0, 0xc, 0xb7, 0xa7, 0x81, 0x40, 0x93, 0x87, 0xc7, 0xf9, 0x3e, 0xcc, 0x85, 0x47, 0x3e, 0xce, 0x1c, 0x8, 0x3e, 0xc2, 0x89, 0x47, 0x3e, 0xc4, 0x9c, 0x54, 0x2a, 0xca, 0x5, 0x5, 0x22, 0xc8, 0x2a, 0xc6, 0x80, 0x44, 0x81, 0xe7, 0x26, 0x85, 0xef, 0xf0, 0x9f, 0xaf, 0x7c, 0x50, 0x85, 0x8b, 0x89, 0xeb, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0xee, 0x9e, 0x26, 0x85, 0x50, 0x0, 0xa2, 0x85, 0xef, 0xf0, 0xbf, 0xc4, 0xa9, 0x44, 0x11, 0xc1, 0xfd, 0x54, 0x7c, 0x50, 0x85, 0x8b, 0x89, 0xeb, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0xae, 0xa6, 0xb2, 0x50, 0x22, 0x54, 0x26, 0x85, 0x92, 0x54, 0x45, 0x61, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xef, 0x40, 0x7f, 0x81, 0xb2, 0x45, 0xf2, 0x40, 0x5, 0x61, 0xa5, 0xb7, 0x41, 0x11, 0x22, 0xc4, 0x2e, 0x84, 0x83, 0x95, 0xe5, 0x0, 0x6, 0xc6, 0xef, 0x70, 0x8f, 0xd2, 0x63, 0x49, 0x5, 0x0, 0x7c, 0x48, 0xaa, 0x97, 0x7c, 0xc8, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x83, 0x57, 0xc4, 0x0, 0x7d, 0x77, 0x7d, 0x17, 0xf9, 0x8f, 0x23, 0x16, 0xf4, 0x0, 0xed, 0xb7, 0x1, 0x45, 0x82, 0x80, 0x83, 0xd7, 0xc5, 0x0, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x6, 0xce, 0x93, 0xf7, 0x7, 0x10, 0xaa, 0x84, 0x2e, 0x84, 0x32, 0x89, 0xb6, 0x89, 0x99, 0xc7, 0x83, 0x95, 0xe5, 0x0, 0x89, 0x46, 0x1, 0x46, 0xef, 0x70, 0x8f, 0xc6, 0x83, 0x57, 0xc4, 0x0, 0x7d, 0x77, 0x7d, 0x17, 0xf9, 0x8f, 0x83, 0x15, 0xe4, 0x0, 0x23, 0x16, 0xf4, 0x0, 0x62, 0x44, 0xf2, 0x40, 0xce, 0x86, 0x4a, 0x86, 0xb2, 0x49, 0x42, 0x49, 0x26, 0x85, 0xd2, 0x44, 0x5, 0x61, 0x6f, 0x70, 0xf, 0xbd, 0x41, 0x11, 0x22, 0xc4, 0x2e, 0x84, 0x83, 0x95, 0xe5, 0x0, 0x6, 0xc6, 0xef, 0x70, 0xf, 0xc3, 0x7d, 0x57, 0x83, 0x57, 0xc4, 0x0, 0x63, 0x1b, 0xe5, 0x0, 0x7d, 0x77, 0x7d, 0x17, 0xf9, 0x8f, 0x23, 0x16, 0xf4, 0x0, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x5, 0x67, 0xd9, 0x8f, 0x23, 0x16, 0xf4, 0x0, 0x68, 0xc8, 0xfd, 0xb7, 0x83, 0x95, 0xe5, 0x0, 0x6f, 0x70, 0xf, 0xce, 0x75, 0x71, 0x22, 0xc5, 0x4a, 0xc1, 0xce, 0xde, 0xd2, 0xdc, 0x6, 0xc7, 0x26, 0xc3, 0xd6, 0xda, 0xda, 0xd8, 0xde, 0xd6, 0x2a, 0x89, 0x2e, 0x84, 0x32, 0x8a, 0xb6, 0x89, 0x9, 0xc5, 0x1c, 0x55, 0x99, 0xe3, 0xef, 0xf0, 0x1f, 0x9b, 0x7c, 0x50, 0x85, 0x8b, 0x89, 0xeb, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0x6e, 0x8a, 0x83, 0x57, 0xc4, 0x0, 0x13, 0x7, 0x80, 0x10, 0x93, 0xf7, 0x87, 0x10, 0x63, 0x98, 0xe7, 0x0, 0xa2, 0x85, 0x4a, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0x1, 0x83, 0x2a, 0xc4, 0x2, 0xf5, 0x47, 0x63, 0x84, 0xa, 0x12, 0x85, 0x47, 0x63, 0x89, 0xf9, 0x0, 0x93, 0xf4, 0xd9, 0xff, 0xd9, 0x47, 0x63, 0x9c, 0x4, 0x10, 0x81, 0x4b, 0x25, 0xa8, 0xa2, 0x85, 0x4a, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x80, 0xfe, 0x83, 0x57, 0xc4, 0x0, 0x13, 0x97, 0x37, 0x1, 0x63, 0x56, 0x7, 0xa, 0x64, 0x48, 0x83, 0x17, 0xc4, 0x0, 0x13, 0xf7, 0x47, 0x0, 0x79, 0xcf, 0x5c, 0x40, 0x9d, 0x8c, 0x5c, 0x58, 0x99, 0xc3, 0x3c, 0x40, 0x9d, 0x8c, 0xce, 0x8b, 0x26, 0x9a, 0x81, 0x49, 0x1c, 0x48, 0x99, 0xe7, 0xa2, 0x85, 0x4a, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xa0, 0xfb, 0x83, 0x17, 0xc4, 0x0, 0x13, 0xd7, 0x17, 0x0, 0x13, 0x77, 0xd7, 0x40, 0x15, 0xe3, 0x93, 0xf7, 0x7, 0x40, 0xf5, 0xe7, 0xb7, 0x57, 0x81, 0x40, 0x93, 0x87, 0x27, 0x51, 0x63, 0x8a, 0xfa, 0xa, 0x83, 0x57, 0xc4, 0x0, 0x5, 0x67, 0x13, 0x7, 0x7, 0x80, 0xd9, 0x8f, 0x23, 0x16, 0xf4, 0x0, 0xa2, 0x85, 0x4a, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x20, 0xf7, 0x21, 0xe9, 0xc, 0x50, 0xce, 0x86, 0x52, 0x86, 0x4a, 0x85, 0x82, 0x9a, 0xfd, 0x57, 0x63, 0x1, 0xf5, 0x4, 0x4c, 0x58, 0x91, 0xc9, 0x93, 0x7, 0x44, 0x4, 0x63, 0x85, 0xf5, 0x0, 0x4a, 0x85, 0xef, 0x40, 0x3f, 0xcc, 0x23, 0x2a, 0x4, 0x2, 0x1c, 0x48, 0x7d, 0x77, 0x13, 0x7, 0xf7, 0x7d, 0x1c, 0xc0, 0x83, 0x57, 0xc4, 0x0, 0x23, 0x22, 0x4, 0x0, 0xf9, 0x8f, 0x21, 0xa2, 0xc, 0x50, 0x85, 0x46, 0x1, 0x46, 0x4a, 0x85, 0x82, 0x9a, 0xfd, 0x57, 0xaa, 0x84, 0xe3, 0x16, 0xf5, 0xf4, 0x7c, 0x50, 0x85, 0x8b, 0x89, 0xeb, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xc0, 0x6e, 0x82, 0x7d, 0x55, 0xba, 0x40, 0x2a, 0x44, 0x9a, 0x44, 0xa, 0x49, 0xf6, 0x59, 0x66, 0x5a, 0xd6, 0x5a, 0x46, 0x5b, 0xb6, 0x5b, 0x49, 0x61, 0x82, 0x80, 0xa1, 0x8b, 0x9d, 0xd7, 0x1c, 0x40, 0x8d, 0xd7, 0x18, 0x48, 0x99, 0x8f, 0xbe, 0x94, 0xd, 0xb7, 0x23, 0x20, 0xf9, 0x0, 0x7d, 0xbf, 0x83, 0x15, 0xe4, 0x0, 0xe3, 0xc6, 0x5, 0xf4, 0x30, 0x0, 0x4a, 0x85, 0xef, 0x70, 0x6f, 0xbe, 0x21, 0xf1, 0xb2, 0x46, 0x3d, 0x67, 0x83, 0x17, 0xc4, 0x0, 0x75, 0x8f, 0xa1, 0x66, 0xe3, 0x19, 0xd7, 0xf2, 0x46, 0x47, 0x93, 0xe7, 0x7, 0x40, 0x23, 0x16, 0xf4, 0x0, 0x38, 0xc8, 0x52, 0x8b, 0x63, 0x8b, 0x9, 0x0, 0x83, 0x15, 0xe4, 0x0, 0x30, 0x0, 0x4a, 0x85, 0xef, 0x70, 0x6f, 0xbb, 0x5, 0xf1, 0x62, 0x4b, 0x52, 0x9b, 0x63, 0x90, 0xb, 0x2, 0x83, 0x57, 0xc4, 0x0, 0x13, 0x97, 0x37, 0x1, 0x63, 0x52, 0x7, 0x6, 0x68, 0x48, 0x5c, 0x40, 0xb3, 0x4, 0xf5, 0x40, 0x5c, 0x58, 0x99, 0xc3, 0x3c, 0x40, 0x9d, 0x8c, 0x4c, 0x58, 0x18, 0x48, 0x5c, 0x40, 0xb1, 0xcd, 0x54, 0x5c, 0xa6, 0x97, 0x99, 0x8e, 0xb3, 0x84, 0xd7, 0x40, 0x3c, 0x40, 0xb6, 0x97, 0x63, 0x4a, 0x9b, 0x4, 0xb3, 0x86, 0xf4, 0x0, 0x63, 0x76, 0xdb, 0x4, 0xb3, 0x4, 0x9b, 0x40, 0x26, 0x97, 0x85, 0x8f, 0x18, 0xc0, 0x5c, 0xc0, 0x91, 0xc9, 0x93, 0x7, 0x44, 0x4, 0x63, 0x85, 0xf5, 0x0, 0x4a, 0x85, 0xef, 0x40, 0xff, 0xba, 0x23, 0x2a, 0x4, 0x2, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0xf7, 0xfd, 0x23, 0x16, 0xf4, 0x0, 0x51, 0xa0, 0xc, 0x50, 0x85, 0x46, 0x1, 0x46, 0x4a, 0x85, 0x82, 0x9a, 0xfd, 0x57, 0xe3, 0x1b, 0xf5, 0xf8, 0x69, 0xbd, 0x14, 0x40, 0x99, 0x8e, 0x95, 0x8c, 0x75, 0xb7, 0x24, 0x48, 0xc, 0x50, 0x81, 0x46, 0xb3, 0x4, 0x90, 0x40, 0xb3, 0xf4, 0x64, 0x1, 0x26, 0x86, 0x4a, 0x85, 0x82, 0x9a, 0xfd, 0x57, 0xe3, 0xd, 0xf5, 0xe6, 0x1c, 0x48, 0x4c, 0x58, 0x23, 0x22, 0x4, 0x0, 0x1c, 0xc0, 0x91, 0xc9, 0x93, 0x7, 0x44, 0x4, 0x63, 0x85, 0xf5, 0x0, 0x4a, 0x85, 0xef, 0x40, 0xff, 0xb4, 0x23, 0x2a, 0x4, 0x2, 0x83, 0x57, 0xc4, 0x0, 0xb3, 0xb, 0x9b, 0x40, 0x93, 0xf7, 0xf7, 0xfd, 0x23, 0x16, 0xf4, 0x0, 0x63, 0x0, 0x9b, 0x2, 0xa2, 0x85, 0x4a, 0x85, 0x4d, 0x2c, 0xe3, 0x1f, 0x5, 0xe2, 0x5c, 0x40, 0xe3, 0xec, 0x77, 0xe3, 0x18, 0x40, 0xb3, 0x87, 0x77, 0x41, 0x5c, 0xc0, 0x5e, 0x97, 0x18, 0xc0, 0x21, 0x46, 0x81, 0x45, 0x13, 0x5, 0xc4, 0x5, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xa0, 0xc8, 0x7c, 0x50, 0x85, 0x8b, 0x89, 0xeb, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xf7, 0x7, 0x20, 0x81, 0xe7, 0x28, 0x4c, 0xef, 0xb0, 0xbe, 0xe9, 0x1, 0x45, 0x95, 0xbd, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0xae, 0x84, 0x2a, 0x84, 0x32, 0xc6, 0xef, 0x40, 0x6f, 0xc4, 0xa2, 0x85, 0x62, 0x44, 0xb2, 0x46, 0xf2, 0x40, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0xcd, 0xb9, 0xb7, 0x67, 0x81, 0x40, 0x83, 0xa7, 0x87, 0xbc, 0x63, 0x85, 0xa7, 0xc, 0x5c, 0x51, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x2a, 0x84, 0x8d, 0xcb, 0xdc, 0x47, 0x8d, 0xc3, 0x81, 0x44, 0x13, 0x9, 0x0, 0x8, 0x5c, 0x50, 0xdc, 0x47, 0xa6, 0x97, 0x8c, 0x43, 0xd9, 0xe1, 0x91, 0x4, 0xe3, 0x9a, 0x24, 0xff, 0x5c, 0x50, 0x22, 0x85, 0xcc, 0x47, 0xef, 0x40, 0xdf, 0xa8, 0x5c, 0x50, 0x8c, 0x43, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0x1f, 0xa8, 0x4c, 0x48, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0x7f, 0xa7, 0x4c, 0x50, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0xdf, 0xa6, 0xc, 0x5c, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0x3f, 0xa6, 0x4c, 0x5c, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0x9f, 0xa5, 0x2c, 0x40, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0xff, 0xa4, 0x83, 0x25, 0xc4, 0xe, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0x3f, 0xa4, 0x83, 0x25, 0x84, 0xe, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0x7f, 0xa3, 0x4c, 0x58, 0x81, 0xc5, 0x22, 0x85, 0xef, 0x40, 0xdf, 0xa2, 0x1c, 0x54, 0x85, 0xc3, 0x22, 0x85, 0x62, 0x44, 0xf2, 0x40, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x87, 0x83, 0xa9, 0x5, 0x0, 0x22, 0x85, 0xef, 0x40, 0xff, 0xa0, 0xce, 0x85, 0xbd, 0xb7, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0xef, 0x40, 0xaf, 0xb5, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x2a, 0xc6, 0xef, 0x40, 0xaf, 0xb4, 0xb2, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0x70, 0xaf, 0x8d, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2e, 0xc6, 0xef, 0x40, 0x2f, 0xb3, 0xa2, 0x85, 0x62, 0x44, 0x32, 0x46, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0x70, 0xf, 0x96, 0x1, 0x11, 0x22, 0xcc, 0x6, 0xce, 0x2a, 0x84, 0x2e, 0xc6, 0xef, 0x40, 0x6f, 0xb1, 0xa2, 0x85, 0x62, 0x44, 0x32, 0x46, 0xf2, 0x40, 0x5, 0x61, 0x6f, 0xb0, 0xfe, 0xd8, 0x39, 0x71, 0x3e, 0xda, 0x3c, 0x10, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x2a, 0x84, 0xae, 0x84, 0x32, 0xd4, 0x36, 0xd6, 0x3a, 0xd8, 0x42, 0xdc, 0x46, 0xde, 0x3e, 0xc6, 0xef, 0x40, 0x8f, 0xae, 0xb2, 0x47, 0x26, 0x86, 0xa2, 0x85, 0x94, 0x43, 0xef, 0x60, 0x5f, 0xe2, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x21, 0x61, 0x82, 0x80, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0xae, 0x84, 0x2a, 0x84, 0x32, 0xc6, 0xef, 0x40, 0xf, 0xac, 0xa2, 0x85, 0x62, 0x44, 0xb2, 0x46, 0xf2, 0x40, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x6f, 0x60, 0x9f, 0xfd, 0x1, 0x11, 0x22, 0xcc, 0x26, 0xca, 0x6, 0xce, 0xae, 0x84, 0x2a, 0x84, 0x32, 0xc6, 0xef, 0x40, 0xcf, 0xa9, 0xa2, 0x85, 0x62, 0x44, 0xb2, 0x46, 0xf2, 0x40, 0x26, 0x86, 0xd2, 0x44, 0x5, 0x61, 0x6f, 0x60, 0x5f, 0xed, 0x83, 0xc7, 0x5, 0x0, 0x13, 0x7, 0x20, 0x7, 0x63, 0x83, 0xe7, 0x4, 0x13, 0x7, 0x70, 0x7, 0x63, 0x8a, 0xe7, 0x4, 0x13, 0x7, 0x10, 0x6, 0x63, 0x8b, 0xe7, 0x4, 0xd9, 0x47, 0x1c, 0xc1, 0x1, 0x45, 0x82, 0x80, 0x63, 0x8b, 0x16, 0x1, 0x63, 0x80, 0x66, 0x2, 0x83, 0xc6, 0x15, 0x0, 0x85, 0x5, 0xed, 0xfa, 0xd9, 0x8f, 0x1c, 0xc2, 0x82, 0x80, 0xd, 0x99, 0xf1, 0x9b, 0x13, 0x65, 0x5, 0x1, 0x93, 0xe7, 0x27, 0x0, 0xdd, 0xb7, 0xb3, 0xe7, 0x7, 0x1, 0xc5, 0xb7, 0x1, 0x47, 0x81, 0x47, 0x11, 0x45, 0x5, 0x68, 0x93, 0x8, 0xb0, 0x2, 0x13, 0x3, 0x80, 0x7, 0x13, 0x8, 0x8, 0x80, 0xe9, 0xb7, 0x13, 0x7, 0x0, 0x60, 0x85, 0x47, 0x21, 0x45, 0xe5, 0xb7, 0x13, 0x7, 0x80, 0x20, 0x85, 0x47, 0x13, 0x5, 0x80, 0x10, 0xf1, 0xbf, 0x83, 0xd7, 0xc5, 0x0, 0x25, 0x47, 0xa5, 0x8b, 0x63, 0x9e, 0xe7, 0x0, 0x1, 0x11, 0x6, 0xce, 0x2e, 0xc6, 0xef, 0x40, 0xaf, 0x9f, 0xb2, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x17, 0xb3, 0x7e, 0xff, 0x67, 0x0, 0x3, 0xb1, 0x1, 0x45, 0x82, 0x80, 0x41, 0x11, 0x22, 0xc4, 0x26, 0xc2, 0x6, 0xc6, 0x4a, 0xc0, 0xaa, 0x84, 0x2e, 0x84, 0x9, 0xc5, 0x1c, 0x55, 0x99, 0xe3, 0xef, 0xf0, 0xf, 0xc6, 0x83, 0x17, 0xc4, 0x0, 0x23, 0x22, 0x4, 0x0, 0x13, 0xf7, 0x7, 0x2, 0x9, 0xef, 0x13, 0xf7, 0x47, 0x0, 0x55, 0xef, 0x13, 0xf7, 0x7, 0x1, 0x11, 0xef, 0x25, 0x47, 0x98, 0xc0, 0x93, 0xe7, 0x7, 0x4, 0x23, 0x16, 0xf4, 0x0, 0x7d, 0x55, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0xa1, 0x8b, 0x8d, 0xc3, 0xa2, 0x85, 0x26, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0x0, 0xab, 0x6d, 0xf1, 0x83, 0x57, 0xc4, 0x0, 0x23, 0x24, 0x4, 0x0, 0x23, 0x2c, 0x4, 0x0, 0xdd, 0x9b, 0x23, 0x16, 0xf4, 0x0, 0x83, 0x57, 0xc4, 0x0, 0x93, 0xe7, 0x47, 0x0, 0x23, 0x16, 0xf4, 0x0, 0x1c, 0x48, 0x99, 0xe7, 0xa2, 0x85, 0x26, 0x85, 0x97, 0xb0, 0x7e, 0xff, 0xe7, 0x80, 0xc0, 0xa8, 0x3, 0x19, 0xc4, 0x0, 0x93, 0x77, 0x39, 0x0, 0x8d, 0xcb, 0x85, 0x47, 0xb7, 0x65, 0x81, 0x40, 0x23, 0x16, 0xf4, 0x0, 0x13, 0x86, 0x81, 0xc2, 0x93, 0x85, 0x85, 0xa8, 0x13, 0x85, 0x41, 0xc3, 0xef, 0xf0, 0xdf, 0x82, 0xa5, 0x47, 0x23, 0x16, 0x24, 0x1, 0x13, 0x79, 0x99, 0x0, 0x63, 0x16, 0xf9, 0x0, 0xa2, 0x85, 0x26, 0x85, 0xef, 0xe0, 0x1f, 0xf7, 0x10, 0x48, 0x5c, 0x50, 0x54, 0x48, 0xc, 0x50, 0x10, 0xc0, 0x26, 0x85, 0x82, 0x97, 0x48, 0xc0, 0x63, 0x48, 0xa0, 0x2, 0x83, 0x17, 0xc4, 0x0, 0x15, 0xe5, 0x93, 0xe7, 0x7, 0x2, 0x99, 0xbf, 0x4c, 0x58, 0xd1, 0xd9, 0x93, 0x7, 0x44, 0x4, 0x63, 0x85, 0xf5, 0x0, 0x26, 0x85, 0xef, 0x40, 0x8f, 0xf8, 0x3c, 0x40, 0x23, 0x2a, 0x4, 0x2, 0x5c, 0xc0, 0xb5, 0xdf, 0x5c, 0x5c, 0x1c, 0xc0, 0x1, 0x45, 0x25, 0xbf, 0x23, 0x22, 0x4, 0x0, 0x25, 0xb7}, + }, + { + .addr = 1082219456, + .size = 19720, + .data = (uint8_t[]){0x0, 0x0, 0x0, 0x0, 0xf0, 0xb6, 0x81, 0x40, 0xf8, 0x5f, 0x81, 0x40, 0x0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c, 0xb, 0x60, 0x1, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x60, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x4d, 0x80, 0x40, 0xec, 0x4d, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xcc, 0xb5, 0x81, 0x40, 0xff, 0xff, 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5c, 0x81, 0x40, 0xe0, 0xa5, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x94, 0x9c, 0x80, 0x40, 0x26, 0xa3, 0x80, 0x40, 0x2c, 0xa3, 0x80, 0x40, 0x32, 0xa3, 0x80, 0x40, 0x3a, 0xa3, 0x80, 0x40, 0x52, 0xa2, 0x80, 0x40, 0x24, 0xa5, 0x80, 0x40, 0x60, 0xcd, 0x80, 0x40, 0x9c, 0x17, 0x80, 0x40, 0x1a, 0x17, 0x80, 0x40, 0x34, 0xa4, 0x80, 0x40, 0xf4, 0xcc, 0x80, 0x40, 0x5a, 0xcc, 0x80, 0x40, 0xf6, 0xcb, 0x80, 0x40, 0xd0, 0xca, 0x80, 0x40, 0x40, 0xa5, 0x80, 0x40, 0x24, 0xa5, 0x80, 0x40, 0x24, 0xa5, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x2e, 0xca, 0x80, 0x40, 0xdc, 0xc7, 0x80, 0x40, 0xde, 0xc8, 0x80, 0x40, 0x4e, 0xc9, 0x80, 0x40, 0xbe, 0xc9, 0x80, 0x40, 0xd0, 0x15, 0x80, 0x40, 0xd8, 0x15, 0x80, 0x40, 0xe0, 0x15, 0x80, 0x40, 0xf0, 0x15, 0x80, 0x40, 0x0, 0x16, 0x80, 0x40, 0x30, 0x16, 0x80, 0x40, 0x60, 0x16, 0x80, 0x40, 0x90, 0x16, 0x80, 0x40, 0xc0, 0x16, 0x80, 0x40, 0xd2, 0x16, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd2, 0xa2, 0x80, 0x40, 0x52, 0xa2, 0x80, 0x40, 0xe8, 0xa3, 0x80, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x60, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x36, 0xab, 0x80, 0x40, 0x82, 0xab, 0x80, 0x40, 0x0, 0x10, 0x0, 0x60, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x36, 0xab, 0x80, 0x40, 0x82, 0xab, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x14, 0xb, 0x60, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x18, 0xc2, 0x80, 0x40, 0xfe, 0xc1, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x2, 0x0, 0x0, 0x0, 0x24, 0x19, 0x80, 0x40, 0x92, 0xd0, 0x80, 0x40, 0x96, 0xd0, 0x80, 0x40, 0x42, 0x19, 0x80, 0x40, 0x3e, 0x19, 0x80, 0x40, 0xac, 0xd0, 0x80, 0x40, 0x9a, 0xd0, 0x80, 0x40, 0x8c, 0x9d, 0x80, 0x40, 0x30, 0x19, 0x80, 0x40, 0x22, 0xa3, 0x80, 0x40, 0x26, 0x18, 0x80, 0x40, 0x20, 0x19, 0x80, 0x40, 0x28, 0x19, 0x80, 0x40, 0xa4, 0xd0, 0x80, 0x40, 0xa8, 0xd0, 0x80, 0x40, 0x2c, 0x19, 0x80, 0x40, 0x8c, 0xd0, 0x80, 0x40, 0x3a, 0x19, 0x80, 0x40, 0xaf, 0xbe, 0xad, 0xde, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x5f, 0x81, 0x40, 0xff, 0xff, 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x7c, 0x9f, 0x81, 0x40, 0xa8, 0x61, 0x0, 0x0, 0x20, 0x4e, 0x0, 0x0, 0x88, 0x13, 0x0, 0x0, 0xa8, 0x61, 0x0, 0x0, 0x50, 0xc3, 0x0, 0x0, 0x2, 0x1, 0x28, 0x3, 0x0, 0x0, 0x3c, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x50, 0xb4, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0x50, 0xb4, 0x81, 0x40, 0xb8, 0xb4, 0x81, 0x40, 0x20, 0xb5, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x94, 0x61, 0x81, 0x40, 0xff, 0xff, 0x3f, 0xb3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x10, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x24, 0x10, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xc2, 0xf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xd4, 0xf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xd6, 0xe, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xee, 0xe, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xfe, 0xe, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x70, 0xf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x98, 0xf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xfe, 0xf, 0x80, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x98, 0xa, 0x60, 0x0, 0xf0, 0xa, 0x60, 0xd0, 0x61, 0x81, 0x40, 0xa4, 0x61, 0x81, 0x40, 0xc2, 0x1, 0x4, 0x0, 0x0, 0x0, 0x9a, 0x0, 0xfa, 0x0, 0x1, 0x1, 0x2, 0x0, 0x2, 0x0, 0xc2, 0x1, 0x96, 0x0, 0x7c, 0x0, 0x9a, 0x0, 0x2, 0x0, 0x2, 0x0, 0xac, 0x0, 0xe0, 0x1, 0x16, 0x1, 0x7e, 0x1, 0x46, 0x0, 0x17, 0x0, 0xfa, 0x0, 0x1, 0x0, 0x0, 0x0, 0xb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x1, 0xa, 0x5, 0x1, 0x18, 0x0, 0x34, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x20, 0x80, 0x40, 0x22, 0x20, 0x80, 0x40, 0x38, 0x95, 0x81, 0x40, 0x16, 0x21, 0x80, 0x40, 0x40, 0x21, 0x80, 0x40, 0xd0, 0x21, 0x80, 0x40, 0x62, 0x21, 0x80, 0x40, 0x68, 0x95, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0xd0, 0x95, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x2a, 0x80, 0x40, 0x1c, 0x2a, 0x80, 0x40, 0xe8, 0x29, 0x80, 0x40, 0xcc, 0x29, 0x80, 0x40, 0x7a, 0x29, 0x80, 0x40, 0x74, 0x29, 0x80, 0x40, 0x14, 0x29, 0x80, 0x40, 0xec, 0x28, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xe2, 0x29, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7a, 0x2a, 0x80, 0x40, 0x56, 0x2a, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x40, 0x2a, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xd, 0x3, 0x0, 0x0, 0x9, 0x3d, 0x0, 0xa0, 0x8f, 0x3e, 0x0, 0xc0, 0x27, 0x9, 0x0, 0x20, 0xa1, 0x7, 0x0, 0xfe, 0xb, 0x81, 0x40, 0x1a, 0xc, 0x81, 0x40, 0x26, 0xc, 0x81, 0x40, 0xa2, 0xc, 0x81, 0x40, 0xd8, 0xc, 0x81, 0x40, 0xea, 0xc, 0x81, 0x40, 0x2c, 0x96, 0x81, 0x40, 0x34, 0x96, 0x81, 0x40, 0x8, 0xa, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x4, 0x6, 0x8, 0x8, 0x8, 0x0, 0x0, 0x0, 0x34, 0xb, 0x81, 0x40, 0x34, 0x6, 0x81, 0x40, 0xb8, 0xf0, 0x80, 0x40, 0xae, 0x7, 0x81, 0x40, 0xc8, 0x7, 0x81, 0x40, 0x6, 0x8, 0x81, 0x40, 0x26, 0xf1, 0x80, 0x40, 0x9e, 0x8, 0x81, 0x40, 0x3e, 0x8, 0x81, 0x40, 0xe, 0x3, 0x81, 0x40, 0xd6, 0xf1, 0x80, 0x40, 0x3e, 0x7, 0x81, 0x40, 0x20, 0x3, 0x81, 0x40, 0x12, 0xf2, 0x80, 0x40, 0xc2, 0x8, 0x81, 0x40, 0x92, 0x4, 0x81, 0x40, 0x8a, 0x4, 0x81, 0x40, 0x42, 0xf2, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xde, 0xb, 0x81, 0x40, 0xee, 0xb, 0x81, 0x40, 0xd8, 0x8, 0x81, 0x40, 0x0, 0xc, 0xb, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa, 0x5, 0x7, 0x7, 0xa, 0x1, 0x1, 0x1, 0x1, 0x7, 0x3, 0x2, 0x1, 0x1, 0x1, 0x1, 0x4, 0x9, 0x4, 0x4, 0x9, 0x4, 0x9, 0x4, 0x4, 0x5, 0x5, 0x5, 0x5, 0x4, 0x4, 0x4, 0x4, 0x2, 0x2, 0x2, 0xf, 0xa, 0x4, 0xe, 0x0, 0xc, 0x8, 0x3, 0x1, 0xa, 0xa, 0x0, 0x5b, 0x25, 0x75, 0x5d, 0x20, 0x43, 0x4f, 0x3a, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x70, 0x68, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x21, 0xa, 0x0, 0x0, 0x0, 0x5b, 0x25, 0x75, 0x5d, 0x20, 0x43, 0x4f, 0x3a, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x65, 0x78, 0x20, 0x73, 0x63, 0x68, 0x6d, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x21, 0xa, 0x0, 0x5b, 0x25, 0x75, 0x5d, 0x20, 0x4e, 0x6f, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x20, 0x63, 0x6f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x73, 0x69, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x73, 0xa, 0x0, 0x0, 0x0, 0x5b, 0x25, 0x75, 0x5d, 0x20, 0x43, 0x4f, 0x3a, 0x20, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x73, 0x63, 0x68, 0x6d, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x70, 0x68, 0x6f, 0x72, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x21, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x40, 0x0, 0xc0, 0xbb, 0xbb, 0xfb, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x7, 0x1, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0, 0x0, 0x47, 0x75, 0x72, 0x75, 0x20, 0x4d, 0x65, 0x64, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x0, 0x0, 0x0, 0x0, 0x20, 0x70, 0x61, 0x6e, 0x69, 0x63, 0x27, 0x65, 0x64, 0x20, 0x28, 0x0, 0x29, 0x2e, 0x20, 0x0, 0xd, 0xa, 0x0, 0x0, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x61, 0x74, 0x20, 0x30, 0x78, 0x0, 0x0, 0x0, 0x0, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x2e, 0x2e, 0xd, 0xa, 0x0, 0xd, 0xa, 0x45, 0x4c, 0x46, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x3a, 0x20, 0x0, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x2e, 0x2e, 0xd, 0xa, 0x0, 0x0, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x0, 0x41, 0x53, 0x53, 0x49, 0x53, 0x54, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x20, 0x42, 0x55, 0x54, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x21, 0xd, 0xa, 0xd, 0xa, 0x0, 0x0, 0x0, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x22, 0x0, 0x0, 0x22, 0x20, 0x61, 0x74, 0x20, 0x30, 0x78, 0x0, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x3a, 0x20, 0x30, 0x78, 0x0, 0x0, 0x0, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x73, 0x3a, 0x20, 0x30, 0x78, 0x0, 0x0, 0x0, 0x0, 0x20, 0x2d, 0x20, 0x30, 0x78, 0x0, 0x0, 0x0, 0xd, 0xa, 0xd, 0xa, 0x0, 0x0, 0x0, 0x0, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x0, 0x0, 0x0, 0x0, 0x43, 0x6f, 0x72, 0x65, 0x20, 0x0, 0x0, 0x0, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x20, 0x64, 0x75, 0x6d, 0x70, 0x3a, 0x0, 0x3a, 0x20, 0x30, 0x78, 0x0, 0x0, 0x0, 0x0, 0x20, 0x20, 0x0, 0x0, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x0, 0x0, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, 0x20, 0x77, 0x64, 0x74, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x6e, 0x20, 0x43, 0x50, 0x55, 0x30, 0x0, 0x0, 0x0, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x61, 0x73, 0x20, 0x75, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x2e, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0xd, 0xa, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x3a, 0xd, 0xa, 0x0, 0x0, 0x0, 0x3a, 0x20, 0x0, 0x0, 0x30, 0x78, 0x0, 0x0, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6d, 0x69, 0x73, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x0, 0x0, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x0, 0x0, 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, 0x42, 0x72, 0x65, 0x61, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x0, 0x0, 0x4c, 0x6f, 0x61, 0x64, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6d, 0x69, 0x73, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x0, 0x4c, 0x6f, 0x61, 0x64, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x0, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, 0x6d, 0x69, 0x73, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x0, 0x0, 0x0, 0x0, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x55, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x53, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x4d, 0x2d, 0x6d, 0x6f, 0x64, 0x65, 0x0, 0x0, 0x0, 0x0, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x4c, 0x6f, 0x61, 0x64, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x20, 0x70, 0x61, 0x67, 0x65, 0x20, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x45, 0x50, 0x43, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x52, 0x41, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x47, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x50, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x30, 0x2f, 0x46, 0x50, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x41, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x32, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x37, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x39, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x31, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x53, 0x31, 0x31, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x33, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x34, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x35, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x54, 0x36, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x54, 0x56, 0x45, 0x43, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x43, 0x41, 0x55, 0x53, 0x45, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x54, 0x56, 0x41, 0x4c, 0x20, 0x20, 0x20, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x48, 0x41, 0x52, 0x54, 0x49, 0x44, 0x20, 0x0, 0x0, 0x0, 0x0, 0x52, 0x41, 0x4d, 0x0, 0x52, 0x54, 0x43, 0x52, 0x41, 0x4d, 0x0, 0x0, 0x6d, 0x61, 0x69, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x49, 0x44, 0x4c, 0x45, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x2a, 0x2a, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x2a, 0x2a, 0x2a, 0x20, 0x41, 0x20, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x0, 0x0, 0x0, 0x20, 0x68, 0x61, 0x73, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, 0x0, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x28, 0x29, 0x20, 0x77, 0x61, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x50, 0x43, 0x20, 0x30, 0x78, 0x0, 0x20, 0x6f, 0x6e, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x0, 0x0, 0x0, 0x72, 0x0, 0x0, 0x0, 0x77, 0x0, 0x0, 0x0, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x30, 0x0, 0x0, 0x2f, 0x31, 0x0, 0x0, 0x2f, 0x32, 0x0, 0x0, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x61, 0x72, 0x74, 0x0, 0x0, 0x0, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x0, 0x0, 0x2f, 0x64, 0x65, 0x76, 0x2f, 0x75, 0x61, 0x72, 0x74, 0x2f, 0x30, 0x0, 0x2f, 0x0, 0x0, 0x0, 0x20, 0x28, 0x43, 0x50, 0x55, 0x20, 0x30, 0x29, 0x0, 0x0, 0x0, 0x0, 0x20, 0x28, 0x43, 0x50, 0x55, 0x20, 0x31, 0x29, 0x0, 0x0, 0x0, 0x0, 0x20, 0x28, 0x43, 0x50, 0x55, 0x20, 0x30, 0x2f, 0x31, 0x29, 0x0, 0x0, 0x54, 0x61, 0x73, 0x6b, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x64, 0x6f, 0x67, 0x20, 0x67, 0x6f, 0x74, 0x20, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x61, 0x73, 0x6b, 0x73, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x20, 0x64, 0x69, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x72, 0x65, 0x73, 0x65, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77, 0x61, 0x74, 0x63, 0x68, 0x64, 0x6f, 0x67, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x3a, 0x0, 0x0, 0xa, 0x20, 0x2d, 0x20, 0x0, 0x0, 0x0, 0x0, 0x65, 0x73, 0x70, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x3a, 0x20, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x20, 0x43, 0x50, 0x55, 0x20, 0x25, 0x64, 0x20, 0x28, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x29, 0x20, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x73, 0xa, 0x0, 0x45, 0x54, 0x53, 0x54, 0x69, 0x6d, 0x65, 0x72, 0x0, 0x0, 0x0, 0x0, 0x65, 0x73, 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x0, 0x0, 0x0, 0x63, 0x6f, 0x65, 0x78, 0x20, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x25, 0x73, 0xa, 0x0, 0x0, 0x63, 0x6f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x0, 0x0, 0x0, 0x0, 0x63, 0x6f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x21, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x78, 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x25, 0x78, 0xa, 0x0, 0x0, 0x0, 0x63, 0x6f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6d, 0x61, 0x67, 0x69, 0x63, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x21, 0x20, 0x4d, 0x61, 0x67, 0x69, 0x63, 0x20, 0x25, 0x78, 0x20, 0x69, 0x73, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x25, 0x78, 0xa, 0x0, 0x0, 0x0, 0x30, 0x31, 0x62, 0x62, 0x36, 0x61, 0x37, 0x0, 0x66, 0x38, 0x63, 0x66, 0x33, 0x33, 0x63, 0x0, 0x36, 0x39, 0x36, 0x34, 0x65, 0x37, 0x66, 0x0, 0x63, 0x62, 0x62, 0x34, 0x31, 0x64, 0x37, 0x2d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x0, 0x0, 0x63, 0x62, 0x62, 0x34, 0x31, 0x64, 0x37, 0x0, 0x63, 0x6f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x20, 0x72, 0x6f, 0x6d, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x25, 0x73, 0xa, 0x0, 0xa, 0x0, 0x0, 0x0, 0xbe, 0x41, 0x80, 0x40, 0xbc, 0x99, 0x81, 0x40, 0xdc, 0x99, 0x81, 0x40, 0xf8, 0x99, 0x81, 0x40, 0xc, 0x9a, 0x81, 0x40, 0x18, 0x9a, 0x81, 0x40, 0x30, 0x9a, 0x81, 0x40, 0x44, 0x9a, 0x81, 0x40, 0x60, 0x9a, 0x81, 0x40, 0x74, 0x9a, 0x81, 0x40, 0x94, 0x9a, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0xb4, 0x9a, 0x81, 0x40, 0xd4, 0x9a, 0x81, 0x40, 0xec, 0x9a, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0xfc, 0x9a, 0x81, 0x40, 0x10, 0x9b, 0x81, 0x40, 0x1c, 0x9b, 0x81, 0x40, 0x28, 0x9b, 0x81, 0x40, 0x34, 0x9b, 0x81, 0x40, 0x40, 0x9b, 0x81, 0x40, 0x4c, 0x9b, 0x81, 0x40, 0x58, 0x9b, 0x81, 0x40, 0x64, 0x9b, 0x81, 0x40, 0x70, 0x9b, 0x81, 0x40, 0x7c, 0x9b, 0x81, 0x40, 0x88, 0x9b, 0x81, 0x40, 0x94, 0x9b, 0x81, 0x40, 0xa0, 0x9b, 0x81, 0x40, 0xac, 0x9b, 0x81, 0x40, 0xb8, 0x9b, 0x81, 0x40, 0xc4, 0x9b, 0x81, 0x40, 0xd0, 0x9b, 0x81, 0x40, 0xdc, 0x9b, 0x81, 0x40, 0xe8, 0x9b, 0x81, 0x40, 0xf4, 0x9b, 0x81, 0x40, 0x0, 0x9c, 0x81, 0x40, 0xc, 0x9c, 0x81, 0x40, 0x18, 0x9c, 0x81, 0x40, 0x24, 0x9c, 0x81, 0x40, 0x30, 0x9c, 0x81, 0x40, 0x3c, 0x9c, 0x81, 0x40, 0x48, 0x9c, 0x81, 0x40, 0x54, 0x9c, 0x81, 0x40, 0x60, 0x9c, 0x81, 0x40, 0x6c, 0x9c, 0x81, 0x40, 0x78, 0x9c, 0x81, 0x40, 0x84, 0x9c, 0x81, 0x40, 0x90, 0x9c, 0x81, 0x40, 0x9c, 0x9c, 0x81, 0x40, 0xa8, 0x9c, 0x81, 0x40, 0xb4, 0x9c, 0x81, 0x40, 0xc0, 0x9c, 0x81, 0x40, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x73, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x0, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x73, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x0, 0x0, 0x0, 0x0, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x0, 0x0, 0x0, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x0, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x0, 0x0, 0x0, 0x0, 0x68, 0x65, 0x61, 0x70, 0x5f, 0x63, 0x61, 0x70, 0x73, 0x5f, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x0, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x40, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0x40, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x84, 0x40, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x84, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x86, 0x40, 0x10, 0xc6, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x86, 0x40, 0x0, 0x0, 0x0, 0x0, 0x10, 0xc6, 0x87, 0x40, 0xf0, 0x39, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0xc6, 0x87, 0x40, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x50, 0x0, 0x40, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0x9c, 0x81, 0x40, 0xe, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd0, 0x9c, 0x81, 0x40, 0x0, 0x80, 0x0, 0x0, 0x6, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x60, 0x9, 0x60, 0x0, 0x60, 0x9, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x6f, 0x9, 0x60, 0xf0, 0x6f, 0x9, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0xd0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x40, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0, 0x0, 0x1, 0x1, 0xb, 0xe1, 0x4, 0x14, 0x10, 0x0, 0x10, 0x0, 0xa, 0xe1, 0x4, 0x14, 0x0, 0x2, 0x80, 0x12, 0xb, 0xe1, 0x4, 0x14, 0x0, 0x0, 0x0, 0x2, 0xd0, 0xf8, 0x4, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xc8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x31, 0x0, 0x0, 0x0, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x70, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x20, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xff, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xa0, 0x7a, 0x80, 0x40, 0xb4, 0x7a, 0x80, 0x40, 0xc8, 0x7a, 0x80, 0x40, 0xc8, 0x7a, 0x80, 0x40, 0xdc, 0x7a, 0x80, 0x40, 0xee, 0x7a, 0x80, 0x40, 0x0, 0x7b, 0x80, 0x40, 0x0, 0x7b, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x90, 0x7a, 0x80, 0x40, 0x94, 0x7a, 0x80, 0x40, 0x98, 0x7a, 0x80, 0x40, 0x98, 0x7a, 0x80, 0x40, 0x9c, 0x7a, 0x80, 0x40, 0x8, 0x7d, 0x80, 0x40, 0x4, 0x7d, 0x80, 0x40, 0x4, 0x7d, 0x80, 0x40, 0x96, 0x86, 0x80, 0x40, 0x4, 0x87, 0x80, 0x40, 0x5c, 0x80, 0x80, 0x40, 0x82, 0x81, 0x80, 0x40, 0x82, 0x87, 0x80, 0x40, 0xf6, 0x87, 0x80, 0x40, 0xec, 0x84, 0x80, 0x40, 0x2a, 0x86, 0x80, 0x40, 0x18, 0x0, 0x0, 0x0, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x20, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x3a, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xf0, 0xb6, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xa4, 0xb7, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x84, 0xb5, 0x80, 0x40, 0x8c, 0xb6, 0x80, 0x40, 0x60, 0xb6, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe6, 0xb5, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xa6, 0xb6, 0x80, 0x40, 0x14, 0xb5, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x82, 0xb2, 0x80, 0x40, 0x96, 0xaf, 0x80, 0x40, 0x6c, 0xaf, 0x80, 0x40, 0x42, 0xaf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xae, 0xac, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xda, 0xab, 0x80, 0x40, 0x70, 0x5d, 0x81, 0x40, 0x94, 0x5d, 0x81, 0x40, 0x1, 0x0, 0x0, 0x0, 0x9e, 0xc0, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xe0, 0xc2, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcc, 0xbf, 0x80, 0x40, 0xd8, 0xbf, 0x80, 0x40, 0xf0, 0xbf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5a, 0xc1, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x12, 0xc0, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x90, 0xc2, 0x80, 0x40, 0x98, 0xc1, 0x80, 0x40, 0x8e, 0xc0, 0x80, 0x40, 0xdc, 0xbf, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2c, 0xc4, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x90, 0xc4, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8, 0xc3, 0x80, 0x40, 0x6c, 0xc4, 0x80, 0x40, 0x60, 0xc4, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9c, 0xc4, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xa8, 0xc4, 0x80, 0x40, 0xd2, 0xc4, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde, 0xc4, 0x80, 0x40, 0xea, 0xc4, 0x80, 0x40, 0xf6, 0xc4, 0x80, 0x40, 0x2, 0xc5, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb0, 0xc3, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd2, 0xc3, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x40, 0x0, 0x9, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1b, 0x0, 0x0, 0x0, 0x1d, 0x19, 0x1e, 0x18, 0x1c, 0x1a, 0x0, 0x0, 0x5c, 0xa6, 0x81, 0x40, 0xf8, 0x95, 0x81, 0x40, 0x5a, 0xe6, 0x80, 0x40, 0x5e, 0xe6, 0x80, 0x40, 0x2a, 0xe6, 0x80, 0x40, 0xbe, 0xe6, 0x80, 0x40, 0x46, 0xe7, 0x80, 0x40, 0xd8, 0xe7, 0x80, 0x40, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0xc6, 0xee, 0x80, 0x40, 0x6a, 0xe8, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4e, 0xeb, 0x80, 0x40, 0x2, 0xec, 0x80, 0x40, 0x78, 0xed, 0x80, 0x40, 0x0, 0x1, 0x0, 0x0, 0xe2, 0xed, 0x80, 0x40, 0xc2, 0xe8, 0x80, 0x40, 0xa0, 0xf0, 0x80, 0x40, 0xe2, 0xef, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xb8, 0xe8, 0x80, 0x40, 0xb2, 0xec, 0x80, 0x40, 0xe, 0xeb, 0x80, 0x40, 0xf8, 0xec, 0x80, 0x40, 0x8c, 0xea, 0x80, 0x40, 0x66, 0xe9, 0x80, 0x40, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x0, 0x7e, 0x11, 0x81, 0x40, 0xa, 0x14, 0x81, 0x40, 0xb8, 0xf0, 0x80, 0x40, 0x6c, 0xf1, 0x80, 0x40, 0x78, 0xf2, 0x80, 0x40, 0xc2, 0xf2, 0x80, 0x40, 0x26, 0xf1, 0x80, 0x40, 0x9c, 0xf1, 0x80, 0x40, 0xc, 0xf3, 0x80, 0x40, 0x44, 0x16, 0x81, 0x40, 0xd6, 0xf1, 0x80, 0x40, 0x98, 0x15, 0x81, 0x40, 0x48, 0x16, 0x81, 0x40, 0x12, 0xf2, 0x80, 0x40, 0x4c, 0x16, 0x81, 0x40, 0x48, 0x12, 0x81, 0x40, 0x70, 0x11, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xde, 0xb, 0x81, 0x40, 0xee, 0xb, 0x81, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x40, 0x4, 0x0, 0x9, 0x60, 0x8, 0x0, 0x9, 0x60, 0xc, 0x0, 0x9, 0x60, 0x10, 0x0, 0x9, 0x60, 0x14, 0x0, 0x9, 0x60, 0x18, 0x0, 0x9, 0x60, 0x1c, 0x0, 0x9, 0x60, 0x20, 0x0, 0x9, 0x60, 0x24, 0x0, 0x9, 0x60, 0x28, 0x0, 0x9, 0x60, 0x2c, 0x0, 0x9, 0x60, 0x30, 0x0, 0x9, 0x60, 0x34, 0x0, 0x9, 0x60, 0x38, 0x0, 0x9, 0x60, 0x3c, 0x0, 0x9, 0x60, 0x40, 0x0, 0x9, 0x60, 0x44, 0x0, 0x9, 0x60, 0x48, 0x0, 0x9, 0x60, 0x4c, 0x0, 0x9, 0x60, 0x50, 0x0, 0x9, 0x60, 0x54, 0x0, 0x9, 0x60, 0x58, 0x0, 0x9, 0x60, 0x5c, 0x0, 0x9, 0x60, 0x60, 0x0, 0x9, 0x60, 0x64, 0x0, 0x9, 0x60, 0x68, 0x0, 0x9, 0x60, 0x6c, 0x0, 0x9, 0x60, 0x70, 0x0, 0x9, 0x60, 0x74, 0x0, 0x9, 0x60, 0x78, 0x0, 0x9, 0x60, 0x7c, 0x0, 0x9, 0x60, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x0, 0x9c, 0xf4, 0xa, 0x60, 0xa0, 0xf4, 0xa, 0x60, 0xc0, 0xf4, 0xa, 0x60, 0xc4, 0xf4, 0xa, 0x60, 0xc8, 0xf4, 0xa, 0x60, 0x0, 0x0, 0x0, 0x40, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x76, 0x35, 0x2e, 0x33, 0x2e, 0x32, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x75, 0x6e, 0x20, 0x20, 0x33, 0x20, 0x32, 0x30, 0x32, 0x35, 0x20, 0x30, 0x39, 0x3a, 0x32, 0x37, 0x3a, 0x35, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x14, 0x0, 0x0, 0x0, 0x15, 0x0, 0x0, 0x0, 0x16, 0x0, 0x0, 0x0, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, + }, + { + .addr = 1082242880, + .size = 500, + .data = (uint8_t[]){0x32, 0x54, 0xcd, 0xab, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x34, 0x39, 0x38, 0x31, 0x37, 0x34, 0x31, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x65, 0x73, 0x70, 0x5f, 0x73, 0x64, 0x69, 0x6f, 0x5f, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x75, 0x62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x39, 0x3a, 0x32, 0x37, 0x3a, 0x35, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4a, 0x75, 0x6e, 0x20, 0x20, 0x33, 0x20, 0x32, 0x30, 0x32, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x35, 0x2e, 0x33, 0x2e, 0x32, 0x2d, 0x64, 0x69, 0x72, 0x74, 0x79, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb0, 0x3b, 0x80, 0x40, 0x7a, 0x47, 0x80, 0x40, 0x1a, 0x59, 0x80, 0x40, 0xd2, 0x6d, 0x80, 0x40, 0xe4, 0x49, 0x81, 0x40, 0xe8, 0x3f, 0x0, 0x50, 0x0, 0x40, 0x0, 0x50, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x80, 0x40, 0xc0, 0x5b, 0x81, 0x40, 0xc0, 0x5b, 0x81, 0x40, 0x40, 0xb9, 0x81, 0x40, 0x42, 0x34, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xbc, 0x34, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x22, 0x34, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x3e, 0x34, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xc8, 0x4d, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x82, 0x2c, 0x81, 0x40, 0x1, 0x0, 0x1, 0x0, 0x50, 0x46, 0x80, 0x40, 0x1, 0x0, 0x1, 0x0, 0xb2, 0xa9, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x92, 0xa4, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x2, 0x1a, 0x81, 0x40, 0x1, 0x0, 0x1, 0x0, 0xcc, 0x34, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xda, 0x34, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xdc, 0x57, 0x80, 0x40, 0x1, 0x0, 0x1, 0x0, 0x82, 0x70, 0x80, 0x40, 0x1, 0x0, 0x1, 0x0, 0xbe, 0xb8, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x24, 0xc1, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x3a, 0xc5, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xa, 0xa5, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xde, 0xa8, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x38, 0x35, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0x52, 0x34, 0x80, 0x40, 0x1, 0x0, 0x0, 0x0, 0xea, 0x34, 0x80, 0x40, 0x1, 0x0, 0x1, 0x0, 0xa0, 0xbf, 0x80, 0x40, 0x1, 0x0, 0x1, 0x0, 0x2, 0x35, 0x80, 0x40, 0x1, 0x0, 0x1, 0x0}, + }, + }, + }, + // placeholder + {}, + +}; diff --git a/esp_flasher/lib/esp-serial-flasher/src/esp_stubs.c b/esp_flasher/lib/esp-serial-flasher/src/esp_stubs.c new file mode 100644 index 0000000000..09de1ee7e9 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/src/esp_stubs.c @@ -0,0 +1,193 @@ +/* Copyright 2020-2025 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// auto-generated stubs from esp-flasher-stub v0.3.0 + +#include "esp_stubs.h" + +static bool stub_running = false; + +bool esp_stub_get_running(void) +{ + return stub_running; +} + +void esp_stub_set_running(bool stub_status) +{ + stub_running = stub_status; +} + +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) + +#if __STDC_VERSION__ >= 201112L +_Static_assert(ESP8266_CHIP == 0, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32_CHIP == 1, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32S2_CHIP == 2, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C3_CHIP == 3, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32S3_CHIP == 4, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C2_CHIP == 5, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C5_CHIP == 6, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32H2_CHIP == 7, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32C6_CHIP == 8, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP32P4_CHIP == 9, "Stub order matches target_chip_t enumeration"); +_Static_assert(ESP_MAX_CHIP == 10, "Stub order matches target_chip_t enumeration"); +#endif + +const esp_stub_t esp_stub[ESP_MAX_CHIP] = { + // placeholder + {}, + + // esp32.json + { + .header = { + .entrypoint = 1074274996, + }, + .segments = { + { + .addr = 1074266112, + .size = 12884, + .data = (uint8_t[]){0x0, 0xc5, 0x49, 0x10, 0xd5, 0x49, 0x20, 0xe5, 0x49, 0x30, 0xf5, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x9, 0x10, 0xd5, 0x9, 0x20, 0xe5, 0x9, 0x30, 0xf5, 0x9, 0x0, 0x35, 0x0, 0x0, 0x0, 0x48, 0x3, 0xf0, 0x80, 0x40, 0x20, 0xe6, 0x3, 0x20, 0x38, 0x34, 0x40, 0x33, 0x30, 0x40, 0xd1, 0x3, 0x80, 0x33, 0x11, 0x30, 0x22, 0x30, 0x20, 0xe6, 0x13, 0x10, 0x20, 0x0, 0xf7, 0x74, 0xce, 0xf0, 0x80, 0x40, 0xe7, 0x78, 0x48, 0xf0, 0x80, 0x40, 0x86, 0x30, 0x0, 0xf0, 0x41, 0x0, 0x0, 0xc9, 0x49, 0x0, 0xd1, 0x9, 0x10, 0xd9, 0x49, 0x20, 0xe9, 0x49, 0x30, 0xf9, 0x49, 0x40, 0x80, 0x49, 0x50, 0x90, 0x49, 0x60, 0xa0, 0x49, 0x70, 0xb0, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc9, 0x9, 0x10, 0xd9, 0x9, 0x20, 0xe9, 0x9, 0x70, 0xd1, 0x9, 0x30, 0xf9, 0x9, 0x40, 0x87, 0x9, 0x50, 0x97, 0x9, 0x60, 0xa7, 0x9, 0x70, 0xb7, 0x9, 0x0, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0x49, 0x0, 0xd1, 0x9, 0x10, 0xdd, 0x49, 0x20, 0xed, 0x49, 0x30, 0xfd, 0x49, 0x40, 0x40, 0x49, 0x50, 0x50, 0x49, 0x60, 0x60, 0x49, 0x70, 0x70, 0x49, 0x80, 0x80, 0x49, 0x90, 0x90, 0x49, 0xa0, 0xa0, 0x49, 0xb0, 0xb0, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0x9, 0x10, 0xdd, 0x9, 0x20, 0xed, 0x9, 0xb0, 0xd1, 0x9, 0x30, 0xfd, 0x9, 0x40, 0x4b, 0x9, 0x50, 0x5b, 0x9, 0x60, 0x6b, 0x9, 0x70, 0x7b, 0x9, 0x80, 0x8b, 0x9, 0x90, 0x9b, 0x9, 0xa0, 0xab, 0x9, 0xb0, 0xbb, 0x9, 0x0, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd2, 0x13, 0xc5, 0xda, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd3, 0x13, 0x5, 0xdc, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd4, 0x13, 0x45, 0xdd, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd5, 0x13, 0x85, 0xde, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd6, 0x13, 0xc5, 0xdf, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd7, 0x13, 0x5, 0xe1, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x0, 0xe8, 0x3, 0x26, 0x50, 0x42, 0x45, 0xb5, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x0, 0xe8, 0x3, 0x26, 0x50, 0x2, 0x45, 0xb1, 0x2, 0x5, 0xd0, 0xff, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x45, 0xb5, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x2e, 0x6, 0x40, 0x38, 0x32, 0x6, 0x40, 0x9c, 0x8, 0x8, 0x40, 0x20, 0xa, 0x8, 0x40, 0x34, 0xa, 0x8, 0x40, 0x0, 0x10, 0x0, 0x0, 0x50, 0x2d, 0x6, 0x40, 0x78, 0x2e, 0x6, 0x40, 0x5, 0x2b, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0xff, 0xff, 0x0, 0x0, 0xcc, 0x2c, 0x6, 0x40, 0x4c, 0x2c, 0x6, 0x40, 0x0, 0xb, 0x8, 0x40, 0x8c, 0x0, 0xfb, 0x3f, 0xa4, 0xb, 0x8, 0x40, 0x8f, 0x0, 0xfb, 0x3f, 0x8d, 0x0, 0xfb, 0x3f, 0x1c, 0xdb, 0x5, 0x40, 0x4, 0x44, 0x0, 0x0, 0xec, 0x1, 0xfb, 0x3f, 0xac, 0x1e, 0x8, 0x40, 0x0, 0x44, 0x0, 0x0, 0x8, 0x44, 0x0, 0x0, 0xd0, 0x1, 0xfb, 0x3f, 0x1c, 0x0, 0xf4, 0x3f, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0xf4, 0x3f, 0xe8, 0x1, 0xfb, 0x3f, 0x70, 0x80, 0xf4, 0x3f, 0x34, 0x22, 0x8, 0x40, 0x44, 0x21, 0x8, 0x40, 0xcc, 0x27, 0x8, 0x40, 0x20, 0xb3, 0x81, 0x0, 0x0, 0x40, 0x42, 0xf, 0xec, 0x1e, 0x8, 0x40, 0xe0, 0x1, 0xfe, 0x3f, 0x40, 0x42, 0xf, 0x0, 0x0, 0x60, 0xf6, 0x3f, 0x4, 0x60, 0xf6, 0x3f, 0xff, 0xff, 0xff, 0xe7, 0xb4, 0x80, 0xf4, 0x3f, 0x0, 0x0, 0xff, 0xff, 0x7c, 0x80, 0xf4, 0x3f, 0xff, 0xc7, 0xff, 0xff, 0x0, 0x20, 0x0, 0x0, 0x0, 0x80, 0xf4, 0x3f, 0xbf, 0xfa, 0xfb, 0xff, 0xa4, 0x41, 0x0, 0x40, 0x14, 0xa0, 0xf5, 0x3f, 0x0, 0x18, 0x0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x3c, 0x0, 0xf0, 0x3f, 0x0, 0x0, 0x0, 0x8, 0x4b, 0x4c, 0x4b, 0x4c, 0x98, 0x95, 0x0, 0x40, 0xc0, 0x0, 0xf0, 0x3f, 0xc4, 0x0, 0xf0, 0x3f, 0x10, 0x0, 0xf4, 0x3f, 0x11, 0x1, 0x4, 0x0, 0xc, 0x0, 0xf4, 0x3f, 0x2, 0x70, 0x0, 0x0, 0x20, 0x0, 0xf4, 0x3f, 0x14, 0x0, 0xf4, 0x3f, 0x44, 0x0, 0xf4, 0x3f, 0x40, 0x31, 0x8, 0x40, 0x1c, 0x25, 0x8, 0x40, 0x92, 0x0, 0xfb, 0x3f, 0xa0, 0x2, 0xf0, 0x3f, 0x8c, 0x1, 0xf0, 0x3f, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x4, 0x0, 0xff, 0xff, 0xfb, 0xff, 0x0, 0x0, 0x2, 0x0, 0xff, 0xff, 0xfd, 0xff, 0x34, 0x85, 0x0, 0x40, 0xd4, 0x1, 0xfb, 0x3f, 0xc8, 0xc2, 0x0, 0x40, 0xe0, 0x28, 0x0, 0x0, 0xa0, 0xd, 0x0, 0x0, 0x4c, 0xc4, 0x0, 0x40, 0x58, 0x86, 0x0, 0x40, 0x38, 0x40, 0xf4, 0x3f, 0x6c, 0x2a, 0x6, 0x40, 0x0, 0x0, 0x0, 0x1, 0x5c, 0x7, 0x8, 0x40, 0x38, 0x29, 0x0, 0x0, 0x0, 0xa, 0x8, 0x40, 0x88, 0x9, 0x8, 0x40, 0x0, 0xff, 0x0, 0x0, 0x8c, 0x0, 0xfb, 0x3f, 0x0, 0x0, 0xfb, 0x3f, 0x4c, 0x0, 0xfb, 0x3f, 0x4c, 0x82, 0x0, 0x40, 0x3c, 0x8, 0x8, 0x40, 0x7c, 0xda, 0x5, 0x40, 0x84, 0xa, 0x8, 0x40, 0x1, 0x10, 0x0, 0x0, 0x40, 0x7, 0x8, 0x40, 0x9c, 0xda, 0x5, 0x40, 0xac, 0x31, 0x6, 0x40, 0x14, 0x2c, 0x6, 0x40, 0x98, 0x3a, 0x0, 0x0, 0xf0, 0xff, 0xff, 0x0, 0xcc, 0x90, 0x0, 0x40, 0x10, 0x27, 0x0, 0x0, 0x6, 0x2b, 0x0, 0x0, 0xf4, 0x2d, 0x6, 0x40, 0x60, 0x2e, 0x6, 0x40, 0xf8, 0xc5, 0xfb, 0x3f, 0x0, 0x80, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0xf8, 0x45, 0xfb, 0x3f, 0x30, 0xef, 0x5, 0x40, 0x24, 0x8, 0x8, 0x40, 0x0, 0xf0, 0xff, 0xff, 0x0, 0x40, 0x0, 0x0, 0xf8, 0x20, 0xf4, 0x3f, 0xf8, 0x30, 0xf4, 0x3f, 0x48, 0x24, 0x6, 0x40, 0x0, 0x20, 0xf4, 0x3f, 0x0, 0x0, 0x0, 0x40, 0x8, 0x20, 0xf4, 0x3f, 0x0, 0x0, 0x40, 0x0, 0x70, 0xe2, 0xfa, 0x3f, 0xf0, 0x22, 0x6, 0x40, 0x80, 0x99, 0x0, 0x0, 0xa2, 0x98, 0x0, 0x0, 0xb3, 0x98, 0x0, 0x0, 0xb2, 0x98, 0x0, 0x0, 0xb1, 0x98, 0x0, 0x0, 0xb0, 0x98, 0x0, 0x0, 0xa9, 0x98, 0x0, 0x0, 0xa8, 0x98, 0x0, 0x0, 0xa7, 0x98, 0x0, 0x0, 0xa6, 0x98, 0x0, 0x0, 0xa5, 0x98, 0x0, 0x0, 0xa4, 0x98, 0x0, 0x0, 0xab, 0x98, 0x0, 0x0, 0xaa, 0x98, 0x0, 0x0, 0xac, 0x98, 0x0, 0x0, 0xaf, 0x98, 0x0, 0x0, 0xae, 0x98, 0x0, 0x0, 0xad, 0x98, 0x0, 0x0, 0xa3, 0x98, 0x0, 0x0, 0xb4, 0x98, 0x0, 0x0, 0xb8, 0x98, 0x0, 0x0, 0x28, 0x99, 0x0, 0x0, 0x10, 0x99, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x80, 0xba, 0x8c, 0x1, 0x0, 0x5a, 0x62, 0x2, 0x18, 0x2, 0xf0, 0x3f, 0x4, 0x1, 0xf0, 0x3f, 0xc4, 0x0, 0xfb, 0x3f, 0x44, 0x1, 0xfb, 0x3f, 0x68, 0xf0, 0xf5, 0x3f, 0xff, 0x8f, 0x0, 0x80, 0xf0, 0x49, 0x2, 0x0, 0xb3, 0x81, 0x0, 0x0, 0x6c, 0xf0, 0xf5, 0x3f, 0xff, 0xff, 0xff, 0x7f, 0x1c, 0x80, 0xf4, 0x3f, 0x3f, 0xc0, 0xff, 0xff, 0x0, 0xc0, 0xfd, 0x3f, 0x0, 0x0, 0xf8, 0x3f, 0x0, 0x0, 0xf8, 0x3f, 0xec, 0x27, 0x8, 0x40, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x50, 0xfc, 0xd5, 0xfb, 0x3f, 0xbe, 0xba, 0xad, 0xde, 0xec, 0x22, 0x8, 0x40, 0x80, 0x25, 0x8, 0x40, 0x20, 0x21, 0x8, 0x40, 0xfc, 0xff, 0x3, 0x0, 0x0, 0x0, 0x0, 0x20, 0xff, 0xfe, 0xff, 0x3b, 0xb0, 0x80, 0xf4, 0x3f, 0x3f, 0x42, 0xf, 0x0, 0x50, 0x80, 0xf4, 0x3f, 0xff, 0x9f, 0xa4, 0xff, 0x0, 0x40, 0x12, 0x0, 0xff, 0xff, 0xff, 0x4f, 0x0, 0x0, 0x0, 0x10, 0x80, 0x80, 0xf4, 0x3f, 0xda, 0xdf, 0xfe, 0xff, 0x84, 0x80, 0xf4, 0x3f, 0xaf, 0xaa, 0xe8, 0xff, 0x88, 0x80, 0xf4, 0x3f, 0xff, 0xaf, 0x55, 0x45, 0x3c, 0x80, 0xf4, 0x3f, 0xa4, 0x80, 0xf4, 0x3f, 0xa1, 0x3a, 0xd8, 0x50, 0x8c, 0x80, 0xf4, 0x3f, 0xff, 0xfb, 0xff, 0x7f, 0x64, 0xf0, 0xf5, 0x3f, 0x48, 0xf0, 0xf5, 0x3f, 0x64, 0x0, 0xf6, 0x3f, 0x48, 0x0, 0xf6, 0x3f, 0x0, 0x28, 0x8, 0x40, 0x8, 0x28, 0x8, 0x40, 0xd4, 0x1, 0xfb, 0x3f, 0xfc, 0xc5, 0xfb, 0x3f, 0x0, 0x0, 0x8, 0x40, 0x40, 0x23, 0x8, 0x40, 0xd8, 0xb, 0x8, 0x40, 0xc8, 0x25, 0x8, 0x40, 0x36, 0x41, 0x0, 0x81, 0x2f, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xe0, 0x8, 0x0, 0xc, 0x2, 0x27, 0x1a, 0x2, 0x22, 0xa0, 0x63, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x82, 0x2, 0x0, 0x92, 0x2, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x2, 0x0, 0x99, 0x11, 0xa2, 0x2, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0x82, 0x2, 0x4, 0x92, 0x2, 0x5, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x6, 0x0, 0x99, 0x11, 0xb2, 0x2, 0x7, 0x80, 0xbb, 0x1, 0x90, 0x9b, 0x20, 0x80, 0xb9, 0x20, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xc2, 0x2, 0xb, 0x80, 0xcc, 0x1, 0x90, 0x9c, 0x20, 0x80, 0xc9, 0x20, 0x82, 0x2, 0xc, 0x92, 0x2, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xe, 0x0, 0x99, 0x11, 0xd2, 0x2, 0xf, 0x80, 0xdd, 0x1, 0x90, 0x9d, 0x20, 0x80, 0xd9, 0x20, 0x82, 0x2, 0x10, 0x92, 0x2, 0x11, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x12, 0x0, 0x99, 0x11, 0xe2, 0x2, 0x13, 0x80, 0xee, 0x1, 0x90, 0x9e, 0x20, 0x80, 0xe9, 0x20, 0x82, 0x2, 0x14, 0x92, 0x2, 0x15, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x16, 0x0, 0x99, 0x11, 0xf2, 0x2, 0x17, 0x80, 0xff, 0x1, 0x90, 0x9f, 0x20, 0x80, 0xf9, 0x20, 0x81, 0xfc, 0xfe, 0xe0, 0x8, 0x0, 0xc, 0x2, 0x27, 0x1a, 0x2, 0x22, 0xaf, 0xc4, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xc, 0xb, 0x81, 0xf7, 0xfe, 0xad, 0x2, 0xcd, 0x3, 0xdd, 0x4, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x71, 0xf3, 0xfe, 0xad, 0x2, 0xe0, 0x7, 0x0, 0xc, 0xac, 0x61, 0xf1, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x6, 0x0, 0x82, 0x3, 0xa, 0x92, 0x3, 0xb, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x3, 0xc, 0x0, 0x99, 0x11, 0xa2, 0x3, 0xd, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xb9, 0x20, 0x82, 0x3, 0xe, 0x92, 0x3, 0xf, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x3, 0x10, 0x0, 0x99, 0x11, 0xa2, 0x3, 0x11, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xc9, 0x20, 0xad, 0x2, 0xe0, 0x6, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0xa1, 0x0, 0x49, 0x81, 0x39, 0x71, 0x88, 0x42, 0x59, 0x91, 0x89, 0x11, 0x50, 0x38, 0x63, 0x88, 0x22, 0x89, 0x21, 0x8a, 0x63, 0x88, 0x12, 0x89, 0x61, 0x29, 0xa1, 0x28, 0x32, 0x81, 0xda, 0xfe, 0x89, 0x51, 0x71, 0xda, 0xfe, 0x1c, 0x8, 0x89, 0x41, 0x81, 0xda, 0xfe, 0x89, 0x31, 0x3c, 0x68, 0x89, 0x1, 0x41, 0xd1, 0xfe, 0x67, 0xb2, 0x38, 0x70, 0x82, 0x10, 0x56, 0xb8, 0x1, 0x88, 0x51, 0x8a, 0x52, 0x88, 0x61, 0x57, 0x38, 0x12, 0x88, 0x41, 0x0, 0x8, 0x40, 0x20, 0xa0, 0x91, 0x88, 0x31, 0xe0, 0x8, 0x0, 0x16, 0xa, 0x1, 0x86, 0x21, 0x0, 0x20, 0xac, 0x41, 0x81, 0xcc, 0xfe, 0xe0, 0x8, 0x0, 0x56, 0xaa, 0x7, 0x4a, 0x52, 0x88, 0xa1, 0x59, 0x38, 0x2d, 0x5, 0x67, 0x32, 0xc6, 0xc, 0x2, 0x81, 0xc3, 0xfe, 0x89, 0x51, 0x82, 0xaf, 0xc4, 0x89, 0x41, 0x81, 0xc1, 0xfe, 0x98, 0xa1, 0x8a, 0x89, 0x89, 0x61, 0x81, 0xbd, 0xfe, 0x89, 0x31, 0x5d, 0x2, 0x78, 0x21, 0x16, 0x83, 0x3, 0x88, 0x91, 0x57, 0x38, 0x4d, 0x40, 0x63, 0x63, 0x88, 0x81, 0x5a, 0xb8, 0x88, 0x71, 0x16, 0x88, 0x0, 0xad, 0x7, 0xcd, 0x6, 0x88, 0x51, 0x46, 0x1, 0x0, 0xad, 0x7, 0xcd, 0x6, 0x88, 0x31, 0xe0, 0x8, 0x0, 0x8d, 0x2, 0x27, 0x1a, 0x1, 0x88, 0x41, 0x98, 0x61, 0x82, 0x49, 0x0, 0x6a, 0x77, 0x5a, 0x56, 0x60, 0x33, 0xc0, 0x56, 0x63, 0xfc, 0x88, 0x21, 0x5a, 0x88, 0x98, 0xa1, 0x89, 0x29, 0x88, 0x11, 0x50, 0x88, 0x73, 0x50, 0x88, 0xc0, 0x89, 0x49, 0xc, 0x2, 0x1d, 0xf0, 0x28, 0x1, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x61, 0x0, 0x49, 0x21, 0x39, 0x11, 0x61, 0xa9, 0xfe, 0x52, 0xa0, 0xff, 0x72, 0xa0, 0xc0, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x77, 0x98, 0xf4, 0x79, 0x1, 0xc, 0x8, 0x89, 0x31, 0x72, 0xa0, 0xdb, 0x42, 0xa0, 0xdc, 0x32, 0xa0, 0xdd, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x77, 0x98, 0x12, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x47, 0x18, 0xf, 0x37, 0x98, 0xe6, 0xad, 0x7, 0x46, 0x2, 0x0, 0x98, 0x1, 0x97, 0x18, 0x19, 0x46, 0x0, 0x0, 0xa8, 0x1, 0x88, 0x21, 0x98, 0x31, 0x87, 0xb9, 0x18, 0x88, 0x11, 0x9a, 0x88, 0xa2, 0x48, 0x0, 0x1b, 0x99, 0x99, 0x31, 0x86, 0xf0, 0xff, 0x88, 0x21, 0x38, 0x31, 0x37, 0x38, 0x3, 0x28, 0x11, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x71, 0x82, 0xfe, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x81, 0x81, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xe0, 0x8, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xb1, 0x85, 0xfe, 0xc, 0x1c, 0x81, 0x85, 0xfe, 0xad, 0x2, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x81, 0x0, 0x52, 0xa0, 0xc0, 0x81, 0x82, 0xfe, 0x89, 0x21, 0xc, 0x28, 0x89, 0x31, 0x71, 0x7e, 0xfe, 0x62, 0xa0, 0xdb, 0x81, 0x7d, 0xfe, 0x89, 0x11, 0xc, 0x18, 0x89, 0x1, 0x16, 0xc4, 0x2, 0x82, 0x3, 0x0, 0x57, 0x18, 0x9, 0x67, 0x98, 0xf, 0xad, 0x2, 0xb8, 0x11, 0xc6, 0x0, 0x0, 0xad, 0x2, 0xb8, 0x21, 0xc8, 0x31, 0x46, 0x2, 0x0, 0x82, 0x41, 0x13, 0xb2, 0xc1, 0x13, 0xad, 0x2, 0xc8, 0x1, 0xe0, 0x7, 0x0, 0x1b, 0x33, 0xb, 0x44, 0x56, 0x24, 0xfd, 0x1d, 0xf0, 0x36, 0x81, 0x0, 0xa2, 0xc1, 0x10, 0x81, 0x6f, 0xfe, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x82, 0x1, 0x10, 0x89, 0x31, 0x82, 0x1, 0x11, 0x89, 0x21, 0x82, 0x1, 0x12, 0x89, 0x11, 0xb2, 0x1, 0x13, 0xc2, 0x1, 0x14, 0xd2, 0x1, 0x15, 0xe2, 0x1, 0x16, 0xf2, 0x1, 0x17, 0x72, 0x1, 0x18, 0x62, 0x1, 0x19, 0x52, 0x1, 0x1a, 0x42, 0x1, 0x1b, 0x32, 0x1, 0x1c, 0x92, 0x1, 0x1d, 0x82, 0x1, 0x1e, 0xa2, 0x1, 0x1f, 0xa2, 0x42, 0xf, 0x82, 0x42, 0xe, 0x92, 0x42, 0xd, 0x32, 0x42, 0xc, 0x42, 0x42, 0xb, 0x52, 0x42, 0xa, 0x62, 0x42, 0x9, 0x72, 0x42, 0x8, 0xf2, 0x42, 0x7, 0xe2, 0x42, 0x6, 0xd2, 0x42, 0x5, 0xc2, 0x42, 0x4, 0xb2, 0x42, 0x3, 0x88, 0x11, 0x82, 0x42, 0x2, 0x88, 0x21, 0x82, 0x42, 0x1, 0x88, 0x31, 0x82, 0x42, 0x0, 0x1d, 0xf0, 0x36, 0x61, 0x0, 0x16, 0xa2, 0x9, 0x81, 0x51, 0xfe, 0x91, 0x51, 0xfe, 0x8a, 0x39, 0x71, 0x51, 0xfe, 0x81, 0x51, 0xfe, 0x89, 0x1, 0x8a, 0x49, 0xc, 0x6, 0xc, 0x15, 0x81, 0x50, 0xfe, 0x99, 0x11, 0x8a, 0x29, 0x81, 0x4f, 0xfe, 0x89, 0x31, 0x82, 0xa1, 0x0, 0x89, 0x21, 0xe0, 0x7, 0x0, 0x98, 0x3, 0xb8, 0x4, 0x8d, 0x5, 0x97, 0x1b, 0x1, 0x8d, 0x6, 0xb2, 0x2, 0x0, 0x9d, 0x5, 0x67, 0x1b, 0x1, 0x9d, 0x6, 0x96, 0xea, 0x0, 0xc0, 0x20, 0x0, 0xb8, 0x31, 0xc8, 0x21, 0xc9, 0xb, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x90, 0x88, 0x10, 0x50, 0x88, 0x10, 0x56, 0xc8, 0xfc, 0xe0, 0x7, 0x0, 0x88, 0x4, 0x98, 0x3, 0x97, 0x98, 0xb, 0x92, 0x2, 0x0, 0xb2, 0xa0, 0xff, 0xb0, 0x99, 0x10, 0x16, 0xa9, 0x2, 0xc, 0x9, 0x92, 0x42, 0x0, 0x1b, 0xb8, 0xc8, 0x1, 0xc7, 0x1b, 0x1, 0x9d, 0xb, 0x99, 0x4, 0x98, 0x11, 0x8a, 0x89, 0x22, 0x8, 0x0, 0x96, 0xea, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x31, 0x98, 0x21, 0x99, 0x8, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x16, 0x72, 0x2, 0x4a, 0x83, 0x91, 0x2e, 0xfe, 0xa1, 0x2e, 0xfe, 0xb1, 0x2e, 0xfe, 0x87, 0x13, 0x17, 0xc0, 0x20, 0x0, 0xc8, 0x9, 0xa0, 0xcc, 0x10, 0x56, 0x4c, 0xff, 0xc2, 0x3, 0x0, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0x1b, 0x33, 0x87, 0x93, 0xe7, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x87, 0xfe, 0x80, 0x81, 0xc0, 0x10, 0x18, 0x0, 0x71, 0x1c, 0xfe, 0xe0, 0x7, 0x0, 0x81, 0x21, 0xfe, 0x92, 0x8, 0x0, 0x16, 0x29, 0x0, 0x86, 0xac, 0x4, 0xc, 0x15, 0x52, 0x48, 0x0, 0x91, 0x19, 0xfe, 0x82, 0xa1, 0x0, 0x82, 0x61, 0x2a, 0x96, 0xda, 0x0, 0xc0, 0x20, 0x0, 0x82, 0x21, 0x2a, 0x89, 0x9, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x72, 0x61, 0x26, 0x92, 0x61, 0x14, 0x81, 0x16, 0xfe, 0xc0, 0x20, 0x0, 0x38, 0x8, 0xc0, 0x20, 0x0, 0x82, 0x61, 0x2c, 0x88, 0x8, 0x92, 0xa0, 0x80, 0x92, 0x61, 0x29, 0x90, 0x28, 0x10, 0x41, 0x11, 0xfe, 0x16, 0x62, 0x0, 0xc, 0x1a, 0xbd, 0xa, 0xe0, 0x4, 0x0, 0xc, 0xab, 0x81, 0xe, 0xfe, 0xad, 0x5, 0xb2, 0x61, 0x2d, 0xe0, 0x8, 0x0, 0x7d, 0xa, 0xc, 0x6, 0xbd, 0x5, 0x67, 0x12, 0x1, 0xbd, 0x6, 0x4c, 0x9, 0x90, 0x83, 0x10, 0xad, 0x5, 0x67, 0x18, 0x1, 0xad, 0x6, 0x92, 0x61, 0x20, 0xe0, 0x4, 0x0, 0xd0, 0xa7, 0x1, 0x70, 0xbd, 0x41, 0x71, 0x3, 0xfe, 0xc2, 0x21, 0x2d, 0xdd, 0x6, 0xe0, 0x7, 0x0, 0x91, 0x2, 0xfe, 0x90, 0x8a, 0x82, 0x90, 0xba, 0xa2, 0xc1, 0x0, 0xfe, 0xad, 0x8, 0xdd, 0x6, 0xe0, 0x7, 0x0, 0xc, 0xd8, 0x0, 0x18, 0x40, 0xa0, 0x9b, 0x81, 0x2c, 0x18, 0x52, 0x61, 0x27, 0x92, 0x61, 0x22, 0x97, 0x38, 0x1, 0x5d, 0x6, 0x81, 0xfa, 0xfd, 0xad, 0x5, 0xe0, 0x8, 0x0, 0x81, 0xf9, 0xfd, 0xc0, 0x20, 0x0, 0x82, 0x61, 0x24, 0xa9, 0x8, 0x81, 0xf7, 0xfd, 0x80, 0x8a, 0xc2, 0xb, 0x88, 0x92, 0xa3, 0xff, 0x90, 0x98, 0x10, 0xb1, 0xf4, 0xfd, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0xd2, 0xac, 0x0, 0xd0, 0xcc, 0x10, 0xc0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0xb, 0x92, 0xa0, 0xff, 0x92, 0x61, 0x2b, 0x90, 0x88, 0x10, 0x91, 0xee, 0xfd, 0xc0, 0x20, 0x0, 0xb8, 0x9, 0xc2, 0xaf, 0x0, 0xc0, 0xbb, 0x10, 0x80, 0x8b, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x9, 0xc0, 0x20, 0x0, 0x92, 0x21, 0x2c, 0x88, 0x9, 0xb1, 0xe7, 0xfd, 0xb2, 0x61, 0x21, 0xb0, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x9, 0xb1, 0xe5, 0xfd, 0xc0, 0x20, 0x0, 0x88, 0xb, 0xc0, 0x8a, 0x11, 0x91, 0xe3, 0xfd, 0x90, 0x88, 0x10, 0xa0, 0x9c, 0x41, 0xa1, 0xc1, 0xfd, 0xa2, 0x61, 0x16, 0xa0, 0x99, 0x10, 0x80, 0x89, 0x20, 0xc0, 0x20, 0x0, 0xb2, 0x61, 0x23, 0x89, 0xb, 0x71, 0xdd, 0xfd, 0xc0, 0x20, 0x0, 0x88, 0x7, 0x51, 0xdc, 0xfd, 0x50, 0x88, 0x10, 0x91, 0xdb, 0xfd, 0x92, 0x61, 0x25, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x7, 0x81, 0xd9, 0xfd, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xd8, 0xfd, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x42, 0xa0, 0x66, 0xc, 0x42, 0x1c, 0x8d, 0x31, 0xd4, 0xfd, 0xad, 0x4, 0xbd, 0x2, 0xcd, 0x6, 0xd2, 0x61, 0x28, 0xe0, 0x3, 0x0, 0x2c, 0xd, 0xad, 0x4, 0xbd, 0x2, 0xc2, 0x21, 0x27, 0xe0, 0x3, 0x0, 0xd2, 0xa0, 0x9a, 0xad, 0x4, 0xbd, 0x2, 0xcd, 0x2, 0xe0, 0x3, 0x0, 0xad, 0x4, 0xbd, 0x2, 0xc2, 0x21, 0x2d, 0xdd, 0x6, 0xe0, 0x3, 0x0, 0xc, 0xc8, 0xad, 0x4, 0x4d, 0x8, 0xbd, 0x2, 0xcd, 0x4, 0xdd, 0x6, 0xe0, 0x3, 0x0, 0x81, 0xc5, 0xfd, 0xc0, 0x20, 0x0, 0x82, 0x61, 0x1c, 0x88, 0x8, 0x80, 0x8b, 0x41, 0x91, 0xc2, 0xfd, 0x92, 0x61, 0x1d, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x98, 0x7, 0x52, 0x61, 0x1e, 0x50, 0x99, 0x10, 0x80, 0x89, 0x20, 0x91, 0xbd, 0xfd, 0x92, 0x61, 0x19, 0x90, 0x88, 0x30, 0xc0, 0x20, 0x0, 0x72, 0x61, 0x1f, 0x89, 0x7, 0x2c, 0x27, 0xc, 0x68, 0x1c, 0xc9, 0x82, 0x61, 0x27, 0xa2, 0x21, 0x22, 0x92, 0x61, 0x15, 0x77, 0x3a, 0x15, 0xa2, 0xa0, 0xc0, 0xa2, 0x61, 0x18, 0xc, 0x5, 0x92, 0x61, 0x22, 0x52, 0x61, 0x17, 0x52, 0x61, 0x29, 0x6d, 0x8, 0x86, 0x3, 0x0, 0x82, 0xa0, 0x90, 0x82, 0x61, 0x22, 0x52, 0x21, 0x20, 0x52, 0x61, 0x18, 0x42, 0x61, 0x17, 0x42, 0xa0, 0x66, 0xc, 0xbc, 0xd2, 0xa0, 0xc3, 0xad, 0x4, 0xbd, 0x2, 0xc2, 0x61, 0x1b, 0xd2, 0x61, 0x20, 0xe0, 0x3, 0x0, 0xc, 0x9c, 0xd2, 0xa0, 0x74, 0xad, 0x4, 0xbd, 0x2, 0xc2, 0x61, 0x1a, 0xe0, 0x3, 0x0, 0x82, 0x21, 0x17, 0x50, 0x88, 0x20, 0x92, 0x21, 0x29, 0x90, 0xd8, 0x20, 0xc, 0x25, 0xad, 0x4, 0xbd, 0x2, 0xcd, 0x5, 0xe0, 0x3, 0x0, 0xc, 0x3c, 0xad, 0x4, 0xbd, 0x2, 0xc9, 0xc1, 0xd2, 0x21, 0x22, 0xe0, 0x3, 0x0, 0x82, 0x21, 0x18, 0x60, 0xd8, 0x20, 0xc, 0x5c, 0xad, 0x4, 0xbd, 0x2, 0xe0, 0x3, 0x0, 0xc0, 0x20, 0x0, 0x82, 0x21, 0x1c, 0x88, 0x8, 0x91, 0x94, 0xfd, 0xc0, 0x20, 0x0, 0x52, 0x61, 0x22, 0x59, 0x9, 0x80, 0x8b, 0x41, 0x92, 0x21, 0x1d, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0xa2, 0x21, 0x1f, 0x98, 0xa, 0xb2, 0x21, 0x1e, 0xb0, 0x99, 0x10, 0x90, 0x88, 0x20, 0x92, 0x21, 0x19, 0x90, 0x88, 0x30, 0xc0, 0x20, 0x0, 0x89, 0xa, 0xc0, 0x20, 0x0, 0x92, 0x21, 0x2c, 0x88, 0x9, 0xa2, 0x21, 0x21, 0xa0, 0x88, 0x10, 0x51, 0x86, 0xfd, 0x50, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x9, 0xc0, 0x20, 0x0, 0x92, 0x21, 0x23, 0x88, 0x9, 0x81, 0x82, 0xfd, 0xc0, 0x20, 0x0, 0x89, 0x9, 0x82, 0xa0, 0xf0, 0xc0, 0x20, 0x0, 0x92, 0x21, 0x24, 0x89, 0x9, 0x81, 0x7e, 0xfd, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x26, 0xe0, 0x8, 0x0, 0x81, 0x7c, 0xfd, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x20, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x79, 0xfd, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x7c, 0xbb, 0xb0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x96, 0xa, 0x1, 0xc0, 0x20, 0x0, 0x82, 0x21, 0x2a, 0x92, 0x21, 0x14, 0x89, 0x9, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0x61, 0x1f, 0x81, 0x6f, 0xfd, 0x91, 0x70, 0xfd, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x61, 0x6f, 0xfd, 0xc, 0x9, 0xc0, 0x20, 0x0, 0x99, 0x6, 0xa1, 0x6d, 0xfd, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0x99, 0x6, 0x81, 0x6b, 0xfd, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x50, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc1, 0x68, 0xfd, 0xa2, 0xa2, 0xb6, 0xc0, 0x20, 0x0, 0xc9, 0xb1, 0xa9, 0xc, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0xc, 0xcc, 0xc0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x7c, 0xdc, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xa1, 0x5e, 0xfd, 0xc0, 0x20, 0x0, 0xc8, 0xa, 0xb0, 0xbc, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0xa, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0xb2, 0xaf, 0xcf, 0xb0, 0xaa, 0x10, 0x1c, 0xb, 0xb2, 0x61, 0x24, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xa1, 0x55, 0xfd, 0xb1, 0x55, 0xfd, 0xc0, 0x20, 0x0, 0xb2, 0x6a, 0x22, 0xc, 0x1a, 0xb1, 0x54, 0xfd, 0x26, 0xb9, 0xc, 0x9a, 0xcb, 0xc2, 0x1c, 0x0, 0x2b, 0x99, 0x77, 0x9c, 0xf2, 0xa2, 0x21, 0x2d, 0x90, 0xeb, 0x3, 0xb2, 0x21, 0x25, 0xb0, 0x99, 0x10, 0xc, 0x4, 0x47, 0x19, 0x5, 0x91, 0x4c, 0xfd, 0x86, 0x0, 0x0, 0x91, 0x4c, 0xfd, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0xc, 0x15, 0x0, 0x1a, 0x40, 0x0, 0x95, 0xa1, 0xa0, 0xe4, 0x3, 0x90, 0x9a, 0x20, 0xad, 0x4, 0xa0, 0xe4, 0x61, 0xa0, 0x99, 0x20, 0x10, 0x20, 0x0, 0x90, 0xe4, 0x13, 0x10, 0x20, 0x0, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x42, 0xfd, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x3f, 0xfd, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x3c, 0xfd, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x39, 0xfd, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x36, 0xfd, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc, 0xfa, 0x71, 0x34, 0xfd, 0xa9, 0xa1, 0xe0, 0x7, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x6, 0x50, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x6, 0x61, 0x2f, 0xfd, 0x82, 0xc6, 0x12, 0x98, 0xc1, 0x80, 0xa9, 0x10, 0xa0, 0x98, 0xc0, 0xd0, 0x8a, 0x11, 0x0, 0x18, 0x40, 0x7c, 0xfa, 0xb2, 0x21, 0x2b, 0x0, 0xbb, 0xa1, 0xa0, 0xab, 0x30, 0xb8, 0x9, 0xa0, 0xeb, 0x10, 0x0, 0xb4, 0xa1, 0x0, 0xc5, 0xa1, 0xfd, 0xe, 0xf0, 0xeb, 0x20, 0xf0, 0xdc, 0x20, 0xe0, 0xc, 0x13, 0xd2, 0xe9, 0x0, 0xa0, 0xed, 0x10, 0xf7, 0x9e, 0xeb, 0x0, 0x8, 0x40, 0xd0, 0x80, 0x91, 0x92, 0x21, 0x2b, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x16, 0x28, 0x0, 0x6, 0x79, 0x3, 0x79, 0xd1, 0x82, 0x21, 0x22, 0x82, 0x56, 0x0, 0x2b, 0xa6, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0xec, 0x81, 0x16, 0xfd, 0x89, 0xe1, 0xe0, 0x8, 0x0, 0x42, 0x46, 0x10, 0x71, 0x14, 0xfd, 0x31, 0x14, 0xfd, 0x81, 0x15, 0xfd, 0x82, 0x61, 0x2d, 0x2d, 0x4, 0x82, 0xa0, 0xc0, 0x77, 0x12, 0x18, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x2a, 0xa8, 0xbd, 0x4, 0xcd, 0x3, 0x82, 0x21, 0x2d, 0xe0, 0x8, 0x0, 0x3a, 0x22, 0x6, 0xf8, 0xff, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x22, 0xc8, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x41, 0x4, 0xfd, 0xad, 0x2, 0xcd, 0x4, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0x81, 0x4, 0xfd, 0xe0, 0x8, 0x0, 0x81, 0x4, 0xfd, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x92, 0x21, 0x15, 0x90, 0x88, 0x10, 0xc, 0x89, 0x97, 0x18, 0x1, 0x5d, 0xa, 0xc, 0x8, 0x82, 0x61, 0x25, 0x87, 0x1a, 0x1, 0x5d, 0xa, 0x81, 0xfd, 0xfc, 0xad, 0x5, 0x32, 0x21, 0x25, 0xbd, 0x3, 0x82, 0x61, 0x19, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x16, 0x92, 0xa0, 0xd4, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x82, 0x21, 0x2a, 0x92, 0xa0, 0xd0, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0xa4, 0xfc, 0x92, 0xa0, 0xcc, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0xa5, 0xfc, 0x92, 0xa0, 0xc8, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0xed, 0xfc, 0x92, 0xa0, 0xc4, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0x39, 0x8, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x81, 0xe5, 0xfc, 0x89, 0x91, 0xe0, 0x8, 0x0, 0x62, 0x61, 0x2e, 0x82, 0xa0, 0xb8, 0x8a, 0x81, 0x72, 0xc8, 0x0, 0x4b, 0xa7, 0x5c, 0x4c, 0xbd, 0x3, 0x52, 0x21, 0x2d, 0xe0, 0x5, 0x0, 0xa2, 0xc7, 0x58, 0xbd, 0x2, 0xcd, 0x4, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0x81, 0xdc, 0xfc, 0x8a, 0xa7, 0xc2, 0xa1, 0xcf, 0xbd, 0x3, 0xe0, 0x5, 0x0, 0x4c, 0x98, 0x92, 0xa0, 0xc3, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0x18, 0x92, 0xa0, 0xc2, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0x88, 0x92, 0xa0, 0xc1, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0xf8, 0x92, 0xa0, 0xc0, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0x4c, 0x81, 0xc9, 0xfc, 0xad, 0x6, 0x82, 0x61, 0x1e, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc1, 0x83, 0xfc, 0xbd, 0x3, 0xc2, 0x61, 0x21, 0xe0, 0x5, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x8b, 0x98, 0x99, 0x81, 0x2b, 0x88, 0x89, 0x71, 0x81, 0xe4, 0xfc, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x8b, 0x88, 0x89, 0x51, 0x82, 0xc7, 0x18, 0x89, 0x61, 0x81, 0xb9, 0xfc, 0x82, 0x61, 0x23, 0xa2, 0x21, 0x2e, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc2, 0x21, 0x21, 0x82, 0x21, 0x23, 0xe0, 0x8, 0x0, 0x6d, 0xa, 0x5d, 0xb, 0xb2, 0x21, 0x28, 0xf6, 0x85, 0x2, 0xc6, 0x0, 0x3, 0x82, 0x6, 0x0, 0x92, 0x6, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0x2, 0x0, 0x99, 0x11, 0xa2, 0x6, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x29, 0x20, 0x82, 0x6, 0x4, 0x92, 0x6, 0x5, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0x6, 0x0, 0x99, 0x11, 0xa2, 0x6, 0x7, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x0, 0x1b, 0x40, 0x20, 0x98, 0x81, 0xa1, 0x9f, 0xfc, 0xa0, 0xa2, 0x10, 0x66, 0xfa, 0x2, 0x46, 0xed, 0x2, 0xc2, 0x21, 0x25, 0xa1, 0xc2, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xc1, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xc0, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xbf, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xbe, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xbd, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xbc, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xbb, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xba, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa2, 0x21, 0x22, 0xd1, 0xb8, 0xfc, 0xda, 0xd1, 0xa2, 0x4d, 0x0, 0xa1, 0xb7, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xa1, 0xb6, 0xfc, 0xaa, 0xa1, 0xc2, 0x4a, 0x0, 0xc, 0x17, 0xa1, 0xa8, 0xfc, 0xaa, 0xa1, 0x72, 0x4a, 0x0, 0x41, 0x81, 0xfc, 0xa1, 0xb2, 0xfc, 0xaa, 0xa1, 0x42, 0x4a, 0x0, 0x0, 0xb, 0x40, 0x40, 0xa0, 0x91, 0xb1, 0xb0, 0xfc, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0xa2, 0x21, 0x24, 0x0, 0xa, 0x40, 0x40, 0xa0, 0x91, 0xb1, 0xac, 0xfc, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0x40, 0xa8, 0x41, 0xb1, 0xab, 0xfc, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0xa1, 0xaa, 0xfc, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0xa2, 0x21, 0x2b, 0xa0, 0x39, 0x10, 0xa2, 0xc3, 0xfe, 0x1c, 0x2c, 0x91, 0x7f, 0xfc, 0xb2, 0xa0, 0xc6, 0xd1, 0x71, 0xfc, 0xd2, 0x61, 0x2c, 0xd1, 0x6f, 0xfc, 0xd2, 0x61, 0x26, 0xf1, 0x6f, 0xfc, 0xe1, 0x70, 0xfc, 0xd1, 0x71, 0xfc, 0xd2, 0x61, 0x2a, 0xd1, 0x70, 0xfc, 0xd2, 0x61, 0x29, 0xa7, 0xbc, 0x2, 0x6, 0x3e, 0x0, 0xc2, 0xa0, 0xc8, 0xd1, 0x65, 0xfc, 0xd0, 0xaa, 0xa0, 0xd8, 0xa, 0xa2, 0x21, 0x20, 0xa0, 0xd, 0x0, 0xa2, 0x21, 0x1f, 0x82, 0x21, 0x28, 0x87, 0xb5, 0x2, 0x86, 0x28, 0x2, 0x82, 0xa0, 0xb8, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x9a, 0xc8, 0x82, 0x6, 0x17, 0x82, 0x61, 0x2a, 0x82, 0x6, 0x16, 0x82, 0x61, 0x29, 0x82, 0x6, 0x14, 0x82, 0x61, 0x26, 0x82, 0x6, 0x15, 0x82, 0x61, 0x1d, 0x82, 0x6, 0xb, 0x82, 0x61, 0x1c, 0xf2, 0x6, 0xa, 0x72, 0x6, 0x8, 0x52, 0x6, 0x9, 0x42, 0x6, 0xf, 0x22, 0x6, 0xe, 0xb2, 0x6, 0xc, 0xd2, 0x6, 0xd, 0xa2, 0x6, 0x13, 0x92, 0x6, 0x12, 0x82, 0x6, 0x10, 0x62, 0x6, 0x11, 0xc, 0x1e, 0xe2, 0x4c, 0x0, 0xc, 0xc, 0xc2, 0x61, 0x34, 0x80, 0xe6, 0x11, 0x80, 0x8e, 0x20, 0x0, 0x99, 0x11, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x69, 0x20, 0x80, 0x8d, 0x11, 0xb0, 0x88, 0x20, 0x0, 0x92, 0x11, 0x80, 0xa4, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x60, 0x88, 0x82, 0x82, 0x61, 0x33, 0x80, 0x85, 0x11, 0x70, 0x88, 0x20, 0x0, 0x9f, 0x11, 0xa2, 0x21, 0x1c, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x82, 0x61, 0x32, 0x92, 0x21, 0x1d, 0x80, 0x99, 0x11, 0xa2, 0x21, 0x26, 0xa0, 0x99, 0x20, 0xa2, 0x21, 0x29, 0x0, 0xaa, 0x11, 0xb2, 0x21, 0x2a, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0x92, 0x61, 0x30, 0x9a, 0x88, 0x82, 0x61, 0x2f, 0x81, 0x47, 0xfc, 0x80, 0x89, 0x10, 0x82, 0x61, 0x31, 0x26, 0xb3, 0x5, 0x26, 0x23, 0x2, 0xc6, 0xf9, 0x1, 0x81, 0x44, 0xfc, 0x67, 0x38, 0x2, 0x46, 0xaa, 0x1, 0xa2, 0xa0, 0xc2, 0x86, 0xf1, 0x1, 0xa2, 0xaf, 0x30, 0xaa, 0xa3, 0xc1, 0x27, 0xfc, 0xc0, 0xaa, 0xa0, 0xa8, 0xa, 0xa0, 0xa, 0x0, 0x81, 0x2d, 0xfc, 0xe0, 0x8, 0x0, 0x16, 0xfa, 0x7b, 0xa2, 0xa0, 0xc4, 0xc6, 0xe9, 0x1, 0xa2, 0x21, 0x1f, 0xc2, 0x21, 0x28, 0xc7, 0xb5, 0x2, 0xc6, 0xe6, 0x1, 0xad, 0x2, 0x66, 0x13, 0x2, 0xc6, 0xe4, 0x1, 0xc2, 0x6, 0x8, 0xf2, 0x6, 0x9, 0xd2, 0x6, 0xa, 0xe2, 0x6, 0xb, 0xa2, 0xa0, 0xb8, 0xaa, 0xa1, 0xa2, 0xca, 0x0, 0x9a, 0x9a, 0x92, 0x9, 0x0, 0xad, 0xb, 0x16, 0x59, 0x77, 0xb2, 0xc6, 0x18, 0x92, 0xc5, 0xe8, 0xb2, 0x61, 0x2a, 0x16, 0xb9, 0x70, 0xa2, 0xa0, 0xef, 0x7d, 0x9, 0x62, 0xb, 0x0, 0xa0, 0xa6, 0x30, 0x1b, 0xbb, 0xb, 0x77, 0x56, 0x27, 0xff, 0xb2, 0x21, 0x2b, 0xb0, 0xba, 0x10, 0xc6, 0xbc, 0x1, 0xa2, 0x21, 0x1f, 0x82, 0x21, 0x1a, 0x87, 0xb5, 0x2, 0x86, 0xd0, 0x1, 0x82, 0x6, 0x8, 0xad, 0x2, 0x66, 0x28, 0x2, 0xc6, 0xcd, 0x1, 0xa2, 0xa0, 0xb8, 0xaa, 0xa1, 0xa2, 0xca, 0x0, 0x9a, 0xaa, 0xd2, 0xa, 0x0, 0xad, 0xb, 0x16, 0x5d, 0x72, 0xb2, 0x21, 0x32, 0xad, 0xc, 0x56, 0xdb, 0x71, 0xa2, 0xa0, 0xb8, 0xaa, 0xa1, 0xa2, 0xca, 0x0, 0x9a, 0x9a, 0xc, 0xa, 0xa2, 0x49, 0x0, 0x56, 0xd8, 0x71, 0xa2, 0x21, 0x2e, 0x81, 0x1c, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x82, 0x21, 0x2c, 0xe0, 0x8, 0x0, 0xa1, 0x2, 0xfc, 0x88, 0xd1, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x26, 0xe0, 0x8, 0x0, 0xc6, 0xbe, 0x1, 0xa2, 0x21, 0x1f, 0xf6, 0xb5, 0x2, 0x6, 0xb8, 0x1, 0x82, 0x21, 0x32, 0xad, 0xc, 0x56, 0x88, 0x6d, 0x82, 0x6, 0x8, 0x92, 0x6, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x6, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x56, 0x98, 0x6c, 0x82, 0x6, 0xc, 0x92, 0x6, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0xe, 0x0, 0x99, 0x11, 0xa2, 0x6, 0xf, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x79, 0x20, 0xa2, 0x21, 0x2e, 0x81, 0xff, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x82, 0x21, 0x2c, 0xe0, 0x8, 0x0, 0xa1, 0xe6, 0xfb, 0x88, 0xd1, 0xe0, 0x8, 0x0, 0xe0, 0x7, 0x0, 0x6, 0xa3, 0x1, 0xc, 0x76, 0x82, 0x21, 0x25, 0x5d, 0x7, 0x70, 0x88, 0x10, 0x56, 0xf8, 0x67, 0xa2, 0x21, 0x2e, 0x81, 0xf4, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x82, 0x21, 0x2c, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x27, 0x57, 0x2a, 0x4, 0xc, 0x8, 0x46, 0x0, 0x0, 0xc, 0x18, 0x9d, 0x6, 0x57, 0x2a, 0x1, 0x1b, 0x95, 0x5d, 0x9, 0xc6, 0xf3, 0xff, 0xa2, 0x21, 0x1f, 0x82, 0x21, 0x28, 0x87, 0xb5, 0x2, 0xc6, 0x8d, 0x1, 0x82, 0x6, 0x8, 0x92, 0x6, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x6, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x92, 0x6, 0xc, 0xa2, 0x6, 0xd, 0x80, 0xaa, 0x11, 0x90, 0x9a, 0x20, 0xa2, 0x6, 0xe, 0x0, 0xaa, 0x11, 0xb2, 0x6, 0xf, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x46, 0x81, 0x1, 0x82, 0x21, 0x1b, 0x57, 0x38, 0x2, 0x86, 0xff, 0x1, 0x82, 0x6, 0x8, 0x92, 0x6, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x6, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x91, 0xd3, 0xfb, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x92, 0x21, 0x28, 0x0, 0x9, 0x40, 0x80, 0x90, 0x91, 0xa1, 0xcc, 0xfb, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0x92, 0x21, 0x24, 0x0, 0x9, 0x40, 0x80, 0x90, 0x91, 0xa1, 0xc9, 0xfb, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0x80, 0x88, 0x41, 0x91, 0xc7, 0xfb, 0x46, 0x68, 0x1, 0xb6, 0xc5, 0x2, 0x46, 0x3e, 0x1, 0xa2, 0x21, 0x1f, 0x6, 0x62, 0x1, 0x82, 0x21, 0x1b, 0x57, 0x38, 0x2, 0xc6, 0xe4, 0x1, 0x82, 0x6, 0x8, 0x92, 0x6, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x6, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0xc, 0xb, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0x6, 0x5a, 0x1, 0xa2, 0x21, 0x1f, 0xf6, 0xb5, 0x2, 0x46, 0x53, 0x1, 0x82, 0x6, 0xb, 0x82, 0x61, 0x2a, 0x82, 0x6, 0xa, 0x82, 0x61, 0x29, 0x82, 0x6, 0x8, 0x82, 0x61, 0x26, 0x22, 0x6, 0x9, 0x72, 0x6, 0xf, 0x52, 0x6, 0xe, 0x42, 0x6, 0xc, 0x62, 0x6, 0xd, 0xa2, 0x21, 0x2e, 0x81, 0xa4, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x82, 0x21, 0x2c, 0xe0, 0x8, 0x0, 0xa1, 0x87, 0xfb, 0x38, 0xd1, 0xe0, 0x3, 0x0, 0x80, 0x82, 0x11, 0x92, 0x21, 0x26, 0x90, 0x88, 0x20, 0x92, 0x21, 0x29, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x2a, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xc0, 0x20, 0x0, 0x98, 0xb1, 0x98, 0x9, 0x16, 0x28, 0x70, 0x80, 0xa6, 0x11, 0x40, 0xaa, 0x20, 0x0, 0xb5, 0x11, 0x80, 0xc7, 0x1, 0xb0, 0xbc, 0x20, 0xa0, 0xab, 0x20, 0x1c, 0x4b, 0x0, 0xb, 0x40, 0x90, 0xb0, 0x91, 0xc8, 0xa1, 0xc0, 0xbb, 0x10, 0xc0, 0x99, 0x11, 0xc1, 0x75, 0xfb, 0xc0, 0x99, 0x10, 0xb0, 0x99, 0x20, 0xa0, 0x99, 0x82, 0x80, 0xb9, 0xc2, 0xc, 0xa, 0x81, 0x71, 0xfb, 0xe0, 0x8, 0x0, 0xa2, 0xa3, 0xe8, 0xe0, 0x3, 0x0, 0x6, 0xa6, 0xfe, 0xa2, 0x21, 0x1f, 0x82, 0x21, 0x28, 0x87, 0xb5, 0x2, 0x6, 0x28, 0x1, 0xe2, 0x61, 0x1d, 0x82, 0x6, 0xf, 0x82, 0x61, 0x26, 0x82, 0x6, 0xe, 0x82, 0x61, 0x1c, 0x82, 0x6, 0xc, 0x82, 0x61, 0x18, 0x32, 0x6, 0xd, 0x22, 0x6, 0xb, 0x72, 0x6, 0xa, 0x52, 0x6, 0x8, 0x62, 0x6, 0x9, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0xb, 0xc1, 0xfb, 0xfa, 0x82, 0x21, 0x2d, 0x4d, 0xf, 0xe0, 0x8, 0x0, 0x81, 0x86, 0xfb, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xe0, 0x4, 0x0, 0x80, 0x86, 0x11, 0x50, 0x88, 0x20, 0x0, 0x97, 0x11, 0x80, 0xa2, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x69, 0x20, 0x80, 0x83, 0x11, 0x92, 0x21, 0x18, 0x90, 0x88, 0x20, 0x92, 0x21, 0x1c, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x26, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x79, 0x20, 0x16, 0x67, 0x4, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x51, 0xe7, 0xfa, 0xad, 0x6, 0xcd, 0x5, 0x82, 0x21, 0x2a, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x2b, 0x80, 0x8a, 0x10, 0x56, 0x88, 0x40, 0x50, 0x57, 0x63, 0x81, 0x6e, 0xfb, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xcd, 0x5, 0x82, 0x21, 0x29, 0xe0, 0x8, 0x0, 0x5a, 0x66, 0x50, 0x77, 0xc0, 0x56, 0x87, 0xfb, 0x81, 0x66, 0xfb, 0x8a, 0x81, 0x62, 0xc8, 0x0, 0x81, 0x63, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x5c, 0x8c, 0xad, 0x6, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0x81, 0x61, 0xfb, 0x8a, 0x81, 0x52, 0xc8, 0x0, 0xad, 0x5, 0xbd, 0x6, 0x82, 0x21, 0x1d, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x2e, 0x71, 0xcb, 0xfa, 0xe0, 0x7, 0x0, 0xa2, 0x21, 0x2e, 0x81, 0x44, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0x8c, 0x61, 0xc7, 0xfa, 0xe0, 0x6, 0x0, 0xa2, 0x21, 0x2e, 0x1c, 0xc, 0xbd, 0x5, 0xe0, 0x6, 0x0, 0xa2, 0x21, 0x2e, 0xc, 0x2c, 0xb8, 0x51, 0xe0, 0x6, 0x0, 0xa2, 0x21, 0x2e, 0xe0, 0x7, 0x0, 0x86, 0x5a, 0xfe, 0xa2, 0x21, 0x1f, 0xf6, 0xb5, 0x2, 0x46, 0xdd, 0x0, 0x82, 0x6, 0x8, 0x92, 0x6, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x6, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0x82, 0x6, 0xc, 0x92, 0x6, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x6, 0xe, 0x0, 0x99, 0x11, 0xb2, 0x6, 0xf, 0x80, 0xbb, 0x1, 0x90, 0x9b, 0x20, 0x80, 0xb9, 0x20, 0x81, 0xd, 0xfb, 0xe0, 0x8, 0x0, 0x16, 0x2a, 0x34, 0x3c, 0x6a, 0xc6, 0xca, 0x0, 0xa2, 0x21, 0x2e, 0x81, 0x24, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x82, 0x21, 0x2c, 0xe2, 0x61, 0x1d, 0x4d, 0xf, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x1f, 0x82, 0x21, 0x28, 0x87, 0xb5, 0x2, 0x46, 0xc2, 0x0, 0x82, 0x6, 0xf, 0x82, 0x61, 0x1c, 0x82, 0x6, 0xe, 0x82, 0x61, 0x18, 0x82, 0x6, 0xc, 0x82, 0x61, 0x17, 0x82, 0x6, 0xd, 0x82, 0x61, 0x16, 0x82, 0x6, 0xb, 0x82, 0x61, 0x15, 0x82, 0x6, 0xa, 0x82, 0x61, 0x14, 0x82, 0x6, 0x8, 0x82, 0x61, 0x13, 0x82, 0x6, 0x9, 0x82, 0x61, 0x12, 0x82, 0x6, 0x17, 0x82, 0x61, 0x26, 0x82, 0x6, 0x16, 0x82, 0x61, 0x11, 0x82, 0x6, 0x14, 0x82, 0x61, 0x10, 0x82, 0x6, 0x15, 0x89, 0xf1, 0x32, 0x6, 0x13, 0x22, 0x6, 0x12, 0x52, 0x6, 0x10, 0x72, 0x6, 0x11, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0x6, 0xc1, 0x8a, 0xfa, 0xbd, 0x6, 0x82, 0x21, 0x2d, 0xe0, 0x8, 0x0, 0x81, 0x13, 0xfb, 0x8a, 0x81, 0x69, 0x8, 0x81, 0x12, 0xfb, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xe0, 0x4, 0x0, 0x80, 0x87, 0x11, 0x50, 0x88, 0x20, 0x0, 0x92, 0x11, 0x80, 0xa3, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xb9, 0x20, 0x88, 0xf1, 0x80, 0x88, 0x11, 0x92, 0x21, 0x10, 0x90, 0x88, 0x20, 0x92, 0x21, 0x11, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x26, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xb2, 0x61, 0x26, 0xb0, 0xb8, 0x82, 0x82, 0x21, 0x12, 0x80, 0x88, 0x11, 0x92, 0x21, 0x13, 0x90, 0x88, 0x20, 0x92, 0x21, 0x14, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x15, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x59, 0x20, 0x82, 0x21, 0x16, 0x80, 0x88, 0x11, 0x92, 0x21, 0x17, 0x90, 0x88, 0x20, 0x92, 0x21, 0x18, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x1c, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x99, 0x20, 0x8d, 0x6, 0x2d, 0x9, 0xb2, 0x61, 0x11, 0x92, 0x61, 0x1c, 0x97, 0x38, 0x2, 0x46, 0x2b, 0x0, 0xba, 0x78, 0x16, 0x32, 0x6, 0x77, 0xb6, 0x60, 0x82, 0x21, 0x26, 0x20, 0x38, 0x63, 0x81, 0xbb, 0xfa, 0x87, 0x33, 0x2, 0x6, 0x2, 0x1, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xad, 0x5, 0xcd, 0x3, 0x82, 0x21, 0x2a, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x2b, 0x80, 0x8a, 0x10, 0x56, 0x68, 0x1d, 0xa2, 0x21, 0x2e, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x42, 0xc8, 0x0, 0xbd, 0x4, 0xcd, 0x3, 0x82, 0x21, 0x1e, 0xe0, 0x8, 0x0, 0x81, 0xdc, 0xfa, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xbd, 0x4, 0xcd, 0x3, 0x82, 0x21, 0x29, 0xe0, 0x8, 0x0, 0x6a, 0x63, 0x3a, 0x55, 0x30, 0x22, 0xc0, 0x56, 0xb2, 0xf9, 0xa2, 0x21, 0x2e, 0x81, 0xd3, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0x4c, 0x82, 0x21, 0x23, 0xe0, 0x8, 0x0, 0x88, 0xc1, 0xb7, 0x38, 0x2, 0xc6, 0xe6, 0x0, 0x82, 0xa, 0x0, 0x92, 0xa, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0xa, 0x2, 0x0, 0x99, 0x11, 0xa2, 0xa, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xb2, 0x21, 0x11, 0x92, 0x21, 0x1c, 0x97, 0xb8, 0x2, 0x46, 0xd4, 0xff, 0x81, 0xc5, 0xfa, 0x8a, 0x81, 0x62, 0xc8, 0x0, 0x81, 0xc2, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x5c, 0x8c, 0xad, 0x6, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0x81, 0xc0, 0xfa, 0x8a, 0x81, 0x52, 0xc8, 0x0, 0xad, 0x5, 0xbd, 0x6, 0x82, 0x21, 0x1d, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x2e, 0x1c, 0xc, 0xbd, 0x5, 0x82, 0x21, 0x1e, 0xe0, 0x8, 0x0, 0x86, 0xc3, 0xfd, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xc9, 0x8, 0x81, 0x96, 0xfa, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xc, 0x78, 0x80, 0x99, 0x10, 0x56, 0xf9, 0xfe, 0x91, 0x93, 0xfa, 0xc0, 0x20, 0x0, 0x98, 0x9, 0x80, 0x99, 0x10, 0x56, 0x19, 0xff, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x81, 0x8d, 0xfa, 0xe0, 0x8, 0x0, 0x56, 0xba, 0x4, 0x82, 0xa2, 0x0, 0x92, 0xa0, 0xc0, 0x92, 0xd9, 0x6f, 0x9a, 0x91, 0x98, 0x9, 0x80, 0xb9, 0x10, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb9, 0x8, 0x81, 0x86, 0xfa, 0x91, 0x86, 0xfa, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x56, 0x79, 0xff, 0x81, 0x83, 0xfa, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x82, 0xfa, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xa1, 0x80, 0xfa, 0x81, 0x80, 0xfa, 0xe0, 0x8, 0x0, 0x16, 0xca, 0xa, 0xa2, 0xa0, 0xc5, 0x6, 0x25, 0x0, 0x2b, 0xb6, 0x1c, 0xec, 0xa8, 0x71, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x1b, 0x92, 0xa0, 0xc1, 0x92, 0xd9, 0x6f, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x22, 0x48, 0x0, 0xa8, 0x81, 0x88, 0x91, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x2b, 0x80, 0x8a, 0x10, 0x56, 0x8, 0x6, 0xc6, 0x1b, 0x0, 0xb2, 0xa0, 0xef, 0x80, 0xaf, 0x11, 0xc0, 0xaa, 0x20, 0x0, 0xcd, 0x11, 0x80, 0xde, 0x1, 0xc0, 0xcd, 0x20, 0xa0, 0x6c, 0x20, 0xa2, 0x21, 0x1f, 0x97, 0x96, 0x42, 0x87, 0x9b, 0x3c, 0xa2, 0x21, 0x2e, 0x81, 0x69, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x82, 0x21, 0x2c, 0xe0, 0x8, 0x0, 0x81, 0x58, 0xfa, 0x82, 0x61, 0x18, 0x26, 0x33, 0x4b, 0x82, 0xa0, 0xd4, 0x87, 0x13, 0x64, 0x1c, 0x18, 0x87, 0x93, 0x2, 0x46, 0x22, 0x0, 0x26, 0x73, 0x2, 0x46, 0x7f, 0xfd, 0x82, 0x21, 0x32, 0x67, 0x38, 0x2, 0x46, 0x59, 0x0, 0xa2, 0xa0, 0xc9, 0x86, 0x0, 0x0, 0xa2, 0xa0, 0xc1, 0x81, 0x64, 0xfa, 0x8a, 0x81, 0xa2, 0x48, 0x0, 0xc, 0x18, 0x91, 0x63, 0xfa, 0x9a, 0x91, 0x82, 0x49, 0x0, 0xa2, 0x21, 0x2e, 0x81, 0x54, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x82, 0x21, 0x2c, 0xe0, 0x8, 0x0, 0x46, 0x71, 0xfd, 0x82, 0xa0, 0xb8, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xb2, 0x21, 0x2a, 0xcd, 0x6, 0x82, 0x21, 0x18, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x2b, 0x80, 0x8a, 0x10, 0x56, 0xd8, 0xfb, 0x86, 0x69, 0xfd, 0x81, 0x34, 0xfa, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xb8, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0x1b, 0x81, 0xc7, 0xf9, 0xc2, 0x21, 0x2a, 0xdd, 0x6, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x2b, 0x80, 0x8a, 0x10, 0x56, 0x68, 0xf9, 0x81, 0x2c, 0xfa, 0xe0, 0x8, 0x0, 0x46, 0x5e, 0xfd, 0x81, 0x2b, 0xfa, 0x82, 0x61, 0x17, 0x58, 0x8, 0xc, 0x4, 0xc, 0x18, 0xad, 0x8, 0x82, 0x61, 0x1d, 0xcd, 0x8, 0x3d, 0x6, 0x42, 0x61, 0x26, 0x62, 0x61, 0x1c, 0x92, 0x21, 0x32, 0xd2, 0x21, 0x1d, 0x82, 0x21, 0x26, 0x87, 0x99, 0x2, 0xd2, 0x21, 0x26, 0x81, 0xbb, 0xf9, 0xb2, 0x21, 0x2a, 0x16, 0x3, 0xe, 0x16, 0xd9, 0xd, 0x16, 0x5a, 0xf, 0x81, 0x42, 0xfa, 0x8a, 0x81, 0x39, 0x8, 0x71, 0x1c, 0xfa, 0x50, 0x87, 0xc0, 0x91, 0x3f, 0xfa, 0x9a, 0x91, 0x89, 0x9, 0x21, 0x1a, 0xfa, 0x27, 0x35, 0x2, 0xc6, 0x52, 0x0, 0x82, 0x21, 0x33, 0x87, 0xb3, 0x5, 0x82, 0x21, 0x22, 0x80, 0xcc, 0x20, 0x47, 0xb6, 0x2, 0x46, 0x4e, 0x0, 0x82, 0xa0, 0xc0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xc9, 0x8, 0xc2, 0x61, 0x29, 0xc9, 0x1, 0x4a, 0xbb, 0xd1, 0x10, 0xfa, 0x5a, 0xed, 0x81, 0x30, 0xfa, 0x8a, 0x81, 0xc2, 0xc8, 0x0, 0x81, 0x2f, 0xfa, 0x8a, 0x81, 0xf2, 0xc8, 0x0, 0x81, 0xb, 0xfa, 0xa8, 0x61, 0xe0, 0x8, 0x0, 0x81, 0x2a, 0xfa, 0x8a, 0x81, 0x68, 0x8, 0x82, 0x21, 0x33, 0x60, 0x88, 0xc0, 0x82, 0x61, 0x33, 0x81, 0x27, 0xfa, 0x8a, 0x81, 0x88, 0x8, 0x5a, 0x58, 0x16, 0x2a, 0x0, 0x77, 0x95, 0x27, 0x27, 0x35, 0x2, 0x86, 0x39, 0x0, 0x7d, 0xa, 0x82, 0xa0, 0xb8, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xb1, 0xfd, 0xf9, 0xcd, 0x5, 0x82, 0x21, 0x18, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x2b, 0x80, 0x8a, 0x10, 0x56, 0x48, 0xeb, 0xc, 0x5, 0xad, 0x7, 0x4a, 0x46, 0x60, 0x33, 0xc0, 0x62, 0x21, 0x1c, 0xc2, 0x21, 0x29, 0xc6, 0xcb, 0xff, 0x98, 0xc1, 0x90, 0x95, 0x10, 0xa2, 0x21, 0x1f, 0x56, 0x79, 0xe9, 0xb2, 0x21, 0x2a, 0x3b, 0x9b, 0x7c, 0xca, 0xa0, 0xa9, 0x10, 0xb0, 0x9a, 0xc0, 0x97, 0x36, 0x1, 0x4d, 0xa, 0x97, 0x36, 0x6b, 0x90, 0x96, 0xc0, 0x90, 0x92, 0x41, 0x6, 0x19, 0x0, 0xb2, 0x21, 0x17, 0x59, 0xb, 0xd6, 0xda, 0x1, 0x92, 0xa0, 0xb8, 0x9a, 0x91, 0x92, 0xc9, 0x0, 0x8a, 0x89, 0x92, 0xa0, 0xc7, 0x92, 0x48, 0x0, 0x86, 0x12, 0xfd, 0x92, 0x21, 0x17, 0x59, 0x9, 0xc, 0x1d, 0xc, 0xa, 0x9d, 0xd, 0x56, 0xaa, 0x1, 0xc, 0x1b, 0xb0, 0xbd, 0x10, 0x16, 0x2b, 0x1, 0x92, 0xa0, 0xb8, 0x9a, 0x91, 0x92, 0xc9, 0x0, 0x8a, 0x89, 0x92, 0xa0, 0xc8, 0x92, 0x48, 0x0, 0x46, 0x8, 0xfd, 0x56, 0x2a, 0x0, 0xc6, 0x6, 0xfd, 0x16, 0x29, 0x0, 0x46, 0x5, 0xfd, 0x92, 0xa0, 0xb8, 0x9a, 0x91, 0x92, 0xc9, 0x0, 0x8a, 0x89, 0x92, 0xa0, 0xc9, 0x92, 0x48, 0x0, 0x86, 0x0, 0xfd, 0xc, 0x9, 0xe0, 0x99, 0x11, 0x82, 0xc8, 0xfc, 0xa2, 0x21, 0x30, 0x56, 0x29, 0x0, 0x46, 0xfc, 0xfc, 0xb8, 0x4, 0xb9, 0xa, 0x4b, 0xaa, 0xa2, 0x61, 0x30, 0x92, 0xc9, 0xfc, 0x4b, 0x44, 0x82, 0x61, 0x32, 0x82, 0xc8, 0xfc, 0x56, 0x89, 0xfe, 0xc6, 0xf5, 0xfc, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x20, 0x65, 0x0, 0x81, 0x80, 0xf9, 0x90, 0xeb, 0x3, 0x80, 0x89, 0x10, 0x92, 0xa1, 0x0, 0xa1, 0x68, 0xf9, 0x90, 0xc, 0x13, 0xbd, 0x8, 0xb2, 0xea, 0x0, 0xc0, 0x20, 0x0, 0x26, 0xfb, 0x1a, 0xb8, 0xa, 0x87, 0x9b, 0x7, 0x81, 0xe0, 0xf9, 0x80, 0x22, 0x20, 0x1d, 0xf0, 0x90, 0xc, 0x13, 0xbd, 0x8, 0xb2, 0xea, 0x0, 0xc0, 0x20, 0x0, 0x66, 0xfb, 0xf1, 0x1d, 0xf0, 0x36, 0x41, 0x0, 0x16, 0x72, 0x0, 0x66, 0x12, 0x9, 0x21, 0xd9, 0xf9, 0x1d, 0xf0, 0x21, 0xd7, 0xf9, 0x1d, 0xf0, 0x81, 0x65, 0xf9, 0x80, 0x23, 0x82, 0x1d, 0xf0, 0x0, 0x36, 0xc1, 0x1, 0x29, 0x21, 0xa2, 0xc1, 0x40, 0xc, 0x7, 0xc2, 0xa0, 0x80, 0x81, 0x8a, 0xf9, 0xbd, 0x7, 0xe0, 0x8, 0x0, 0x77, 0x13, 0x5, 0x81, 0xd0, 0xf9, 0x86, 0x0, 0x0, 0x81, 0xcf, 0xf9, 0x89, 0x61, 0x62, 0x21, 0x3b, 0xa2, 0x21, 0x3a, 0xb2, 0x21, 0x39, 0xc2, 0x21, 0x38, 0xc, 0x18, 0x89, 0x51, 0x7c, 0xfe, 0x2c, 0x8, 0x89, 0x41, 0x4c, 0x8, 0x89, 0x31, 0xa0, 0x8c, 0x20, 0x60, 0xdb, 0x20, 0xd0, 0x88, 0x20, 0x16, 0xc8, 0x1b, 0x72, 0x41, 0x3f, 0x72, 0x41, 0x3e, 0x72, 0x41, 0x3d, 0x72, 0x41, 0x3c, 0x72, 0x41, 0x3b, 0x72, 0x41, 0x3a, 0x72, 0x41, 0x39, 0x72, 0x41, 0x38, 0x72, 0x41, 0x37, 0x72, 0x41, 0x36, 0x72, 0x41, 0x35, 0x72, 0x41, 0x34, 0x72, 0x41, 0x33, 0x72, 0x41, 0x32, 0x72, 0x41, 0x31, 0x88, 0x51, 0x82, 0x41, 0x30, 0x72, 0x41, 0x2f, 0x72, 0x41, 0x2e, 0x72, 0x41, 0x2d, 0x72, 0x41, 0x2c, 0x72, 0x41, 0x2b, 0x72, 0x41, 0x2a, 0x72, 0x41, 0x29, 0x72, 0x41, 0x28, 0x72, 0x41, 0x27, 0x72, 0x41, 0x26, 0x72, 0x41, 0x25, 0x72, 0x41, 0x24, 0x72, 0x41, 0x23, 0x72, 0x41, 0x22, 0x72, 0x41, 0x21, 0x72, 0x41, 0x20, 0x77, 0x9c, 0xf, 0xe0, 0x8b, 0x30, 0xb, 0xdb, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x31, 0x6, 0x3, 0x0, 0xe0, 0x8c, 0x30, 0xb, 0xdc, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x41, 0x80, 0x59, 0xc0, 0x77, 0x9a, 0xf, 0xe0, 0x86, 0x30, 0xb, 0xd6, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x31, 0x6, 0x3, 0x0, 0xe0, 0x8a, 0x30, 0xb, 0xda, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x41, 0x80, 0x89, 0xc0, 0x69, 0x71, 0xb0, 0xdc, 0x20, 0x77, 0x9d, 0x2, 0x52, 0xc8, 0x40, 0x50, 0x83, 0x41, 0xc, 0xfd, 0xd0, 0x88, 0x10, 0xd2, 0xc1, 0x20, 0xd2, 0xcd, 0x10, 0x80, 0x4d, 0xc0, 0x82, 0x4, 0x8, 0xd2, 0x4, 0x9, 0x80, 0xdd, 0x11, 0x80, 0x8d, 0x20, 0xd2, 0x4, 0xa, 0x0, 0xdd, 0x11, 0x32, 0x4, 0xb, 0x80, 0x33, 0x1, 0xd0, 0xd3, 0x20, 0x80, 0x3d, 0x20, 0x82, 0x4, 0xc, 0xd2, 0x4, 0xd, 0x80, 0xdd, 0x11, 0x80, 0x8d, 0x20, 0xd2, 0x4, 0xe, 0x0, 0xdd, 0x11, 0x22, 0x4, 0xf, 0x80, 0x22, 0x1, 0xd0, 0xd2, 0x20, 0x80, 0x8d, 0x20, 0xc, 0x7d, 0xd0, 0x25, 0x10, 0x0, 0x12, 0x40, 0x30, 0x88, 0x81, 0x98, 0x61, 0x90, 0xd5, 0xa0, 0xc0, 0x20, 0x0, 0xd8, 0xd, 0x51, 0x80, 0xf9, 0x50, 0xdd, 0xa0, 0xd8, 0xd, 0xc0, 0xdd, 0x11, 0x52, 0xc1, 0x40, 0xda, 0x55, 0xd8, 0x35, 0x80, 0xdd, 0x20, 0xd9, 0x35, 0xd2, 0x4, 0x0, 0xf2, 0x4, 0x1, 0x80, 0xff, 0x11, 0xd0, 0xdf, 0x20, 0xf2, 0x4, 0x2, 0x0, 0xff, 0x11, 0x62, 0x4, 0x3, 0x80, 0x66, 0x1, 0xf0, 0xf6, 0x20, 0xd0, 0xff, 0x20, 0x0, 0x12, 0x40, 0x0, 0xdf, 0xa1, 0x68, 0x5, 0xd0, 0x66, 0x20, 0x69, 0x5, 0x62, 0x4, 0x4, 0x92, 0x4, 0x5, 0x80, 0x99, 0x11, 0x60, 0x99, 0x20, 0x62, 0x4, 0x6, 0x0, 0x66, 0x11, 0x42, 0x4, 0x7, 0x80, 0x44, 0x1, 0x60, 0x64, 0x20, 0x90, 0x96, 0x20, 0x0, 0x12, 0x40, 0xf0, 0xf9, 0x81, 0x68, 0x15, 0xf0, 0x66, 0x20, 0x69, 0x15, 0x0, 0x63, 0xa1, 0x90, 0x91, 0x41, 0xe0, 0x42, 0x30, 0x1c, 0xf3, 0x30, 0x44, 0x10, 0x0, 0x4, 0x40, 0x90, 0x90, 0x91, 0x90, 0x96, 0x20, 0x68, 0x25, 0x90, 0x66, 0x20, 0x69, 0x25, 0xe0, 0x88, 0x30, 0x68, 0x71, 0x80, 0x66, 0x10, 0xe0, 0x8f, 0x30, 0x80, 0xbb, 0x10, 0xe0, 0x89, 0x30, 0x80, 0xaa, 0x10, 0xe0, 0x8d, 0x30, 0x80, 0xcc, 0x10, 0x86, 0x8d, 0xff, 0xb2, 0xc1, 0x40, 0xc2, 0xa0, 0x80, 0x81, 0x8, 0xf9, 0xa8, 0x21, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0xc1, 0xf8, 0x80, 0x82, 0x10, 0x4c, 0x49, 0x87, 0x39, 0x10, 0x0, 0x82, 0x11, 0x80, 0x80, 0x31, 0x91, 0x4e, 0xf9, 0x90, 0x88, 0x90, 0x22, 0x18, 0x0, 0x1d, 0xf0, 0x4c, 0x52, 0x1d, 0xf0, 0x0, 0x36, 0x61, 0x0, 0xc1, 0xcb, 0xf8, 0xc0, 0x20, 0x0, 0x88, 0xc, 0x92, 0xa1, 0x0, 0xa2, 0xa0, 0xff, 0xa0, 0xa2, 0x10, 0x51, 0x46, 0xf9, 0xa9, 0x11, 0xc9, 0x21, 0x66, 0x1a, 0x2c, 0xc0, 0x20, 0x0, 0xa8, 0xc, 0xb2, 0xa2, 0x0, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0xc, 0xc0, 0x20, 0x0, 0xa8, 0x5, 0xb1, 0x3f, 0xf9, 0xb0, 0xaa, 0x10, 0x0, 0xb3, 0x11, 0xa0, 0xab, 0x20, 0xb1, 0xcc, 0xf8, 0xb0, 0xba, 0x20, 0xa1, 0x3c, 0xf9, 0xc6, 0x4, 0x0, 0xc0, 0x20, 0x0, 0xa8, 0x5, 0xb1, 0x38, 0xf9, 0xb0, 0xaa, 0x10, 0x0, 0xb3, 0x11, 0xa0, 0xbb, 0x20, 0xa1, 0x36, 0xf9, 0x90, 0x88, 0x10, 0x89, 0x1, 0xc0, 0x20, 0x0, 0xb9, 0x5, 0xc0, 0x20, 0x0, 0x88, 0x5, 0x91, 0x28, 0xf9, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x5, 0x81, 0xb5, 0xf8, 0x80, 0x83, 0x82, 0xa0, 0xa8, 0xc2, 0x31, 0xd9, 0xf8, 0x41, 0xfb, 0xf8, 0xc, 0x2, 0xc, 0x16, 0x7d, 0xa, 0xe0, 0x3, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x5, 0x40, 0x88, 0x10, 0x56, 0x98, 0x0, 0x16, 0x17, 0x1, 0xb, 0x77, 0xad, 0x6, 0xc6, 0xf9, 0xff, 0x81, 0x25, 0xf9, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x80, 0x27, 0x41, 0xa8, 0x21, 0xc0, 0x20, 0x0, 0x88, 0x5, 0x91, 0x22, 0xf9, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x5, 0xc0, 0x20, 0x0, 0x88, 0xa, 0x92, 0xae, 0xff, 0x90, 0x88, 0x10, 0x98, 0x1, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0xa, 0x88, 0x11, 0x66, 0x18, 0xf, 0xc0, 0x20, 0x0, 0x88, 0xa, 0x92, 0xad, 0xff, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0xa, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x71, 0x8f, 0xf8, 0xc0, 0x20, 0x0, 0x88, 0x7, 0x16, 0xe2, 0x2, 0x92, 0xaf, 0xbf, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x7, 0x81, 0xe, 0xf9, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xd, 0xf9, 0xa0, 0x99, 0x10, 0xa2, 0xa1, 0x40, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x3c, 0x2a, 0x81, 0xb1, 0xf8, 0xe0, 0x8, 0x0, 0x86, 0x8, 0x0, 0x4c, 0x9, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x7, 0x81, 0x3, 0xf9, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x2, 0xf9, 0xa0, 0x99, 0x10, 0xa2, 0xa5, 0x0, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc, 0x8, 0x87, 0x93, 0x2, 0x82, 0xa0, 0x80, 0xc0, 0x20, 0x0, 0x98, 0x7, 0xa2, 0xaf, 0x7f, 0xa0, 0x99, 0x10, 0x80, 0x89, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x7, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0xf6, 0xf8, 0x2, 0xa0, 0x0, 0x80, 0x18, 0x20, 0xa1, 0xf5, 0xf8, 0xb1, 0xf5, 0xf8, 0x71, 0xf5, 0xf8, 0xe0, 0x7, 0x0, 0xa1, 0xf5, 0xf8, 0xb1, 0xf5, 0xf8, 0xe0, 0x7, 0x0, 0x81, 0xf4, 0xf8, 0x91, 0xf5, 0xf8, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0xf4, 0xf8, 0xe0, 0x8, 0x0, 0x81, 0xf3, 0xf8, 0xe0, 0x8, 0x0, 0x36, 0x61, 0x0, 0xc, 0x7, 0x61, 0x4d, 0xf8, 0x52, 0xa0, 0xff, 0x41, 0xf0, 0xf8, 0x4c, 0x53, 0x81, 0xf0, 0xf8, 0x89, 0x21, 0x81, 0xd7, 0xf8, 0x89, 0x11, 0x1c, 0x2, 0x81, 0xd7, 0xf8, 0x89, 0x1, 0x60, 0x87, 0x10, 0x57, 0xb8, 0x29, 0xad, 0x7, 0xe0, 0x4, 0x0, 0x60, 0x8a, 0x10, 0x1b, 0x77, 0x37, 0x18, 0xec, 0xe0, 0x8a, 0x11, 0x98, 0x21, 0x90, 0x88, 0x10, 0x98, 0x11, 0x9a, 0x98, 0xc0, 0x20, 0x0, 0x29, 0x9, 0x98, 0x1, 0x9a, 0x88, 0xc0, 0x20, 0x0, 0x29, 0x8, 0xc6, 0xf3, 0xff, 0x1d, 0xf0, 0x0, 0x36, 0xc1, 0x0, 0x71, 0x4c, 0xf8, 0xc0, 0x20, 0x0, 0x88, 0x7, 0x91, 0xdd, 0xf8, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x7, 0xc, 0x3a, 0x81, 0x75, 0xf8, 0x89, 0xc1, 0xe0, 0x8, 0x0, 0x81, 0xd9, 0xf8, 0x89, 0xb1, 0x82, 0xa1, 0x2c, 0x89, 0xa1, 0x81, 0xd7, 0xf8, 0x89, 0x91, 0x81, 0x2e, 0xf8, 0x89, 0x81, 0xc, 0x8, 0x89, 0xd1, 0xc, 0x15, 0x1c, 0xa8, 0x89, 0x71, 0x2c, 0x88, 0x89, 0x61, 0x7c, 0xe8, 0x89, 0x51, 0x82, 0xa4, 0x0, 0x89, 0x41, 0x81, 0x3c, 0xf8, 0x89, 0x31, 0x1c, 0x8, 0x89, 0x21, 0x81, 0x3e, 0xf8, 0x89, 0x11, 0x81, 0xcc, 0xf8, 0x89, 0x1, 0xc0, 0x20, 0x0, 0x88, 0x7, 0x98, 0xb1, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x7, 0xa8, 0xa1, 0x88, 0xc1, 0xe0, 0x8, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x91, 0x68, 0x8, 0x88, 0x81, 0x80, 0x36, 0x10, 0x8d, 0x5, 0x98, 0x71, 0x97, 0x93, 0x1, 0x88, 0xd1, 0x2d, 0x5, 0x98, 0x61, 0x97, 0x13, 0x2, 0xf0, 0x28, 0x11, 0xb, 0x86, 0x98, 0x51, 0x97, 0x38, 0x1, 0x2d, 0x5, 0xa8, 0xd1, 0xb8, 0x41, 0x88, 0x31, 0xe0, 0x8, 0x0, 0x4d, 0xa, 0x88, 0x21, 0x0, 0x8, 0x40, 0x60, 0x80, 0x91, 0x87, 0x13, 0x1, 0x2d, 0x5, 0xad, 0x2, 0xbd, 0x3, 0x88, 0x11, 0xe0, 0x8, 0x0, 0x88, 0x1, 0xa7, 0x38, 0x2, 0xc6, 0x44, 0x0, 0x81, 0x23, 0xf8, 0x80, 0x8a, 0xc2, 0x60, 0xc8, 0x11, 0xc0, 0x81, 0x41, 0xd0, 0xb4, 0x1, 0x8a, 0x8b, 0xc, 0x19, 0xc, 0xd, 0xad, 0x9, 0xd7, 0x18, 0x1, 0xad, 0xd, 0xb7, 0x38, 0x1, 0x9d, 0xd, 0x40, 0xbd, 0x41, 0x9a, 0x9b, 0xa0, 0xb9, 0xc0, 0xb, 0xa8, 0x81, 0x14, 0xf8, 0xe0, 0x8, 0x0, 0x16, 0x4a, 0xf6, 0x81, 0xa5, 0xf8, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x81, 0x1d, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xa2, 0xf8, 0xa0, 0x99, 0x10, 0xa1, 0xa2, 0xf8, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x14, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x9e, 0xf8, 0xa0, 0x99, 0x10, 0xa1, 0x9e, 0xf8, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x9c, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb1, 0x9b, 0xf8, 0xb0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x99, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb1, 0x98, 0xf8, 0xb0, 0x99, 0x10, 0xb1, 0x24, 0xf8, 0xb0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x95, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb1, 0x94, 0xf8, 0xb0, 0x99, 0x10, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x91, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa2, 0xa0, 0x80, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x8e, 0xf8, 0x91, 0x8e, 0xf8, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xa1, 0x8d, 0xf8, 0xc0, 0x20, 0x0, 0xb8, 0xa, 0xc1, 0x8c, 0xf8, 0xc0, 0xbb, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0xa, 0xc, 0xa, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x81, 0x88, 0xf8, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xb1, 0x87, 0xf8, 0xc0, 0x20, 0x0, 0xa9, 0xb, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x81, 0x85, 0xf8, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x91, 0x84, 0xf8, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x81, 0xd1, 0xf7, 0x92, 0xa0, 0xff, 0xb1, 0xcd, 0xf7, 0xa1, 0xca, 0xf7, 0xba, 0xba, 0xc1, 0xcf, 0xf7, 0xd1, 0xc7, 0xf7, 0xda, 0xda, 0xc, 0xf, 0x71, 0xc8, 0xf7, 0x7a, 0x6a, 0xc, 0x1e, 0xc0, 0x20, 0x0, 0x58, 0x8, 0x90, 0x55, 0x10, 0x16, 0x95, 0x2, 0xc0, 0x20, 0x0, 0x58, 0xc, 0x42, 0xb, 0x0, 0x56, 0x84, 0x2, 0x48, 0xd, 0x4a, 0x4a, 0x52, 0x44, 0x0, 0x58, 0xd, 0x1b, 0x45, 0x5d, 0xf, 0x77, 0x14, 0x1, 0x5d, 0x4, 0x59, 0xd, 0x48, 0x6, 0x57, 0x94, 0xd0, 0xe2, 0x4b, 0x0, 0x86, 0xf2, 0xff, 0x81, 0xdd, 0xf7, 0xc0, 0x20, 0x0, 0xe9, 0x8, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x81, 0x67, 0xf8, 0xe0, 0x8, 0x0, 0x81, 0x66, 0xf8, 0xe0, 0x8, 0x0, 0xc, 0x8, 0x16, 0x2a, 0x1, 0x91, 0x65, 0xf8, 0xa1, 0x65, 0xf8, 0xa7, 0xb9, 0x9, 0xc0, 0x20, 0x0, 0x89, 0x9, 0x4b, 0x99, 0xa7, 0x39, 0xf5, 0x80, 0xf0, 0x13, 0x80, 0xf1, 0x13, 0x80, 0xf2, 0x13, 0x0, 0x20, 0x0, 0x81, 0x5f, 0xf8, 0x80, 0xe7, 0x13, 0x81, 0x5e, 0xf8, 0xe0, 0x8, 0x0, 0x81, 0x5e, 0xf8, 0xe0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x8d, 0x2, 0x16, 0xe5, 0x9, 0xc, 0x2, 0xc, 0x1a, 0x9d, 0xa, 0x47, 0x38, 0xf, 0x9d, 0x2, 0x57, 0xb3, 0xd, 0x57, 0x13, 0xf, 0x9d, 0xa, 0x16, 0xd9, 0x0, 0xc6, 0x3c, 0x0, 0x57, 0x33, 0xf1, 0xad, 0x2, 0x57, 0x93, 0xef, 0x56, 0x89, 0xe, 0x16, 0x53, 0xe, 0x90, 0xf3, 0x40, 0xa0, 0xf5, 0x40, 0x90, 0x9a, 0xc0, 0x3c, 0xfa, 0xa0, 0xa9, 0x10, 0x0, 0x1a, 0x40, 0x40, 0xc5, 0x81, 0x2c, 0xa, 0xa0, 0xe9, 0x10, 0x0, 0xd4, 0xa1, 0xc, 0xa, 0xbd, 0xd, 0xa7, 0x9e, 0x1, 0xbd, 0xc, 0xcd, 0xa, 0xa7, 0x9e, 0x1, 0xcd, 0xd, 0x1c, 0xfd, 0xd0, 0x99, 0x10, 0xc, 0x1e, 0x0, 0x19, 0x40, 0x0, 0xfe, 0xa1, 0x2d, 0xa, 0x9d, 0xe, 0xc7, 0x38, 0x1, 0x9d, 0xa, 0xb0, 0x73, 0xc0, 0x90, 0x97, 0xc0, 0x96, 0xd9, 0x1, 0xc0, 0x88, 0xc0, 0x7d, 0xe, 0x47, 0x38, 0x1, 0x7d, 0xa, 0x6d, 0xe, 0x57, 0x39, 0x1, 0x6d, 0xa, 0x57, 0x19, 0x1, 0x7d, 0x6, 0xf0, 0x22, 0x20, 0x56, 0x57, 0x8, 0x3d, 0x9, 0x0, 0x1d, 0x40, 0xc0, 0xcb, 0x81, 0xf0, 0xf1, 0x41, 0xb0, 0xb1, 0x41, 0x86, 0xf0, 0xff, 0x16, 0x63, 0x7, 0x47, 0xb3, 0x7c, 0xa0, 0xf3, 0x40, 0xb0, 0xf4, 0x40, 0x1c, 0xf9, 0xdd, 0x9, 0xa7, 0x1b, 0x5, 0xa0, 0xab, 0xc0, 0xd2, 0xca, 0x20, 0x0, 0x1d, 0x40, 0x40, 0xc5, 0x81, 0x0, 0xe4, 0xa1, 0x2c, 0xa, 0xa0, 0xfd, 0x10, 0xc, 0xa, 0xbd, 0xe, 0xa7, 0x9f, 0x1, 0xbd, 0xc, 0xcd, 0xa, 0xa7, 0x9f, 0x1, 0xcd, 0xe, 0x90, 0xed, 0x10, 0xc, 0x1d, 0x0, 0x1e, 0x40, 0x0, 0xfd, 0xa1, 0xed, 0xa, 0x7d, 0xd, 0xc7, 0x38, 0x1, 0x7d, 0xa, 0xb0, 0x63, 0xc0, 0x70, 0x76, 0xc0, 0x96, 0xa7, 0x0, 0xc0, 0x88, 0xc0, 0xe0, 0xef, 0x20, 0x16, 0x57, 0x3, 0x3d, 0x7, 0x0, 0x19, 0x40, 0xc0, 0xcb, 0x81, 0xf0, 0xf1, 0x41, 0xb0, 0xb1, 0x41, 0x46, 0xf5, 0xff, 0x9d, 0x3, 0x3d, 0x2, 0x6, 0x38, 0x0, 0xc, 0x3, 0xc6, 0x36, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x28, 0xc2, 0x6, 0x6, 0x0, 0x47, 0x93, 0x1e, 0x30, 0xa8, 0xe2, 0x30, 0x28, 0xc2, 0xc, 0x9, 0xc, 0x13, 0x6, 0x30, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x88, 0xc2, 0xe0, 0x28, 0x20, 0xc, 0x9, 0x8d, 0xa, 0x3d, 0x9, 0x6, 0x2c, 0x0, 0x40, 0x93, 0xe2, 0x40, 0x33, 0xc2, 0xa1, 0x42, 0xf7, 0xa7, 0xb4, 0x33, 0x1c, 0xa, 0x0, 0x1a, 0x40, 0x80, 0x99, 0x81, 0x40, 0xb9, 0xe2, 0x0, 0xbb, 0x11, 0xc1, 0x3e, 0xf7, 0xc0, 0x88, 0x10, 0x80, 0x8b, 0x20, 0x40, 0xb8, 0xc2, 0x40, 0x99, 0xc2, 0x0, 0xc9, 0x11, 0xb0, 0x2c, 0x20, 0x0, 0xa, 0x40, 0x90, 0x90, 0x91, 0x30, 0x39, 0x20, 0x40, 0x88, 0xe2, 0xc, 0x9, 0x6, 0x1c, 0x0, 0xc, 0xc, 0xc, 0x1b, 0xad, 0xb, 0x47, 0x38, 0x4a, 0xad, 0xc, 0x57, 0xb9, 0x48, 0x57, 0x19, 0x4a, 0xad, 0xb, 0x56, 0x8a, 0x4, 0x1c, 0xfa, 0x0, 0x1a, 0x40, 0x40, 0xb5, 0x81, 0x10, 0xc4, 0x1, 0xe1, 0xb7, 0xf7, 0xc, 0xf, 0xc, 0x17, 0xdd, 0xf, 0x6d, 0x7, 0xc7, 0x38, 0x1, 0x6d, 0xf, 0xb0, 0x59, 0xc0, 0x60, 0x65, 0xc0, 0x96, 0xa6, 0x0, 0xc0, 0x88, 0xc0, 0xd0, 0xde, 0x20, 0x16, 0x6, 0x2, 0x9d, 0x6, 0x0, 0x1a, 0x40, 0xc0, 0xcb, 0x81, 0xe0, 0xe1, 0x41, 0xb0, 0xb1, 0x41, 0x46, 0xf5, 0xff, 0x57, 0x39, 0xb6, 0xbd, 0xc, 0x57, 0x99, 0xb4, 0x16, 0x6a, 0xfb, 0xc, 0x2, 0x6, 0x3, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x88, 0xc2, 0xd0, 0x28, 0x20, 0xc, 0x9, 0x8d, 0xa, 0x4d, 0x8, 0x5d, 0x9, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x81, 0xdb, 0xf7, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xdd, 0x5, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0x3d, 0xb, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xc, 0x8, 0x37, 0xb2, 0x9, 0xc0, 0x20, 0x0, 0x89, 0x2, 0x4b, 0x22, 0x37, 0x32, 0xf5, 0x1d, 0xf0, 0x36, 0x41, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xc, 0x12, 0x1d, 0xf0, 0x0, 0x36, 0x81, 0x0, 0x0, 0x36, 0x81, 0x0, 0x0, 0xa0, 0x28, 0x8, 0x40, 0xa4, 0x0, 0xfb, 0x3f, 0xc0, 0x88, 0x1, 0x20, 0x80, 0x8, 0x0, 0x20, 0x38, 0x31, 0x8, 0x40, 0x60, 0x0, 0xfb, 0x3f, 0x80, 0xc, 0x40, 0x70, 0x0, 0x0, 0x0, 0xfc, 0x8, 0x1f, 0x8, 0x40, 0x20, 0x21, 0x8, 0x40, 0xff, 0xff, 0x0, 0x0, 0x14, 0x2c, 0x8, 0x40, 0x0, 0x20, 0x0, 0x0, 0xf8, 0x0, 0xf0, 0x3f, 0xec, 0x0, 0xf0, 0x3f, 0xfc, 0x0, 0xf0, 0x3f, 0xf0, 0x0, 0xf0, 0x3f, 0x0, 0x1, 0xf0, 0x3f, 0xf4, 0x0, 0xf0, 0x3f, 0x40, 0x31, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0x0, 0x0, 0x4, 0x0, 0x3, 0x0, 0x4, 0x0, 0x1, 0x0, 0x4, 0x0, 0x2, 0x0, 0x4, 0x0, 0x4, 0x0, 0x4, 0x0, 0x5, 0x0, 0x4, 0x0, 0x6, 0x0, 0x4, 0x0, 0x7, 0x0, 0x4, 0x0, 0x36, 0x41, 0x0, 0x81, 0xe1, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0xe1, 0x1, 0x39, 0xa1, 0x80, 0xe2, 0x3, 0x90, 0xe4, 0x3, 0xc, 0x7a, 0xa9, 0x91, 0x27, 0xba, 0x2, 0x6, 0xd6, 0x0, 0x80, 0x89, 0x10, 0x91, 0xd9, 0xff, 0x90, 0x92, 0xa0, 0x98, 0x9, 0x90, 0x98, 0x10, 0x81, 0xd7, 0xff, 0x80, 0x89, 0x10, 0x16, 0x78, 0x4, 0x7c, 0xfa, 0xa0, 0xa8, 0x30, 0xb, 0x88, 0x80, 0x8a, 0x10, 0x80, 0xf8, 0x40, 0x2c, 0xa, 0x80, 0x8a, 0xc0, 0xa1, 0xd1, 0xff, 0xa0, 0x99, 0x10, 0x16, 0xd9, 0x0, 0xc, 0x19, 0x0, 0x18, 0x40, 0x0, 0x99, 0xa1, 0x90, 0xe3, 0x13, 0x10, 0x20, 0x0, 0x92, 0xc8, 0xfa, 0xc, 0xaa, 0x97, 0xba, 0x2, 0x86, 0x8a, 0x0, 0x81, 0xca, 0xff, 0xa1, 0xca, 0xff, 0xa0, 0x99, 0xa0, 0x98, 0x9, 0xa0, 0x9, 0x0, 0x81, 0xc6, 0xff, 0x46, 0x8e, 0x0, 0x81, 0xc7, 0xff, 0x80, 0x89, 0x10, 0x16, 0x98, 0x1f, 0x80, 0x90, 0x60, 0x90, 0x88, 0x10, 0x80, 0xe3, 0x13, 0x10, 0x20, 0x0, 0x80, 0xeb, 0x3, 0xc, 0x6, 0x69, 0x31, 0xc, 0x35, 0x59, 0x21, 0x41, 0xc0, 0xff, 0x49, 0x11, 0x69, 0x1, 0x80, 0x8d, 0x41, 0xc, 0x19, 0x99, 0x71, 0x90, 0xb8, 0x10, 0x72, 0xc1, 0x50, 0x81, 0xbc, 0xff, 0xad, 0x7, 0xe0, 0x8, 0x0, 0xc0, 0x82, 0x11, 0x8a, 0x87, 0x98, 0x28, 0x50, 0x29, 0x10, 0x88, 0x18, 0x40, 0x38, 0x10, 0x7c, 0xf4, 0x2c, 0x8, 0x89, 0x81, 0x5d, 0x6, 0xed, 0x6, 0x4c, 0x8, 0x67, 0x92, 0x10, 0x40, 0x9e, 0x30, 0xb, 0xae, 0xa0, 0x99, 0x10, 0x90, 0xf9, 0x40, 0x90, 0xa8, 0xc0, 0xc6, 0x3, 0x0, 0x40, 0x92, 0x30, 0xb, 0xa2, 0xa0, 0x99, 0x10, 0x90, 0xf9, 0x40, 0xa8, 0x81, 0x90, 0xaa, 0xc0, 0x92, 0xca, 0x40, 0x30, 0xa5, 0x20, 0x67, 0x95, 0x10, 0x40, 0xb3, 0x30, 0xb, 0xc3, 0xc0, 0xbb, 0x10, 0xb0, 0xfb, 0x40, 0xb0, 0x78, 0xc0, 0xc6, 0x3, 0x0, 0x40, 0x85, 0x30, 0xb, 0xb5, 0xb0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0xb8, 0x81, 0x80, 0x7b, 0xc0, 0xe9, 0xb1, 0x67, 0x9a, 0x1, 0x7d, 0x9, 0x81, 0x9f, 0xff, 0xad, 0x7, 0xe0, 0x8, 0x0, 0x81, 0x9e, 0xff, 0x80, 0x8a, 0x10, 0x4c, 0x59, 0x97, 0x98, 0x2, 0xc6, 0x8b, 0x0, 0x81, 0x9b, 0xff, 0xb8, 0xa1, 0xe0, 0x8, 0x0, 0xc, 0x8, 0x82, 0x41, 0x4f, 0x82, 0x41, 0x4e, 0x82, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x82, 0x41, 0x4b, 0x82, 0x41, 0x4a, 0x82, 0x41, 0x49, 0x82, 0x41, 0x48, 0x82, 0x41, 0x47, 0x82, 0x41, 0x46, 0x82, 0x41, 0x45, 0x82, 0x41, 0x44, 0x82, 0x41, 0x43, 0x82, 0x41, 0x42, 0x82, 0x41, 0x41, 0x98, 0x71, 0x92, 0x41, 0x40, 0x82, 0x41, 0x3f, 0x82, 0x41, 0x3e, 0x82, 0x41, 0x3d, 0x82, 0x41, 0x3c, 0x82, 0x41, 0x3b, 0x82, 0x41, 0x3a, 0x82, 0x41, 0x39, 0x82, 0x41, 0x38, 0x82, 0x41, 0x37, 0x82, 0x41, 0x36, 0x82, 0x41, 0x35, 0x82, 0x41, 0x34, 0x82, 0x41, 0x33, 0x82, 0x41, 0x32, 0x82, 0x41, 0x31, 0x82, 0x41, 0x30, 0x82, 0xa0, 0x78, 0x80, 0x87, 0x10, 0x80, 0x83, 0x41, 0x92, 0xc1, 0x30, 0x92, 0xc9, 0x10, 0x80, 0x89, 0xc0, 0x92, 0x8, 0x8, 0xa2, 0x8, 0x9, 0x80, 0xaa, 0x11, 0x90, 0x9a, 0x20, 0xa2, 0x8, 0xa, 0x0, 0xaa, 0x11, 0xb2, 0x8, 0xb, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0xa2, 0x8, 0xc, 0xb2, 0x8, 0xd, 0x80, 0xbb, 0x11, 0xa0, 0xab, 0x20, 0xb2, 0x8, 0xe, 0x0, 0xbb, 0x11, 0xc2, 0x8, 0xf, 0x80, 0xcc, 0x1, 0xb0, 0xbc, 0x20, 0xa0, 0xbb, 0x20, 0xa8, 0x91, 0xa0, 0xa7, 0x10, 0x0, 0x1a, 0x40, 0x90, 0xbb, 0x81, 0x40, 0xbb, 0x30, 0xe8, 0xb1, 0xb0, 0xee, 0x10, 0xb2, 0x8, 0x0, 0xc2, 0x8, 0x1, 0x80, 0xcc, 0x11, 0xb0, 0xbc, 0x20, 0xc2, 0x8, 0x2, 0x0, 0xcc, 0x11, 0xd2, 0x8, 0x3, 0x80, 0xdd, 0x1, 0xc0, 0xcd, 0x20, 0xb0, 0xbc, 0x20, 0xc2, 0x8, 0x4, 0xd2, 0x8, 0x5, 0x80, 0xdd, 0x11, 0xc0, 0xcd, 0x20, 0xd2, 0x8, 0x6, 0x0, 0xdd, 0x11, 0x82, 0x8, 0x7, 0x80, 0x88, 0x1, 0xd0, 0x88, 0x20, 0xc0, 0x88, 0x20, 0x0, 0x1a, 0x40, 0xb0, 0xc8, 0x81, 0x40, 0xcc, 0x30, 0xc0, 0x33, 0x10, 0x0, 0x99, 0xa1, 0x80, 0x81, 0x41, 0x40, 0xca, 0x30, 0x1c, 0xfd, 0xd0, 0xcc, 0x10, 0x0, 0xc, 0x40, 0x80, 0x80, 0x91, 0x80, 0x89, 0x20, 0x40, 0x88, 0x30, 0x80, 0x22, 0x10, 0x0, 0x1a, 0x40, 0x0, 0x8b, 0xa1, 0x40, 0x88, 0x30, 0x80, 0x55, 0x10, 0x46, 0x94, 0xff, 0x81, 0x4c, 0xff, 0x90, 0xeb, 0x3, 0x80, 0x89, 0x10, 0xc, 0x6, 0x67, 0x18, 0x31, 0x91, 0x49, 0xff, 0x86, 0xb, 0x0, 0x1c, 0xd9, 0x97, 0x18, 0x2, 0x86, 0x34, 0x0, 0x81, 0x3d, 0xff, 0x6, 0x5, 0x0, 0x81, 0x3b, 0xff, 0x86, 0x3, 0x0, 0x81, 0x3a, 0xff, 0x6, 0x2, 0x0, 0x81, 0x38, 0xff, 0x86, 0x0, 0x0, 0x81, 0x37, 0xff, 0xad, 0x2, 0xb8, 0xa1, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x91, 0x3e, 0xff, 0xc0, 0x20, 0x0, 0x58, 0x9, 0x67, 0x18, 0x5, 0x91, 0x3c, 0xff, 0x86, 0x0, 0x0, 0x91, 0x3c, 0xff, 0xc0, 0x20, 0x0, 0x38, 0x9, 0x67, 0x18, 0x5, 0x81, 0x3a, 0xff, 0x86, 0x0, 0x0, 0x81, 0x39, 0xff, 0xc0, 0x20, 0x0, 0x48, 0x8, 0x80, 0xeb, 0x3, 0x69, 0x31, 0x49, 0x21, 0x39, 0x11, 0x59, 0x1, 0x80, 0x8d, 0x41, 0xc, 0x19, 0x90, 0xb8, 0x10, 0x72, 0xc1, 0x50, 0x81, 0x28, 0xff, 0xad, 0x7, 0xe0, 0x8, 0x0, 0xc0, 0x82, 0x11, 0x8a, 0xc7, 0x88, 0x1c, 0x30, 0xd8, 0x10, 0x7c, 0xf9, 0x4c, 0x8, 0xa8, 0xc, 0x50, 0xea, 0x10, 0x2c, 0xb, 0x67, 0x9e, 0x10, 0x90, 0xad, 0x30, 0xb, 0xfd, 0xf0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xa0, 0xa8, 0xc0, 0x46, 0x3, 0x0, 0x90, 0xae, 0x30, 0xb, 0xfe, 0xf0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xa0, 0xab, 0xc0, 0xd0, 0xde, 0x20, 0xc8, 0x2c, 0x40, 0xcc, 0x10, 0x67, 0x1c, 0xd, 0x90, 0x8c, 0x30, 0xb, 0x9c, 0x90, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x80, 0x8b, 0xc0, 0x67, 0x9d, 0x2, 0xa2, 0xc8, 0x40, 0x81, 0x11, 0xff, 0xe0, 0x8, 0x0, 0x81, 0x11, 0xff, 0x80, 0x8a, 0x10, 0x4c, 0x59, 0x97, 0x98, 0x1, 0x1d, 0xf0, 0x81, 0xf, 0xff, 0x46, 0xd0, 0xff, 0xf0, 0x41, 0x0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0xa, 0xff, 0x80, 0x82, 0x10, 0x91, 0x11, 0xff, 0x90, 0x88, 0xa0, 0x88, 0x8, 0x91, 0x10, 0xff, 0x97, 0x18, 0x6, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0xc, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x8, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x4, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x0, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x22, 0x61, 0x4, 0x32, 0x61, 0x5, 0x42, 0x61, 0x6, 0x52, 0x61, 0x7, 0x62, 0x61, 0x8, 0x72, 0x61, 0x9, 0x82, 0x61, 0xa, 0x92, 0x61, 0xb, 0xa2, 0x61, 0xc, 0xb2, 0x61, 0xd, 0xc2, 0x61, 0xe, 0xd2, 0x61, 0xf, 0xe2, 0x61, 0x10, 0xf2, 0x61, 0x11, 0x30, 0x3, 0x3, 0x32, 0x61, 0x12, 0x30, 0x0, 0x3, 0x32, 0x61, 0x15, 0x30, 0x1, 0x3, 0x32, 0x61, 0x16, 0x30, 0x2, 0x3, 0x32, 0x61, 0x17, 0x70, 0x3e, 0xe3, 0x32, 0x61, 0x18, 0x30, 0xc, 0x3, 0x32, 0x61, 0x19, 0x30, 0x4, 0x3, 0x32, 0x61, 0x1a, 0x30, 0x10, 0x3, 0x32, 0x61, 0x1b, 0x30, 0x11, 0x3, 0x32, 0x61, 0x1c, 0x30, 0x20, 0x3, 0x32, 0x61, 0x1d, 0x30, 0x21, 0x3, 0x32, 0x61, 0x1e, 0x30, 0x22, 0x3, 0x32, 0x61, 0x1f, 0x30, 0x23, 0x3, 0x32, 0x61, 0x20, 0xa0, 0x3e, 0xe3, 0x32, 0x61, 0x21, 0xb0, 0x3e, 0xe3, 0x32, 0x61, 0x22, 0xc0, 0x3e, 0xe3, 0x32, 0x61, 0x23, 0x80, 0x3e, 0xe3, 0x32, 0x61, 0x24, 0x90, 0x3e, 0xe3, 0x32, 0x61, 0x25, 0x3, 0x41, 0x26, 0x13, 0x41, 0x27, 0x23, 0x41, 0x28, 0x33, 0x41, 0x29, 0x43, 0x41, 0x2a, 0x53, 0x41, 0x2b, 0x63, 0x41, 0x2c, 0x73, 0x41, 0x2d, 0x83, 0x41, 0x2e, 0x93, 0x41, 0x2f, 0xa3, 0x41, 0x30, 0xb3, 0x41, 0x31, 0xc3, 0x41, 0x32, 0xd3, 0x41, 0x33, 0xe3, 0x41, 0x34, 0xf3, 0x41, 0x35, 0x2, 0x61, 0x36, 0x20, 0xe6, 0x3, 0x2, 0xa0, 0xf, 0x0, 0x32, 0x10, 0xf6, 0x33, 0x2, 0x32, 0xa0, 0x3, 0x1, 0xc8, 0xfe, 0x0, 0x33, 0x20, 0x30, 0xe6, 0x13, 0x0, 0xb1, 0x3, 0x12, 0xd1, 0x1, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x40, 0x80, 0x40, 0x12, 0xd1, 0xff, 0x20, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x36, 0x80, 0x0, 0x0, 0xf0, 0x41, 0x0, 0x3d, 0xf0, 0x32, 0x21, 0x12, 0x30, 0x3, 0x13, 0x32, 0x21, 0x15, 0x30, 0x0, 0x13, 0x32, 0x21, 0x16, 0x30, 0x1, 0x13, 0x32, 0x21, 0x17, 0x30, 0x2, 0x13, 0x32, 0x21, 0x18, 0x30, 0xe7, 0xf3, 0x32, 0x21, 0x19, 0x30, 0xc, 0x13, 0x32, 0x21, 0x1a, 0x30, 0x4, 0x13, 0x32, 0x21, 0x1b, 0x30, 0x10, 0x13, 0x32, 0x21, 0x1c, 0x30, 0x11, 0x13, 0x32, 0x21, 0x1d, 0x30, 0x20, 0x13, 0x32, 0x21, 0x1e, 0x30, 0x21, 0x13, 0x32, 0x21, 0x1f, 0x30, 0x22, 0x13, 0x32, 0x21, 0x20, 0x30, 0x23, 0x13, 0x32, 0x21, 0x21, 0x30, 0xea, 0xf3, 0x32, 0x21, 0x22, 0x30, 0xeb, 0xf3, 0x32, 0x21, 0x23, 0x30, 0xec, 0xf3, 0x32, 0x21, 0x24, 0x30, 0xe8, 0xf3, 0x32, 0x21, 0x25, 0x30, 0xe9, 0xf3, 0x3, 0x1, 0x26, 0x13, 0x1, 0x27, 0x23, 0x1, 0x28, 0x33, 0x1, 0x29, 0x43, 0x1, 0x2a, 0x53, 0x1, 0x2b, 0x63, 0x1, 0x2c, 0x73, 0x1, 0x2d, 0x83, 0x1, 0x2e, 0x93, 0x1, 0x2f, 0xa3, 0x1, 0x30, 0xb3, 0x1, 0x31, 0xc3, 0x1, 0x32, 0xd3, 0x1, 0x33, 0xe3, 0x1, 0x34, 0xf3, 0x1, 0x35, 0x22, 0x21, 0x4, 0x32, 0x21, 0x5, 0x42, 0x21, 0x6, 0x52, 0x21, 0x7, 0x62, 0x21, 0x8, 0x72, 0x21, 0x9, 0x82, 0x21, 0xa, 0x92, 0x21, 0xb, 0xa2, 0x21, 0xc, 0xb2, 0x21, 0xd, 0xc2, 0x21, 0xe, 0xd2, 0x21, 0xf, 0xe2, 0x21, 0x10, 0xf2, 0x21, 0x11, 0x80, 0x0, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xe6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xe8, 0x3, 0x2, 0x61, 0x13, 0x0, 0xee, 0x3, 0x2, 0x61, 0x14, 0x0, 0xb1, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd1, 0x3, 0x2, 0x61, 0x2, 0x85, 0xde, 0xff, 0x1, 0x79, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0x21, 0x13, 0x26, 0x46, 0x8, 0x10, 0x71, 0x20, 0x55, 0x28, 0x0, 0x46, 0x4, 0x0, 0x1, 0x74, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x1, 0x10, 0x71, 0x20, 0x95, 0x9d, 0xff, 0x85, 0xed, 0xff, 0x2, 0x21, 0x1, 0x0, 0xe6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x0, 0x30, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xe6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xe8, 0x3, 0x2, 0x61, 0x13, 0x0, 0xee, 0x3, 0x2, 0x61, 0x14, 0x0, 0xc0, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd7, 0x3, 0x2, 0x61, 0x2, 0x5, 0xd7, 0xff, 0x62, 0x21, 0x13, 0x10, 0x71, 0x20, 0x95, 0x21, 0x0, 0x5, 0xe8, 0xff, 0x2, 0x21, 0x1, 0x0, 0xe6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x0, 0x32, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc2, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb2, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd2, 0x3, 0x2, 0x61, 0x2, 0x45, 0xd2, 0xff, 0x1, 0x4a, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x2, 0x10, 0x71, 0x20, 0xd5, 0x92, 0xff, 0xc5, 0xe2, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc2, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb2, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x32, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc3, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb3, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd3, 0x3, 0x2, 0x61, 0x2, 0x5, 0xcd, 0xff, 0x1, 0x33, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x3, 0x10, 0x71, 0x20, 0x95, 0x8d, 0xff, 0x85, 0xdd, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc3, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb3, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x33, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc4, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb4, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd4, 0x3, 0x2, 0x61, 0x2, 0xc5, 0xc7, 0xff, 0x1, 0x21, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x4, 0x10, 0x71, 0x20, 0xd5, 0xc2, 0xff, 0x45, 0xd8, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc4, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb4, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc5, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb5, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd5, 0x3, 0x2, 0x61, 0x2, 0x85, 0xc2, 0xff, 0x1, 0xd, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x5, 0x10, 0x71, 0x20, 0x95, 0xbe, 0xff, 0x5, 0xd3, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc5, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb5, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb6, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd6, 0x3, 0x2, 0x61, 0x2, 0x45, 0xbd, 0xff, 0x1, 0xf9, 0xfd, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x6, 0x10, 0x71, 0x20, 0x55, 0xba, 0xff, 0xc5, 0xcd, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb6, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x36, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc7, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb7, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd7, 0x3, 0x2, 0x61, 0x2, 0x5, 0xb8, 0xff, 0x1, 0xe5, 0xfd, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x7, 0x10, 0x71, 0x20, 0x15, 0xb6, 0xff, 0x85, 0xc8, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc7, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb7, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x37, 0x0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x81, 0xbf, 0xfd, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40, 0xe4, 0x27, 0x8, 0x40}, + }, + { + .addr = 1073414144, + .size = 468, + .data = (uint8_t[]){0xe6, 0x13, 0x8, 0x40, 0xed, 0x14, 0x8, 0x40, 0x46, 0x15, 0x8, 0x40, 0xe6, 0x13, 0x8, 0x40, 0xab, 0x15, 0x8, 0x40, 0xed, 0x14, 0x8, 0x40, 0x1a, 0x16, 0x8, 0x40, 0x51, 0x16, 0x8, 0x40, 0xa1, 0x16, 0x8, 0x40, 0x0, 0x17, 0x8, 0x40, 0xa9, 0x1e, 0x8, 0x40, 0xc, 0x17, 0x8, 0x40, 0xa9, 0x1e, 0x8, 0x40, 0x3e, 0x17, 0x8, 0x40, 0xe6, 0x13, 0x8, 0x40, 0xed, 0x14, 0x8, 0x40, 0x46, 0x15, 0x8, 0x40, 0xe8, 0x17, 0x8, 0x40, 0x95, 0x1c, 0x8, 0x40, 0xde, 0x14, 0x8, 0x40, 0x16, 0x19, 0x8, 0x40, 0x69, 0x19, 0x8, 0x40, 0xa2, 0x15, 0x8, 0x40, 0xed, 0x14, 0x8, 0x40, 0x4e, 0x2b, 0x8, 0x40, 0xe, 0x29, 0x8, 0x40, 0x6, 0x2c, 0x8, 0x40, 0x6, 0x2c, 0x8, 0x40, 0x6, 0x2c, 0x8, 0x40, 0x39, 0x2b, 0x8, 0x40, 0x6, 0x2c, 0x8, 0x40, 0x6, 0x2c, 0x8, 0x40, 0x3f, 0x2b, 0x8, 0x40, 0x45, 0x2b, 0x8, 0x40, 0x4b, 0x2b, 0x8, 0x40, 0xc0, 0xdb, 0xdc, 0xdb, 0xdd, 0x0, 0x3a, 0x0, 0x3b, 0x0, 0x3c, 0x0, 0x3d, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x40, 0x0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x37, 0x6, 0x0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x88, 0xc0, 0x28, 0x0, 0x0, 0x0, 0x53, 0x0, 0x0, 0x1, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x5, 0x0, 0x6, 0x0, 0x7, 0x0, 0x8, 0x0, 0x9, 0x0, 0x45, 0x0, 0x45, 0x0, 0xc, 0x0, 0xd, 0x0, 0xe, 0x0, 0xf, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x1a, 0x0, 0x1b, 0x0, 0x1c, 0x0, 0x1d, 0x0, 0x1e, 0x0, 0x1f, 0x0, 0x20, 0x0, 0x21, 0x0, 0x22, 0x0, 0x23, 0x0, 0x24, 0x0, 0x25, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2a, 0x0, 0x2b, 0x0, 0x2c, 0x0, 0x2d, 0x0, 0x2e, 0x0, 0x2f, 0x0, 0x30, 0x0, 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0x37, 0x0, 0x38, 0x0, 0x39, 0x0, 0x3a, 0x0, 0x3b, 0x0, 0x3c, 0x0, 0x3d, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x40, 0x0, 0x41, 0x0, 0x42, 0x0, 0x43, 0x0, 0x44, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0}, + }, + }, + }, + + // esp32s2.json + { + .header = { + .entrypoint = 1073913140, + }, + .segments = { + { + .addr = 1073905664, + .size = 11416, + .data = (uint8_t[]){0x0, 0xc5, 0x49, 0x10, 0xd5, 0x49, 0x20, 0xe5, 0x49, 0x30, 0xf5, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x9, 0x10, 0xd5, 0x9, 0x20, 0xe5, 0x9, 0x30, 0xf5, 0x9, 0x0, 0x35, 0x0, 0x0, 0x0, 0x48, 0x3, 0xf0, 0x80, 0x40, 0x20, 0xe6, 0x3, 0x20, 0x38, 0x34, 0x40, 0x33, 0x30, 0x40, 0xd1, 0x3, 0x80, 0x33, 0x11, 0x30, 0x22, 0x30, 0x20, 0xe6, 0x13, 0x10, 0x20, 0x0, 0xf7, 0x74, 0xce, 0xf0, 0x80, 0x40, 0xe7, 0x78, 0x48, 0xf0, 0x80, 0x40, 0x86, 0x30, 0x0, 0xf0, 0x41, 0x0, 0x0, 0xc9, 0x49, 0x0, 0xd1, 0x9, 0x10, 0xd9, 0x49, 0x20, 0xe9, 0x49, 0x30, 0xf9, 0x49, 0x40, 0x80, 0x49, 0x50, 0x90, 0x49, 0x60, 0xa0, 0x49, 0x70, 0xb0, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc9, 0x9, 0x10, 0xd9, 0x9, 0x20, 0xe9, 0x9, 0x70, 0xd1, 0x9, 0x30, 0xf9, 0x9, 0x40, 0x87, 0x9, 0x50, 0x97, 0x9, 0x60, 0xa7, 0x9, 0x70, 0xb7, 0x9, 0x0, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0x49, 0x0, 0xd1, 0x9, 0x10, 0xdd, 0x49, 0x20, 0xed, 0x49, 0x30, 0xfd, 0x49, 0x40, 0x40, 0x49, 0x50, 0x50, 0x49, 0x60, 0x60, 0x49, 0x70, 0x70, 0x49, 0x80, 0x80, 0x49, 0x90, 0x90, 0x49, 0xa0, 0xa0, 0x49, 0xb0, 0xb0, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0x9, 0x10, 0xdd, 0x9, 0x20, 0xed, 0x9, 0xb0, 0xd1, 0x9, 0x30, 0xfd, 0x9, 0x40, 0x4b, 0x9, 0x50, 0x5b, 0x9, 0x60, 0x6b, 0x9, 0x70, 0x7b, 0x9, 0x80, 0x8b, 0x9, 0x90, 0x9b, 0x9, 0xa0, 0xab, 0x9, 0xb0, 0xbb, 0x9, 0x0, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd2, 0x13, 0x85, 0x78, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd3, 0x13, 0xc5, 0x79, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd4, 0x13, 0x5, 0x7b, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd5, 0x13, 0x45, 0x7c, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd6, 0x13, 0x85, 0x7d, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd7, 0x13, 0xc5, 0x7e, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x0, 0xe8, 0x3, 0x26, 0x50, 0x42, 0x5, 0x53, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x0, 0xe8, 0x3, 0x26, 0x50, 0x2, 0x5, 0x4f, 0x2, 0x5, 0xd0, 0xff, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x5, 0x53, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8c, 0x72, 0x1, 0x40, 0x0, 0x75, 0x1, 0x40, 0x30, 0x88, 0x2, 0x40, 0xa8, 0x89, 0x2, 0x40, 0xbc, 0x89, 0x2, 0x40, 0x0, 0x10, 0x0, 0x0, 0xcc, 0x71, 0x1, 0x40, 0xe0, 0x77, 0x1, 0x40, 0x0, 0x0, 0x1, 0x0, 0xff, 0xff, 0x0, 0x0, 0x6c, 0x71, 0x1, 0x40, 0xc, 0x71, 0x1, 0x40, 0x88, 0x8a, 0x2, 0x40, 0x8c, 0xc4, 0xfb, 0x3f, 0xf0, 0x8a, 0x2, 0x40, 0x8f, 0xc4, 0xfb, 0x3f, 0x8d, 0xc4, 0xfb, 0x3f, 0xc, 0x53, 0x0, 0x40, 0x0, 0x44, 0x0, 0x0, 0x78, 0xcd, 0xfb, 0x3f, 0x4, 0x44, 0x0, 0x0, 0x8, 0x44, 0x0, 0x0, 0x1c, 0x0, 0x40, 0x3f, 0x0, 0x0, 0x80, 0x3, 0x0, 0x0, 0x40, 0x3f, 0x76, 0xcd, 0xfb, 0x3f, 0x8c, 0x0, 0x4c, 0x3f, 0xff, 0xf3, 0xff, 0xff, 0x18, 0x0, 0x4c, 0x3f, 0x84, 0x80, 0x40, 0x3f, 0x0, 0x38, 0x0, 0x0, 0xc0, 0x80, 0x40, 0x3f, 0x4b, 0x4c, 0x4b, 0x4c, 0x60, 0x2f, 0x1, 0x40, 0x40, 0x0, 0x4c, 0x3f, 0x48, 0x0, 0x4c, 0x3f, 0x10, 0x0, 0x40, 0x3f, 0x11, 0x1, 0x4, 0x0, 0xc, 0x0, 0x40, 0x3f, 0x2, 0x70, 0x0, 0x0, 0x20, 0x0, 0x40, 0x3f, 0x0, 0x0, 0x0, 0x8, 0x14, 0x0, 0x40, 0x3f, 0x1c, 0xab, 0x2, 0x40, 0x3c, 0xa0, 0x2, 0x40, 0x92, 0xc4, 0xfb, 0x3f, 0x0, 0x20, 0x0, 0x0, 0x94, 0x20, 0x4c, 0x3f, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x4, 0x0, 0xff, 0xff, 0xfb, 0xff, 0x0, 0x0, 0x2, 0x0, 0xff, 0xff, 0xfd, 0xff, 0x88, 0xd8, 0x0, 0x40, 0x60, 0xcd, 0xfb, 0x3f, 0xe0, 0x28, 0x0, 0x0, 0xa0, 0xd, 0x0, 0x0, 0x3c, 0xad, 0x1, 0x40, 0xa8, 0xab, 0x1, 0x40, 0xa0, 0xe4, 0x0, 0x40, 0x38, 0x40, 0x0, 0x60, 0x4, 0x70, 0x1, 0x40, 0x0, 0x0, 0x0, 0x1, 0xc0, 0x86, 0x2, 0x40, 0x3e, 0x29, 0x0, 0x0, 0x88, 0x89, 0x2, 0x40, 0x10, 0x89, 0x2, 0x40, 0x0, 0xff, 0x0, 0x0, 0x8c, 0xc4, 0xfb, 0x3f, 0x0, 0xc4, 0xfb, 0x3f, 0x4c, 0xc4, 0xfb, 0x3f, 0x68, 0x0, 0x1, 0x40, 0xa0, 0x87, 0x2, 0x40, 0x6c, 0x52, 0x0, 0x40, 0xc, 0x8a, 0x2, 0x40, 0x1, 0x10, 0x0, 0x0, 0xa4, 0x86, 0x2, 0x40, 0x8c, 0x52, 0x0, 0x40, 0x70, 0x74, 0x1, 0x40, 0xec, 0x70, 0x1, 0x40, 0x98, 0x20, 0x1, 0x40, 0x0, 0x88, 0x2, 0x40, 0x98, 0x3a, 0x0, 0x0, 0x14, 0x0, 0x0, 0x60, 0xf0, 0xff, 0xff, 0x0, 0x84, 0x29, 0x1, 0x40, 0x10, 0x27, 0x0, 0x0, 0x78, 0x76, 0x1, 0x40, 0x94, 0x76, 0x1, 0x40, 0x84, 0x91, 0xfc, 0x3f, 0x0, 0x80, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0x84, 0x11, 0xfc, 0x3f, 0x0, 0x30, 0x0, 0x40, 0x88, 0x87, 0x2, 0x40, 0x0, 0xf0, 0xff, 0xff, 0x0, 0x40, 0x0, 0x0, 0x88, 0x6e, 0x1, 0x40, 0x70, 0x99, 0x0, 0x0, 0x18, 0x99, 0x0, 0x0, 0xa3, 0x98, 0x0, 0x0, 0xa2, 0x98, 0x0, 0x0, 0xa1, 0x98, 0x0, 0x0, 0xa0, 0x98, 0x0, 0x0, 0x99, 0x98, 0x0, 0x0, 0x98, 0x98, 0x0, 0x0, 0x97, 0x98, 0x0, 0x0, 0x96, 0x98, 0x0, 0x0, 0x95, 0x98, 0x0, 0x0, 0x94, 0x98, 0x0, 0x0, 0x9b, 0x98, 0x0, 0x0, 0x9a, 0x98, 0x0, 0x0, 0x92, 0x98, 0x0, 0x0, 0x9c, 0x98, 0x0, 0x0, 0x9f, 0x98, 0x0, 0x0, 0x9e, 0x98, 0x0, 0x0, 0x9d, 0x98, 0x0, 0x0, 0x93, 0x98, 0x0, 0x0, 0xa4, 0x98, 0x0, 0x0, 0xa8, 0x98, 0x0, 0x0, 0x0, 0x99, 0x0, 0x0, 0x0, 0x20, 0x4c, 0x3f, 0xc8, 0xc4, 0xfb, 0x3f, 0x48, 0xc5, 0xfb, 0x3f, 0xbc, 0x80, 0x40, 0x3f, 0x0, 0x30, 0xfe, 0x3f, 0x0, 0xe0, 0xf9, 0x3f, 0x0, 0xe0, 0xf9, 0x3f, 0xc, 0xa3, 0x2, 0x40, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x50, 0x88, 0xa1, 0xfc, 0x3f, 0xbe, 0xba, 0xad, 0xde, 0x6c, 0x9d, 0x2, 0x40, 0xa0, 0xa0, 0x2, 0x40, 0xd0, 0x9c, 0x2, 0x40, 0xf4, 0x9c, 0x2, 0x40, 0x74, 0x80, 0x40, 0x3f, 0x0, 0x0, 0x0, 0x20, 0xff, 0xfe, 0xff, 0x3b, 0x68, 0xf0, 0x41, 0x3f, 0xa8, 0xf0, 0x41, 0x3f, 0xff, 0x8f, 0x0, 0x80, 0x90, 0x5f, 0x1, 0x0, 0xb3, 0x81, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x9, 0x3d, 0x6c, 0xf0, 0x41, 0x3f, 0xff, 0xff, 0xff, 0x7f, 0x40, 0x42, 0xf, 0x0, 0xec, 0xa2, 0x2, 0x40, 0x54, 0x80, 0x40, 0x3f, 0xac, 0x80, 0x40, 0x3f, 0xa1, 0x3a, 0xd8, 0x50, 0x94, 0x80, 0x40, 0x3f, 0xff, 0xef, 0xff, 0x7f, 0x64, 0xf0, 0x41, 0x3f, 0x48, 0xf0, 0x41, 0x3f, 0x64, 0x0, 0x42, 0x3f, 0x48, 0x0, 0x42, 0x3f, 0x0, 0x0, 0x0, 0x60, 0x20, 0xa3, 0x2, 0x40, 0x28, 0xa3, 0x2, 0x40, 0x60, 0xcd, 0xfb, 0x3f, 0x88, 0x91, 0xfc, 0x3f, 0x0, 0x80, 0x2, 0x40, 0xa8, 0x9d, 0x2, 0x40, 0x24, 0x8b, 0x2, 0x40, 0xe8, 0xa0, 0x2, 0x40, 0x36, 0x41, 0x0, 0x81, 0x56, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xe0, 0x8, 0x0, 0xc, 0x2, 0x27, 0x1a, 0x2, 0x22, 0xa0, 0x63, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x82, 0x2, 0x0, 0x92, 0x2, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x2, 0x0, 0x99, 0x11, 0xa2, 0x2, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0x82, 0x2, 0x4, 0x92, 0x2, 0x5, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x6, 0x0, 0x99, 0x11, 0xb2, 0x2, 0x7, 0x80, 0xbb, 0x1, 0x90, 0x9b, 0x20, 0x80, 0xb9, 0x20, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xc2, 0x2, 0xb, 0x80, 0xcc, 0x1, 0x90, 0x9c, 0x20, 0x80, 0xc9, 0x20, 0x82, 0x2, 0xc, 0x92, 0x2, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xe, 0x0, 0x99, 0x11, 0xd2, 0x2, 0xf, 0x80, 0xdd, 0x1, 0x90, 0x9d, 0x20, 0x80, 0xd9, 0x20, 0x82, 0x2, 0x10, 0x92, 0x2, 0x11, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x12, 0x0, 0x99, 0x11, 0xe2, 0x2, 0x13, 0x80, 0xee, 0x1, 0x90, 0x9e, 0x20, 0x80, 0xe9, 0x20, 0x82, 0x2, 0x14, 0x92, 0x2, 0x15, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x16, 0x0, 0x99, 0x11, 0xf2, 0x2, 0x17, 0x80, 0xff, 0x1, 0x90, 0x9f, 0x20, 0x80, 0xf9, 0x20, 0x81, 0x23, 0xff, 0xe0, 0x8, 0x0, 0xc, 0x2, 0x27, 0x1a, 0x2, 0x22, 0xaf, 0xc4, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xc, 0xb, 0x81, 0x1e, 0xff, 0xad, 0x2, 0xcd, 0x3, 0xdd, 0x4, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x71, 0x1a, 0xff, 0xad, 0x2, 0xe0, 0x7, 0x0, 0xc, 0xac, 0x61, 0x18, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x6, 0x0, 0x82, 0x3, 0xa, 0x92, 0x3, 0xb, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x3, 0xc, 0x0, 0x99, 0x11, 0xa2, 0x3, 0xd, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xb9, 0x20, 0x82, 0x3, 0xe, 0x92, 0x3, 0xf, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x3, 0x10, 0x0, 0x99, 0x11, 0xa2, 0x3, 0x11, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xc9, 0x20, 0xad, 0x2, 0xe0, 0x6, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x71, 0x2, 0xff, 0xad, 0x2, 0xe0, 0x7, 0x0, 0xc, 0x8c, 0x61, 0x0, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x6, 0x0, 0xad, 0x2, 0xbd, 0x4, 0xcd, 0x5, 0xe0, 0x6, 0x0, 0x8b, 0xb3, 0xc, 0x2c, 0xad, 0x2, 0xe0, 0x6, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x36, 0xa1, 0x0, 0x49, 0x81, 0x39, 0x71, 0x88, 0x52, 0x59, 0x91, 0x89, 0x11, 0x50, 0x58, 0x63, 0x88, 0x32, 0x89, 0x21, 0x8a, 0x65, 0x88, 0x22, 0x89, 0x61, 0x29, 0xa1, 0x28, 0x42, 0x81, 0xf4, 0xfe, 0x89, 0x51, 0x71, 0xf4, 0xfe, 0x1c, 0x8, 0x89, 0x41, 0x81, 0xf4, 0xfe, 0x89, 0x31, 0x3c, 0x68, 0x89, 0x1, 0x41, 0xec, 0xfe, 0x67, 0xb2, 0x38, 0x70, 0x82, 0x10, 0x56, 0xb8, 0x1, 0x88, 0x51, 0x8a, 0x32, 0x88, 0x61, 0x37, 0x38, 0x12, 0x88, 0x41, 0x0, 0x8, 0x40, 0x20, 0xa0, 0x91, 0x88, 0x31, 0xe0, 0x8, 0x0, 0x16, 0xa, 0x1, 0x46, 0x1f, 0x0, 0x20, 0xac, 0x41, 0x81, 0xe6, 0xfe, 0xe0, 0x8, 0x0, 0x56, 0x1a, 0x7, 0x4a, 0x32, 0x88, 0xa1, 0x39, 0x48, 0x2d, 0x3, 0x67, 0x32, 0xc6, 0xc, 0x2, 0x81, 0xde, 0xfe, 0x89, 0x61, 0x82, 0xaf, 0xc4, 0x89, 0x51, 0x81, 0xda, 0xfe, 0x89, 0x41, 0x3d, 0x2, 0x78, 0x21, 0x16, 0x85, 0x3, 0x88, 0x91, 0x37, 0x38, 0x4d, 0x40, 0x65, 0x63, 0x88, 0x81, 0x3a, 0xb8, 0x88, 0x71, 0x16, 0x88, 0x0, 0xad, 0x7, 0xcd, 0x6, 0x88, 0x61, 0x46, 0x1, 0x0, 0xad, 0x7, 0xcd, 0x6, 0x88, 0x41, 0xe0, 0x8, 0x0, 0x8d, 0x2, 0x27, 0x1a, 0x1, 0x88, 0x51, 0x98, 0xa1, 0x82, 0x49, 0x1d, 0x6a, 0x77, 0x3a, 0x36, 0x60, 0x55, 0xc0, 0x56, 0x65, 0xfc, 0x88, 0x21, 0x3a, 0x88, 0x98, 0xa1, 0x89, 0x39, 0x88, 0x11, 0x30, 0x88, 0x73, 0x30, 0x88, 0xc0, 0x89, 0x59, 0xc, 0x2, 0x1d, 0xf0, 0x28, 0x1, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x36, 0x61, 0x0, 0x49, 0x21, 0x39, 0x11, 0x61, 0xc6, 0xfe, 0x52, 0xa0, 0xff, 0x72, 0xa0, 0xc0, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x77, 0x98, 0xf4, 0x79, 0x1, 0xc, 0x8, 0x89, 0x31, 0x72, 0xa0, 0xdb, 0x42, 0xa0, 0xdc, 0x32, 0xa0, 0xdd, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x77, 0x98, 0x12, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x47, 0x18, 0xf, 0x37, 0x98, 0xe6, 0xad, 0x7, 0x46, 0x2, 0x0, 0x98, 0x1, 0x97, 0x18, 0x19, 0x46, 0x0, 0x0, 0xa8, 0x1, 0x88, 0x21, 0x98, 0x31, 0x87, 0xb9, 0x18, 0x88, 0x11, 0x9a, 0x88, 0xa2, 0x48, 0x0, 0x1b, 0x99, 0x99, 0x31, 0x86, 0xf0, 0xff, 0x88, 0x21, 0x38, 0x31, 0x37, 0x38, 0x3, 0x28, 0x11, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x71, 0xa0, 0xfe, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x81, 0x9f, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xe0, 0x8, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xb1, 0xa2, 0xfe, 0xc, 0x1c, 0x81, 0xa2, 0xfe, 0xad, 0x2, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x81, 0x0, 0x52, 0xa0, 0xc0, 0x81, 0x9f, 0xfe, 0x89, 0x21, 0xc, 0x28, 0x89, 0x31, 0x71, 0x9b, 0xfe, 0x62, 0xa0, 0xdb, 0x81, 0x9a, 0xfe, 0x89, 0x11, 0xc, 0x18, 0x89, 0x1, 0x16, 0xc4, 0x2, 0x82, 0x3, 0x0, 0x57, 0x18, 0x9, 0x67, 0x98, 0xf, 0xad, 0x2, 0xb8, 0x11, 0xc6, 0x0, 0x0, 0xad, 0x2, 0xb8, 0x21, 0xc8, 0x31, 0x46, 0x2, 0x0, 0x82, 0x41, 0x13, 0xb2, 0xc1, 0x13, 0xad, 0x2, 0xc8, 0x1, 0xe0, 0x7, 0x0, 0x1b, 0x33, 0xb, 0x44, 0x56, 0x24, 0xfd, 0x1d, 0xf0, 0x36, 0x81, 0x0, 0xa2, 0xc1, 0x10, 0x81, 0x8c, 0xfe, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x82, 0x1, 0x10, 0x89, 0x31, 0x82, 0x1, 0x11, 0x89, 0x21, 0x82, 0x1, 0x12, 0x89, 0x11, 0xb2, 0x1, 0x13, 0xc2, 0x1, 0x14, 0xd2, 0x1, 0x15, 0xe2, 0x1, 0x16, 0xf2, 0x1, 0x17, 0x72, 0x1, 0x18, 0x62, 0x1, 0x19, 0x52, 0x1, 0x1a, 0x42, 0x1, 0x1b, 0x32, 0x1, 0x1c, 0x92, 0x1, 0x1d, 0x82, 0x1, 0x1e, 0xa2, 0x1, 0x1f, 0xa2, 0x42, 0xf, 0x82, 0x42, 0xe, 0x92, 0x42, 0xd, 0x32, 0x42, 0xc, 0x42, 0x42, 0xb, 0x52, 0x42, 0xa, 0x62, 0x42, 0x9, 0x72, 0x42, 0x8, 0xf2, 0x42, 0x7, 0xe2, 0x42, 0x6, 0xd2, 0x42, 0x5, 0xc2, 0x42, 0x4, 0xb2, 0x42, 0x3, 0x88, 0x11, 0x82, 0x42, 0x2, 0x88, 0x21, 0x82, 0x42, 0x1, 0x88, 0x31, 0x82, 0x42, 0x0, 0x1d, 0xf0, 0x36, 0x41, 0x0, 0x56, 0xb2, 0x5, 0xa1, 0x6e, 0xfe, 0x81, 0x6e, 0xfe, 0xaa, 0x98, 0xb1, 0x6e, 0xfe, 0xba, 0xf8, 0xb1, 0x6e, 0xfe, 0xba, 0xb8, 0xd2, 0xa0, 0xff, 0xe0, 0x65, 0x0, 0x78, 0x9, 0x68, 0xf, 0xc2, 0xb, 0x0, 0xe0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x67, 0x97, 0x5, 0xd0, 0xcc, 0x10, 0x16, 0x6c, 0xfe, 0xc0, 0x65, 0x0, 0xe8, 0x9, 0xf8, 0xf, 0xf7, 0x9e, 0x8, 0xf2, 0xb, 0x0, 0xd0, 0xdf, 0x10, 0x16, 0xad, 0x1, 0xc, 0xd, 0xd2, 0x4b, 0x0, 0x1b, 0xbe, 0xa7, 0x1b, 0x1, 0xdd, 0xb, 0xd9, 0x9, 0xea, 0x88, 0x22, 0x8, 0x0, 0xc0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x56, 0x72, 0x2, 0x4a, 0x83, 0x91, 0x58, 0xfe, 0xa1, 0x58, 0xfe, 0xb1, 0x58, 0xfe, 0x87, 0x13, 0x17, 0xc0, 0x20, 0x0, 0xc8, 0x9, 0xa0, 0xcc, 0x10, 0x56, 0x4c, 0xff, 0xc2, 0x3, 0x0, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0x1b, 0x33, 0x87, 0x93, 0xe7, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x98, 0xfe, 0x80, 0x81, 0xc0, 0x10, 0x18, 0x0, 0x80, 0x65, 0x0, 0x91, 0x4c, 0xfe, 0xa2, 0x9, 0x0, 0x16, 0x2a, 0x0, 0x6, 0xe0, 0x3, 0xc, 0x16, 0x62, 0x49, 0x0, 0x80, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x81, 0x47, 0xfe, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x46, 0xfe, 0xa0, 0x99, 0x10, 0xa2, 0xa4, 0x0, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x43, 0xfe, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x7c, 0x8a, 0xa0, 0x99, 0x10, 0xc, 0x64, 0x40, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x3e, 0xfe, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x3d, 0xfe, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x3b, 0xfe, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x91, 0x3a, 0xfe, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x39, 0xfe, 0xe0, 0x8, 0x0, 0x82, 0xa, 0x18, 0x66, 0x28, 0x2, 0xc6, 0xc4, 0x3, 0x80, 0x65, 0x0, 0x91, 0x36, 0xfe, 0xc0, 0x20, 0x0, 0xa8, 0x9, 0xc, 0x4b, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0x91, 0x32, 0xfe, 0xc0, 0x20, 0x0, 0xa8, 0x9, 0x7c, 0xbb, 0xb0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0x80, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x81, 0x2d, 0xfe, 0x91, 0x2e, 0xfe, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x51, 0x2d, 0xfe, 0xc, 0x9, 0xc0, 0x20, 0x0, 0x99, 0x5, 0xa1, 0x2b, 0xfe, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0x99, 0x5, 0x81, 0x29, 0xfe, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0xb1, 0x28, 0xfe, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xa1, 0x26, 0xfe, 0xb2, 0xa2, 0xb6, 0xc0, 0x20, 0x0, 0xb9, 0xa, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0xc, 0xcb, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x7c, 0xdb, 0xb0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0xb2, 0xaf, 0xcf, 0xb0, 0xaa, 0x10, 0x1c, 0xb, 0xb2, 0x61, 0x21, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xa1, 0x17, 0xfe, 0xb1, 0x17, 0xfe, 0xc0, 0x20, 0x0, 0xb2, 0x6a, 0x25, 0x1c, 0x6a, 0x2c, 0x5c, 0xa7, 0x19, 0xe, 0xb1, 0x14, 0xfe, 0x9a, 0xbb, 0xb2, 0x1b, 0x0, 0x2b, 0x99, 0xc7, 0x9b, 0xef, 0xc, 0xa6, 0x91, 0x11, 0xfe, 0xa0, 0xeb, 0x3, 0x90, 0x9a, 0x10, 0x16, 0x29, 0x0, 0xc6, 0x8f, 0x3, 0x91, 0xf, 0xfe, 0xc0, 0x20, 0x0, 0x69, 0x9, 0xc, 0x17, 0x0, 0x16, 0x40, 0x0, 0x97, 0xa1, 0xa0, 0xe4, 0x3, 0x90, 0x9a, 0x20, 0xc, 0x3, 0xad, 0x3, 0xa0, 0xe4, 0x61, 0xa0, 0x99, 0x20, 0x10, 0x20, 0x0, 0x90, 0xe4, 0x13, 0x10, 0x20, 0x0, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x4, 0xfe, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x1, 0xfe, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xfe, 0xfd, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xfb, 0xfd, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xf8, 0xfd, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc, 0xfa, 0x61, 0xf6, 0xfd, 0xa9, 0xb1, 0xe0, 0x6, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x5, 0x70, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x5, 0x80, 0x65, 0x0, 0xa1, 0xf1, 0xfd, 0x92, 0xa, 0x14, 0x56, 0x69, 0x0, 0xc, 0x1b, 0xb2, 0x4a, 0x14, 0x3d, 0xa, 0x80, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x16, 0x29, 0x0, 0x6, 0x64, 0x3, 0x69, 0xc1, 0x42, 0x61, 0x18, 0xc, 0xa8, 0x82, 0x43, 0x12, 0xc, 0x6, 0x62, 0x43, 0x10, 0xc, 0x28, 0x82, 0x61, 0x1c, 0x82, 0x53, 0x0, 0x41, 0xe5, 0xfd, 0x51, 0xe5, 0xfd, 0x81, 0xe6, 0xfd, 0x82, 0x61, 0x28, 0x2d, 0x6, 0x82, 0xa0, 0xb0, 0x47, 0x12, 0x18, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x2a, 0xa8, 0xbd, 0x6, 0xcd, 0x5, 0x82, 0x21, 0x28, 0xe0, 0x8, 0x0, 0x5a, 0x22, 0x6, 0xf8, 0xff, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x52, 0xc8, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x41, 0xd5, 0xfd, 0x81, 0xd7, 0xfd, 0xad, 0x5, 0xcd, 0x4, 0x82, 0x61, 0x19, 0xe0, 0x8, 0x0, 0x81, 0xd5, 0xfd, 0xe0, 0x8, 0x0, 0x81, 0xd5, 0xfd, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x1c, 0xc9, 0x90, 0x88, 0x10, 0xc, 0x89, 0x97, 0x18, 0x1, 0x7d, 0xa, 0xc, 0x8, 0x82, 0x61, 0x20, 0x87, 0x1a, 0x1, 0x7d, 0xa, 0x81, 0xce, 0xfd, 0xad, 0x7, 0x22, 0x21, 0x20, 0xbd, 0x2, 0x82, 0x61, 0x17, 0xe0, 0x8, 0x0, 0x81, 0x96, 0xfd, 0x92, 0xa0, 0xc4, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x82, 0xa1, 0x0, 0x92, 0xa0, 0xc0, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0x8c, 0xfd, 0x92, 0xa0, 0xbc, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0x8b, 0xfd, 0x92, 0xa0, 0xb8, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0xbe, 0xfd, 0x92, 0xa0, 0xb4, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0x29, 0x8, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x81, 0xb7, 0xfd, 0x89, 0xa1, 0xe0, 0x8, 0x0, 0x32, 0x61, 0x2a, 0x22, 0x61, 0x29, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0x72, 0xc8, 0x0, 0x8b, 0xa7, 0x5c, 0x6c, 0xbd, 0x2, 0x62, 0x21, 0x28, 0xe0, 0x6, 0x0, 0xa2, 0xc7, 0x5e, 0xbd, 0x5, 0xcd, 0x4, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0x81, 0xac, 0xfd, 0x8a, 0xa7, 0xc2, 0xa1, 0xcd, 0xbd, 0x2, 0xe0, 0x6, 0x0, 0x4c, 0x98, 0x92, 0xa0, 0xb3, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0x18, 0x92, 0xa0, 0xb2, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0x88, 0x92, 0xa0, 0xb1, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0xf8, 0x92, 0xa0, 0xb0, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0x4c, 0x81, 0x99, 0xfd, 0xad, 0x2, 0x82, 0x61, 0x1a, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc1, 0x65, 0xfd, 0xbd, 0x2, 0xc2, 0x61, 0x1b, 0xe0, 0x6, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x8b, 0x98, 0x99, 0x91, 0x2b, 0x88, 0x89, 0x81, 0x81, 0xae, 0xfd, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x1b, 0x88, 0x89, 0x61, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x1b, 0x88, 0x89, 0x51, 0x82, 0xc7, 0x1e, 0x89, 0x71, 0x81, 0x85, 0xfd, 0x82, 0x61, 0x1d, 0xa2, 0x21, 0x29, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc2, 0x21, 0x1b, 0x82, 0x21, 0x1d, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0xed, 0xb, 0xf6, 0x8e, 0x2, 0xc6, 0xe9, 0x2, 0x82, 0x2, 0x0, 0x92, 0x2, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x2, 0x0, 0x99, 0x11, 0xa2, 0x2, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x69, 0x20, 0x82, 0x2, 0x4, 0x92, 0x2, 0x5, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x6, 0x0, 0x99, 0x11, 0xa2, 0x2, 0x7, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x1c, 0x87, 0x0, 0x17, 0x40, 0x60, 0x98, 0x81, 0xa1, 0x6c, 0xfd, 0xa0, 0xa6, 0x10, 0x66, 0xfa, 0x2, 0xc6, 0xd5, 0x2, 0xb2, 0x21, 0x20, 0xa1, 0x89, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x88, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x87, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x86, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x85, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x84, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x83, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x82, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x81, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa2, 0x21, 0x1c, 0xc1, 0x7f, 0xfd, 0xca, 0xc1, 0xa2, 0x4c, 0x0, 0xa1, 0x7e, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x7d, 0xfd, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xc, 0x15, 0xa1, 0x7c, 0xfd, 0xaa, 0xa1, 0x52, 0x4a, 0x0, 0x31, 0x4e, 0xfd, 0xa1, 0x7a, 0xfd, 0xaa, 0xa1, 0x32, 0x4a, 0x0, 0x0, 0x7, 0x40, 0x30, 0xa0, 0x91, 0xb1, 0x77, 0xfd, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0xa2, 0x21, 0x21, 0x0, 0xa, 0x40, 0x30, 0xa0, 0x91, 0xb1, 0x74, 0xfd, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0x30, 0xa8, 0x41, 0xb1, 0x72, 0xfd, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0xa1, 0x71, 0xfd, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0xa2, 0xa0, 0xff, 0xa2, 0x61, 0x27, 0xa0, 0xf9, 0x10, 0xa2, 0xcf, 0xfe, 0x1c, 0x2b, 0x92, 0xa0, 0xc0, 0x92, 0x61, 0x23, 0x92, 0xa0, 0xc6, 0xc1, 0x3d, 0xfd, 0xc2, 0x61, 0x26, 0xc1, 0x3a, 0xfd, 0xc2, 0x61, 0x22, 0xc1, 0x3b, 0xfd, 0xc2, 0x61, 0x1f, 0xd1, 0x3a, 0xfd, 0xc, 0x3c, 0xc2, 0x61, 0x1e, 0xc1, 0x3a, 0xfd, 0xc2, 0x61, 0x25, 0xc1, 0x3a, 0xfd, 0xc2, 0x61, 0x24, 0xa7, 0xbb, 0x2, 0x6, 0x3d, 0x0, 0xb2, 0xa0, 0xc8, 0xc1, 0x2e, 0xfd, 0xc0, 0xaa, 0xa0, 0xa8, 0xa, 0xc1, 0x38, 0xfd, 0xc, 0xb4, 0xa0, 0xa, 0x0, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0x77, 0xbe, 0x2, 0x86, 0xd4, 0x0, 0x82, 0x2, 0x17, 0x82, 0x61, 0x27, 0x82, 0x2, 0x16, 0x82, 0x61, 0x25, 0x82, 0x2, 0x14, 0x82, 0x61, 0x24, 0x82, 0x2, 0x15, 0x82, 0x61, 0x23, 0xd2, 0x2, 0xb, 0xe2, 0x2, 0xa, 0xbd, 0xf, 0xf2, 0x2, 0x8, 0x72, 0x2, 0x9, 0x62, 0x2, 0xf, 0x52, 0x2, 0xe, 0x42, 0x2, 0xc, 0x32, 0x2, 0xd, 0xc2, 0x2, 0x13, 0xa2, 0x2, 0x12, 0x92, 0x2, 0x10, 0x22, 0x2, 0x11, 0xc, 0x8, 0x82, 0x51, 0x61, 0x82, 0x51, 0x62, 0xc, 0x18, 0x82, 0x41, 0xc0, 0x80, 0x82, 0x11, 0x90, 0x88, 0x20, 0x0, 0x9a, 0x11, 0x80, 0xac, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xc9, 0x20, 0x80, 0x83, 0x11, 0x40, 0x88, 0x20, 0x42, 0x21, 0x26, 0x0, 0x95, 0x11, 0x80, 0xa6, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xc0, 0x88, 0x82, 0x82, 0x61, 0x2f, 0x80, 0x87, 0x11, 0xf0, 0x88, 0x20, 0xfd, 0xb, 0x0, 0x9e, 0x11, 0x80, 0xad, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x82, 0x61, 0x2e, 0x92, 0x21, 0x23, 0x80, 0x99, 0x11, 0xa2, 0x21, 0x24, 0xa0, 0x99, 0x20, 0xa2, 0x21, 0x25, 0x0, 0xaa, 0x11, 0xb2, 0x21, 0x27, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0x92, 0x61, 0x2c, 0x9a, 0x88, 0x82, 0x61, 0x2b, 0x81, 0x14, 0xfd, 0x80, 0x89, 0x10, 0x82, 0x61, 0x2d, 0x26, 0xbf, 0x5, 0x26, 0x2f, 0x2, 0x46, 0xa7, 0x0, 0x81, 0x10, 0xfd, 0xc7, 0x38, 0x2, 0x46, 0xc7, 0x1, 0xa2, 0xa0, 0xc2, 0x6, 0x9f, 0x0, 0xa2, 0xaf, 0x30, 0xaa, 0xaf, 0xb1, 0xf1, 0xfc, 0xb0, 0xaa, 0xa0, 0xa8, 0xa, 0xa0, 0xa, 0x0, 0x81, 0xf7, 0xfc, 0xe0, 0x8, 0x0, 0x42, 0x21, 0x26, 0x16, 0x2a, 0x27, 0xa2, 0xa0, 0xc4, 0x86, 0x96, 0x0, 0x77, 0xbe, 0x2, 0x86, 0x93, 0x0, 0xad, 0x6, 0x42, 0x21, 0x26, 0x66, 0x1f, 0x2, 0x46, 0x92, 0x0, 0xb2, 0x1, 0xc0, 0xad, 0x9, 0x16, 0x1b, 0x24, 0x72, 0xc2, 0x18, 0xa2, 0xa0, 0xef, 0x92, 0xce, 0xe8, 0x16, 0x69, 0x1, 0xbd, 0x7, 0xcd, 0x9, 0xd2, 0xb, 0x0, 0xa0, 0xad, 0x30, 0x1b, 0xbb, 0xb, 0xcc, 0x56, 0x2c, 0xff, 0xb2, 0x21, 0x27, 0xb0, 0xaa, 0x10, 0xb2, 0x2, 0x8, 0xc2, 0x2, 0x9, 0x80, 0xcc, 0x11, 0xb0, 0xbc, 0x20, 0xc2, 0x2, 0xa, 0x0, 0xcc, 0x11, 0xd2, 0x2, 0xb, 0x80, 0xdd, 0x1, 0xc0, 0xcd, 0x20, 0xb0, 0x5c, 0x20, 0x97, 0x15, 0x2, 0x86, 0xc5, 0x1, 0x87, 0x1a, 0x2, 0x86, 0xc5, 0x1, 0x6d, 0xe, 0xa2, 0x21, 0x29, 0x81, 0xf9, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x2d, 0xf, 0xe0, 0x4, 0x0, 0x9d, 0x2, 0x81, 0xe3, 0xfc, 0x82, 0x61, 0x16, 0x66, 0x39, 0x2, 0x6, 0xbf, 0x1, 0x82, 0xa0, 0xd4, 0x87, 0x99, 0x2, 0x46, 0xc4, 0x1, 0x1c, 0x18, 0x87, 0x99, 0x2, 0x46, 0xcd, 0x1, 0x26, 0x79, 0x2, 0x86, 0x3a, 0xff, 0x82, 0x21, 0x2e, 0x57, 0x38, 0x2, 0xc6, 0x4, 0x2, 0xa2, 0xa0, 0xc9, 0x86, 0x6b, 0x0, 0xc, 0x98, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0x87, 0xbe, 0x2, 0x6, 0x68, 0x0, 0x82, 0x2, 0x8, 0xad, 0x6, 0x66, 0x28, 0x2, 0x46, 0x65, 0x0, 0xc2, 0x1, 0xc0, 0xad, 0x9, 0x16, 0xdc, 0x18, 0x92, 0x21, 0x2e, 0xad, 0xb, 0x56, 0x59, 0x18, 0xc, 0x9, 0x92, 0x41, 0xc0, 0x56, 0xf8, 0x18, 0xa2, 0x21, 0x29, 0x81, 0xdc, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x4, 0x0, 0xa1, 0xbf, 0xfc, 0x88, 0xc1, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x22, 0xe0, 0x8, 0x0, 0x6, 0x5c, 0x0, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0xf6, 0xbe, 0x2, 0x86, 0x54, 0x0, 0x82, 0x21, 0x2e, 0xad, 0xb, 0x56, 0xa8, 0x14, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x56, 0xb8, 0x13, 0x82, 0x2, 0xc, 0x92, 0x2, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xe, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xf, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x79, 0x20, 0xa2, 0x21, 0x29, 0x81, 0xbf, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x4, 0x0, 0xa1, 0xa3, 0xfc, 0x88, 0xc1, 0xe0, 0x8, 0x0, 0xe0, 0x7, 0x0, 0x46, 0x40, 0x0, 0x82, 0x21, 0x20, 0x7d, 0x5, 0x62, 0x21, 0x18, 0x42, 0x21, 0x26, 0x50, 0x88, 0x10, 0x56, 0x8, 0xf, 0xa2, 0x21, 0x29, 0x81, 0xb4, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x4, 0x0, 0x77, 0x26, 0x9, 0xc, 0x8, 0x77, 0xa6, 0x9, 0xc, 0x77, 0x86, 0xf7, 0xff, 0xc, 0x18, 0x77, 0x26, 0xf5, 0x1b, 0x77, 0x6, 0xf5, 0xff, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0x77, 0xbe, 0x2, 0x46, 0x2b, 0x0, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x92, 0x2, 0xc, 0xa2, 0x2, 0xd, 0x80, 0xaa, 0x11, 0x90, 0x9a, 0x20, 0xa2, 0x2, 0xe, 0x0, 0xaa, 0x11, 0xb2, 0x2, 0xf, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc6, 0x1e, 0x0, 0xe7, 0x34, 0x2, 0x46, 0xd6, 0x1, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x91, 0x88, 0xfc, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x0, 0x7, 0x40, 0x80, 0x90, 0x91, 0xa1, 0x82, 0xfc, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0x92, 0x21, 0x21, 0x0, 0x9, 0x40, 0x80, 0x90, 0x91, 0xa1, 0x7f, 0xfc, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0x80, 0x88, 0x41, 0x91, 0x7d, 0xfc, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x6, 0x28, 0x1, 0xb6, 0xce, 0x2, 0xc6, 0x2b, 0x1, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0x81, 0x7b, 0xfc, 0x8a, 0x81, 0xa2, 0x48, 0x0, 0xc, 0x18, 0x91, 0x7a, 0xfc, 0x9a, 0x91, 0x82, 0x49, 0x0, 0xa2, 0x21, 0x29, 0x81, 0x78, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x4, 0x0, 0x46, 0xc2, 0xfe, 0xe7, 0x34, 0x2, 0x6, 0xb3, 0x1, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0xc, 0xb, 0x82, 0x21, 0x17, 0xe0, 0x8, 0x0, 0x86, 0x10, 0x1, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0xb6, 0xbe, 0xa4, 0x82, 0x2, 0xb, 0x82, 0x61, 0x27, 0x82, 0x2, 0xa, 0x82, 0x61, 0x25, 0x82, 0x2, 0x8, 0x82, 0x61, 0x24, 0x32, 0x2, 0x9, 0x72, 0x2, 0xf, 0x62, 0x2, 0xe, 0x52, 0x2, 0xc, 0x8d, 0x4, 0x42, 0x2, 0xd, 0xa2, 0x21, 0x29, 0x91, 0x5d, 0xfc, 0x9a, 0x91, 0xb2, 0xc9, 0x0, 0xe0, 0x8, 0x0, 0xa1, 0x3c, 0xfc, 0x28, 0xc1, 0xe0, 0x2, 0x0, 0x80, 0x83, 0x11, 0x92, 0x21, 0x24, 0x90, 0x88, 0x20, 0x92, 0x21, 0x25, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x27, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x91, 0x34, 0xfc, 0xc0, 0x20, 0x0, 0x98, 0x9, 0x16, 0xb8, 0x63, 0x1c, 0x4a, 0x80, 0xb4, 0x11, 0x50, 0xbb, 0x20, 0x0, 0xc6, 0x11, 0x80, 0xd7, 0x1, 0xc0, 0xcd, 0x20, 0xb0, 0xbc, 0x20, 0x0, 0xa, 0x40, 0x90, 0xa0, 0x91, 0xc8, 0xb1, 0xc0, 0xaa, 0x10, 0xc0, 0x99, 0x11, 0xc1, 0x2a, 0xfc, 0xc0, 0x99, 0x10, 0xa0, 0x99, 0x20, 0xb0, 0x99, 0x82, 0x80, 0xb9, 0xc2, 0xc, 0xa, 0x81, 0x27, 0xfc, 0xe0, 0x8, 0x0, 0xa2, 0xa3, 0xe8, 0xe0, 0x2, 0x0, 0x6, 0x8c, 0xfe, 0xd2, 0x61, 0x22, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0x77, 0xbe, 0x2, 0x6, 0xbd, 0xff, 0xc2, 0x61, 0x16, 0x82, 0x2, 0xf, 0x82, 0x61, 0x23, 0x82, 0x2, 0xe, 0x82, 0x61, 0x1e, 0x42, 0x2, 0xc, 0x32, 0x2, 0xd, 0x72, 0x2, 0xb, 0x62, 0x2, 0xa, 0x52, 0x2, 0x8, 0x22, 0x2, 0x9, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0xb, 0xc1, 0xc4, 0xfb, 0x82, 0x21, 0x28, 0xe0, 0x8, 0x0, 0x81, 0x34, 0xfc, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x82, 0x21, 0x1f, 0xe0, 0x8, 0x0, 0x80, 0x82, 0x11, 0x50, 0x88, 0x20, 0x0, 0x96, 0x11, 0x80, 0xa7, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x79, 0x20, 0x80, 0x83, 0x11, 0x40, 0x88, 0x20, 0x92, 0x21, 0x1e, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x23, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x69, 0x20, 0x16, 0x66, 0x4, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x41, 0xb0, 0xfb, 0xad, 0x7, 0xcd, 0x4, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x27, 0x80, 0x8a, 0x10, 0x56, 0xe8, 0xe5, 0x40, 0x46, 0x63, 0x81, 0x1c, 0xfc, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xcd, 0x4, 0x82, 0x21, 0x24, 0xe0, 0x8, 0x0, 0x4a, 0x77, 0x40, 0x66, 0xc0, 0x56, 0x86, 0xfb, 0x81, 0xff, 0xfb, 0x8a, 0x81, 0x72, 0xc8, 0x0, 0x81, 0x11, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x5c, 0x8c, 0xad, 0x7, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0x81, 0xe, 0xfc, 0x8a, 0x81, 0x42, 0xc8, 0x0, 0xad, 0x4, 0xbd, 0x7, 0x82, 0x21, 0x22, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x29, 0x81, 0x0, 0xfc, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x1c, 0xd, 0xcd, 0x4, 0x82, 0x21, 0x16, 0xe0, 0x8, 0x0, 0x6, 0x49, 0xfe, 0x6d, 0xc, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x72, 0xc8, 0x0, 0xc, 0x4, 0x1c, 0x4c, 0xad, 0x7, 0xbd, 0x4, 0x82, 0x21, 0x28, 0xe0, 0x8, 0x0, 0x81, 0xd4, 0xfb, 0xad, 0x4, 0xbd, 0x4, 0xcd, 0x7, 0xe0, 0x8, 0x0, 0x16, 0xfa, 0x2a, 0xa2, 0xa0, 0xc3, 0x6, 0x71, 0xff, 0xa2, 0x21, 0x23, 0x42, 0x21, 0x26, 0xf6, 0xbe, 0x2, 0xc6, 0x6e, 0xff, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0x82, 0x2, 0xc, 0x92, 0x2, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xe, 0x0, 0x99, 0x11, 0xb2, 0x2, 0xf, 0x80, 0xbb, 0x1, 0x90, 0x9b, 0x20, 0x80, 0xb9, 0x20, 0x81, 0xbb, 0xfb, 0xe0, 0x8, 0x0, 0x16, 0x8a, 0xd8, 0x3c, 0x6a, 0x46, 0x5c, 0xff, 0xd2, 0x61, 0x22, 0xa2, 0x21, 0x29, 0x81, 0xd8, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x42, 0x21, 0x26, 0x6d, 0xe, 0xe0, 0x4, 0x0, 0xa2, 0x21, 0x23, 0x77, 0xb6, 0x2, 0x86, 0x54, 0xff, 0x82, 0x2, 0xf, 0x82, 0x61, 0x16, 0x82, 0x2, 0xe, 0x82, 0x61, 0x15, 0x82, 0x2, 0xc, 0x82, 0x61, 0x14, 0x82, 0x2, 0xd, 0x82, 0x61, 0x13, 0x82, 0x2, 0xb, 0x82, 0x61, 0x12, 0x82, 0x2, 0xa, 0x82, 0x61, 0x11, 0x82, 0x2, 0x8, 0x82, 0x61, 0x10, 0x82, 0x2, 0x9, 0x89, 0xf1, 0x82, 0x2, 0x17, 0x82, 0x61, 0x23, 0x82, 0x2, 0x16, 0x89, 0xe1, 0x82, 0x2, 0x14, 0x89, 0xd1, 0x52, 0x2, 0x15, 0x42, 0x2, 0x13, 0x62, 0x2, 0x12, 0x32, 0x2, 0x10, 0x22, 0x2, 0x11, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0x7, 0xc1, 0x50, 0xfb, 0xbd, 0x7, 0x82, 0x21, 0x28, 0xe0, 0x8, 0x0, 0x81, 0xbe, 0xfb, 0x8a, 0x81, 0x79, 0x8, 0x81, 0xbe, 0xfb, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x82, 0x21, 0x1f, 0xe0, 0x8, 0x0, 0x80, 0x82, 0x11, 0x30, 0x88, 0x20, 0x0, 0x96, 0x11, 0x80, 0xa4, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xb9, 0x20, 0x80, 0x85, 0x11, 0x98, 0xd1, 0x90, 0x88, 0x20, 0x98, 0xe1, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x23, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xb2, 0x61, 0x23, 0xb0, 0xb8, 0x82, 0x88, 0xf1, 0x80, 0x88, 0x11, 0x92, 0x21, 0x10, 0x90, 0x88, 0x20, 0x92, 0x21, 0x11, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x12, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x49, 0x20, 0x82, 0x21, 0x13, 0x80, 0x88, 0x11, 0x92, 0x21, 0x14, 0x90, 0x88, 0x20, 0x92, 0x21, 0x15, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x16, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x99, 0x20, 0x8d, 0x7, 0x5d, 0x9, 0xb2, 0x61, 0x1f, 0x92, 0x61, 0x16, 0x97, 0x38, 0x2, 0x86, 0x2b, 0x0, 0xba, 0x68, 0x16, 0x35, 0x6, 0x67, 0xb7, 0x60, 0x82, 0x21, 0x23, 0x50, 0x38, 0x63, 0x81, 0x6c, 0xfb, 0x87, 0x33, 0x2, 0x86, 0xce, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xad, 0x4, 0xcd, 0x3, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x27, 0x80, 0x8a, 0x10, 0x56, 0x38, 0xc2, 0xa2, 0x21, 0x29, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x22, 0xc8, 0x0, 0xbd, 0x2, 0xcd, 0x3, 0x82, 0x21, 0x1a, 0xe0, 0x8, 0x0, 0x81, 0x88, 0xfb, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xbd, 0x2, 0xcd, 0x3, 0x82, 0x21, 0x24, 0xe0, 0x8, 0x0, 0x7a, 0x73, 0x3a, 0x44, 0x30, 0x55, 0xc0, 0x56, 0xb5, 0xf9, 0xa2, 0x21, 0x29, 0x81, 0x7f, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0x4c, 0x82, 0x21, 0x1d, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x1e, 0xb7, 0x38, 0x2, 0x6, 0xb3, 0x0, 0x82, 0xa, 0x0, 0x92, 0xa, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0xa, 0x2, 0x0, 0x99, 0x11, 0xa2, 0xa, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xb2, 0x21, 0x1f, 0x92, 0x21, 0x16, 0x97, 0xb8, 0x2, 0x6, 0xd4, 0xff, 0x81, 0x5b, 0xfb, 0x8a, 0x81, 0x72, 0xc8, 0x0, 0x81, 0x6d, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x5c, 0x8c, 0xad, 0x7, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0x81, 0x6a, 0xfb, 0x8a, 0x81, 0x42, 0xc8, 0x0, 0xad, 0x4, 0xbd, 0x7, 0x82, 0x21, 0x22, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x29, 0x1c, 0xc, 0xbd, 0x4, 0x82, 0x21, 0x1a, 0xe0, 0x8, 0x0, 0x46, 0xa7, 0xfd, 0x82, 0x21, 0x22, 0xe0, 0x8, 0x0, 0x42, 0x21, 0x26, 0x86, 0xdd, 0xfe, 0x81, 0x47, 0xfb, 0xe0, 0x8, 0x0, 0x16, 0xda, 0xb6, 0xa2, 0xa0, 0xc5, 0x46, 0xd5, 0xfe, 0x2b, 0xb2, 0x1c, 0xec, 0xa8, 0x81, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xb1, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x42, 0x48, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x62, 0x48, 0x0, 0xa8, 0x91, 0x88, 0xa1, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x27, 0x80, 0x8a, 0x10, 0x42, 0x21, 0x26, 0x56, 0x8, 0xb2, 0xc6, 0xcb, 0xfe, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x72, 0x8, 0x0, 0x1c, 0x3c, 0xa8, 0x61, 0xb8, 0x51, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0x81, 0x32, 0xfb, 0x8a, 0x81, 0x72, 0x48, 0x0, 0xa2, 0x21, 0x29, 0x81, 0x3c, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x81, 0x2d, 0xfb, 0x8a, 0x81, 0xc2, 0xc8, 0x0, 0x1c, 0x4d, 0xe0, 0x6, 0x0, 0x6, 0x84, 0xfd, 0xa2, 0x21, 0x23, 0x46, 0xb7, 0xfe, 0xa2, 0xa0, 0xc1, 0xc6, 0xb5, 0xfe, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xbd, 0x7, 0xcd, 0x5, 0x82, 0x21, 0x16, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x27, 0x80, 0x8a, 0x10, 0x56, 0xc8, 0xab, 0x86, 0x79, 0xfd, 0x81, 0x13, 0xfb, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0x1b, 0x81, 0xba, 0xfa, 0xcd, 0x7, 0xdd, 0x5, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x27, 0x80, 0x8a, 0x10, 0x56, 0x68, 0xa9, 0x81, 0xb, 0xfb, 0xe0, 0x8, 0x0, 0x86, 0x6e, 0xfd, 0x72, 0x61, 0x1f, 0x81, 0x9, 0xfb, 0x82, 0x61, 0x1e, 0x48, 0x8, 0xc, 0x6, 0xc, 0x18, 0xcd, 0x8, 0x82, 0x61, 0x23, 0xbd, 0x8, 0x52, 0x61, 0x22, 0x2d, 0x5, 0x62, 0x61, 0x24, 0x82, 0x21, 0x2e, 0x92, 0x21, 0x23, 0xa2, 0x21, 0x24, 0xa7, 0x98, 0x2, 0x92, 0x21, 0x24, 0x16, 0x32, 0xe, 0x16, 0x8, 0xe, 0x16, 0xec, 0xe, 0x81, 0x1a, 0xfb, 0x8a, 0x81, 0x29, 0x8, 0x51, 0xfb, 0xfa, 0x40, 0x85, 0xc0, 0x91, 0x3, 0xfb, 0x9a, 0x91, 0x89, 0x9, 0x71, 0xf9, 0xfa, 0x77, 0x34, 0x2, 0x6, 0x4c, 0x0, 0x82, 0x21, 0x2f, 0x87, 0xb2, 0x5, 0x82, 0x21, 0x1c, 0x80, 0xbb, 0x20, 0x82, 0x21, 0x22, 0x67, 0xb8, 0x2, 0xc6, 0x46, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb9, 0x8, 0xb2, 0x61, 0x25, 0xb9, 0x1, 0x82, 0x21, 0x1f, 0x6a, 0xb8, 0xd1, 0xee, 0xfa, 0x4a, 0xed, 0x81, 0x7, 0xfb, 0x8a, 0x81, 0xc2, 0xc8, 0x0, 0x81, 0xf1, 0xfa, 0x8a, 0x81, 0xf2, 0xc8, 0x0, 0x81, 0xe9, 0xfa, 0xa8, 0x71, 0xe0, 0x8, 0x0, 0xcd, 0xa, 0x81, 0x1, 0xfb, 0x8a, 0x81, 0x38, 0x8, 0x82, 0x21, 0x2f, 0x30, 0x88, 0xc0, 0x82, 0x61, 0x2f, 0x81, 0xe9, 0xfa, 0x8a, 0x81, 0x88, 0x8, 0x4a, 0x48, 0x16, 0x2c, 0x0, 0x57, 0x94, 0x27, 0x5d, 0xc, 0x77, 0x34, 0x2, 0x46, 0x30, 0x0, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xb1, 0xda, 0xfa, 0xcd, 0x4, 0x82, 0x21, 0x16, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x27, 0x80, 0x8a, 0x10, 0x56, 0xc8, 0x9a, 0xc, 0x4, 0xcd, 0x5, 0x6a, 0x63, 0x30, 0x22, 0xc0, 0xb2, 0x21, 0x25, 0x6, 0xcc, 0xff, 0x92, 0x21, 0x1e, 0x90, 0x96, 0x10, 0xa2, 0x21, 0x23, 0x56, 0x49, 0x99, 0x3b, 0x97, 0x7c, 0xca, 0xa0, 0xa9, 0x10, 0x70, 0x9a, 0xc0, 0x97, 0x35, 0x1, 0x3d, 0xa, 0x97, 0x35, 0x4d, 0x90, 0x95, 0xc0, 0x90, 0x92, 0x41, 0x86, 0x11, 0x0, 0xa2, 0x21, 0x1e, 0x49, 0xa, 0xd6, 0x3c, 0x1, 0x82, 0xa0, 0xc7, 0x82, 0x41, 0xc1, 0x46, 0x25, 0xfd, 0x82, 0x21, 0x1e, 0x49, 0x8, 0xc, 0x19, 0xc, 0xc, 0x8d, 0x9, 0x56, 0xc, 0x1, 0xc, 0x1a, 0xa0, 0x99, 0x10, 0x16, 0x89, 0x0, 0x82, 0xa0, 0xc8, 0x82, 0x41, 0xc1, 0x86, 0x1d, 0xfd, 0x56, 0x2c, 0x0, 0x6, 0x1c, 0xfd, 0x16, 0x28, 0x0, 0x86, 0x1a, 0xfd, 0x82, 0xa0, 0xc9, 0x82, 0x41, 0xc1, 0x46, 0x18, 0xfd, 0xc, 0x9, 0xe0, 0x99, 0x11, 0x82, 0xc8, 0xfc, 0xa2, 0x21, 0x2c, 0x56, 0x29, 0x0, 0x6, 0x14, 0xfd, 0xb8, 0x3, 0xb9, 0xa, 0x4b, 0xaa, 0xa2, 0x61, 0x2c, 0x92, 0xc9, 0xfc, 0x4b, 0x33, 0x82, 0x61, 0x2e, 0x82, 0xc8, 0xfc, 0x56, 0x89, 0xfe, 0x86, 0xd, 0xfd, 0xf0, 0x41, 0x0, 0x0, 0x36, 0xc1, 0x1, 0x29, 0x31, 0xa2, 0xc1, 0x40, 0xc, 0x7, 0xc2, 0xa0, 0x80, 0x81, 0x84, 0xfa, 0xbd, 0x7, 0xe0, 0x8, 0x0, 0xf2, 0x21, 0x3b, 0x92, 0x21, 0x3a, 0xa2, 0x21, 0x39, 0xb2, 0x21, 0x38, 0xc, 0x18, 0x89, 0x61, 0x7c, 0xfd, 0x2c, 0x8, 0x89, 0x51, 0x4c, 0x8, 0x89, 0x41, 0x90, 0xcb, 0x20, 0xf0, 0x6a, 0x20, 0x60, 0xcc, 0x20, 0x16, 0xc, 0x1c, 0x72, 0x41, 0x3f, 0x72, 0x41, 0x3e, 0x72, 0x41, 0x3d, 0x72, 0x41, 0x3c, 0x72, 0x41, 0x3b, 0x72, 0x41, 0x3a, 0x72, 0x41, 0x39, 0x72, 0x41, 0x38, 0x72, 0x41, 0x37, 0x72, 0x41, 0x36, 0x72, 0x41, 0x35, 0x72, 0x41, 0x34, 0x72, 0x41, 0x33, 0x72, 0x41, 0x32, 0x72, 0x41, 0x31, 0x88, 0x61, 0x82, 0x41, 0x30, 0x72, 0x41, 0x2f, 0x72, 0x41, 0x2e, 0x72, 0x41, 0x2d, 0x72, 0x41, 0x2c, 0x72, 0x41, 0x2b, 0x72, 0x41, 0x2a, 0x72, 0x41, 0x29, 0x72, 0x41, 0x28, 0x72, 0x41, 0x27, 0x72, 0x41, 0x26, 0x72, 0x41, 0x25, 0x72, 0x41, 0x24, 0x72, 0x41, 0x23, 0x72, 0x41, 0x22, 0x72, 0x41, 0x21, 0x72, 0x41, 0x20, 0x77, 0x9b, 0xf, 0xd0, 0xca, 0x30, 0xb, 0x6a, 0x60, 0xcc, 0x10, 0xc0, 0xfc, 0x40, 0x88, 0x41, 0x6, 0x3, 0x0, 0xd0, 0xcb, 0x30, 0xb, 0x6b, 0x60, 0xcc, 0x10, 0xc0, 0xfc, 0x40, 0x88, 0x51, 0xc0, 0x68, 0xc0, 0xf9, 0x71, 0x77, 0x99, 0xf, 0xd0, 0xcf, 0x30, 0xb, 0x5f, 0x50, 0xcc, 0x10, 0xc0, 0xfc, 0x40, 0x88, 0x41, 0x6, 0x3, 0x0, 0xd0, 0xc9, 0x30, 0xb, 0x59, 0x50, 0xcc, 0x10, 0xc0, 0xfc, 0x40, 0x88, 0x51, 0xc0, 0xc8, 0xc0, 0xa0, 0x5b, 0x20, 0x77, 0x95, 0x2, 0x62, 0xcc, 0x40, 0x60, 0xc3, 0x41, 0xc, 0xf5, 0x50, 0xcc, 0x10, 0x52, 0xc1, 0x20, 0x52, 0xc5, 0x10, 0xc0, 0x55, 0xc0, 0xc2, 0x5, 0x8, 0x42, 0x5, 0x9, 0x80, 0x44, 0x11, 0xc0, 0xc4, 0x20, 0x42, 0x5, 0xa, 0x0, 0x44, 0x11, 0x32, 0x5, 0xb, 0x80, 0x33, 0x1, 0x40, 0x43, 0x20, 0xc0, 0x44, 0x20, 0xc2, 0x5, 0xc, 0x32, 0x5, 0xd, 0x80, 0x33, 0x11, 0xc0, 0xc3, 0x20, 0x32, 0x5, 0xe, 0x0, 0x33, 0x11, 0x22, 0x5, 0xf, 0x80, 0x22, 0x1, 0x30, 0x32, 0x20, 0xc0, 0x33, 0x20, 0xc, 0x7c, 0xc0, 0xc6, 0x10, 0x0, 0x1c, 0x40, 0x40, 0x33, 0x81, 0xe0, 0x66, 0x11, 0x21, 0x75, 0xfa, 0x20, 0x66, 0x20, 0xc0, 0x20, 0x0, 0x68, 0x6, 0x21, 0x74, 0xfa, 0x20, 0x66, 0xa0, 0x68, 0x6, 0xc0, 0x66, 0x11, 0x22, 0xc1, 0x40, 0x6a, 0x62, 0x28, 0x36, 0x30, 0x22, 0x20, 0x29, 0x36, 0x22, 0x5, 0x0, 0xe2, 0x5, 0x1, 0x80, 0xee, 0x11, 0x20, 0xee, 0x20, 0x22, 0x5, 0x2, 0x0, 0x22, 0x11, 0xf2, 0x5, 0x3, 0x80, 0xff, 0x1, 0x20, 0xff, 0x20, 0xe0, 0xef, 0x20, 0x0, 0x1c, 0x40, 0x0, 0x2e, 0xa1, 0xf8, 0x6, 0x20, 0xff, 0x20, 0xf9, 0x6, 0xf2, 0x5, 0x4, 0x82, 0x5, 0x5, 0x80, 0x88, 0x11, 0xf0, 0x88, 0x20, 0xf2, 0x5, 0x6, 0x0, 0xff, 0x11, 0x52, 0x5, 0x7, 0x80, 0x55, 0x1, 0xf0, 0xf5, 0x20, 0x80, 0x8f, 0x20, 0x0, 0x1c, 0x40, 0xe0, 0xe8, 0x81, 0xf8, 0x16, 0xe0, 0xff, 0x20, 0xf9, 0x16, 0x0, 0xf4, 0xa1, 0x80, 0x81, 0x41, 0xd0, 0xcc, 0x30, 0x1c, 0xf5, 0x50, 0xcc, 0x10, 0x0, 0xc, 0x40, 0x80, 0x80, 0x91, 0x80, 0x8f, 0x20, 0xc8, 0x26, 0x80, 0xcc, 0x20, 0xc9, 0x26, 0xd0, 0xc3, 0x30, 0xf8, 0x71, 0xc0, 0xff, 0x10, 0xd0, 0xce, 0x30, 0xc0, 0xaa, 0x10, 0xd0, 0x88, 0x30, 0x80, 0x99, 0x10, 0xd0, 0x82, 0x30, 0x80, 0xbb, 0x10, 0x86, 0x8c, 0xff, 0xb2, 0xc1, 0x40, 0xc2, 0xa0, 0x80, 0x81, 0x8, 0xfa, 0xa8, 0x31, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x36, 0x41, 0x0, 0x81, 0xd4, 0xf9, 0x80, 0x82, 0x10, 0x5c, 0xe9, 0x87, 0x39, 0x10, 0x0, 0x82, 0x11, 0x80, 0x80, 0x31, 0x91, 0x42, 0xfa, 0x90, 0x88, 0x90, 0x22, 0x18, 0x0, 0x1d, 0xf0, 0x5c, 0xf2, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x3e, 0xfa, 0xc0, 0x20, 0x0, 0xb8, 0x8, 0xb, 0xcb, 0xc, 0x9, 0xc, 0x18, 0x7c, 0xed, 0xad, 0x8, 0xd7, 0x3c, 0x1, 0xad, 0x9, 0x1c, 0xc, 0x0, 0xc, 0x40, 0xb0, 0xc0, 0x91, 0xd1, 0xc3, 0xf9, 0xd0, 0x3b, 0x10, 0xbd, 0x8, 0xc7, 0x13, 0x1, 0xbd, 0x9, 0xa0, 0xab, 0x10, 0x2c, 0x8b, 0xb7, 0x93, 0x1, 0x8d, 0x9, 0xa0, 0x28, 0x10, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x2f, 0xfa, 0x2, 0xa0, 0x0, 0x80, 0x18, 0x20, 0xa1, 0x2e, 0xfa, 0xb1, 0x2e, 0xfa, 0x71, 0x2e, 0xfa, 0xe0, 0x7, 0x0, 0xa1, 0x2e, 0xfa, 0xb1, 0x2e, 0xfa, 0xe0, 0x7, 0x0, 0x81, 0x2d, 0xfa, 0x91, 0x2e, 0xfa, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x2d, 0xfa, 0xe0, 0x8, 0x0, 0x81, 0x2c, 0xfa, 0xe0, 0x8, 0x0, 0x36, 0x61, 0x0, 0xc, 0x7, 0x61, 0xac, 0xf9, 0x52, 0xa0, 0xff, 0x41, 0x29, 0xfa, 0x5c, 0xf3, 0x81, 0x1a, 0xfa, 0x89, 0x1, 0x1c, 0x2, 0x60, 0x87, 0x10, 0x57, 0xb8, 0x19, 0xad, 0x7, 0xe0, 0x4, 0x0, 0x60, 0x8a, 0x10, 0x1b, 0x77, 0x37, 0x18, 0xec, 0x98, 0x1, 0x90, 0x88, 0xa0, 0xc0, 0x20, 0x0, 0x29, 0x8, 0xc6, 0xf7, 0xff, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0xc1, 0x0, 0x81, 0x1d, 0xfa, 0x89, 0xa1, 0xe0, 0x8, 0x0, 0x56, 0xa, 0x28, 0x31, 0x1b, 0xfa, 0xc0, 0x20, 0x0, 0x88, 0x3, 0x91, 0x1a, 0xfa, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x3, 0xc, 0x3a, 0x81, 0xc2, 0xf9, 0x89, 0xe1, 0xe0, 0x8, 0x0, 0x81, 0x16, 0xfa, 0x89, 0x91, 0x82, 0xa1, 0x2c, 0x89, 0x81, 0x1c, 0xe8, 0x89, 0x71, 0xc, 0x7, 0xc, 0x18, 0x89, 0x51, 0xc, 0x28, 0x89, 0xd1, 0x82, 0xa1, 0x0, 0x89, 0xb1, 0x82, 0xa2, 0x0, 0x89, 0x1, 0x21, 0xe, 0xfa, 0x81, 0x87, 0xf9, 0x89, 0x41, 0x81, 0xe, 0xfa, 0x89, 0x31, 0x82, 0xa0, 0xff, 0x89, 0x21, 0x81, 0xae, 0xf9, 0x89, 0x11, 0x79, 0x61, 0xc0, 0x20, 0x0, 0x88, 0x3, 0x98, 0x91, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x3, 0xa8, 0x81, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0x88, 0xa1, 0xe0, 0x8, 0x0, 0x5d, 0xa, 0xc0, 0x20, 0x0, 0x88, 0x3, 0x98, 0x71, 0x0, 0x9, 0x40, 0x80, 0x90, 0x91, 0x66, 0x39, 0x2, 0x6, 0x7e, 0x0, 0xc8, 0x51, 0x8d, 0xc, 0xa8, 0xd1, 0xa7, 0x19, 0x1, 0x8d, 0x7, 0xc7, 0x99, 0x1, 0x88, 0xd1, 0xb9, 0xc1, 0xad, 0xc, 0xc7, 0x99, 0x1, 0xad, 0x7, 0xc0, 0x20, 0x0, 0xb8, 0x3, 0xd8, 0xb1, 0xd0, 0x4b, 0x10, 0x40, 0xb8, 0x41, 0xb0, 0xaa, 0x20, 0x26, 0x29, 0x9, 0xc, 0x19, 0x90, 0x9a, 0x10, 0x6d, 0x7, 0x56, 0x89, 0x1, 0xc0, 0xba, 0x10, 0x98, 0x1, 0x77, 0x9b, 0x1, 0x98, 0xb1, 0xc0, 0x20, 0x0, 0xb8, 0x3, 0x90, 0x9b, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x3, 0x6d, 0xa, 0xc0, 0x20, 0x0, 0x98, 0x2, 0xa8, 0x41, 0xa0, 0xb9, 0x10, 0x91, 0xb4, 0xf9, 0x71, 0xe6, 0xf9, 0xa2, 0xa0, 0x7f, 0x16, 0xab, 0x2, 0xc0, 0x20, 0x0, 0xb8, 0x7, 0xa0, 0xbb, 0x10, 0xc2, 0xa0, 0x80, 0xc0, 0xbb, 0x20, 0xc0, 0x20, 0x0, 0xb9, 0x7, 0xc0, 0x20, 0x0, 0xb8, 0x2, 0x90, 0xbb, 0x10, 0x56, 0xcb, 0x0, 0xc0, 0x20, 0x0, 0xb8, 0x7, 0xc, 0x1c, 0xc0, 0xbb, 0x10, 0x16, 0x7b, 0xfe, 0xc0, 0x20, 0x0, 0xb8, 0x2, 0xc8, 0x31, 0xc0, 0xcb, 0x10, 0xb8, 0x21, 0xb0, 0xb8, 0x10, 0x30, 0x8b, 0x11, 0xc0, 0x88, 0x20, 0xc8, 0x11, 0xc0, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x2, 0x1c, 0x38, 0x26, 0x1b, 0xa, 0x26, 0x2b, 0xa, 0x91, 0xd1, 0xf9, 0x1c, 0x18, 0x86, 0x0, 0x0, 0x91, 0xd0, 0xf9, 0xb2, 0xa4, 0x0, 0x0, 0x18, 0x40, 0x0, 0x8b, 0xa1, 0xc0, 0x20, 0x0, 0xb8, 0x7, 0xa0, 0xab, 0x10, 0x80, 0x8a, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x7, 0xc0, 0x20, 0x0, 0x88, 0x2, 0xa1, 0xc9, 0xf9, 0xa0, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x2, 0x81, 0xc7, 0xf9, 0x90, 0xa8, 0xc2, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x2, 0x91, 0x8b, 0xf9, 0x90, 0x88, 0x10, 0x56, 0x18, 0x1, 0xc0, 0x20, 0x0, 0x88, 0x7, 0xc, 0x19, 0x90, 0x88, 0x10, 0x16, 0x48, 0xfe, 0xc, 0x8, 0x86, 0x2, 0x0, 0x81, 0xbe, 0xf9, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x80, 0x87, 0x41, 0xc0, 0x20, 0x0, 0x98, 0x2, 0xa1, 0xbb, 0xf9, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x2, 0xc0, 0x20, 0x0, 0x98, 0x3, 0xa2, 0xae, 0xff, 0xa0, 0x99, 0x10, 0x40, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x3, 0xc, 0x19, 0x90, 0xa6, 0x10, 0x78, 0x61, 0x16, 0xfa, 0x0, 0xc0, 0x20, 0x0, 0xa8, 0x3, 0xb2, 0xad, 0xff, 0xb0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x3, 0xc, 0xd, 0xd7, 0x15, 0xd, 0xa1, 0xac, 0xf9, 0xb8, 0xc1, 0xa0, 0xbb, 0x82, 0xa0, 0xab, 0xc2, 0x46, 0x0, 0x0, 0x2c, 0x8a, 0x16, 0x2a, 0x8, 0xd0, 0xe8, 0x1, 0x60, 0xca, 0x11, 0xc0, 0xa1, 0x41, 0xaa, 0xae, 0xbd, 0x9, 0xd7, 0x1a, 0x1, 0xbd, 0xd, 0xe7, 0x3a, 0x1, 0x9d, 0xd, 0x80, 0x8d, 0x41, 0x9a, 0x88, 0xb0, 0xb8, 0xc0, 0xb, 0xaa, 0x81, 0xa0, 0xf9, 0xe0, 0x8, 0x0, 0x16, 0xfa, 0xe2, 0x81, 0x9f, 0xf9, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x81, 0x9e, 0xf9, 0x91, 0x9e, 0xf9, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xa1, 0x9d, 0xf9, 0xc0, 0x20, 0x0, 0xb8, 0xa, 0xc1, 0x9c, 0xf9, 0xc0, 0xbb, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0xa, 0xc, 0xa, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x81, 0x99, 0xf9, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xb1, 0x98, 0xf9, 0xc0, 0x20, 0x0, 0xa9, 0xb, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x81, 0x96, 0xf9, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x91, 0x95, 0xf9, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x6, 0xf9, 0x92, 0xa3, 0xff, 0xb1, 0x3, 0xf9, 0xa1, 0x1, 0xf9, 0xba, 0xba, 0xc1, 0x8c, 0xf9, 0xd1, 0x0, 0xf9, 0xda, 0xda, 0xc, 0xf, 0x71, 0xfc, 0xf8, 0x7a, 0x6a, 0xc, 0x1e, 0xc0, 0x20, 0x0, 0x58, 0x8, 0x90, 0x55, 0x10, 0x16, 0x95, 0x2, 0xc0, 0x20, 0x0, 0x58, 0xc, 0x42, 0xb, 0x0, 0x56, 0x84, 0x2, 0x48, 0xd, 0x4a, 0x4a, 0x52, 0x44, 0x0, 0x58, 0xd, 0x1b, 0x45, 0x5d, 0xf, 0x77, 0x14, 0x1, 0x5d, 0x4, 0x59, 0xd, 0x48, 0x6, 0x57, 0x94, 0xd0, 0xe2, 0x4b, 0x0, 0x86, 0xf2, 0xff, 0x81, 0xff, 0xf8, 0xc0, 0x20, 0x0, 0xe9, 0x8, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x81, 0x78, 0xf9, 0xe0, 0x8, 0x0, 0x81, 0x77, 0xf9, 0xe0, 0x8, 0x0, 0xc, 0x8, 0x16, 0x2a, 0x1, 0x91, 0x76, 0xf9, 0xa1, 0x76, 0xf9, 0xa7, 0xb9, 0x9, 0xc0, 0x20, 0x0, 0x89, 0x9, 0x4b, 0x99, 0xa7, 0x39, 0xf5, 0x80, 0xf0, 0x13, 0x80, 0xf1, 0x13, 0x80, 0xf2, 0x13, 0x0, 0x20, 0x0, 0x81, 0x70, 0xf9, 0x80, 0xe7, 0x13, 0x81, 0x6f, 0xf9, 0xe0, 0x8, 0x0, 0x81, 0x6f, 0xf9, 0xe0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x8d, 0x2, 0x16, 0xe5, 0x9, 0xc, 0x2, 0xc, 0x1a, 0x9d, 0xa, 0x47, 0x38, 0xf, 0x9d, 0x2, 0x57, 0xb3, 0xd, 0x57, 0x13, 0xf, 0x9d, 0xa, 0x16, 0xd9, 0x0, 0xc6, 0x3c, 0x0, 0x57, 0x33, 0xf1, 0xad, 0x2, 0x57, 0x93, 0xef, 0x56, 0x89, 0xe, 0x16, 0x53, 0xe, 0x90, 0xf3, 0x40, 0xa0, 0xf5, 0x40, 0x90, 0x9a, 0xc0, 0x3c, 0xfa, 0xa0, 0xa9, 0x10, 0x0, 0x1a, 0x40, 0x40, 0xc5, 0x81, 0x2c, 0xa, 0xa0, 0xe9, 0x10, 0x0, 0xd4, 0xa1, 0xc, 0xa, 0xbd, 0xd, 0xa7, 0x9e, 0x1, 0xbd, 0xc, 0xcd, 0xa, 0xa7, 0x9e, 0x1, 0xcd, 0xd, 0x1c, 0xfd, 0xd0, 0x99, 0x10, 0xc, 0x1e, 0x0, 0x19, 0x40, 0x0, 0xfe, 0xa1, 0x2d, 0xa, 0x9d, 0xe, 0xc7, 0x38, 0x1, 0x9d, 0xa, 0xb0, 0x73, 0xc0, 0x90, 0x97, 0xc0, 0x96, 0xd9, 0x1, 0xc0, 0x88, 0xc0, 0x7d, 0xe, 0x47, 0x38, 0x1, 0x7d, 0xa, 0x6d, 0xe, 0x57, 0x39, 0x1, 0x6d, 0xa, 0x57, 0x19, 0x1, 0x7d, 0x6, 0xf0, 0x22, 0x20, 0x56, 0x57, 0x8, 0x3d, 0x9, 0x0, 0x1d, 0x40, 0xc0, 0xcb, 0x81, 0xf0, 0xf1, 0x41, 0xb0, 0xb1, 0x41, 0x86, 0xf0, 0xff, 0x16, 0x63, 0x7, 0x47, 0xb3, 0x7c, 0xa0, 0xf3, 0x40, 0xb0, 0xf4, 0x40, 0x1c, 0xf9, 0xdd, 0x9, 0xa7, 0x1b, 0x5, 0xa0, 0xab, 0xc0, 0xd2, 0xca, 0x20, 0x0, 0x1d, 0x40, 0x40, 0xc5, 0x81, 0x0, 0xe4, 0xa1, 0x2c, 0xa, 0xa0, 0xfd, 0x10, 0xc, 0xa, 0xbd, 0xe, 0xa7, 0x9f, 0x1, 0xbd, 0xc, 0xcd, 0xa, 0xa7, 0x9f, 0x1, 0xcd, 0xe, 0x90, 0xed, 0x10, 0xc, 0x1d, 0x0, 0x1e, 0x40, 0x0, 0xfd, 0xa1, 0xed, 0xa, 0x7d, 0xd, 0xc7, 0x38, 0x1, 0x7d, 0xa, 0xb0, 0x63, 0xc0, 0x70, 0x76, 0xc0, 0x96, 0xa7, 0x0, 0xc0, 0x88, 0xc0, 0xe0, 0xef, 0x20, 0x16, 0x57, 0x3, 0x3d, 0x7, 0x0, 0x19, 0x40, 0xc0, 0xcb, 0x81, 0xf0, 0xf1, 0x41, 0xb0, 0xb1, 0x41, 0x46, 0xf5, 0xff, 0x9d, 0x3, 0x3d, 0x2, 0x6, 0x38, 0x0, 0xc, 0x3, 0xc6, 0x36, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x28, 0xc2, 0x6, 0x6, 0x0, 0x47, 0x93, 0x1e, 0x30, 0xa8, 0xe2, 0x30, 0x28, 0xc2, 0xc, 0x9, 0xc, 0x13, 0x6, 0x30, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x88, 0xc2, 0xe0, 0x28, 0x20, 0xc, 0x9, 0x8d, 0xa, 0x3d, 0x9, 0x6, 0x2c, 0x0, 0x40, 0x93, 0xe2, 0x40, 0x33, 0xc2, 0xa1, 0x79, 0xf8, 0xa7, 0xb4, 0x33, 0x1c, 0xa, 0x0, 0x1a, 0x40, 0x80, 0x99, 0x81, 0x40, 0xb9, 0xe2, 0x0, 0xbb, 0x11, 0xc1, 0x75, 0xf8, 0xc0, 0x88, 0x10, 0x80, 0x8b, 0x20, 0x40, 0xb8, 0xc2, 0x40, 0x99, 0xc2, 0x0, 0xc9, 0x11, 0xb0, 0x2c, 0x20, 0x0, 0xa, 0x40, 0x90, 0x90, 0x91, 0x30, 0x39, 0x20, 0x40, 0x88, 0xe2, 0xc, 0x9, 0x6, 0x1c, 0x0, 0xc, 0xc, 0xc, 0x1b, 0xad, 0xb, 0x47, 0x38, 0x4a, 0xad, 0xc, 0x57, 0xb9, 0x48, 0x57, 0x19, 0x4a, 0xad, 0xb, 0x56, 0x8a, 0x4, 0x1c, 0xfa, 0x0, 0x1a, 0x40, 0x40, 0xb5, 0x81, 0x10, 0xc4, 0x1, 0xe1, 0xeb, 0xf8, 0xc, 0xf, 0xc, 0x17, 0xdd, 0xf, 0x6d, 0x7, 0xc7, 0x38, 0x1, 0x6d, 0xf, 0xb0, 0x59, 0xc0, 0x60, 0x65, 0xc0, 0x96, 0xa6, 0x0, 0xc0, 0x88, 0xc0, 0xd0, 0xde, 0x20, 0x16, 0x6, 0x2, 0x9d, 0x6, 0x0, 0x1a, 0x40, 0xc0, 0xcb, 0x81, 0xe0, 0xe1, 0x41, 0xb0, 0xb1, 0x41, 0x46, 0xf5, 0xff, 0x57, 0x39, 0xb6, 0xbd, 0xc, 0x57, 0x99, 0xb4, 0x16, 0x6a, 0xfb, 0xc, 0x2, 0x6, 0x3, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x88, 0xc2, 0xd0, 0x28, 0x20, 0xc, 0x9, 0x8d, 0xa, 0x4d, 0x8, 0x5d, 0x9, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x81, 0xec, 0xf8, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xdd, 0x5, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0x3d, 0xb, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xc, 0x8, 0x37, 0xb2, 0x9, 0xc0, 0x20, 0x0, 0x89, 0x2, 0x4b, 0x22, 0x37, 0x32, 0xf5, 0x1d, 0xf0, 0x36, 0x41, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xc, 0x12, 0x1d, 0xf0, 0x0, 0x36, 0x81, 0x0, 0x0, 0x36, 0x81, 0x0, 0x0, 0xb4, 0xa3, 0x2, 0x40, 0xa8, 0xc4, 0xfb, 0x3f, 0xc0, 0x88, 0x1, 0x20, 0x80, 0x8, 0x0, 0x20, 0x14, 0xab, 0x2, 0x40, 0x60, 0xc4, 0xfb, 0x3f, 0x80, 0xc, 0x40, 0x70, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0xc4, 0x9a, 0x2, 0x40, 0xd0, 0x9c, 0x2, 0x40, 0xff, 0xff, 0x0, 0x0, 0x10, 0xa7, 0x2, 0x40, 0x7c, 0x21, 0x4c, 0x3f, 0x80, 0x21, 0x4c, 0x3f, 0x84, 0x21, 0x4c, 0x3f, 0x1c, 0xab, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x0, 0x0, 0x4, 0x0, 0x3, 0x0, 0x4, 0x0, 0x1, 0x0, 0x4, 0x0, 0x2, 0x0, 0x4, 0x0, 0x4, 0x0, 0x4, 0x0, 0x5, 0x0, 0x4, 0x0, 0x6, 0x0, 0x4, 0x0, 0x7, 0x0, 0x4, 0x0, 0x36, 0x41, 0x0, 0x81, 0xe4, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0xe1, 0x1, 0x39, 0xa1, 0x80, 0xe2, 0x3, 0x90, 0xe4, 0x3, 0xc, 0x7a, 0xa9, 0x91, 0x27, 0xba, 0x2, 0x46, 0xd0, 0x0, 0x80, 0x89, 0x10, 0x91, 0xdc, 0xff, 0x90, 0x92, 0xa0, 0x98, 0x9, 0x90, 0x98, 0x10, 0x81, 0xda, 0xff, 0x80, 0x89, 0x10, 0x16, 0x78, 0x4, 0x7c, 0xfa, 0xa0, 0xa8, 0x30, 0xb, 0x88, 0x80, 0x8a, 0x10, 0x80, 0xf8, 0x40, 0x2c, 0xa, 0x80, 0x8a, 0xc0, 0xa1, 0xd4, 0xff, 0xa0, 0x99, 0x10, 0x16, 0xd9, 0x0, 0xc, 0x19, 0x0, 0x18, 0x40, 0x0, 0x99, 0xa1, 0x90, 0xe3, 0x13, 0x10, 0x20, 0x0, 0x92, 0xc8, 0xfa, 0xc, 0xaa, 0x97, 0xba, 0x2, 0xc6, 0xa1, 0x0, 0x81, 0xcd, 0xff, 0xa1, 0xcd, 0xff, 0xa0, 0x99, 0xa0, 0x98, 0x9, 0xa0, 0x9, 0x0, 0x81, 0xc9, 0xff, 0xc6, 0xa4, 0x0, 0x81, 0xca, 0xff, 0x80, 0x89, 0x10, 0x16, 0xf8, 0x1f, 0x80, 0x90, 0x60, 0x90, 0x88, 0x10, 0x80, 0xe3, 0x13, 0x10, 0x20, 0x0, 0x81, 0xc5, 0xff, 0x90, 0xeb, 0x3, 0x80, 0x89, 0x10, 0x56, 0x18, 0x2c, 0xc, 0x6, 0x69, 0x31, 0x52, 0xa3, 0xbf, 0x59, 0x21, 0x31, 0xc1, 0xff, 0x39, 0x11, 0x69, 0x1, 0x72, 0xc1, 0x50, 0x81, 0xc0, 0xff, 0xad, 0x7, 0xe0, 0x8, 0x0, 0xc0, 0x82, 0x11, 0x8a, 0x87, 0x98, 0x28, 0x50, 0x49, 0x10, 0x88, 0x18, 0x30, 0x28, 0x10, 0x7c, 0xf3, 0x2c, 0x8, 0x89, 0x81, 0x4c, 0x8, 0x89, 0x71, 0x5d, 0x6, 0xed, 0x6, 0x67, 0x94, 0xf, 0x30, 0x8e, 0x30, 0xb, 0x9e, 0x90, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x71, 0x6, 0x3, 0x0, 0x30, 0x84, 0x30, 0xb, 0x94, 0x90, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x81, 0x80, 0x99, 0xc0, 0x82, 0xc9, 0x40, 0x20, 0x95, 0x20, 0x67, 0x95, 0xf, 0x30, 0xa2, 0x30, 0xb, 0xb2, 0xb0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xb8, 0x71, 0x6, 0x3, 0x0, 0x30, 0xa5, 0x30, 0xb, 0xb5, 0xb0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xb8, 0x81, 0xa0, 0x7b, 0xc0, 0xe9, 0xb1, 0x67, 0x99, 0x1, 0x7d, 0x8, 0x81, 0xa3, 0xff, 0xad, 0x7, 0xe0, 0x8, 0x0, 0x81, 0xa2, 0xff, 0x80, 0x8a, 0x10, 0x5c, 0xf9, 0x97, 0x98, 0x2, 0x6, 0x86, 0x0, 0x81, 0x9f, 0xff, 0xb8, 0xa1, 0xe0, 0x8, 0x0, 0xc, 0x8, 0x82, 0x41, 0x4f, 0x82, 0x41, 0x4e, 0x82, 0x41, 0x4d, 0x82, 0x41, 0x4c, 0x82, 0x41, 0x4b, 0x82, 0x41, 0x4a, 0x82, 0x41, 0x49, 0x82, 0x41, 0x48, 0x82, 0x41, 0x47, 0x82, 0x41, 0x46, 0x82, 0x41, 0x45, 0x82, 0x41, 0x44, 0x82, 0x41, 0x43, 0x82, 0x41, 0x42, 0x82, 0x41, 0x41, 0xc, 0x19, 0x92, 0x41, 0x40, 0x82, 0x41, 0x3f, 0x82, 0x41, 0x3e, 0x82, 0x41, 0x3d, 0x82, 0x41, 0x3c, 0x82, 0x41, 0x3b, 0x82, 0x41, 0x3a, 0x82, 0x41, 0x39, 0x82, 0x41, 0x38, 0x82, 0x41, 0x37, 0x82, 0x41, 0x36, 0x82, 0x41, 0x35, 0x82, 0x41, 0x34, 0x82, 0x41, 0x33, 0x82, 0x41, 0x32, 0x82, 0x41, 0x31, 0x82, 0x41, 0x30, 0x82, 0xa0, 0x78, 0x80, 0x87, 0x10, 0x80, 0x83, 0x41, 0x92, 0xc1, 0x30, 0x92, 0xc9, 0x10, 0x80, 0x89, 0xc0, 0x92, 0x8, 0x8, 0xa2, 0x8, 0x9, 0x80, 0xaa, 0x11, 0x90, 0x9a, 0x20, 0xa2, 0x8, 0xa, 0x0, 0xaa, 0x11, 0xb2, 0x8, 0xb, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0xa2, 0x8, 0xc, 0xb2, 0x8, 0xd, 0x80, 0xbb, 0x11, 0xa0, 0xab, 0x20, 0xb2, 0x8, 0xe, 0x0, 0xbb, 0x11, 0xc2, 0x8, 0xf, 0x80, 0xcc, 0x1, 0xb0, 0xbc, 0x20, 0xa0, 0xbb, 0x20, 0xa8, 0x91, 0xa0, 0xa7, 0x10, 0x0, 0x1a, 0x40, 0x90, 0xbb, 0x81, 0x30, 0xbb, 0x30, 0xe8, 0xb1, 0xb0, 0xee, 0x10, 0xb2, 0x8, 0x0, 0xc2, 0x8, 0x1, 0x80, 0xcc, 0x11, 0xb0, 0xbc, 0x20, 0xc2, 0x8, 0x2, 0x0, 0xcc, 0x11, 0xd2, 0x8, 0x3, 0x80, 0xdd, 0x1, 0xc0, 0xcd, 0x20, 0xb0, 0xbc, 0x20, 0xc2, 0x8, 0x4, 0xd2, 0x8, 0x5, 0x80, 0xdd, 0x11, 0xc0, 0xcd, 0x20, 0xd2, 0x8, 0x6, 0x0, 0xdd, 0x11, 0x82, 0x8, 0x7, 0x80, 0x88, 0x1, 0xd0, 0x88, 0x20, 0xc0, 0x88, 0x20, 0x0, 0x1a, 0x40, 0xb0, 0xc8, 0x81, 0x30, 0xcc, 0x30, 0xc0, 0x22, 0x10, 0x0, 0x99, 0xa1, 0x80, 0x81, 0x41, 0x30, 0xca, 0x30, 0x1c, 0xfd, 0xd0, 0xcc, 0x10, 0x0, 0xc, 0x40, 0x80, 0x80, 0x91, 0x80, 0x89, 0x20, 0x30, 0x88, 0x30, 0x80, 0x44, 0x10, 0x0, 0x1a, 0x40, 0x0, 0x8b, 0xa1, 0x30, 0x88, 0x30, 0x80, 0x55, 0x10, 0x67, 0x14, 0x2, 0x46, 0x99, 0xff, 0x86, 0x94, 0xff, 0x81, 0x48, 0xff, 0x90, 0xeb, 0x3, 0x80, 0x99, 0x10, 0x56, 0xd9, 0xc, 0x91, 0x4b, 0xff, 0xc0, 0x20, 0x0, 0x48, 0x9, 0x91, 0x4a, 0xff, 0xc0, 0x20, 0x0, 0x38, 0x9, 0x91, 0x49, 0xff, 0xc0, 0x20, 0x0, 0x58, 0x9, 0x90, 0xeb, 0x3, 0x80, 0x89, 0x10, 0x56, 0xc8, 0xa, 0xc, 0x6, 0x69, 0x31, 0x59, 0x21, 0x39, 0x11, 0x49, 0x1, 0x72, 0xc1, 0x50, 0x81, 0x3c, 0xff, 0xad, 0x7, 0xe0, 0x8, 0x0, 0xc0, 0x82, 0x11, 0x8a, 0xc7, 0x88, 0x1c, 0x30, 0xd8, 0x10, 0x7c, 0xf9, 0x4c, 0x8, 0xa8, 0xc, 0x40, 0xea, 0x10, 0x2c, 0xb, 0x67, 0x9e, 0x39, 0x90, 0xad, 0x30, 0xb, 0xfd, 0xf0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xa0, 0xa8, 0xc0, 0x86, 0xd, 0x0, 0x1c, 0xd9, 0x97, 0x98, 0x61, 0x81, 0x29, 0xff, 0x6, 0x5, 0x0, 0x81, 0x28, 0xff, 0x86, 0x3, 0x0, 0x81, 0x26, 0xff, 0x6, 0x2, 0x0, 0x81, 0x25, 0xff, 0x86, 0x0, 0x0, 0x81, 0x23, 0xff, 0xad, 0x2, 0xb8, 0xa1, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x90, 0xae, 0x30, 0xb, 0xfe, 0xf0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xa0, 0xab, 0xc0, 0xd0, 0xde, 0x20, 0xc8, 0x2c, 0x50, 0xcc, 0x10, 0x67, 0x1c, 0xd, 0x90, 0x8c, 0x30, 0xb, 0x9c, 0x90, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x80, 0x8b, 0xc0, 0x67, 0x9d, 0x2, 0xa2, 0xc8, 0x40, 0x81, 0x1b, 0xff, 0xe0, 0x8, 0x0, 0x81, 0x1b, 0xff, 0x80, 0x8a, 0x10, 0x5c, 0xf9, 0x97, 0x98, 0x1, 0x1d, 0xf0, 0x81, 0x18, 0xff, 0x86, 0xec, 0xff, 0xf0, 0x41, 0x0, 0x3d, 0xf0, 0x36, 0x41, 0x0, 0x81, 0x14, 0xff, 0x80, 0x82, 0x10, 0x91, 0x17, 0xff, 0x90, 0x88, 0xa0, 0x88, 0x8, 0x91, 0x16, 0xff, 0x97, 0x18, 0x6, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x12, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0xe, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0xa, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x6, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x22, 0x61, 0x4, 0x32, 0x61, 0x5, 0x42, 0x61, 0x6, 0x52, 0x61, 0x7, 0x62, 0x61, 0x8, 0x72, 0x61, 0x9, 0x82, 0x61, 0xa, 0x92, 0x61, 0xb, 0xa2, 0x61, 0xc, 0xb2, 0x61, 0xd, 0xc2, 0x61, 0xe, 0xd2, 0x61, 0xf, 0xe2, 0x61, 0x10, 0xf2, 0x61, 0x11, 0x30, 0x3, 0x3, 0x32, 0x61, 0x12, 0x70, 0x3e, 0xe3, 0x32, 0x61, 0x18, 0x2, 0x61, 0x36, 0x20, 0xe6, 0x3, 0x2, 0xa0, 0xf, 0x0, 0x32, 0x10, 0xf6, 0x33, 0x2, 0x32, 0xa0, 0x3, 0x1, 0xf2, 0xfe, 0x0, 0x33, 0x20, 0x30, 0xe6, 0x13, 0x0, 0xb1, 0x3, 0x12, 0xd1, 0x1, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x40, 0x80, 0x40, 0x12, 0xd1, 0xff, 0x20, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x36, 0x80, 0x0, 0x0, 0xf0, 0x41, 0x0, 0x3d, 0xf0, 0x32, 0x21, 0x12, 0x30, 0x3, 0x13, 0x32, 0x21, 0x18, 0x30, 0xe7, 0xf3, 0x22, 0x21, 0x4, 0x32, 0x21, 0x5, 0x42, 0x21, 0x6, 0x52, 0x21, 0x7, 0x62, 0x21, 0x8, 0x72, 0x21, 0x9, 0x82, 0x21, 0xa, 0x92, 0x21, 0xb, 0xa2, 0x21, 0xc, 0xb2, 0x21, 0xd, 0xc2, 0x21, 0xe, 0xd2, 0x21, 0xf, 0xe2, 0x21, 0x10, 0xf2, 0x21, 0x11, 0x80, 0x0, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xe6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xe8, 0x3, 0x2, 0x61, 0x13, 0x0, 0xee, 0x3, 0x2, 0x61, 0x14, 0x0, 0xb1, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd1, 0x3, 0x2, 0x61, 0x2, 0x85, 0xf0, 0xff, 0x1, 0xc7, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0x21, 0x13, 0x26, 0x46, 0x8, 0x10, 0x71, 0x20, 0x55, 0x28, 0x0, 0x46, 0x4, 0x0, 0x1, 0xc2, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x1, 0x10, 0x71, 0x20, 0x15, 0xb1, 0xff, 0x85, 0xf6, 0xff, 0x2, 0x21, 0x1, 0x0, 0xe6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x0, 0x30, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xe6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xe8, 0x3, 0x2, 0x61, 0x13, 0x0, 0xee, 0x3, 0x2, 0x61, 0x14, 0x0, 0xc0, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd7, 0x3, 0x2, 0x61, 0x2, 0x5, 0xe9, 0xff, 0x62, 0x21, 0x13, 0x10, 0x71, 0x20, 0x95, 0x21, 0x0, 0x5, 0xf1, 0xff, 0x2, 0x21, 0x1, 0x0, 0xe6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x0, 0x32, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc2, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb2, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd2, 0x3, 0x2, 0x61, 0x2, 0x45, 0xe4, 0xff, 0x1, 0x98, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x2, 0x10, 0x71, 0x20, 0x55, 0xa6, 0xff, 0xc5, 0xeb, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc2, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb2, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x32, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc3, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb3, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd3, 0x3, 0x2, 0x61, 0x2, 0x5, 0xdf, 0xff, 0x1, 0x81, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x3, 0x10, 0x71, 0x20, 0x15, 0xa1, 0xff, 0x85, 0xe6, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc3, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb3, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x33, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc4, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb4, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd4, 0x3, 0x2, 0x61, 0x2, 0xc5, 0xd9, 0xff, 0x1, 0x6f, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x4, 0x10, 0x71, 0x20, 0xd5, 0xd4, 0xff, 0x45, 0xe1, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc4, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb4, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc5, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb5, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd5, 0x3, 0x2, 0x61, 0x2, 0x85, 0xd4, 0xff, 0x1, 0x5b, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x5, 0x10, 0x71, 0x20, 0x95, 0xd0, 0xff, 0x5, 0xdc, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc5, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb5, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb6, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd6, 0x3, 0x2, 0x61, 0x2, 0x45, 0xcf, 0xff, 0x1, 0x47, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x6, 0x10, 0x71, 0x20, 0x55, 0xcc, 0xff, 0xc5, 0xd6, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb6, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x36, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc7, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb7, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd7, 0x3, 0x2, 0x61, 0x2, 0x5, 0xca, 0xff, 0x1, 0x33, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x7, 0x10, 0x71, 0x20, 0x15, 0xc8, 0xff, 0x85, 0xd1, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc7, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb7, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x37, 0x0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x81, 0x10, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x0, 0x0, 0x0, 0x0, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40, 0x4, 0xa3, 0x2, 0x40}, + }, + { + .addr = 1073464320, + .size = 520, + .data = (uint8_t[]){0x6b, 0x90, 0x2, 0x40, 0x6f, 0x91, 0x2, 0x40, 0x1b, 0x92, 0x2, 0x40, 0x6b, 0x90, 0x2, 0x40, 0x6b, 0x92, 0x2, 0x40, 0x6f, 0x91, 0x2, 0x40, 0xda, 0x92, 0x2, 0x40, 0x10, 0x93, 0x2, 0x40, 0x60, 0x93, 0x2, 0x40, 0xbe, 0x93, 0x2, 0x40, 0xc0, 0x9a, 0x2, 0x40, 0xed, 0x93, 0x2, 0x40, 0xc0, 0x9a, 0x2, 0x40, 0x1c, 0x94, 0x2, 0x40, 0x6b, 0x90, 0x2, 0x40, 0x6f, 0x91, 0x2, 0x40, 0x1b, 0x92, 0x2, 0x40, 0xc6, 0x94, 0x2, 0x40, 0xd2, 0x95, 0x2, 0x40, 0x5d, 0x91, 0x2, 0x40, 0x2, 0x96, 0x2, 0x40, 0x58, 0x96, 0x2, 0x40, 0x59, 0x98, 0x2, 0x40, 0x6f, 0x91, 0x2, 0x40, 0xbc, 0xa6, 0x2, 0x40, 0x22, 0xa4, 0x2, 0x40, 0x3, 0xa7, 0x2, 0x40, 0x3, 0xa7, 0x2, 0x40, 0x3, 0xa7, 0x2, 0x40, 0xa7, 0xa6, 0x2, 0x40, 0x3, 0xa7, 0x2, 0x40, 0x3, 0xa7, 0x2, 0x40, 0xad, 0xa6, 0x2, 0x40, 0xb3, 0xa6, 0x2, 0x40, 0xb9, 0xa6, 0x2, 0x40, 0xc0, 0xdb, 0xdc, 0xdb, 0xdd, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x40, 0x0, 0x41, 0x0, 0x42, 0x0, 0x43, 0x0, 0x44, 0x0, 0x45, 0x0, 0x47, 0x0, 0x48, 0x0, 0x49, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x37, 0x6, 0x0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x88, 0xc0, 0x28, 0x0, 0x0, 0x0, 0x53, 0x0, 0x0, 0x1, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x5, 0x0, 0x6, 0x0, 0x7, 0x0, 0x8, 0x0, 0x9, 0x0, 0xa, 0x0, 0xb, 0x0, 0xc, 0x0, 0xd, 0x0, 0xe, 0x0, 0xf, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x17, 0x0, 0x18, 0x0, 0x19, 0x0, 0x1a, 0x0, 0x1b, 0x0, 0x1c, 0x0, 0x1d, 0x0, 0x1e, 0x0, 0x1f, 0x0, 0x20, 0x0, 0x21, 0x0, 0x22, 0x0, 0x23, 0x0, 0x24, 0x0, 0x25, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x5f, 0x0, 0x5f, 0x0, 0x5f, 0x0, 0x5f, 0x0, 0x2d, 0x0, 0x2e, 0x0, 0x2f, 0x0, 0x30, 0x0, 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0x37, 0x0, 0x38, 0x0, 0x39, 0x0, 0x3a, 0x0, 0x3b, 0x0, 0x3c, 0x0, 0x3d, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x40, 0x0, 0x41, 0x0, 0x42, 0x0, 0x43, 0x0, 0x44, 0x0, 0x45, 0x0, 0x46, 0x0, 0x47, 0x0, 0x48, 0x0, 0x49, 0x0, 0x5f, 0x0, 0x4b, 0x0, 0x4c, 0x0, 0x4d, 0x0, 0x4e, 0x0, 0x4f, 0x0, 0x50, 0x0, 0x51, 0x0, 0x52, 0x0, 0x53, 0x0, 0x5f, 0x0, 0x55, 0x0, 0x56, 0x0, 0x57, 0x0, 0x58, 0x0, 0x59, 0x0, 0x5f, 0x0, 0x5b, 0x0, 0x5c, 0x0, 0x5d, 0x0, 0x5e, 0x0, 0x0, 0x0}, + }, + }, + }, + + // esp32c3.json + { + .header = { + .entrypoint = 1077411840, + }, + .segments = { + { + .addr = 1077411840, + .size = 11176, + .data = (uint8_t[]){0xb7, 0x0, 0x38, 0x40, 0x67, 0x80, 0x80, 0x0, 0x17, 0x15, 0x91, 0xff, 0x13, 0x5, 0x45, 0xab, 0x97, 0xd5, 0x91, 0xff, 0x93, 0x85, 0x85, 0xed, 0x63, 0x57, 0xb5, 0x0, 0x81, 0x46, 0x14, 0xc1, 0x11, 0x5, 0xe3, 0x4e, 0xb5, 0xfe, 0x17, 0x5, 0xc8, 0xf, 0x13, 0x5, 0xa5, 0xfd, 0x97, 0x5, 0xc8, 0xf, 0x93, 0x85, 0x25, 0xfd, 0x63, 0x57, 0xb5, 0x0, 0x81, 0x46, 0x14, 0xc1, 0x11, 0x5, 0xe3, 0x4e, 0xb5, 0xfe, 0x81, 0x40, 0x1, 0x41, 0x81, 0x41, 0x1, 0x42, 0x81, 0x42, 0x1, 0x43, 0x81, 0x43, 0x1, 0x44, 0x81, 0x44, 0x1, 0x45, 0x81, 0x45, 0x1, 0x46, 0x81, 0x46, 0x1, 0x47, 0x81, 0x47, 0x1, 0x48, 0x81, 0x48, 0x1, 0x49, 0x81, 0x49, 0x1, 0x4a, 0x81, 0x4a, 0x1, 0x4b, 0x81, 0x4b, 0x1, 0x4c, 0x81, 0x4c, 0x1, 0x4d, 0x81, 0x4d, 0x1, 0x4e, 0x81, 0x4e, 0x1, 0x4f, 0x81, 0x4f, 0x97, 0x11, 0x91, 0xff, 0x93, 0x81, 0xa1, 0x23, 0xf3, 0x23, 0x40, 0xf1, 0xb7, 0x2, 0x0, 0x0, 0x93, 0x82, 0x2, 0x0, 0x63, 0xf4, 0x72, 0x0, 0x6f, 0x0, 0x80, 0x4, 0x17, 0x1, 0x95, 0xff, 0x13, 0x1, 0x21, 0xf6, 0x91, 0x42, 0x33, 0x1, 0x51, 0x40, 0x13, 0x71, 0x1, 0xff, 0xa, 0x84, 0x6f, 0x0, 0x40, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x72, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x63, 0x37, 0xe5, 0xc9, 0x3f, 0xb7, 0xc5, 0xad, 0xde, 0x93, 0x85, 0xe5, 0xab, 0x23, 0x24, 0xb5, 0xee, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x57, 0x6f, 0x0, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x60, 0x4, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x35, 0x6, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x47, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x33, 0xe8, 0xb6, 0x0, 0x83, 0x45, 0x55, 0x0, 0x3, 0x46, 0x45, 0x0, 0x83, 0x46, 0x65, 0x0, 0x3, 0x47, 0x75, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x3, 0x46, 0x95, 0x0, 0x83, 0x46, 0x85, 0x0, 0x3, 0x47, 0xa5, 0x0, 0x83, 0x47, 0xb5, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x48, 0xd5, 0x0, 0x3, 0x47, 0xc5, 0x0, 0x83, 0x47, 0xe5, 0x0, 0x83, 0x46, 0xf5, 0x0, 0xa2, 0x8, 0x33, 0xe7, 0xe8, 0x0, 0xc2, 0x7, 0xe2, 0x6, 0xdd, 0x8e, 0xd9, 0x8e, 0x83, 0x48, 0x15, 0x1, 0x83, 0x42, 0x5, 0x1, 0x3, 0x43, 0x25, 0x1, 0x83, 0x47, 0x35, 0x1, 0xa2, 0x8, 0x33, 0xe7, 0x58, 0x0, 0x42, 0x3, 0xe2, 0x7, 0xb3, 0xe7, 0x67, 0x0, 0x5d, 0x8f, 0x83, 0x42, 0x55, 0x1, 0x83, 0x48, 0x45, 0x1, 0x3, 0x43, 0x65, 0x1, 0x3, 0x45, 0x75, 0x1, 0xa2, 0x2, 0xb3, 0xe7, 0x12, 0x1, 0x42, 0x3, 0x62, 0x5, 0x33, 0x65, 0x65, 0x0, 0xc9, 0x8f, 0x42, 0x85, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0xf7, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xfc, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xe, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x2a, 0x29, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x2b, 0x3, 0x45, 0xb4, 0x0, 0x83, 0x45, 0xa4, 0x0, 0x3, 0x46, 0xc4, 0x0, 0x83, 0x46, 0xd4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0xf4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0x4, 0x1, 0x3, 0x47, 0x14, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0x33, 0x66, 0xd7, 0x0, 0x49, 0x8e, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x26, 0x26, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0x24, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x36, 0x89, 0xb2, 0x89, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x22, 0x21, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x22, 0x26, 0x85, 0xce, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x22, 0x93, 0x5, 0x84, 0x0, 0x9, 0x46, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x21, 0x26, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x1e, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0x6a, 0xc8, 0x6e, 0xc6, 0xaa, 0x8a, 0x3, 0x2b, 0x45, 0x1, 0x44, 0x45, 0x36, 0x8a, 0x32, 0x89, 0xae, 0x89, 0xda, 0x8c, 0x63, 0x63, 0xdb, 0x0, 0xd2, 0x8c, 0x3, 0xa4, 0xa, 0x1, 0x83, 0xad, 0x8a, 0x0, 0x26, 0xc4, 0xe6, 0x94, 0xc1, 0x6b, 0x5, 0x6d, 0x63, 0x7f, 0x94, 0x2, 0x13, 0x15, 0x4, 0x1, 0x9, 0xed, 0x33, 0xc, 0x74, 0x1, 0x63, 0xea, 0x8d, 0x1, 0x13, 0x55, 0x4, 0x1, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xe1, 0x19, 0xc9, 0x61, 0xa0, 0x13, 0x55, 0xc4, 0x0, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x60, 0xe0, 0x2d, 0xed, 0x33, 0xc, 0xa4, 0x1, 0x23, 0xa8, 0x8a, 0x1, 0x62, 0x84, 0xe3, 0x65, 0x9c, 0xfc, 0x1, 0x44, 0xa2, 0x4b, 0x5e, 0x8c, 0x63, 0x85, 0xc, 0x4, 0x5, 0x65, 0xe6, 0x84, 0x63, 0xe3, 0xac, 0x0, 0x85, 0x64, 0x63, 0x6c, 0x8a, 0x6, 0xb3, 0x5, 0x89, 0x0, 0x62, 0x85, 0x26, 0x86, 0x63, 0x87, 0x9, 0x0, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xdb, 0x29, 0xa0, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x40, 0xdc, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xc, 0xa3, 0x8e, 0xaa, 0x0, 0xb3, 0x8c, 0x9c, 0x40, 0x26, 0x94, 0x26, 0x9c, 0xe3, 0x9f, 0xc, 0xfa, 0x1, 0x45, 0xb3, 0x85, 0x8b, 0x0, 0xd6, 0x86, 0xcc, 0xc6, 0xb3, 0x5, 0x8b, 0x40, 0x33, 0x36, 0xbb, 0x0, 0x7d, 0x16, 0xf1, 0x8d, 0xcc, 0xca, 0x19, 0xa0, 0x13, 0x5, 0x60, 0x3, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x42, 0x4d, 0xb2, 0x4d, 0x21, 0x61, 0x82, 0x80, 0x0, 0x0, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0xb2, 0x89, 0x2e, 0x89, 0x2a, 0x84, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x15, 0x13, 0x75, 0xf5, 0xf, 0x13, 0x5, 0x5, 0xf4, 0x7d, 0xf5, 0x81, 0x44, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x14, 0x93, 0x75, 0xf5, 0xf, 0x13, 0x86, 0x55, 0xf2, 0x1d, 0xe2, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x13, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0x45, 0xf2, 0x99, 0xcd, 0x13, 0x5, 0x35, 0xf2, 0x71, 0xf9, 0x13, 0x5, 0xb0, 0xd, 0x63, 0xed, 0x34, 0x1, 0x25, 0xa8, 0x93, 0x85, 0x5, 0xf4, 0x91, 0xcd, 0x63, 0xe7, 0x34, 0x1, 0x35, 0xa0, 0x13, 0x5, 0x0, 0xc, 0x63, 0xf3, 0x34, 0x3, 0xb3, 0x5, 0x99, 0x0, 0x23, 0x80, 0xa5, 0x0, 0x85, 0x4, 0x6d, 0xb7, 0x63, 0xeb, 0x99, 0x0, 0x4a, 0x85, 0xa6, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x32, 0x89, 0xae, 0x84, 0x2a, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x2, 0x22, 0x85, 0xa6, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x2, 0x22, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0xb7, 0x5, 0xc9, 0x3f, 0x93, 0x85, 0x5, 0xa, 0x5, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0x14, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x32, 0x84, 0xae, 0x84, 0x2a, 0x89, 0x37, 0x5, 0xc9, 0x3f, 0x93, 0x9, 0x15, 0xa, 0x37, 0x5, 0xc9, 0x3f, 0x13, 0xa, 0x35, 0xa, 0x15, 0xce, 0x3, 0xc5, 0x4, 0x0, 0x93, 0x5, 0x5, 0xf4, 0x81, 0xc9, 0x93, 0x5, 0x55, 0xf2, 0x89, 0xe9, 0x9, 0x46, 0x4a, 0x85, 0xd2, 0x85, 0x19, 0xa8, 0x9, 0x46, 0x4a, 0x85, 0xce, 0x85, 0x39, 0xa0, 0xa3, 0x3, 0xa1, 0x0, 0x93, 0x5, 0x71, 0x0, 0x5, 0x46, 0x4a, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0xf, 0x85, 0x4, 0x7d, 0x14, 0x61, 0xf4, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x73, 0x76, 0x4, 0x30, 0x83, 0x45, 0x5, 0x0, 0x81, 0xe5, 0x85, 0x46, 0x23, 0x0, 0xd5, 0x0, 0x21, 0x8a, 0x19, 0xc2, 0x73, 0x60, 0x4, 0x30, 0x33, 0x35, 0xb0, 0x0, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x39, 0xc9, 0x85, 0x45, 0x63, 0x14, 0xb5, 0xa, 0x37, 0x15, 0xc9, 0x3f, 0x13, 0x5, 0xc5, 0xad, 0xc5, 0x45, 0xaa, 0x5, 0x2e, 0x95, 0xa1, 0x45, 0x81, 0x47, 0xf3, 0x77, 0x4, 0x30, 0x10, 0x41, 0x54, 0x41, 0x3, 0x47, 0x85, 0x0, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0xa0, 0x5, 0x30, 0x35, 0x8e, 0x59, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x6d, 0xf2, 0x1, 0x44, 0x73, 0x74, 0x4, 0x30, 0x97, 0x20, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x8b, 0x5, 0x89, 0x35, 0xc1, 0x21, 0x88, 0x39, 0xc8, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0xb9, 0xa0, 0x37, 0x15, 0xc9, 0x3f, 0x13, 0x5, 0xc5, 0xad, 0xc5, 0x45, 0xaa, 0x5, 0x2e, 0x95, 0xa1, 0x45, 0x81, 0x47, 0xf3, 0x77, 0x4, 0x30, 0x10, 0x41, 0x54, 0x41, 0x3, 0x47, 0x85, 0x0, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0xa0, 0x5, 0x30, 0x35, 0x8e, 0x59, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x6d, 0xf2, 0x1, 0x44, 0x73, 0x74, 0x4, 0x30, 0x97, 0x20, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x86, 0x5, 0x89, 0x19, 0xc9, 0x21, 0x88, 0x1, 0xc4, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x2e, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x0, 0x0, 0x31, 0xc1, 0x85, 0x46, 0x63, 0x11, 0xd5, 0x6, 0x37, 0x35, 0x4, 0x60, 0xd, 0x48, 0x15, 0xca, 0x93, 0x6, 0x0, 0x4, 0xb2, 0x87, 0x63, 0x64, 0xd6, 0x0, 0x93, 0x7, 0x0, 0x4, 0xb3, 0x88, 0xf5, 0x0, 0x3e, 0x87, 0x99, 0xc7, 0x83, 0xc6, 0x5, 0x0, 0x85, 0x5, 0x14, 0xc1, 0x7d, 0x17, 0x7d, 0xfb, 0x23, 0x22, 0x5, 0x1, 0x4c, 0x41, 0x8d, 0x89, 0xf5, 0xdd, 0x1d, 0x8e, 0xc6, 0x85, 0x61, 0xfa, 0x82, 0x80, 0x2e, 0x96, 0x37, 0x5, 0x0, 0x60, 0xb7, 0x6, 0x80, 0x3, 0xe3, 0x8a, 0xc5, 0xfe, 0x58, 0x4d, 0x75, 0x8f, 0x75, 0xff, 0x3, 0xc7, 0x5, 0x0, 0x85, 0x5, 0x18, 0xc1, 0xe3, 0x99, 0xc5, 0xfe, 0xf9, 0xbf, 0x0, 0x0, 0x11, 0x71, 0x86, 0xdf, 0xa2, 0xdd, 0xa6, 0xdb, 0xca, 0xd9, 0xce, 0xd7, 0xd2, 0xd5, 0xd6, 0xd3, 0xda, 0xd1, 0xde, 0xcf, 0xe2, 0xcd, 0xe6, 0xcb, 0xea, 0xc9, 0xee, 0xc7, 0x29, 0x65, 0x13, 0x5, 0x5, 0x82, 0x33, 0x1, 0xa1, 0x40, 0x1, 0x45, 0x73, 0x75, 0x4, 0x30, 0xb7, 0x15, 0xc9, 0x3f, 0x3, 0xc6, 0xe5, 0xab, 0x63, 0x19, 0x6, 0x40, 0x5, 0x46, 0x21, 0x89, 0x23, 0x8f, 0xc5, 0xaa, 0x1, 0xc5, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x5, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xf9, 0x93, 0x5, 0xf0, 0x9, 0x63, 0xe7, 0xa5, 0x10, 0x37, 0x85, 0x0, 0x60, 0xc, 0x41, 0x93, 0xf5, 0xf5, 0xab, 0xc, 0xc1, 0x37, 0xe5, 0x0, 0x60, 0x2c, 0x41, 0xdd, 0x99, 0x2c, 0xc1, 0x2c, 0x41, 0x93, 0xe5, 0x45, 0x0, 0x2c, 0xc1, 0x37, 0x4, 0xc, 0x60, 0x8, 0x44, 0x13, 0x65, 0x45, 0x0, 0x8, 0xc4, 0x13, 0x5, 0x60, 0x6, 0x11, 0x46, 0x93, 0x6, 0xb0, 0x6, 0x81, 0x45, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x60, 0x27, 0x13, 0x5, 0x60, 0x6, 0x9, 0x46, 0x93, 0x6, 0x0, 0x5, 0x81, 0x45, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0x26, 0x13, 0x5, 0x60, 0x6, 0xd, 0x46, 0xa1, 0x46, 0x81, 0x45, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0x25, 0x13, 0x5, 0x60, 0x6, 0x15, 0x46, 0x89, 0x46, 0x81, 0x45, 0x1, 0x47, 0x81, 0x47, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0x23, 0x13, 0x5, 0x60, 0x6, 0x15, 0x46, 0x99, 0x46, 0x11, 0x47, 0x81, 0x45, 0x81, 0x47, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0x22, 0x13, 0x5, 0x60, 0x6, 0x19, 0x46, 0x93, 0x6, 0x30, 0x9, 0x81, 0x45, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0x21, 0x13, 0x5, 0x60, 0x6, 0x25, 0x46, 0x85, 0x46, 0x89, 0x47, 0x81, 0x45, 0x1, 0x47, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0x1f, 0x13, 0x5, 0x60, 0x6, 0x19, 0x46, 0x95, 0x46, 0x11, 0x47, 0x89, 0x47, 0x81, 0x45, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0x1e, 0x13, 0x5, 0x60, 0x6, 0x19, 0x46, 0x9d, 0x46, 0x19, 0x47, 0x85, 0x47, 0x81, 0x45, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0x1d, 0x28, 0x4c, 0xfd, 0x75, 0x6d, 0x8d, 0x13, 0x5, 0x5, 0x40, 0x28, 0xcc, 0x8, 0x44, 0x71, 0x99, 0x5, 0x5, 0x8, 0xc4, 0x13, 0x5, 0x0, 0xa, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xa0, 0xdd, 0x5, 0x45, 0x25, 0xa0, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0xdc, 0x37, 0x5, 0xc, 0x60, 0x2c, 0x4d, 0x93, 0xf5, 0x5, 0xc0, 0x2c, 0xcd, 0x2c, 0x4d, 0x7d, 0x76, 0x13, 0x6, 0xf6, 0x3f, 0xf1, 0x8d, 0x2c, 0xcd, 0x9, 0x45, 0x93, 0x5, 0x0, 0xa, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xe9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0xd, 0xa1, 0x0, 0x5, 0x45, 0x5, 0x49, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xe5, 0x2a, 0x84, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0x8b, 0x3, 0x45, 0x85, 0x1, 0x8d, 0x49, 0x63, 0x16, 0x35, 0x13, 0x31, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xde, 0x37, 0x35, 0x4, 0x60, 0x81, 0x45, 0xc, 0xc9, 0xa1, 0x4a, 0x23, 0x2a, 0x55, 0x1, 0xc, 0xc9, 0x91, 0x45, 0x4c, 0xc9, 0x37, 0x95, 0x0, 0x60, 0x3, 0x2c, 0x5, 0x83, 0x13, 0xb, 0xc1, 0x1, 0x89, 0x4b, 0x93, 0xc, 0x45, 0x83, 0x5, 0x4a, 0x5, 0x4d, 0x5, 0x44, 0x63, 0x84, 0x3b, 0x9, 0x93, 0x5, 0x0, 0x2, 0x4a, 0x85, 0x63, 0x64, 0xb9, 0x0, 0x13, 0x5, 0x0, 0x2, 0x13, 0x86, 0xfb, 0xff, 0x63, 0x4, 0xa6, 0x1, 0x3, 0xac, 0xcc, 0xff, 0x93, 0x55, 0x9c, 0x1, 0x5, 0xa, 0x63, 0x6d, 0x59, 0x1, 0x3, 0xac, 0xc, 0x0, 0x13, 0x16, 0x7c, 0x0, 0xd1, 0x8d, 0x5e, 0x8d, 0x52, 0x86, 0x93, 0x6, 0x0, 0x2, 0x63, 0x79, 0xd9, 0x0, 0xb3, 0x6, 0xa0, 0x40, 0x7d, 0x57, 0xb3, 0x56, 0xd7, 0x0, 0xf5, 0x8d, 0x32, 0x8d, 0x1d, 0x5, 0x93, 0x54, 0x35, 0x0, 0x23, 0xa0, 0xbd, 0x0, 0x63, 0x6f, 0x94, 0x1e, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x5, 0xa1, 0x0, 0x5a, 0x85, 0x26, 0x86, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0xaa, 0x5, 0x8c, 0x26, 0x9b, 0x1, 0x19, 0x85, 0xb, 0x91, 0xc, 0xe3, 0x95, 0x3b, 0xf9, 0x29, 0xa0, 0x23, 0x0, 0xb, 0x0, 0x5, 0xb, 0x7d, 0x14, 0x65, 0xfc, 0x3, 0x45, 0xc1, 0x1, 0x5, 0x89, 0x9, 0xcd, 0x37, 0x35, 0x4, 0x60, 0xc, 0x4d, 0x7d, 0x76, 0x13, 0x6, 0xf6, 0x3f, 0x13, 0x6, 0x6, 0x10, 0xf1, 0x8d, 0x93, 0x85, 0x5, 0x30, 0xc, 0xcd, 0x37, 0x35, 0x38, 0x40, 0x13, 0x5, 0x5, 0xab, 0xb7, 0x25, 0x38, 0x40, 0x93, 0x85, 0xe5, 0xdf, 0x2c, 0xd5, 0x69, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xdc, 0x37, 0x35, 0x4, 0x60, 0xc, 0x49, 0x93, 0xe5, 0x45, 0x0, 0xc, 0xc9, 0x37, 0x15, 0xc9, 0x3f, 0x13, 0x4, 0xc5, 0xab, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xbf, 0x5, 0x89, 0x63, 0x17, 0x5, 0x16, 0x93, 0xa, 0x14, 0x0, 0x5, 0x49, 0xa5, 0xaa, 0x37, 0x5, 0xc, 0x60, 0xc, 0x49, 0x9e, 0x5, 0x63, 0xc7, 0x5, 0x0, 0xc, 0x49, 0x37, 0x6, 0x0, 0x1, 0xd1, 0x8d, 0xc, 0xc9, 0x35, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xca, 0x37, 0x9, 0x4, 0x0, 0x13, 0x5, 0x19, 0x11, 0xb7, 0x4, 0x0, 0x60, 0x88, 0xc8, 0x81, 0x45, 0xcc, 0xc4, 0x1d, 0x65, 0x9, 0x5, 0x88, 0xc8, 0xcc, 0xc4, 0x37, 0x85, 0x1c, 0x1c, 0x93, 0x5, 0xf5, 0xbf, 0x33, 0x6, 0xb4, 0x0, 0x13, 0x5, 0x5, 0xc0, 0x33, 0x55, 0xa6, 0x2, 0x93, 0x16, 0xc5, 0x0, 0x37, 0xf7, 0xf, 0x0, 0xba, 0x96, 0x37, 0x7, 0x70, 0x3, 0xd9, 0x8e, 0xb4, 0xdc, 0x63, 0xf1, 0xc5, 0x10, 0xf1, 0x65, 0x93, 0x85, 0x5, 0x20, 0x33, 0x5, 0xb5, 0x2, 0x12, 0x4, 0x33, 0x55, 0xa4, 0x2, 0x93, 0x15, 0x5, 0x1, 0xd1, 0x81, 0x72, 0x5, 0x21, 0x81, 0x4d, 0x8d, 0xc8, 0xc8, 0x88, 0x50, 0x13, 0x65, 0xc5, 0x0, 0x88, 0xd0, 0x88, 0x50, 0x75, 0x99, 0x88, 0xd0, 0x88, 0x50, 0x13, 0x75, 0xf5, 0xfc, 0x41, 0x5, 0x88, 0xd0, 0x37, 0x35, 0x38, 0x40, 0x13, 0x5, 0x5, 0xab, 0xb7, 0x25, 0x38, 0x40, 0x93, 0x85, 0x45, 0xd8, 0x6c, 0xc9, 0x55, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xce, 0x88, 0x50, 0xb7, 0x5, 0x0, 0x4, 0x4d, 0x8d, 0x88, 0xd0, 0x88, 0x50, 0x33, 0x65, 0x25, 0x1, 0x88, 0xd0, 0x3, 0xa5, 0x4, 0x8, 0xb7, 0x5, 0x0, 0x80, 0x4d, 0x8d, 0x23, 0xa0, 0xa4, 0x8, 0x3, 0xa5, 0x4, 0x8, 0xe3, 0x4e, 0x5, 0xfe, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0xfc, 0xff, 0x7d, 0x16, 0xf1, 0x8d, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0x4c, 0x83, 0x25, 0x5, 0x8, 0xe3, 0xce, 0x5, 0xfe, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0x2, 0x0, 0xd1, 0x8d, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x22, 0x4b, 0x83, 0x25, 0x5, 0x8, 0xe3, 0xce, 0x5, 0xfe, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x1, 0x76, 0x7d, 0x16, 0xf1, 0x8d, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x62, 0x49, 0x83, 0x25, 0x5, 0x8, 0xe3, 0xce, 0x5, 0xfe, 0x3d, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x5e, 0x37, 0x5, 0x0, 0x60, 0x4c, 0x45, 0x93, 0xe5, 0x15, 0x0, 0x4c, 0xc5, 0x37, 0x14, 0xc9, 0x3f, 0x93, 0xa, 0x44, 0xac, 0x13, 0x85, 0x4a, 0x1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xa8, 0x5, 0x89, 0x11, 0xc1, 0x0, 0x0, 0x1, 0x49, 0x9, 0x45, 0x23, 0x12, 0xa4, 0xac, 0x23, 0x88, 0xa, 0x0, 0x29, 0x45, 0x23, 0x89, 0xaa, 0x0, 0x29, 0x65, 0x13, 0x5, 0xa5, 0x80, 0xb3, 0x9, 0xa1, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x4, 0xa1, 0x0, 0xd, 0x44, 0x5, 0x65, 0x13, 0xa, 0x5, 0xda, 0x19, 0xc8, 0x26, 0x85, 0x81, 0x45, 0x52, 0x86, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0x88, 0xd2, 0x94, 0x7d, 0x14, 0x7d, 0xf4, 0xd, 0x6b, 0x93, 0x4, 0xb, 0x8e, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x26, 0x86, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0x85, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xa0, 0xc1, 0xb7, 0x45, 0x0, 0x60, 0x8c, 0x5d, 0xf1, 0x89, 0x93, 0xc5, 0x85, 0x0, 0xc9, 0x8d, 0x85, 0x4b, 0x91, 0xe1, 0x5, 0x45, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x40, 0x64, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0x33, 0x4, 0xa1, 0x0, 0x23, 0x20, 0x4, 0x0, 0x37, 0x5, 0x0, 0x1, 0x48, 0xc0, 0x41, 0x6a, 0x23, 0x24, 0x44, 0x1, 0x5, 0x65, 0x48, 0xc4, 0x13, 0x5, 0x0, 0x10, 0x8, 0xc8, 0x13, 0x5, 0xfa, 0xff, 0x48, 0xc8, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x5a, 0x4a, 0xce, 0x56, 0xd0, 0x48, 0x10, 0x93, 0xa, 0xa1, 0x7, 0x13, 0x6, 0x60, 0x5, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0x7e, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x56, 0x85, 0x26, 0x86, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x7d, 0x13, 0x5, 0xeb, 0x93, 0x6c, 0x8, 0x2e, 0x95, 0x13, 0x6, 0xd0, 0x1c, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x7b, 0x13, 0x5, 0xf0, 0x4, 0x23, 0x0, 0xa4, 0x0, 0x13, 0x5, 0x80, 0x4, 0xa3, 0x0, 0xa4, 0x0, 0x13, 0x5, 0x10, 0x4, 0x23, 0x1, 0xa4, 0x0, 0x13, 0x5, 0x90, 0x4, 0xa3, 0x1, 0xa4, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x5, 0xa1, 0x0, 0x11, 0x46, 0x4a, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x88, 0x45, 0x49, 0x2a, 0x9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x81, 0x45, 0x4a, 0x86, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x80, 0x76, 0x21, 0x4c, 0x13, 0xd, 0xa, 0xf0, 0x9, 0x4a, 0x37, 0x5, 0xc9, 0x3f, 0x13, 0x5, 0xc5, 0x6, 0x2a, 0xcc, 0x37, 0x55, 0xc9, 0x3f, 0x13, 0x5, 0x85, 0xee, 0x2a, 0xc6, 0x37, 0x5, 0xc9, 0x3f, 0x93, 0xd, 0x5, 0x2, 0x9, 0x65, 0x13, 0x5, 0x5, 0x71, 0x2a, 0xc2, 0x19, 0x4b, 0x72, 0x45, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x4a, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x79, 0xe3, 0xe3, 0x85, 0xe7, 0x2a, 0x84, 0xae, 0x8c, 0x3, 0x45, 0x15, 0x0, 0x83, 0x45, 0x4, 0x0, 0x3, 0x46, 0x24, 0x0, 0x83, 0x46, 0x34, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x64, 0xa6, 0x0, 0x33, 0xf5, 0xa4, 0x1, 0x13, 0x5, 0x5, 0xf0, 0xe3, 0xc, 0x5, 0xe2, 0x83, 0x45, 0x44, 0x0, 0x3, 0x47, 0x54, 0x0, 0x83, 0x48, 0x64, 0x0, 0x83, 0x46, 0x74, 0x0, 0x13, 0xd5, 0x84, 0x0, 0x93, 0x97, 0x85, 0x1, 0x5d, 0x8d, 0x23, 0x80, 0x79, 0x1, 0xa3, 0x80, 0xa9, 0x0, 0xa3, 0x81, 0x9, 0x0, 0x23, 0x81, 0x49, 0x1, 0xa3, 0x83, 0x9, 0x0, 0x23, 0x83, 0x9, 0x0, 0xa3, 0x82, 0x9, 0x0, 0x23, 0x82, 0x9, 0x0, 0x23, 0x84, 0x9, 0x0, 0xa3, 0x84, 0x9, 0x0, 0xa3, 0x86, 0x9, 0x0, 0x23, 0x86, 0x9, 0x0, 0xa3, 0x85, 0x9, 0x0, 0x23, 0x85, 0x79, 0x1, 0xa3, 0x88, 0x9, 0x0, 0x23, 0x88, 0x9, 0x0, 0xa3, 0x87, 0x9, 0x0, 0x93, 0x7a, 0xf5, 0xf, 0x13, 0x85, 0xea, 0xff, 0x23, 0x87, 0x9, 0x0, 0x49, 0x46, 0x63, 0x60, 0xa6, 0xc, 0xa, 0x5, 0x6e, 0x95, 0x8, 0x41, 0x2, 0x85, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xea, 0xbc, 0x78, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0x1f, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x54, 0x1, 0x3, 0x46, 0x44, 0x1, 0x83, 0x46, 0x64, 0x1, 0x3, 0x47, 0x74, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x3, 0x46, 0xd4, 0x0, 0x83, 0x46, 0xc4, 0x0, 0x3, 0x47, 0xe4, 0x0, 0x83, 0x47, 0xf4, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x46, 0x94, 0x0, 0x3, 0x47, 0x84, 0x0, 0x83, 0x47, 0xa4, 0x0, 0x83, 0x44, 0xb4, 0x0, 0xa2, 0x6, 0xd9, 0x8e, 0xc2, 0x7, 0xe2, 0x4, 0xc5, 0x8f, 0xdd, 0x8e, 0x7d, 0x77, 0x69, 0x8f, 0x3a, 0xd6, 0x2a, 0xd4, 0x36, 0x95, 0x2a, 0xd2, 0x33, 0x5, 0xb6, 0x2, 0x2a, 0xda, 0x36, 0xd8, 0x23, 0x1e, 0x1, 0x2, 0x23, 0x1d, 0x1, 0x2, 0x23, 0xc, 0x71, 0x3, 0x41, 0x45, 0x63, 0x84, 0xaa, 0x0, 0x63, 0x98, 0x4a, 0x71, 0x13, 0x5, 0x20, 0xc, 0x11, 0x66, 0x63, 0x6f, 0xb6, 0x6e, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x3c, 0xaa, 0x85, 0x13, 0x5, 0x50, 0xc, 0x63, 0x96, 0x5, 0x6e, 0xc5, 0xad, 0x13, 0x85, 0xa, 0xf3, 0xa, 0x5, 0x62, 0x46, 0x32, 0x95, 0x8, 0x41, 0x2, 0x85, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xe0, 0x37, 0xaa, 0x85, 0x13, 0x5, 0x40, 0xc, 0x63, 0x95, 0x5, 0x6c, 0xf9, 0xa5, 0x61, 0x45, 0x63, 0xef, 0xac, 0x6a, 0x26, 0x85, 0x63, 0x8e, 0x7a, 0x6b, 0x3, 0x45, 0x81, 0x3, 0x63, 0xe, 0x5, 0x58, 0x13, 0x88, 0x8c, 0xfe, 0x93, 0x2, 0x84, 0x1, 0x63, 0x3, 0x8, 0x5e, 0xb3, 0x4, 0x94, 0x1, 0x93, 0x7, 0xf0, 0xe, 0x16, 0x85, 0x3, 0x46, 0x5, 0x0, 0x5, 0x5, 0xb1, 0x8f, 0xe3, 0x1c, 0x95, 0xfe, 0x93, 0xf7, 0xf7, 0xf, 0xf1, 0xa3, 0x13, 0x5, 0x0, 0xc, 0x63, 0x82, 0x8c, 0x69, 0x83, 0x45, 0x84, 0x0, 0x26, 0x85, 0x63, 0x8d, 0x45, 0x67, 0x3, 0x45, 0x81, 0x3, 0x63, 0xd, 0x5, 0x54, 0x42, 0x56, 0x13, 0x5, 0x80, 0xc, 0x63, 0x14, 0x6, 0x66, 0x23, 0xc, 0x1, 0x2, 0x63, 0x94, 0x5, 0x66, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x3b, 0x12, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xe0, 0x21, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x25, 0x81, 0xa5, 0x2d, 0x45, 0xe3, 0x7b, 0x95, 0xc5, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x62, 0x5, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x31, 0x1d, 0xa5, 0x81, 0x44, 0x85, 0x45, 0x85, 0x88, 0x63, 0x9f, 0x4, 0x60, 0x63, 0x54, 0xbb, 0x0, 0x1d, 0x44, 0x19, 0xa0, 0x13, 0x84, 0x15, 0x0, 0x72, 0x45, 0x93, 0xa5, 0x75, 0x0, 0x93, 0xc4, 0x15, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x35, 0xa2, 0x85, 0xc9, 0xbf, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x51, 0x46, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x4b, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0x33, 0x6, 0xa1, 0x0, 0x1, 0x45, 0x81, 0x45, 0x97, 0xb0, 0xcc, 0xff, 0xe7, 0x80, 0x60, 0xb2, 0x63, 0xa, 0x5, 0x4a, 0x13, 0x5, 0x30, 0xc, 0x5d, 0xab, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe7, 0xbc, 0x5a, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0xfe, 0x51, 0x8d, 0x83, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x88, 0xc1, 0x69, 0xa3, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xed, 0xbc, 0x56, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x22, 0x5, 0xc9, 0x8d, 0x42, 0x6, 0x83, 0x46, 0xb4, 0x0, 0x3, 0x4a, 0xc4, 0x0, 0x83, 0x44, 0xd4, 0x0, 0x3, 0x4c, 0xe4, 0x0, 0x83, 0x4a, 0xf4, 0x0, 0x72, 0x45, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x2a, 0x11, 0x65, 0x13, 0x5, 0x85, 0xa9, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x10, 0x37, 0x5, 0x0, 0x60, 0x48, 0x49, 0xe3, 0x2, 0x4, 0xb4, 0xa2, 0x4, 0xb3, 0xe5, 0x44, 0x1, 0x42, 0xc, 0xe2, 0xa, 0x33, 0xe6, 0x8a, 0x1, 0xd1, 0x8d, 0x13, 0x16, 0xc5, 0x0, 0x21, 0x82, 0x22, 0x5, 0x71, 0x81, 0x51, 0x8d, 0x33, 0x5, 0xb5, 0x2, 0xb3, 0x55, 0x85, 0x2, 0x1, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x10, 0x13, 0x5, 0x80, 0x3e, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0xc, 0x21, 0x4c, 0x9, 0x4a, 0x61, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xec, 0xbc, 0x4c, 0xc2, 0x55, 0x13, 0x5, 0x80, 0xc, 0x63, 0x97, 0x5, 0x4c, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xef, 0x63, 0x15, 0x5, 0x4c, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x22, 0x5, 0x83, 0x46, 0xf4, 0x0, 0xc9, 0x8d, 0x42, 0x6, 0x72, 0x45, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x1f, 0x12, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0x6, 0x2, 0x94, 0x69, 0xa1, 0x2d, 0x45, 0xe3, 0x70, 0x95, 0xab, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xea, 0x8, 0x41, 0x23, 0x82, 0xa9, 0x0, 0x93, 0x55, 0x85, 0x1, 0xa3, 0x83, 0xb9, 0x0, 0x93, 0x55, 0x5, 0x1, 0x23, 0x83, 0xb9, 0x0, 0x21, 0x81, 0xa3, 0x82, 0xa9, 0x0, 0xb9, 0xa9, 0x13, 0x5, 0x0, 0x2, 0x63, 0xe6, 0xac, 0x44, 0x93, 0x5, 0x24, 0x0, 0x79, 0x46, 0x1d, 0x65, 0x13, 0x5, 0xa5, 0xf2, 0xa, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xc0, 0x31, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x23, 0x0, 0x95, 0x0, 0xad, 0x45, 0xa3, 0x0, 0xb5, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x5, 0xf3, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0xa, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x98, 0x5, 0x40, 0x11, 0xa9, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe2, 0xbc, 0x40, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x42, 0xe4, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x42, 0xe8, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x2b, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x56, 0x63, 0x8, 0xa, 0x4, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x5, 0x66, 0x22, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x1, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x96, 0x5, 0x50, 0x5, 0x65, 0xd2, 0x84, 0x63, 0x63, 0xaa, 0x0, 0x85, 0x64, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x26, 0x86, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xe0, 0x51, 0x33, 0xa, 0x9a, 0x40, 0x26, 0x94, 0xe3, 0x1c, 0xa, 0xfa, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xe1, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x40, 0x24, 0x29, 0x65, 0x13, 0x5, 0x45, 0x88, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x89, 0x8a, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x4f, 0x3, 0xc4, 0xa9, 0x7, 0x3d, 0x46, 0x29, 0x65, 0x13, 0x5, 0xd5, 0x81, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x55, 0x88, 0x8a, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xe0, 0x20, 0x72, 0x45, 0x23, 0x89, 0x89, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0xc6, 0x81, 0xa, 0x96, 0xc1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xf, 0x9, 0x4a, 0x7d, 0xb4, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x6, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe6, 0xbc, 0x2e, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xd2, 0x33, 0x67, 0xa6, 0x0, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xd3, 0x55, 0x8e, 0xb3, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x54, 0x1, 0x83, 0x45, 0x44, 0x1, 0x3, 0x46, 0x64, 0x1, 0x83, 0x46, 0x74, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xd4, 0x3a, 0x84, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x6c, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0x16, 0x23, 0xa9, 0x9, 0x0, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x41, 0x81, 0x44, 0x1, 0x4c, 0x33, 0x5, 0x5a, 0x3, 0x2a, 0xca, 0x22, 0x8a, 0x63, 0x7d, 0x80, 0xa, 0x52, 0x45, 0x2a, 0x9c, 0x63, 0xb, 0xa, 0x6, 0x63, 0xf9, 0x84, 0x7, 0x22, 0x8b, 0x56, 0x84, 0x63, 0xe3, 0x4a, 0x1, 0x52, 0x84, 0x5, 0x65, 0x5, 0x5, 0xe3, 0x76, 0xa4, 0x86, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x66, 0x85, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0xea, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x9d, 0x5, 0x10, 0x72, 0x45, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x20, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x3a, 0x33, 0xa, 0x8a, 0x40, 0xa2, 0x9c, 0xa2, 0x94, 0x5a, 0x84, 0x19, 0x4b, 0xe3, 0x19, 0xa, 0xf8, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x81, 0x8a, 0x95, 0x11, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x12, 0xd, 0x46, 0x63, 0x7b, 0xb6, 0xfe, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x45, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x5, 0x55, 0x8d, 0x33, 0x6c, 0xb5, 0x0, 0xe3, 0x67, 0x8c, 0xf4, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xc5, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x40, 0x8, 0x29, 0x65, 0x13, 0x5, 0x45, 0x88, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x89, 0x8a, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x33, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x88, 0x8a, 0x95, 0x41, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x16, 0x79, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xe5, 0xbc, 0x16, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0xe9, 0xaa, 0x85, 0x13, 0x5, 0x60, 0x3, 0x63, 0x9f, 0x5, 0x10, 0xd, 0xa2, 0x13, 0x5, 0x60, 0xc, 0x11, 0xaa, 0x21, 0x4c, 0x9, 0x4a, 0x19, 0x4b, 0x31, 0xa2, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x3, 0x44, 0x5, 0x0, 0x4d, 0x46, 0x29, 0x65, 0x13, 0x5, 0x55, 0x89, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x95, 0xf2, 0x8a, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0xfc, 0x72, 0x45, 0x23, 0x85, 0x89, 0x8, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0x46, 0x89, 0xa, 0x96, 0xd1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0xea, 0xb5, 0xb0, 0x93, 0x7, 0xf0, 0xe, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x44, 0xa4, 0x0, 0x3, 0x44, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x4, 0x62, 0x4, 0x45, 0x8c, 0xb3, 0x64, 0xa4, 0x0, 0x63, 0x9e, 0x4, 0x9, 0x22, 0x7, 0xd9, 0x8d, 0xc2, 0x8, 0xe2, 0x6, 0x33, 0xe5, 0x16, 0x1, 0xc9, 0x8d, 0x13, 0x5, 0x10, 0xc, 0x63, 0x95, 0xb7, 0x8, 0x16, 0xc8, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xde, 0xd, 0x45, 0x63, 0x8d, 0xaa, 0x16, 0x13, 0x85, 0xca, 0xf2, 0x59, 0xc1, 0x45, 0x45, 0x63, 0x86, 0xaa, 0xa, 0x1d, 0x45, 0xc2, 0x46, 0xe3, 0x92, 0xaa, 0x80, 0x42, 0x56, 0x13, 0x5, 0x90, 0xc, 0x63, 0x69, 0x96, 0x4, 0x93, 0xf5, 0x3c, 0x0, 0x13, 0x5, 0x0, 0xc, 0xb9, 0xe1, 0x13, 0x85, 0x36, 0x0, 0x71, 0x99, 0xb3, 0x5, 0xd5, 0x40, 0x63, 0xf3, 0xb4, 0x0, 0x11, 0x45, 0xb3, 0xb6, 0xb4, 0x0, 0xb3, 0x85, 0xb4, 0x40, 0x13, 0xd7, 0x25, 0x0, 0xfd, 0x16, 0xa2, 0x55, 0xf9, 0x8e, 0x71, 0x16, 0x8a, 0x6, 0x63, 0x83, 0x6, 0xfc, 0x18, 0x41, 0x11, 0x5, 0x98, 0xc1, 0x91, 0x5, 0x2e, 0xd4, 0x32, 0xd8, 0x71, 0x16, 0xf1, 0x16, 0xe5, 0xfa, 0x6f, 0xf0, 0xf, 0xfb, 0x13, 0x5, 0x0, 0xc, 0x23, 0x84, 0x79, 0x1, 0xa3, 0x84, 0xa9, 0x0, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xd5, 0x6f, 0xf0, 0xef, 0xf8, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0xc8, 0x68, 0x8, 0x85, 0x45, 0x42, 0x46, 0xa6, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xe1, 0x93, 0x75, 0xf5, 0xf, 0xf9, 0xf1, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0xc6, 0x6f, 0xf0, 0x4f, 0xf6, 0x37, 0x15, 0xc9, 0x3f, 0x3, 0x24, 0x5, 0xac, 0x81, 0x4c, 0x85, 0x4a, 0x5, 0x48, 0x26, 0xc4, 0x42, 0x46, 0x42, 0x55, 0xe1, 0xc4, 0x79, 0xc1, 0x63, 0x8d, 0xa, 0xc, 0x23, 0xa5, 0x99, 0x8, 0x21, 0x6a, 0x33, 0x5, 0x8a, 0x40, 0x5, 0xa, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x88, 0xc1, 0x63, 0x74, 0x44, 0xdb, 0x22, 0x45, 0x63, 0x61, 0x95, 0xdb, 0x52, 0x55, 0x33, 0xb5, 0xa4, 0x0, 0x6, 0x5, 0x33, 0x68, 0xa8, 0x0, 0xb2, 0x46, 0x33, 0x87, 0x86, 0x0, 0xb3, 0x5, 0x96, 0x1, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0x33, 0x6, 0xa1, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x7, 0xa1, 0x0, 0x13, 0x5, 0xa1, 0x3, 0x42, 0xca, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0xbc, 0x3, 0xac, 0xa9, 0x8, 0xd2, 0x55, 0x1d, 0x66, 0x13, 0x6, 0x86, 0xf2, 0xa, 0x96, 0x10, 0x42, 0xaa, 0x8a, 0x33, 0x85, 0x85, 0x41, 0x2a, 0xda, 0x32, 0x94, 0x63, 0x85, 0xa, 0x0, 0x21, 0x65, 0x63, 0x1f, 0xa4, 0x0, 0x63, 0x71, 0x44, 0xd5, 0x68, 0x8, 0xb2, 0x45, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0xc7, 0x93, 0x75, 0xf5, 0xf, 0xb5, 0xe9, 0x1, 0x44, 0x9, 0x4a, 0xb3, 0x84, 0x84, 0x41, 0xe2, 0x9c, 0x21, 0x4c, 0x42, 0x46, 0x52, 0x48, 0x89, 0xbf, 0x68, 0x8, 0xc2, 0x45, 0x26, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0xc4, 0x93, 0x75, 0xf5, 0xf, 0xe3, 0x92, 0x5, 0xee, 0x6f, 0xf0, 0x8f, 0xe8, 0xb7, 0x15, 0xc9, 0x3f, 0x23, 0xa0, 0x85, 0xac, 0x63, 0xc2, 0xa, 0x4, 0xb3, 0x35, 0xa0, 0x0, 0x63, 0x8a, 0xa, 0x0, 0x39, 0xa8, 0xb7, 0x15, 0xc9, 0x3f, 0x23, 0xa0, 0x85, 0xac, 0x85, 0x45, 0x63, 0x99, 0xa, 0x0, 0x99, 0xc5, 0x13, 0x5, 0x80, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0x6f, 0xe5, 0x63, 0x89, 0xa, 0xe4, 0x63, 0x17, 0x5, 0xe4, 0x13, 0x5, 0x90, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0x2f, 0xe4, 0x21, 0x4c, 0x9, 0x4a, 0x49, 0xbd, 0x13, 0x5, 0x70, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0xf, 0xe3, 0x81, 0x45, 0xf3, 0x75, 0x4, 0x30, 0x37, 0x6, 0xc, 0x60, 0x14, 0x4a, 0x13, 0x75, 0xf5, 0xf, 0x35, 0x47, 0x63, 0x8, 0xe5, 0x0, 0x37, 0x5, 0x80, 0x0, 0x37, 0x7, 0x80, 0xff, 0x7d, 0x17, 0x19, 0xa0, 0x11, 0x45, 0x6d, 0x57, 0x55, 0x8d, 0x8, 0xca, 0x8, 0x4e, 0x79, 0x8d, 0xa1, 0x89, 0x8, 0xce, 0x81, 0xc5, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x1, 0xb7, 0x45, 0xf, 0x0, 0x93, 0x85, 0x5, 0x24, 0x33, 0x55, 0xb5, 0x2, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x9, 0xc9, 0x5, 0x46, 0x63, 0x1c, 0xc5, 0x0, 0x37, 0x65, 0x62, 0x2, 0x13, 0x5, 0x5, 0xa0, 0x82, 0x80, 0x37, 0x55, 0xe8, 0x1, 0x13, 0x5, 0x5, 0x80, 0x82, 0x80, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0x33, 0x85, 0xa5, 0x2, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x2, 0x93, 0x15, 0x45, 0x0, 0xc1, 0x81, 0x31, 0x81, 0x37, 0x86, 0x0, 0x60, 0x3, 0x20, 0xc6, 0xb, 0x42, 0x5, 0x4d, 0x8d, 0x23, 0x2e, 0xa6, 0xa, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x9, 0xc9, 0x5, 0x46, 0x63, 0x1c, 0xc5, 0x0, 0x37, 0xb5, 0xc4, 0x4, 0x13, 0x5, 0x5, 0x40, 0x82, 0x80, 0x37, 0x65, 0x62, 0x2, 0x13, 0x5, 0x5, 0xa0, 0x82, 0x80, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0x33, 0x85, 0xa5, 0x2, 0x82, 0x80, 0xf3, 0x25, 0x40, 0xf1, 0x85, 0xe1, 0x42, 0x5, 0x41, 0x81, 0xa, 0x5, 0xb7, 0x25, 0xc, 0x60, 0x2e, 0x95, 0x5, 0x46, 0x10, 0xc1, 0x3, 0xa5, 0x45, 0x10, 0x13, 0x65, 0x25, 0x0, 0x23, 0xa2, 0xa5, 0x10, 0x82, 0x80, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x1, 0x45, 0x37, 0x24, 0xc, 0x60, 0x93, 0x4, 0x15, 0x0, 0x93, 0xf5, 0xf4, 0xf, 0x95, 0xc1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x8, 0x42, 0x5, 0x93, 0x55, 0x5, 0x1, 0x13, 0x86, 0x25, 0xfc, 0x26, 0x85, 0x6d, 0xd2, 0x8a, 0x5, 0xa2, 0x95, 0x23, 0xa0, 0x5, 0x0, 0x26, 0x85, 0xd9, 0xbf, 0x37, 0x25, 0x38, 0x40, 0x13, 0x5, 0x5, 0x50, 0x5, 0x5, 0x73, 0x10, 0x55, 0x30, 0x37, 0x5, 0xc9, 0x3f, 0x13, 0x5, 0x85, 0xa, 0x93, 0x5, 0xc0, 0x3, 0x5, 0x48, 0xb7, 0x26, 0xc, 0x60, 0x5, 0x47, 0x95, 0xcd, 0xf3, 0x27, 0x40, 0xf1, 0xa1, 0xe3, 0x4, 0x41, 0x3, 0xa4, 0x86, 0x10, 0xb3, 0x17, 0x98, 0x0, 0x13, 0xc6, 0xf7, 0xff, 0x61, 0x8e, 0x23, 0xa4, 0xc6, 0x10, 0x73, 0x26, 0x40, 0xf1, 0x1d, 0xe2, 0x8a, 0x4, 0xb6, 0x94, 0x23, 0xaa, 0xe4, 0x10, 0x3, 0xa6, 0x46, 0x10, 0x5d, 0x8e, 0x23, 0xa2, 0xc6, 0x10, 0xf1, 0x15, 0x11, 0x5, 0x5, 0x7, 0xe1, 0xf5, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x0, 0x0, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0xe0, 0x3, 0x63, 0x64, 0xb5, 0x0, 0x13, 0x5, 0xe0, 0x3, 0x82, 0x80, 0x37, 0x85, 0x0, 0x60, 0x3, 0x25, 0x85, 0xb, 0x93, 0x15, 0x5, 0x1, 0xc1, 0x81, 0x13, 0x56, 0x5, 0x1, 0x2d, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x7d, 0x15, 0x13, 0x35, 0xe5, 0xff, 0x93, 0x86, 0x85, 0xfd, 0x69, 0x8e, 0x81, 0xe6, 0x5, 0x45, 0x1, 0xca, 0x1, 0xa8, 0x13, 0x85, 0x5, 0xfe, 0x33, 0x35, 0xa0, 0x0, 0x6, 0x5, 0x11, 0xe2, 0x5, 0x45, 0x82, 0x80, 0x59, 0x71, 0x86, 0xd6, 0xa2, 0xd4, 0xa6, 0xd2, 0xca, 0xd0, 0xce, 0xce, 0xd2, 0xcc, 0xd6, 0xca, 0xda, 0xc8, 0xde, 0xc6, 0xe2, 0xc4, 0xe6, 0xc2, 0xea, 0xc0, 0x6e, 0xde, 0x7d, 0x75, 0x93, 0xa, 0xf5, 0x57, 0x79, 0x75, 0x13, 0xc, 0xf5, 0xff, 0x6d, 0x75, 0x13, 0x9, 0xf5, 0xff, 0x41, 0x75, 0x93, 0xc, 0xf5, 0xfe, 0x37, 0xb5, 0xab, 0xff, 0x93, 0x9, 0xf5, 0xff, 0x37, 0x5, 0x0, 0xfc, 0x13, 0xd, 0xf5, 0xff, 0x37, 0x5, 0x80, 0x55, 0x13, 0xa, 0xf5, 0xff, 0x37, 0x5, 0x0, 0x50, 0x93, 0xb, 0xf5, 0xff, 0x37, 0x5, 0x0, 0x14, 0x13, 0x4, 0x5, 0x50, 0x37, 0xc5, 0xff, 0x0, 0x93, 0x4, 0xf5, 0x3, 0x41, 0x65, 0x93, 0xd, 0xf5, 0xff, 0x13, 0x5, 0xd0, 0x6, 0x35, 0x46, 0x8d, 0x46, 0xd, 0x47, 0x81, 0x45, 0x81, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0x10, 0x13, 0x5, 0xd0, 0x6, 0x35, 0x46, 0x89, 0x46, 0x9, 0x47, 0x81, 0x45, 0x81, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xc0, 0xe, 0x37, 0x8b, 0x0, 0x60, 0xda, 0x86, 0xc8, 0x5a, 0x33, 0x75, 0xa5, 0x1, 0xc8, 0xda, 0xc8, 0x4e, 0x26, 0xc8, 0x65, 0x8d, 0x22, 0xca, 0x41, 0x8d, 0xc8, 0xce, 0xc8, 0x56, 0x13, 0x84, 0xc, 0x11, 0x61, 0x8d, 0x13, 0x5, 0x5, 0x20, 0xc8, 0xd6, 0x3, 0x20, 0x4b, 0x2, 0x37, 0x5, 0x1, 0x2, 0x93, 0x5, 0x15, 0x20, 0xcc, 0xd2, 0x3, 0x20, 0x8b, 0x2, 0x8c, 0xd6, 0x8c, 0x5a, 0x6e, 0xcc, 0xb3, 0xf5, 0xb5, 0x1, 0x4d, 0x8d, 0x88, 0xda, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0x5a, 0xa8, 0x5a, 0x6a, 0xce, 0x33, 0x75, 0xa5, 0x1, 0xa8, 0xda, 0x88, 0x42, 0x62, 0xd0, 0x33, 0x75, 0x85, 0x1, 0x88, 0xc2, 0xc8, 0x5a, 0xb7, 0x5, 0x7c, 0xfe, 0xfd, 0x15, 0x6d, 0x8d, 0xb7, 0x5, 0x80, 0x0, 0x4d, 0x8d, 0xc8, 0xda, 0x88, 0x42, 0x56, 0xd4, 0x33, 0x75, 0x55, 0x1, 0x88, 0xc2, 0x13, 0x7, 0xb, 0x8, 0x8, 0x43, 0x5e, 0xd2, 0x33, 0x75, 0x75, 0x1, 0xb7, 0x5, 0x0, 0x10, 0x4d, 0x8d, 0x8, 0xc3, 0x37, 0x5, 0xc, 0x60, 0x4c, 0x45, 0xf9, 0x99, 0x4c, 0xc5, 0xc, 0x47, 0x66, 0xd6, 0xb3, 0xf5, 0x95, 0x1, 0xc, 0xc7, 0xb7, 0x65, 0x2, 0x60, 0x93, 0x87, 0x5, 0x8, 0xd0, 0x4f, 0x29, 0x9a, 0xd0, 0xcf, 0xd0, 0x57, 0x13, 0x76, 0x6, 0xfc, 0xd0, 0xd7, 0xc, 0x47, 0x4e, 0xda, 0xb3, 0xf5, 0x35, 0x1, 0xc, 0xc7, 0x4c, 0x47, 0x52, 0xd8, 0xb3, 0xf5, 0x45, 0x1, 0x4c, 0xc7, 0xc, 0x45, 0xdd, 0x99, 0xc, 0xc5, 0x48, 0x47, 0x33, 0x75, 0x25, 0x1, 0x48, 0xc7, 0x23, 0x20, 0xb, 0x4, 0x7d, 0x55, 0xe8, 0xc6, 0x13, 0x5, 0x10, 0x6, 0x89, 0x46, 0x9, 0x47, 0x81, 0x45, 0x1, 0x46, 0x81, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0xfe, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0xe3, 0x85, 0x4b, 0x63, 0x15, 0x75, 0x3f, 0x22, 0xc4, 0x4a, 0xc6, 0x5a, 0x86, 0x28, 0x5a, 0xb7, 0x5, 0x0, 0x20, 0x4d, 0x8d, 0x28, 0xda, 0xd, 0x45, 0x97, 0xe0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x6b, 0x37, 0x5, 0x0, 0x3c, 0x13, 0xc, 0xf5, 0xef, 0x37, 0xfd, 0x1, 0x60, 0xb7, 0x9d, 0x0, 0x80, 0xfd, 0x1d, 0x37, 0x15, 0x2, 0x0, 0x93, 0xa, 0x5, 0x34, 0x45, 0x65, 0x13, 0x5, 0x75, 0xb0, 0x2a, 0xdc, 0xb7, 0x9, 0x0, 0x80, 0x5a, 0x84, 0x28, 0x58, 0x33, 0x75, 0x85, 0x1, 0x28, 0xd8, 0x13, 0x5, 0xc0, 0x12, 0x97, 0xe0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0x67, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xdc, 0x30, 0x58, 0x79, 0x82, 0x2a, 0x84, 0xae, 0x84, 0x11, 0xce, 0x63, 0x9, 0x76, 0x1, 0x9, 0x45, 0x63, 0x1c, 0xa6, 0x36, 0x85, 0x45, 0x5, 0x46, 0x5, 0x45, 0x39, 0xa0, 0x81, 0x45, 0x1, 0x46, 0x9, 0x45, 0x19, 0xa0, 0x1, 0x45, 0x85, 0x45, 0x83, 0x26, 0xb, 0x7, 0x13, 0xf9, 0x6, 0x10, 0x93, 0x56, 0x89, 0x0, 0xb3, 0xec, 0xd5, 0x0, 0x9, 0xe6, 0x63, 0x84, 0xc, 0x0, 0x81, 0x4c, 0x19, 0xa8, 0x93, 0x5, 0x0, 0x20, 0x63, 0x94, 0xc, 0x0, 0x93, 0x5, 0x0, 0x10, 0xda, 0x86, 0xb0, 0x5a, 0xd1, 0x8d, 0xac, 0xda, 0x83, 0x25, 0x8d, 0x6, 0xce, 0x5, 0x63, 0xd3, 0x5, 0x2, 0x83, 0x25, 0xd, 0x8, 0x93, 0xf5, 0xf5, 0x7, 0x93, 0x85, 0x5, 0x8, 0x23, 0x20, 0xbd, 0x8, 0x83, 0x25, 0x8d, 0x6, 0xc2, 0x5, 0x63, 0xc6, 0x5, 0x0, 0x83, 0x25, 0xd, 0x8, 0x85, 0x89, 0xe5, 0xd9, 0x6a, 0x87, 0x2c, 0x57, 0xb3, 0xf5, 0xb5, 0x1, 0x13, 0x16, 0xd5, 0x0, 0xb7, 0x6, 0x0, 0x4, 0x55, 0x8e, 0xd1, 0x8d, 0x2c, 0xd7, 0x83, 0x25, 0xd, 0x8, 0x63, 0xa, 0x75, 0x1, 0xc5, 0x46, 0x56, 0x86, 0x9, 0x47, 0x63, 0x17, 0xe5, 0x0, 0x21, 0x66, 0xcd, 0x46, 0x19, 0xa0, 0xcd, 0x46, 0x62, 0x56, 0x13, 0xf5, 0xf5, 0x7, 0x93, 0x5, 0x0, 0x40, 0xb3, 0x95, 0xd5, 0x0, 0x4d, 0x8d, 0x23, 0x20, 0xad, 0x8, 0xea, 0x86, 0xac, 0x56, 0x37, 0x5, 0x9, 0x3d, 0x33, 0x55, 0xc5, 0x2, 0xb3, 0xe5, 0x35, 0x1, 0xac, 0xd6, 0x97, 0xe0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0x59, 0x3, 0x25, 0x8d, 0x6, 0x42, 0x5, 0x63, 0x48, 0x5, 0x0, 0x3, 0x25, 0xd, 0x8, 0x5, 0x89, 0x65, 0xd9, 0x1, 0x4a, 0x29, 0xa0, 0x3, 0x25, 0xcd, 0x6, 0x13, 0x5a, 0x75, 0x0, 0xea, 0x85, 0xa8, 0x55, 0x6, 0x5, 0x5, 0x81, 0xa8, 0xd5, 0xda, 0x85, 0xa8, 0x59, 0x13, 0x75, 0xf5, 0xef, 0x33, 0x65, 0x25, 0x1, 0xa8, 0xd9, 0x63, 0x87, 0xc, 0x0, 0xda, 0x85, 0xa8, 0x59, 0x13, 0x75, 0xf5, 0xdf, 0xa8, 0xd9, 0x22, 0x85, 0xa6, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xb2, 0x63, 0xc, 0x5, 0x24, 0x13, 0x16, 0xa5, 0x0, 0x13, 0x55, 0xda, 0x0, 0x4e, 0xa, 0x93, 0x55, 0x16, 0x0, 0xb3, 0x6, 0xba, 0x0, 0xb3, 0xb5, 0x46, 0x1, 0x2e, 0x95, 0x93, 0xb5, 0x16, 0x0, 0xb3, 0x5, 0xb5, 0x40, 0x13, 0x85, 0xf6, 0xff, 0x81, 0x46, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x64, 0xe3, 0x0, 0x5, 0xe8, 0x37, 0x84, 0x0, 0x60, 0x68, 0xc8, 0x3, 0x25, 0x84, 0x8, 0x81, 0x75, 0xfd, 0x15, 0x6d, 0x8d, 0x23, 0x24, 0xa4, 0x8, 0x13, 0x5, 0xd0, 0x6, 0x35, 0x46, 0x89, 0x46, 0x9, 0x47, 0x81, 0x45, 0x81, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xdf, 0x13, 0x5, 0xd0, 0x6, 0x35, 0x46, 0x8d, 0x46, 0xd, 0x47, 0x81, 0x45, 0x81, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xc0, 0xdd, 0x48, 0x58, 0xf2, 0x44, 0x65, 0x8d, 0x48, 0xd8, 0x48, 0x4c, 0xc2, 0x45, 0x6d, 0x8d, 0xd2, 0x45, 0x4d, 0x8d, 0x48, 0xcc, 0x48, 0x54, 0xa2, 0x45, 0x6d, 0x8d, 0x13, 0x65, 0x5, 0x20, 0x48, 0xd4, 0x3, 0x20, 0x44, 0x2, 0x37, 0x5, 0x1, 0x2, 0x93, 0x5, 0x15, 0x20, 0x4c, 0xd0, 0x3, 0x20, 0x84, 0x2, 0xc, 0xd4, 0xc, 0x58, 0x62, 0x46, 0xf1, 0x8d, 0x4d, 0x8d, 0x8, 0xd8, 0x13, 0x5, 0xd0, 0x6, 0x15, 0x46, 0x91, 0x46, 0xdd, 0x47, 0x81, 0x45, 0x1, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0xd8, 0x13, 0x5, 0xd0, 0x6, 0x11, 0x46, 0x91, 0x46, 0xf9, 0x47, 0x81, 0x45, 0x1, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xd7, 0x13, 0x5, 0xd0, 0x6, 0x19, 0x46, 0x91, 0x46, 0xf9, 0x47, 0x81, 0x45, 0x1, 0x47, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xc0, 0xd5, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x22, 0x26, 0x28, 0x58, 0x65, 0x8d, 0x28, 0xd8, 0x8, 0x40, 0x82, 0x55, 0x6d, 0x8d, 0x8, 0xc0, 0x48, 0x58, 0xb7, 0x5, 0x80, 0xfe, 0xfd, 0x15, 0x6d, 0x8d, 0xb7, 0x5, 0x80, 0x0, 0x4d, 0x8d, 0x48, 0xd8, 0x48, 0x58, 0xb7, 0x5, 0xfc, 0xff, 0xfd, 0x15, 0x6d, 0x8d, 0x48, 0xd8, 0x8, 0x40, 0xa2, 0x55, 0x6d, 0x8d, 0x8, 0xc0, 0x93, 0x4, 0x4, 0x8, 0x88, 0x40, 0x92, 0x55, 0x6d, 0x8d, 0xb7, 0x5, 0x0, 0x10, 0x4d, 0x8d, 0x88, 0xc0, 0x37, 0x5, 0xc, 0x60, 0x4c, 0x45, 0xf9, 0x99, 0x4c, 0xc5, 0x8c, 0x44, 0x32, 0x56, 0xf1, 0x8d, 0x8c, 0xc4, 0xb7, 0x65, 0x2, 0x60, 0x13, 0x87, 0x5, 0x8, 0x50, 0x4f, 0x29, 0x9a, 0x50, 0xcf, 0x37, 0xd6, 0x1, 0x60, 0x74, 0x4a, 0xd5, 0x9a, 0x74, 0xca, 0x83, 0x26, 0x46, 0xcd, 0x93, 0xf6, 0x56, 0xfd, 0x23, 0x2a, 0xd6, 0xcc, 0x37, 0x66, 0x0, 0x60, 0x83, 0x26, 0x6, 0x9, 0x93, 0xf6, 0xf6, 0xfd, 0x23, 0x28, 0xd6, 0x8, 0x37, 0x56, 0x0, 0x60, 0x83, 0x26, 0x6, 0xf, 0x93, 0xf6, 0xf6, 0xbf, 0x23, 0x28, 0xd6, 0xe, 0x50, 0x57, 0x13, 0x76, 0x6, 0xfc, 0x50, 0xd7, 0x8c, 0x44, 0x52, 0x56, 0xf1, 0x8d, 0x8c, 0xc4, 0xcc, 0x44, 0x42, 0x56, 0xf1, 0x8d, 0xcc, 0xc4, 0xc, 0x45, 0xdd, 0x99, 0xc, 0xc5, 0xc8, 0x44, 0xb2, 0x45, 0x6d, 0x8d, 0xc8, 0xc4, 0xc8, 0x44, 0xb7, 0x5, 0x40, 0x10, 0x4d, 0x8d, 0xc8, 0xc4, 0x88, 0x44, 0xb7, 0x15, 0x2, 0x0, 0x93, 0x85, 0x5, 0x80, 0x4d, 0x8d, 0x88, 0xc4, 0x23, 0x20, 0x4, 0x4, 0x7d, 0x55, 0x68, 0xc4, 0x13, 0x5, 0x10, 0x6, 0x89, 0x46, 0x9, 0x47, 0x85, 0x47, 0x81, 0x45, 0x1, 0x46, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xc0, 0xc5, 0x37, 0x35, 0x1d, 0x8f, 0x13, 0x5, 0xa5, 0x12, 0x88, 0xd8, 0x37, 0x5, 0xb0, 0x84, 0xc8, 0xd4, 0x23, 0x28, 0x4, 0xa, 0x37, 0x45, 0xd8, 0x50, 0x13, 0x5, 0x15, 0xaa, 0x88, 0xd4, 0x8c, 0x48, 0x37, 0xf6, 0xff, 0x7f, 0x7d, 0x16, 0xf1, 0x8d, 0x8c, 0xc8, 0x23, 0x24, 0x4, 0xa, 0xb7, 0xf5, 0x1, 0x60, 0xe8, 0xd1, 0x1, 0x46, 0xb0, 0xc5, 0xf0, 0xd1, 0xb7, 0x5, 0x2, 0x60, 0xe8, 0xd1, 0xb0, 0xc5, 0xf0, 0xd1, 0xb6, 0x50, 0x26, 0x54, 0x96, 0x54, 0x6, 0x59, 0xf6, 0x49, 0x66, 0x4a, 0xd6, 0x4a, 0x46, 0x4b, 0xb6, 0x4b, 0x26, 0x4c, 0x96, 0x4c, 0x6, 0x4d, 0xf2, 0x5d, 0x65, 0x61, 0x82, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0xa0, 0x82, 0x80, 0x37, 0x25, 0x38, 0x40, 0x13, 0x5, 0x5, 0x20, 0x73, 0x10, 0x55, 0x30, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x37, 0x4, 0x0, 0x60, 0x48, 0x4c, 0x13, 0x75, 0xf5, 0x3f, 0x9, 0xc9, 0x8, 0x40, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x1, 0x5, 0x89, 0x75, 0xd5, 0x0, 0x0, 0x37, 0x5, 0x0, 0x60, 0x85, 0x45, 0xc, 0xc9, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x15, 0xc9, 0x3f, 0x13, 0x86, 0xc5, 0xad, 0x91, 0x65, 0xb2, 0x95, 0x83, 0xc5, 0x85, 0x40, 0x8d, 0xe9, 0xc5, 0x46, 0xaa, 0x6, 0x33, 0x7, 0xd6, 0x0, 0x5c, 0x43, 0x3e, 0x96, 0x23, 0x0, 0xa6, 0x0, 0x48, 0x43, 0x5, 0x5, 0xa9, 0x8e, 0x10, 0x43, 0x93, 0xb6, 0x16, 0x0, 0xfd, 0x16, 0x75, 0x8d, 0x48, 0xc3, 0x63, 0x17, 0xa6, 0x0, 0x37, 0x55, 0xc9, 0x3f, 0x5, 0x46, 0x23, 0x2, 0xc5, 0xee, 0x33, 0x35, 0xb0, 0x0, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x37, 0x34, 0x4, 0x60, 0x48, 0x40, 0x11, 0x89, 0x9, 0xc9, 0x8, 0x40, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xfa, 0x5, 0x89, 0x7d, 0xd5, 0x0, 0x0, 0x37, 0x35, 0x4, 0x60, 0x91, 0x45, 0x4c, 0xc9, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0x15, 0xc9, 0x3f, 0x13, 0x8, 0xc5, 0xad, 0xc5, 0x47, 0xaa, 0x7, 0x33, 0x7, 0xf8, 0x0, 0x14, 0x43, 0x48, 0x43, 0x83, 0x45, 0x87, 0x0, 0x35, 0x8d, 0x33, 0x66, 0xb5, 0x0, 0x33, 0x35, 0xc0, 0x0, 0x11, 0xce, 0x23, 0x4, 0x7, 0x0, 0x93, 0x85, 0x16, 0x0, 0xad, 0x8f, 0x13, 0xb6, 0x17, 0x0, 0x7d, 0x16, 0xf1, 0x8d, 0xc, 0xc3, 0xc2, 0x96, 0x83, 0xc5, 0x6, 0x0, 0x82, 0x80, 0x37, 0x45, 0xc, 0x60, 0x83, 0x25, 0xc5, 0xa, 0xf9, 0x99, 0x23, 0x26, 0xb5, 0xa, 0xc, 0x45, 0xf9, 0x99, 0xc, 0xc5, 0x37, 0x35, 0x0, 0x60, 0x83, 0x25, 0xc5, 0xd, 0xf9, 0x99, 0x23, 0x2e, 0xb5, 0xc, 0x37, 0x25, 0x0, 0x60, 0x83, 0x25, 0xc5, 0xd, 0xf9, 0x99, 0x23, 0x2e, 0xb5, 0xc, 0x82, 0x82, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x51, 0x8d, 0x82, 0x82, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x82, 0x82, 0x3, 0x45, 0x14, 0x1, 0x83, 0x45, 0x4, 0x1, 0x3, 0x46, 0x24, 0x1, 0x83, 0x46, 0x34, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x82, 0x82, 0xc, 0xd1, 0x83, 0x25, 0x5, 0x8, 0x37, 0x6, 0x0, 0x80, 0xd1, 0x8d, 0x23, 0x20, 0xb5, 0x8, 0x82, 0x82, 0x33, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x82, 0x82, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x82, 0x8a, 0x95, 0x13, 0x6, 0x80, 0x5, 0x82, 0x82, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x56, 0xd5, 0x0, 0x33, 0x15, 0xc5, 0x0, 0xb3, 0x95, 0xc5, 0x0, 0xd5, 0x8d, 0x82, 0x80, 0xb3, 0x15, 0xc5, 0x0, 0x1, 0x45, 0x82, 0x80, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0x33, 0x55, 0xc5, 0x0, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x96, 0xd5, 0x0, 0x55, 0x8d, 0xb3, 0xd5, 0xc5, 0x0, 0x82, 0x80, 0x33, 0xd5, 0xc5, 0x0, 0x81, 0x45, 0x82, 0x80, 0x1, 0x46, 0xc1, 0x46, 0x33, 0x57, 0xd5, 0x0, 0x63, 0x63, 0xb7, 0x0, 0x3a, 0x85, 0x33, 0x37, 0xb7, 0x0, 0x7d, 0x17, 0x75, 0x8f, 0x85, 0x82, 0x3a, 0x96, 0xed, 0xf6, 0x32, 0x85, 0x82, 0x80, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x82, 0x21, 0x3a, 0x8a, 0xb6, 0x89, 0x32, 0x8b, 0xae, 0x84, 0x2a, 0x89, 0x11, 0xc7, 0x63, 0x2, 0x4b, 0x3, 0x33, 0x35, 0x4b, 0x1, 0x5, 0xa0, 0x63, 0x5, 0xb, 0x8, 0x63, 0x7a, 0x3b, 0x9, 0x4e, 0x85, 0xda, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xfb, 0x5d, 0xe1, 0xfd, 0x4a, 0x6d, 0xa0, 0x33, 0xb5, 0x34, 0x1, 0x81, 0x46, 0x25, 0xe1, 0x63, 0xf, 0xb, 0x4, 0x5a, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xf9, 0xaa, 0x8a, 0x13, 0x76, 0xf5, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x18, 0x81, 0x46, 0x5, 0x46, 0x33, 0x17, 0x56, 0x1, 0x33, 0xb6, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x84, 0xc7, 0x40, 0x63, 0x4d, 0x4, 0x0, 0x89, 0x8c, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x37, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb7, 0x34, 0x1, 0xd9, 0x8e, 0x81, 0xef, 0x22, 0x8b, 0x5, 0x81, 0x13, 0x96, 0xf5, 0x1, 0x51, 0x8d, 0x85, 0x81, 0x5, 0x83, 0xf9, 0xb7, 0x5a, 0x84, 0x36, 0x88, 0x69, 0xa0, 0x1, 0x48, 0x59, 0xa0, 0x1, 0x44, 0x1, 0x48, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xa5, 0xa8, 0x63, 0x16, 0x3b, 0x9, 0x1, 0x44, 0x33, 0xd5, 0x64, 0x3, 0xb3, 0xf4, 0x64, 0x3, 0xb3, 0x35, 0xa0, 0x0, 0x7d, 0x15, 0x93, 0x6, 0x15, 0x0, 0x13, 0xb5, 0x16, 0x0, 0x33, 0x88, 0xa5, 0x0, 0x99, 0xa8, 0x93, 0x5, 0x0, 0x2, 0xb3, 0x8a, 0xa5, 0x40, 0x13, 0xf6, 0xfa, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xf, 0x81, 0x46, 0x5, 0x46, 0x33, 0x16, 0x56, 0x1, 0x33, 0xb7, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x87, 0xe7, 0x40, 0x63, 0x46, 0x7, 0x0, 0x89, 0x8c, 0xd1, 0x8e, 0x9, 0xcb, 0x3a, 0x8b, 0x5, 0x81, 0x13, 0x97, 0xf5, 0x1, 0x59, 0x8d, 0x85, 0x81, 0x5, 0x82, 0xf1, 0xbf, 0x1, 0x44, 0x1, 0x48, 0x33, 0xd5, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xc9, 0x8e, 0x4a, 0x85, 0x4, 0xc5, 0x14, 0xc1, 0x40, 0xc5, 0x23, 0x22, 0x9, 0x1, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xc, 0x82, 0x80, 0x93, 0xd5, 0x9, 0x1, 0x33, 0x58, 0x3b, 0x3, 0x33, 0x74, 0x3b, 0x3, 0x95, 0xe9, 0x93, 0xd5, 0x4, 0x1, 0x13, 0x16, 0x4, 0x1, 0xd1, 0x8d, 0x33, 0xd6, 0x35, 0x3, 0xb3, 0xf5, 0x35, 0x3, 0xc2, 0x4, 0xc1, 0x80, 0xc2, 0x5, 0xc5, 0x8d, 0xb3, 0xd6, 0x35, 0x3, 0xb3, 0xf4, 0x35, 0x3, 0x93, 0x15, 0x6, 0x1, 0x41, 0x82, 0x33, 0x68, 0x6, 0x1, 0xcd, 0x8e, 0x1, 0x44, 0x75, 0xb7, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x35, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb5, 0x34, 0x1, 0x99, 0xc1, 0x81, 0x46, 0x61, 0xbf, 0x93, 0xd6, 0x19, 0x0, 0x7e, 0xa, 0xb3, 0x66, 0xda, 0x0, 0x93, 0x97, 0xf9, 0x1, 0x37, 0x7, 0x0, 0x80, 0x33, 0xb5, 0xf4, 0x0, 0x33, 0x6, 0xd4, 0x40, 0x9, 0x8e, 0x63, 0x46, 0x6, 0x0, 0x9d, 0x8c, 0xd9, 0x8d, 0x9, 0xca, 0x32, 0x84, 0x85, 0x83, 0x13, 0x95, 0xf6, 0x1, 0xc9, 0x8f, 0x85, 0x82, 0x5, 0x83, 0xf9, 0xbf, 0x1, 0x44, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xcd, 0x8e, 0x91, 0xbf, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xdb, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xdd, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x22, 0x4, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xe0, 0xb2, 0x45, 0x22, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0x5a, 0xc0, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0xaa, 0x85, 0x28, 0x0, 0x82, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x3b, 0x75, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x3e, 0x7d, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7e, 0x45, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7e, 0x49, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7e, 0x51, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7e, 0x9d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7d, 0xa5, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7d, 0xa9, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x7d, 0xb1, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x7d, 0x3d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7d, 0x5, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7d, 0xd, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7d, 0x11, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7d, 0x19, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7c, 0xe5, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7c, 0xed, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0xa8, 0xf1, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0xa7, 0xf9, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0xa7, 0xc1, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0xa6, 0x4d, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0xa5, 0x55, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0xa4, 0x59, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0xa3, 0x61, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0xa2, 0xad, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0xa1, 0xb5, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0xa0, 0xb9, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0xa0, 0x81, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x9f, 0x89, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x9e, 0x15, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x9d, 0x1d, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x9c, 0x21, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x9b, 0x29, 0xa0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x1f, 0x16, 0xc2, 0x1a, 0xc4, 0x1e, 0xc6, 0x72, 0xc8, 0x76, 0xca, 0x7a, 0xcc, 0x7e, 0xce, 0x2a, 0xd0, 0x2e, 0xd2, 0x32, 0xd4, 0x36, 0xd6, 0x3a, 0xd8, 0x3e, 0xda, 0x42, 0xdc, 0x46, 0xde, 0xa2, 0xc0, 0xa6, 0xc2, 0xca, 0xc4, 0xce, 0xc6, 0xd2, 0xc8, 0xd6, 0xca, 0xda, 0xcc, 0xde, 0xce, 0xe2, 0xd0, 0xe6, 0xd2, 0xea, 0xd4, 0xee, 0xd6, 0x8e, 0xd8, 0x92, 0xda, 0x73, 0x23, 0x10, 0x34, 0x9a, 0xde, 0x73, 0x23, 0x0, 0x30, 0x1a, 0xc1, 0x73, 0x23, 0x20, 0x34, 0x1a, 0xc3, 0x73, 0x23, 0x30, 0x34, 0x1a, 0xc5, 0x0, 0x11, 0xa2, 0xdc, 0xa, 0x85, 0x71, 0x11, 0x6, 0xc0, 0xef, 0x0, 0xc0, 0x15, 0x82, 0x40, 0x2a, 0xc0, 0x48, 0x0, 0x82, 0x90, 0x2, 0x45, 0xef, 0x0, 0x60, 0x17, 0x11, 0x1, 0x76, 0x53, 0x73, 0x10, 0x13, 0x34, 0xa, 0x43, 0x73, 0x10, 0x3, 0x30, 0x82, 0x40, 0x92, 0x42, 0x22, 0x43, 0xb2, 0x43, 0x42, 0x4e, 0xd2, 0x4e, 0x62, 0x4f, 0xf2, 0x4f, 0x2, 0x55, 0x92, 0x55, 0x22, 0x56, 0xb2, 0x56, 0x42, 0x57, 0xd2, 0x57, 0x62, 0x58, 0xf2, 0x58, 0x6, 0x44, 0x96, 0x44, 0x26, 0x49, 0xb6, 0x49, 0x46, 0x4a, 0xd6, 0x4a, 0x66, 0x4b, 0xf6, 0x4b, 0x6, 0x5c, 0x96, 0x5c, 0x26, 0x5d, 0xb6, 0x5d, 0xc6, 0x51, 0x56, 0x52, 0x66, 0x51, 0x73, 0x0, 0x20, 0x30, 0x1, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x1f, 0xd0, 0x6f, 0xf0, 0xbf, 0xd0, 0x6f, 0xf0, 0x5f, 0xd1, 0x6f, 0xf0, 0xff, 0xd1, 0x6f, 0xf0, 0x9f, 0xd2, 0x6f, 0xf0, 0x3f, 0xd3, 0x6f, 0xf0, 0xdf, 0xd3, 0x6f, 0xf0, 0x7f, 0xd4, 0x6f, 0xf0, 0x1f, 0xd5, 0x6f, 0xf0, 0xbf, 0xd5, 0x6f, 0xf0, 0x5f, 0xd6, 0x6f, 0xf0, 0xff, 0xd6, 0x6f, 0xf0, 0x9f, 0xd7, 0x6f, 0xf0, 0x3f, 0xd8, 0x6f, 0xf0, 0xdf, 0xd8, 0x6f, 0xf0, 0x7f, 0xd9, 0x6f, 0xf0, 0x1f, 0xda, 0x6f, 0xf0, 0xbf, 0xda, 0x6f, 0xf0, 0x5f, 0xdb, 0x6f, 0xf0, 0xff, 0xdb, 0x6f, 0xf0, 0x9f, 0xdc, 0x6f, 0xf0, 0x3f, 0xdd, 0x6f, 0xf0, 0xdf, 0xdd, 0x6f, 0xf0, 0x7f, 0xde, 0x6f, 0xf0, 0x1f, 0xdf, 0x6f, 0xf0, 0xbf, 0xdf, 0x6f, 0xf0, 0x5f, 0xe0, 0x6f, 0xf0, 0xff, 0xe0, 0x6f, 0xf0, 0x9f, 0xe1, 0x6f, 0xf0, 0x3f, 0xe2, 0x6f, 0xf0, 0xdf, 0xe2, 0x6f, 0xf0, 0x7f, 0xe3, 0x73, 0x25, 0x20, 0x34, 0xa, 0x5, 0xb7, 0x25, 0xc, 0x60, 0x2e, 0x95, 0x3, 0x26, 0x45, 0x11, 0x3, 0xa5, 0x45, 0x19, 0xbd, 0x46, 0x63, 0x78, 0xd6, 0x0, 0x5, 0x6, 0x23, 0xaa, 0xc5, 0x18, 0xa1, 0x45, 0x73, 0xa0, 0x5, 0x30, 0x82, 0x80, 0xa1, 0x45, 0x73, 0xb0, 0x5, 0x30, 0xb7, 0x25, 0xc, 0x60, 0x23, 0xaa, 0xa5, 0x18, 0x82, 0x80, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0x23, 0x7b, 0x0, 0x0, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0x3, 0x7a, 0x13, 0x95, 0x15, 0x0, 0x5, 0x81, 0xb1, 0x45, 0x63, 0x7b, 0xb5, 0x0, 0xa, 0x5, 0xb7, 0x5, 0xc9, 0x3f, 0x93, 0x85, 0x45, 0xe, 0x2e, 0x95, 0x1c, 0x41, 0x91, 0xc3, 0x82, 0x87, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0x83, 0x77, 0xaa, 0x85, 0x5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0x4d, 0x71, 0x10, 0x2, 0x23, 0x26, 0x16, 0x4, 0x20, 0xc6, 0x64, 0xc2, 0x23, 0x20, 0x26, 0x5, 0x23, 0x2e, 0x36, 0x3, 0x23, 0x2c, 0x46, 0x3, 0x23, 0x2a, 0x56, 0x3, 0x23, 0x28, 0x66, 0x3, 0x23, 0x26, 0x76, 0x3, 0x23, 0x24, 0x86, 0x3, 0x23, 0x22, 0x96, 0x3, 0x23, 0x20, 0xa6, 0x3, 0x23, 0x2e, 0xb6, 0x1, 0x73, 0x26, 0x40, 0xf1, 0x2e, 0xc8, 0x63, 0x1d, 0x6, 0x38, 0xb7, 0x25, 0xc, 0x60, 0x3, 0xa9, 0x85, 0xf, 0x3, 0xad, 0xc5, 0xf, 0x73, 0x26, 0x40, 0xf1, 0x63, 0x13, 0x6, 0x38, 0x5, 0x46, 0x33, 0x16, 0xa6, 0x0, 0x23, 0xa6, 0xc5, 0x10, 0xf3, 0x25, 0x40, 0xf1, 0x63, 0x9a, 0x5, 0x36, 0x7d, 0x15, 0x2a, 0xc4, 0x28, 0x8, 0x13, 0x6, 0x0, 0x10, 0x97, 0xe0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0xcd, 0x81, 0x4d, 0x81, 0x4b, 0x37, 0xb5, 0x7c, 0x7, 0x13, 0xb, 0x15, 0x53, 0x37, 0x5, 0xc9, 0x3f, 0x13, 0x6, 0x5, 0x8, 0xb7, 0x26, 0xc, 0x60, 0x4a, 0xc0, 0x6a, 0xc2, 0x5a, 0xc6, 0x32, 0xca, 0x33, 0x65, 0xb9, 0x1, 0xb3, 0x65, 0x7d, 0x1, 0x4d, 0x8d, 0x63, 0xb, 0x5, 0x18, 0x63, 0x9b, 0xd, 0x2, 0x33, 0x5, 0x70, 0x41, 0x33, 0xf5, 0xab, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x9, 0x9, 0x2, 0xb3, 0x5, 0x20, 0x41, 0xb3, 0x75, 0xb9, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0xb0, 0x41, 0x33, 0xf5, 0xad, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x1b, 0x9, 0xfc, 0xb3, 0x5, 0xa0, 0x41, 0xb3, 0x75, 0xbd, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0x65, 0xa9, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x13, 0x95, 0x24, 0x0, 0x55, 0x8d, 0x8, 0x41, 0x13, 0xbc, 0x4, 0x4, 0x13, 0x84, 0x4, 0xfc, 0x93, 0x5, 0x0, 0x4, 0xb3, 0x8a, 0x95, 0x40, 0x93, 0xbc, 0x14, 0x0, 0x51, 0xc1, 0xa, 0x5, 0x36, 0x95, 0x3, 0x2a, 0x45, 0x11, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xa2, 0x2a, 0x84, 0xae, 0x89, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xa1, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0x22, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0xce, 0x85, 0x13, 0x7a, 0xfa, 0x0, 0x13, 0x84, 0xfc, 0xff, 0xb3, 0x79, 0xa4, 0x0, 0x6d, 0x8c, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x9e, 0xb3, 0x6, 0x80, 0x41, 0x33, 0xf6, 0xa6, 0x0, 0xed, 0x8e, 0x12, 0xa, 0x28, 0x8, 0x2a, 0x9a, 0xd2, 0x84, 0xc8, 0x40, 0x8c, 0x40, 0xd8, 0x44, 0x9c, 0x44, 0x55, 0x8d, 0xd1, 0x8d, 0x41, 0x8f, 0xb3, 0xe7, 0x37, 0x1, 0x9c, 0xc4, 0xd8, 0xc4, 0x8c, 0xc0, 0xc8, 0xc0, 0xb1, 0xa8, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x9a, 0xaa, 0x89, 0x2e, 0x8a, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x99, 0x2a, 0x8b, 0x2e, 0x84, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x99, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0xa2, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0x5a, 0x85, 0x33, 0x6, 0x80, 0x41, 0xb3, 0x76, 0x46, 0x1, 0x33, 0x76, 0x36, 0x1, 0xfd, 0x1c, 0x33, 0xf4, 0xbc, 0x0, 0xb3, 0xf9, 0xac, 0x0, 0x32, 0x4b, 0x13, 0x45, 0xf4, 0xff, 0x93, 0xc5, 0xf9, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0x13, 0x46, 0xf6, 0xff, 0x33, 0x79, 0xc9, 0x0, 0x33, 0x7d, 0xdd, 0x0, 0xb3, 0xfd, 0xbd, 0x0, 0xb3, 0xfb, 0xab, 0x0, 0x52, 0x46, 0xb7, 0x26, 0xc, 0x60, 0x8d, 0xb5, 0x39, 0x45, 0xa2, 0x45, 0x63, 0x6d, 0xb5, 0x18, 0x13, 0x95, 0x25, 0x0, 0xb7, 0x5, 0xc9, 0x3f, 0x93, 0x85, 0x85, 0xa, 0x2e, 0x95, 0x8, 0x41, 0xc1, 0x45, 0x12, 0x46, 0x63, 0x71, 0xb5, 0x18, 0x12, 0x5, 0x2c, 0x8, 0x2e, 0x95, 0x4c, 0x41, 0x8, 0x41, 0x1, 0x49, 0x1, 0x4b, 0xb3, 0xfb, 0xc5, 0x0, 0x82, 0x45, 0x33, 0x7c, 0xb5, 0x0, 0x37, 0xb5, 0x7c, 0x7, 0x93, 0xc, 0x15, 0x53, 0x37, 0x5, 0xc9, 0x3f, 0x13, 0xd, 0x5, 0x8, 0x93, 0xd, 0x0, 0x4, 0x33, 0x65, 0x2c, 0x1, 0xb3, 0xe5, 0x6b, 0x1, 0x4d, 0x8d, 0x63, 0x9, 0x5, 0x10, 0x63, 0x1b, 0x9, 0x2, 0x33, 0x5, 0x60, 0x41, 0x33, 0x75, 0xab, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x9, 0xc, 0x2, 0xb3, 0x5, 0x80, 0x41, 0xb3, 0x75, 0xbc, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0x20, 0x41, 0x33, 0x75, 0xa9, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x1b, 0xc, 0xfc, 0xb3, 0x5, 0x70, 0x41, 0xb3, 0xf5, 0xbb, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0x65, 0x7c, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0xe8, 0x93, 0x15, 0x5, 0x1, 0xc1, 0x81, 0x93, 0x85, 0x25, 0xfc, 0x91, 0xc5, 0xc2, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xb, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x84, 0xaa, 0x89, 0xae, 0x8a, 0x13, 0x86, 0x4, 0xfc, 0x5, 0x45, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x82, 0x2a, 0x8a, 0x2e, 0x84, 0x33, 0x86, 0x9d, 0x40, 0x5, 0x45, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x82, 0x63, 0xe3, 0xb4, 0x1, 0xa2, 0x85, 0x63, 0xe3, 0xb4, 0x1, 0x52, 0x85, 0x13, 0xb6, 0x4, 0x4, 0x33, 0x6, 0xc0, 0x40, 0xb3, 0x76, 0x56, 0x1, 0x33, 0x76, 0x36, 0x1, 0x13, 0xb7, 0x14, 0x0, 0x7d, 0x17, 0xf9, 0x8d, 0x79, 0x8d, 0x13, 0x45, 0xf5, 0xff, 0x93, 0xc5, 0xf5, 0xff, 0x13, 0x46, 0xf6, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0xb3, 0xfb, 0xdb, 0x0, 0x33, 0x7c, 0xcc, 0x0, 0x33, 0x7b, 0xbb, 0x0, 0x33, 0x79, 0xa9, 0x0, 0xdd, 0xb5, 0x8, 0x2, 0x83, 0x20, 0xc5, 0x4, 0x20, 0x45, 0x64, 0x41, 0x3, 0x29, 0x5, 0x4, 0x83, 0x29, 0xc5, 0x3, 0x3, 0x2a, 0x85, 0x3, 0x83, 0x2a, 0x45, 0x3, 0x3, 0x2b, 0x5, 0x3, 0x83, 0x2b, 0xc5, 0x2, 0x3, 0x2c, 0x85, 0x2, 0x83, 0x2c, 0x45, 0x2, 0x3, 0x2d, 0x5, 0x2, 0x83, 0x2d, 0xc5, 0x1, 0x71, 0x61, 0x82, 0x80, 0x0, 0x0, 0x42, 0x5, 0x41, 0x81, 0x37, 0x36, 0x38, 0x40, 0x13, 0x6, 0x6, 0xab, 0xa, 0x5, 0x32, 0x95, 0x1c, 0x41, 0x37, 0x25, 0x38, 0x40, 0x13, 0x5, 0x5, 0xd7, 0x63, 0x84, 0xa7, 0x0, 0x2e, 0x85, 0x82, 0x87, 0x0, 0x0, 0xaa, 0x85, 0x9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xc0, 0xaa, 0x85, 0xd, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xbf, 0xaa, 0x85, 0x11, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xbe, 0xaa, 0x85, 0x15, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xbd, 0xaa, 0x85, 0x19, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xbd, 0xaa, 0x85, 0x1d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xbc, 0xaa, 0x85, 0x21, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xbb, 0xaa, 0x85, 0x25, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xba, 0xaa, 0x85, 0x29, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xba, 0xaa, 0x85, 0x2d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb9, 0xaa, 0x85, 0x31, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xb8, 0xaa, 0x85, 0x35, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xb7, 0xaa, 0x85, 0x39, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xb7, 0xaa, 0x85, 0x3d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb6, 0x0, 0x0, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40}, + }, + { + .addr = 1070137376, + .size = 244, + .data = (uint8_t[]){0xe0, 0xc, 0x38, 0x40, 0xb6, 0xd, 0x38, 0x40, 0xf2, 0xd, 0x38, 0x40, 0xe0, 0xc, 0x38, 0x40, 0x9c, 0xf, 0x38, 0x40, 0xb6, 0xd, 0x38, 0x40, 0x5e, 0xe, 0x38, 0x40, 0xc6, 0xe, 0x38, 0x40, 0xfa, 0xf, 0x38, 0x40, 0x26, 0x10, 0x38, 0x40, 0x9c, 0xa, 0x38, 0x40, 0x44, 0xe, 0x38, 0x40, 0x9c, 0xa, 0x38, 0x40, 0xfa, 0xe, 0x38, 0x40, 0xe0, 0xc, 0x38, 0x40, 0xb6, 0xd, 0x38, 0x40, 0xf2, 0xd, 0x38, 0x40, 0x70, 0x10, 0x38, 0x40, 0x92, 0xe, 0x38, 0x40, 0xa2, 0xd, 0x38, 0x40, 0xa, 0x13, 0x38, 0x40, 0x76, 0x11, 0x38, 0x40, 0x3a, 0xe, 0x38, 0x40, 0xb6, 0xd, 0x38, 0x40, 0x0, 0x1, 0x1c, 0x2, 0x1d, 0xe, 0x18, 0x3, 0x1e, 0x16, 0x14, 0xf, 0x19, 0x11, 0x4, 0x8, 0x1f, 0x1b, 0xd, 0x17, 0x15, 0x13, 0x10, 0x7, 0x1a, 0xc, 0x12, 0x6, 0xb, 0x5, 0xa, 0x9, 0xc0, 0xdb, 0xdc, 0xdb, 0xdd, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x0, 0x0, 0x0, 0x0, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x0, 0x0, 0x0, 0x0, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x70, 0x1d, 0x38, 0x40, 0x0, 0x0, 0x0, 0x0, 0x70, 0x1d, 0x38, 0x40}, + }, + }, + }, + + // esp32s3.json + { + .header = { + .entrypoint = 1077391268, + }, + .segments = { + { + .addr = 1077379072, + .size = 13864, + .data = (uint8_t[]){0x0, 0xc5, 0x49, 0x10, 0xd5, 0x49, 0x20, 0xe5, 0x49, 0x30, 0xf5, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x9, 0x10, 0xd5, 0x9, 0x20, 0xe5, 0x9, 0x30, 0xf5, 0x9, 0x0, 0x35, 0x0, 0x0, 0x0, 0x48, 0x3, 0xf0, 0x80, 0x40, 0x20, 0xe6, 0x3, 0x20, 0x38, 0x34, 0x40, 0x33, 0x30, 0x40, 0xd1, 0x3, 0x80, 0x33, 0x11, 0x30, 0x22, 0x30, 0x20, 0xe6, 0x13, 0x10, 0x20, 0x0, 0xf7, 0x74, 0xce, 0xf0, 0x80, 0x40, 0xe7, 0x78, 0x48, 0xf0, 0x80, 0x40, 0x86, 0x30, 0x0, 0xf0, 0x41, 0x0, 0x0, 0xc9, 0x49, 0x0, 0xd1, 0x9, 0x10, 0xd9, 0x49, 0x20, 0xe9, 0x49, 0x30, 0xf9, 0x49, 0x40, 0x80, 0x49, 0x50, 0x90, 0x49, 0x60, 0xa0, 0x49, 0x70, 0xb0, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc9, 0x9, 0x10, 0xd9, 0x9, 0x20, 0xe9, 0x9, 0x70, 0xd1, 0x9, 0x30, 0xf9, 0x9, 0x40, 0x87, 0x9, 0x50, 0x97, 0x9, 0x60, 0xa7, 0x9, 0x70, 0xb7, 0x9, 0x0, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0x49, 0x0, 0xd1, 0x9, 0x10, 0xdd, 0x49, 0x20, 0xed, 0x49, 0x30, 0xfd, 0x49, 0x40, 0x40, 0x49, 0x50, 0x50, 0x49, 0x60, 0x60, 0x49, 0x70, 0x70, 0x49, 0x80, 0x80, 0x49, 0x90, 0x90, 0x49, 0xa0, 0xa0, 0x49, 0xb0, 0xb0, 0x49, 0x0, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xcd, 0x9, 0x10, 0xdd, 0x9, 0x20, 0xed, 0x9, 0xb0, 0xd1, 0x9, 0x30, 0xfd, 0x9, 0x40, 0x4b, 0x9, 0x50, 0x5b, 0x9, 0x60, 0x6b, 0x9, 0x70, 0x7b, 0x9, 0x80, 0x8b, 0x9, 0x90, 0x9b, 0x9, 0xa0, 0xab, 0x9, 0xb0, 0xbb, 0x9, 0x0, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd2, 0x13, 0x85, 0x10, 0x3, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd3, 0x13, 0xc5, 0x11, 0x3, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd4, 0x13, 0x5, 0x13, 0x3, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd5, 0x13, 0x45, 0x14, 0x3, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd6, 0x13, 0x85, 0x15, 0x3, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd7, 0x13, 0xc5, 0x16, 0x3, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x0, 0xe8, 0x3, 0x26, 0x50, 0x42, 0x5, 0xeb, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x0, 0xe8, 0x3, 0x26, 0x50, 0x2, 0x5, 0xe7, 0x2, 0x5, 0xd0, 0xff, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd1, 0x13, 0x5, 0xeb, 0x2, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0xa, 0x0, 0x40, 0x50, 0xa, 0x0, 0x40, 0x2c, 0x89, 0x37, 0x40, 0xa4, 0x8a, 0x37, 0x40, 0xb8, 0x8a, 0x37, 0x40, 0x0, 0x10, 0x0, 0x0, 0x14, 0xa, 0x0, 0x40, 0x6c, 0x9, 0x0, 0x40, 0x0, 0x0, 0x1, 0x0, 0xff, 0xff, 0x0, 0x0, 0xfc, 0x9, 0x0, 0x40, 0x8, 0xa, 0x0, 0x40, 0x84, 0x8b, 0x37, 0x40, 0xac, 0x0, 0xc9, 0x3f, 0x90, 0x8c, 0x37, 0x40, 0xaf, 0x0, 0xc9, 0x3f, 0xad, 0x0, 0xc9, 0x3f, 0x74, 0x1c, 0x0, 0x40, 0x4, 0x44, 0x0, 0x0, 0xa8, 0xf, 0xc9, 0x3f, 0x58, 0x9f, 0x37, 0x40, 0x0, 0x44, 0x0, 0x0, 0x8, 0x44, 0x0, 0x0, 0x8c, 0xf, 0xc9, 0x3f, 0xd8, 0xa9, 0x37, 0x40, 0x0, 0x80, 0x3, 0x60, 0x4, 0x80, 0x3, 0x60, 0x1c, 0x0, 0x0, 0x60, 0x0, 0x0, 0x80, 0x3, 0x0, 0x0, 0x0, 0x60, 0xa7, 0xf, 0xc9, 0x3f, 0x60, 0x0, 0xc, 0x60, 0xff, 0xf3, 0xff, 0xff, 0x10, 0x0, 0xc, 0x60, 0x5c, 0x7, 0x0, 0x40, 0xec, 0x9e, 0x37, 0x40, 0x10, 0x80, 0x3, 0x60, 0x14, 0x80, 0x3, 0x60, 0x30, 0x70, 0x0, 0x60, 0x34, 0x70, 0x0, 0x60, 0xf4, 0x11, 0x0, 0x40, 0x18, 0x80, 0x3, 0x60, 0xff, 0xf4, 0xff, 0xff, 0x9c, 0xb4, 0x37, 0x40, 0xa0, 0xa9, 0x37, 0x40, 0x98, 0x9f, 0x37, 0x40, 0xa6, 0xf, 0xc9, 0x3f, 0x18, 0x0, 0xc, 0x60, 0x0, 0x0, 0x0, 0x1, 0x10, 0x0, 0x0, 0x60, 0x11, 0x1, 0x4, 0x0, 0xc, 0x0, 0x0, 0x60, 0x2, 0x70, 0x0, 0x0, 0x78, 0x0, 0x0, 0x60, 0x0, 0x0, 0x70, 0x3, 0x14, 0x0, 0x0, 0x60, 0x5b, 0x1, 0x30, 0x0, 0x20, 0x0, 0x0, 0x60, 0x24, 0xa9, 0x37, 0x40, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x4, 0x0, 0x80, 0x0, 0x0, 0x60, 0x0, 0x0, 0x0, 0x80, 0xff, 0xff, 0xfb, 0xff, 0x0, 0x0, 0x2, 0x0, 0xff, 0xff, 0xfd, 0xff, 0x0, 0x6, 0x0, 0x40, 0x90, 0xf, 0xc9, 0x3f, 0xe0, 0x28, 0x0, 0x0, 0xa0, 0xd, 0x0, 0x0, 0xe8, 0x11, 0x0, 0x40, 0x74, 0x1f, 0x0, 0x40, 0x38, 0x40, 0x0, 0x60, 0xec, 0xa, 0x0, 0x40, 0xbc, 0x87, 0x37, 0x40, 0x3e, 0x29, 0x0, 0x0, 0x84, 0x8a, 0x37, 0x40, 0xc, 0x8a, 0x37, 0x40, 0x0, 0xff, 0x0, 0x0, 0xac, 0x0, 0xc9, 0x3f, 0x20, 0x0, 0xc9, 0x3f, 0x6c, 0x0, 0xc9, 0x3f, 0xd8, 0x6, 0x0, 0x40, 0x9c, 0x88, 0x37, 0x40, 0x5c, 0x1c, 0x0, 0x40, 0x8, 0x8b, 0x37, 0x40, 0x1, 0x10, 0x0, 0x0, 0xa0, 0x87, 0x37, 0x40, 0x68, 0x1c, 0x0, 0x40, 0x38, 0xa, 0x0, 0x40, 0x9c, 0x9, 0x0, 0x40, 0x74, 0x81, 0x4, 0x40, 0xfc, 0x88, 0x37, 0x40, 0x98, 0x3a, 0x0, 0x0, 0xf0, 0xff, 0xff, 0x0, 0xa8, 0x6, 0x0, 0x40, 0x10, 0x27, 0x0, 0x0, 0x84, 0x9, 0x0, 0x40, 0x90, 0x9, 0x0, 0x40, 0xb4, 0xd3, 0xc9, 0x3f, 0x0, 0x80, 0x0, 0x0, 0x1, 0x80, 0x0, 0x0, 0xb4, 0x53, 0xc9, 0x3f, 0x28, 0x8, 0x0, 0x40, 0x84, 0x88, 0x37, 0x40, 0x0, 0xf0, 0xff, 0xff, 0x0, 0x40, 0x0, 0x0, 0x2c, 0xa, 0x0, 0x40, 0x70, 0x99, 0x0, 0x0, 0x18, 0x99, 0x0, 0x0, 0xa3, 0x98, 0x0, 0x0, 0xa2, 0x98, 0x0, 0x0, 0xa1, 0x98, 0x0, 0x0, 0xa0, 0x98, 0x0, 0x0, 0x99, 0x98, 0x0, 0x0, 0x98, 0x98, 0x0, 0x0, 0x97, 0x98, 0x0, 0x0, 0x96, 0x98, 0x0, 0x0, 0x95, 0x98, 0x0, 0x0, 0x94, 0x98, 0x0, 0x0, 0x9b, 0x98, 0x0, 0x0, 0x9a, 0x98, 0x0, 0x0, 0x92, 0x98, 0x0, 0x0, 0x9c, 0x98, 0x0, 0x0, 0x9f, 0x98, 0x0, 0x0, 0x9e, 0x98, 0x0, 0x0, 0x9d, 0x98, 0x0, 0x0, 0x93, 0x98, 0x0, 0x0, 0xa4, 0x98, 0x0, 0x0, 0xa8, 0x98, 0x0, 0x0, 0x0, 0x99, 0x0, 0x0, 0x1c, 0x0, 0xc, 0x60, 0x24, 0x0, 0xc, 0x60, 0x20, 0x0, 0xc, 0x60, 0x0, 0x20, 0x0, 0x0, 0x0, 0x28, 0xc, 0x60, 0x0, 0x20, 0xc, 0x60, 0xd4, 0x0, 0xc9, 0x3f, 0x54, 0x1, 0xc9, 0x3f, 0xc0, 0x80, 0x0, 0x60, 0xf4, 0xa1, 0x37, 0x40, 0xfc, 0xff, 0x3, 0x0, 0x1c, 0xa2, 0x37, 0x40, 0x74, 0x80, 0x0, 0x60, 0x0, 0x0, 0x0, 0x20, 0xff, 0xfe, 0xff, 0x3b, 0x68, 0xf0, 0x1, 0x60, 0x80, 0xf0, 0x1, 0x60, 0xff, 0x8f, 0x0, 0x80, 0x40, 0x13, 0x2, 0x0, 0x7, 0xb, 0x1, 0x0, 0x0, 0x0, 0x9, 0x3d, 0x6c, 0xf0, 0x1, 0x60, 0xff, 0xff, 0xff, 0x7f, 0x0, 0x48, 0xe8, 0x1, 0x40, 0x42, 0xf, 0x0, 0x3f, 0x42, 0xf, 0x0, 0x0, 0x5a, 0x62, 0x2, 0x6c, 0xac, 0x37, 0x40, 0x54, 0x80, 0x0, 0x60, 0x90, 0x80, 0x0, 0x60, 0x6c, 0x5d, 0x0, 0x40, 0x34, 0x80, 0x0, 0x60, 0xff, 0xff, 0xff, 0xfb, 0x1c, 0x80, 0x0, 0x60, 0x3f, 0xc0, 0xff, 0x0, 0x0, 0x5, 0x0, 0x14, 0x2c, 0x80, 0x0, 0x60, 0xff, 0x0, 0xff, 0xff, 0x24, 0x80, 0x0, 0x60, 0x1, 0x2, 0x1, 0x2, 0x30, 0x80, 0x0, 0x60, 0x0, 0x0, 0xff, 0xff, 0x28, 0x80, 0x0, 0x60, 0x0, 0x0, 0x1, 0x2, 0x20, 0x80, 0x0, 0x60, 0xff, 0x7f, 0x0, 0xff, 0x0, 0x0, 0x8, 0x0, 0x2c, 0x41, 0xc, 0x60, 0xa8, 0x60, 0x2, 0x60, 0x8, 0x40, 0xc, 0x60, 0x68, 0x40, 0xc, 0x60, 0xe8, 0x30, 0x0, 0x60, 0xe8, 0x20, 0x0, 0x60, 0x0, 0x80, 0x0, 0x60, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xf5, 0xff, 0xff, 0x88, 0x80, 0x0, 0x60, 0xff, 0xff, 0xf7, 0xff, 0x84, 0x80, 0x0, 0x60, 0xff, 0xff, 0xff, 0x5f, 0x0, 0x0, 0x0, 0x10, 0x14, 0x0, 0xc, 0x60, 0xff, 0xf6, 0xff, 0xff, 0x9c, 0x60, 0x2, 0x60, 0x54, 0xd0, 0x1, 0x60, 0xd4, 0xcc, 0x1, 0x60, 0x90, 0x60, 0x0, 0x60, 0xf0, 0x50, 0x0, 0x60, 0xb0, 0x60, 0x2, 0x60, 0x0, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x94, 0x80, 0x0, 0x60, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xbf, 0xff, 0xff, 0xcf, 0xff, 0xf7, 0xff, 0xff, 0xaf, 0xff, 0xff, 0x40, 0x80, 0x0, 0x60, 0x4c, 0x80, 0x0, 0x60, 0xb0, 0x80, 0x0, 0x60, 0xa1, 0x3a, 0xd8, 0x50, 0x98, 0x80, 0x0, 0x60, 0xff, 0xef, 0xff, 0x7f, 0x64, 0xf0, 0x1, 0x60, 0x48, 0xf0, 0x1, 0x60, 0x64, 0x0, 0x2, 0x60, 0x48, 0x0, 0x2, 0x60, 0x5c, 0xa9, 0x37, 0x40, 0xa0, 0xac, 0x37, 0x40, 0xa8, 0xac, 0x37, 0x40, 0x90, 0xf, 0xc9, 0x3f, 0xb8, 0xd3, 0xc9, 0x3f, 0x0, 0x80, 0x37, 0x40, 0xb0, 0xa2, 0x37, 0x40, 0x8, 0x8d, 0x37, 0x40, 0x68, 0xaa, 0x37, 0x40, 0x36, 0x41, 0x0, 0x81, 0x17, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xe0, 0x8, 0x0, 0xc, 0x2, 0x27, 0x1a, 0x2, 0x22, 0xa0, 0x63, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x82, 0x2, 0x0, 0x92, 0x2, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x2, 0x0, 0x99, 0x11, 0xa2, 0x2, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0x82, 0x2, 0x4, 0x92, 0x2, 0x5, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x6, 0x0, 0x99, 0x11, 0xb2, 0x2, 0x7, 0x80, 0xbb, 0x1, 0x90, 0x9b, 0x20, 0x80, 0xb9, 0x20, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xc2, 0x2, 0xb, 0x80, 0xcc, 0x1, 0x90, 0x9c, 0x20, 0x80, 0xc9, 0x20, 0x82, 0x2, 0xc, 0x92, 0x2, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xe, 0x0, 0x99, 0x11, 0xd2, 0x2, 0xf, 0x80, 0xdd, 0x1, 0x90, 0x9d, 0x20, 0x80, 0xd9, 0x20, 0x82, 0x2, 0x10, 0x92, 0x2, 0x11, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x12, 0x0, 0x99, 0x11, 0xe2, 0x2, 0x13, 0x80, 0xee, 0x1, 0x90, 0x9e, 0x20, 0x80, 0xe9, 0x20, 0x82, 0x2, 0x14, 0x92, 0x2, 0x15, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x16, 0x0, 0x99, 0x11, 0xf2, 0x2, 0x17, 0x80, 0xff, 0x1, 0x90, 0x9f, 0x20, 0x80, 0xf9, 0x20, 0x81, 0xe4, 0xfe, 0xe0, 0x8, 0x0, 0xc, 0x2, 0x27, 0x1a, 0x2, 0x22, 0xaf, 0xc4, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xc, 0xb, 0x81, 0xdf, 0xfe, 0xad, 0x2, 0xcd, 0x3, 0xdd, 0x4, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x71, 0xdb, 0xfe, 0xad, 0x2, 0xe0, 0x7, 0x0, 0xc, 0xac, 0x61, 0xd9, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x6, 0x0, 0x82, 0x3, 0xa, 0x92, 0x3, 0xb, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x3, 0xc, 0x0, 0x99, 0x11, 0xa2, 0x3, 0xd, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xb9, 0x20, 0x82, 0x3, 0xe, 0x92, 0x3, 0xf, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x3, 0x10, 0x0, 0x99, 0x11, 0xa2, 0x3, 0x11, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xc9, 0x20, 0xad, 0x2, 0xe0, 0x6, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x71, 0xc3, 0xfe, 0xad, 0x2, 0xe0, 0x7, 0x0, 0xc, 0x8c, 0x61, 0xc1, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x6, 0x0, 0xad, 0x2, 0xbd, 0x4, 0xcd, 0x5, 0xe0, 0x6, 0x0, 0x8b, 0xb3, 0xc, 0x2c, 0xad, 0x2, 0xe0, 0x6, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x36, 0xa1, 0x0, 0x49, 0x81, 0x39, 0x71, 0x88, 0x52, 0x59, 0x91, 0x89, 0x11, 0x50, 0x58, 0x63, 0x88, 0x32, 0x89, 0x21, 0x8a, 0x65, 0x88, 0x22, 0x89, 0x61, 0x29, 0xa1, 0x28, 0x42, 0x81, 0xb5, 0xfe, 0x89, 0x51, 0x71, 0xb5, 0xfe, 0x1c, 0x8, 0x89, 0x41, 0x81, 0xb5, 0xfe, 0x89, 0x31, 0x3c, 0x68, 0x89, 0x1, 0x41, 0xad, 0xfe, 0x67, 0xb2, 0x38, 0x70, 0x82, 0x10, 0x56, 0xb8, 0x1, 0x88, 0x51, 0x8a, 0x32, 0x88, 0x61, 0x37, 0x38, 0x12, 0x88, 0x41, 0x0, 0x8, 0x40, 0x20, 0xa0, 0x91, 0x88, 0x31, 0xe0, 0x8, 0x0, 0x16, 0xa, 0x1, 0x46, 0x1f, 0x0, 0x20, 0xac, 0x41, 0x81, 0xa7, 0xfe, 0xe0, 0x8, 0x0, 0x56, 0x1a, 0x7, 0x4a, 0x32, 0x88, 0xa1, 0x39, 0x48, 0x2d, 0x3, 0x67, 0x32, 0xc6, 0xc, 0x2, 0x81, 0x9f, 0xfe, 0x89, 0x61, 0x82, 0xaf, 0xc4, 0x89, 0x51, 0x81, 0x9b, 0xfe, 0x89, 0x41, 0x3d, 0x2, 0x78, 0x21, 0x16, 0x85, 0x3, 0x88, 0x91, 0x37, 0x38, 0x4d, 0x40, 0x65, 0x63, 0x88, 0x81, 0x3a, 0xb8, 0x88, 0x71, 0x16, 0x88, 0x0, 0xad, 0x7, 0xcd, 0x6, 0x88, 0x61, 0x46, 0x1, 0x0, 0xad, 0x7, 0xcd, 0x6, 0x88, 0x41, 0xe0, 0x8, 0x0, 0x8d, 0x2, 0x27, 0x1a, 0x1, 0x88, 0x51, 0x98, 0xa1, 0x82, 0x49, 0x1d, 0x6a, 0x77, 0x3a, 0x36, 0x60, 0x55, 0xc0, 0x56, 0x65, 0xfc, 0x88, 0x21, 0x3a, 0x88, 0x98, 0xa1, 0x89, 0x39, 0x88, 0x11, 0x30, 0x88, 0x73, 0x30, 0x88, 0xc0, 0x89, 0x59, 0xc, 0x2, 0x1d, 0xf0, 0x28, 0x1, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x36, 0x61, 0x0, 0x49, 0x21, 0x39, 0x11, 0x61, 0x87, 0xfe, 0x52, 0xa0, 0xff, 0x72, 0xa0, 0xc0, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x77, 0x98, 0xf4, 0x79, 0x1, 0xc, 0x8, 0x89, 0x31, 0x72, 0xa0, 0xdb, 0x42, 0xa0, 0xdc, 0x32, 0xa0, 0xdd, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x77, 0x98, 0x12, 0xad, 0x2, 0xe0, 0x6, 0x0, 0x50, 0x8a, 0x10, 0x47, 0x18, 0xf, 0x37, 0x98, 0xe6, 0xad, 0x7, 0x46, 0x2, 0x0, 0x98, 0x1, 0x97, 0x18, 0x19, 0x46, 0x0, 0x0, 0xa8, 0x1, 0x88, 0x21, 0x98, 0x31, 0x87, 0xb9, 0x18, 0x88, 0x11, 0x9a, 0x88, 0xa2, 0x48, 0x0, 0x1b, 0x99, 0x99, 0x31, 0x86, 0xf0, 0xff, 0x88, 0x21, 0x38, 0x31, 0x37, 0x38, 0x3, 0x28, 0x11, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x71, 0x61, 0xfe, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x81, 0x60, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xe0, 0x8, 0x0, 0xad, 0x2, 0xe0, 0x7, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xb1, 0x63, 0xfe, 0xc, 0x1c, 0x81, 0x63, 0xfe, 0xad, 0x2, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x81, 0x0, 0x52, 0xa0, 0xc0, 0x81, 0x60, 0xfe, 0x89, 0x21, 0xc, 0x28, 0x89, 0x31, 0x71, 0x5c, 0xfe, 0x62, 0xa0, 0xdb, 0x81, 0x5b, 0xfe, 0x89, 0x11, 0xc, 0x18, 0x89, 0x1, 0x16, 0xc4, 0x2, 0x82, 0x3, 0x0, 0x57, 0x18, 0x9, 0x67, 0x98, 0xf, 0xad, 0x2, 0xb8, 0x11, 0xc6, 0x0, 0x0, 0xad, 0x2, 0xb8, 0x21, 0xc8, 0x31, 0x46, 0x2, 0x0, 0x82, 0x41, 0x13, 0xb2, 0xc1, 0x13, 0xad, 0x2, 0xc8, 0x1, 0xe0, 0x7, 0x0, 0x1b, 0x33, 0xb, 0x44, 0x56, 0x24, 0xfd, 0x1d, 0xf0, 0x36, 0x81, 0x0, 0xa2, 0xc1, 0x10, 0x81, 0x4d, 0xfe, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x82, 0x1, 0x10, 0x89, 0x31, 0x82, 0x1, 0x11, 0x89, 0x21, 0x82, 0x1, 0x12, 0x89, 0x11, 0xb2, 0x1, 0x13, 0xc2, 0x1, 0x14, 0xd2, 0x1, 0x15, 0xe2, 0x1, 0x16, 0xf2, 0x1, 0x17, 0x72, 0x1, 0x18, 0x62, 0x1, 0x19, 0x52, 0x1, 0x1a, 0x42, 0x1, 0x1b, 0x32, 0x1, 0x1c, 0x92, 0x1, 0x1d, 0x82, 0x1, 0x1e, 0xa2, 0x1, 0x1f, 0xa2, 0x42, 0xf, 0x82, 0x42, 0xe, 0x92, 0x42, 0xd, 0x32, 0x42, 0xc, 0x42, 0x42, 0xb, 0x52, 0x42, 0xa, 0x62, 0x42, 0x9, 0x72, 0x42, 0x8, 0xf2, 0x42, 0x7, 0xe2, 0x42, 0x6, 0xd2, 0x42, 0x5, 0xc2, 0x42, 0x4, 0xb2, 0x42, 0x3, 0x88, 0x11, 0x82, 0x42, 0x2, 0x88, 0x21, 0x82, 0x42, 0x1, 0x88, 0x31, 0x82, 0x42, 0x0, 0x1d, 0xf0, 0x36, 0x61, 0x0, 0x16, 0x32, 0x8, 0x26, 0x12, 0x2, 0x6, 0x3f, 0x0, 0x81, 0x2e, 0xfe, 0x91, 0x2e, 0xfe, 0x8a, 0x49, 0x71, 0x2e, 0xfe, 0x81, 0x2e, 0xfe, 0x8a, 0x39, 0xc, 0x2, 0xc, 0x16, 0x81, 0x2d, 0xfe, 0x8a, 0x59, 0x81, 0x2c, 0xfe, 0x89, 0x11, 0x82, 0xa1, 0x0, 0x89, 0x1, 0xe0, 0x7, 0x0, 0x98, 0x4, 0xb8, 0x3, 0x8d, 0x6, 0x97, 0x1b, 0x1, 0x8d, 0x2, 0xb2, 0x5, 0x0, 0x9d, 0x6, 0x27, 0x1b, 0x1, 0x9d, 0x2, 0x96, 0xea, 0x0, 0xc0, 0x20, 0x0, 0xb8, 0x11, 0xc8, 0x1, 0xc9, 0xb, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x90, 0x88, 0x10, 0x60, 0x88, 0x10, 0x56, 0xc8, 0xfc, 0xe0, 0x7, 0x0, 0x7d, 0xa, 0x81, 0x1d, 0xfe, 0xe0, 0x8, 0x0, 0xc, 0x18, 0x80, 0x8a, 0x10, 0x16, 0x38, 0x9, 0x96, 0xc7, 0x8, 0xc0, 0x20, 0x0, 0x88, 0x11, 0x98, 0x1, 0x99, 0x8, 0x70, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x86, 0x1e, 0x0, 0x81, 0xe, 0xfe, 0x91, 0xe, 0xfe, 0x8a, 0x49, 0x71, 0xe, 0xfe, 0x81, 0xe, 0xfe, 0x8a, 0x39, 0xc, 0x2, 0xc, 0x16, 0x81, 0xd, 0xfe, 0x8a, 0x59, 0x81, 0xd, 0xfe, 0x89, 0x11, 0x82, 0xa1, 0x0, 0x89, 0x1, 0xe0, 0x7, 0x0, 0x98, 0x4, 0xb8, 0x3, 0x8d, 0x6, 0x97, 0x1b, 0x1, 0x8d, 0x2, 0xb2, 0x5, 0x0, 0x9d, 0x6, 0x27, 0x1b, 0x1, 0x9d, 0x2, 0x96, 0xea, 0x0, 0xc0, 0x20, 0x0, 0xb8, 0x11, 0xc8, 0x1, 0xc9, 0xb, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x90, 0x88, 0x10, 0x60, 0x88, 0x10, 0x56, 0xc8, 0xfc, 0xe0, 0x7, 0x0, 0x7d, 0xa, 0x81, 0xfd, 0xfd, 0xe0, 0x8, 0x0, 0xc, 0x18, 0x80, 0x8a, 0x10, 0x16, 0x58, 0x1, 0x96, 0xe7, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x11, 0x98, 0x1, 0x99, 0x8, 0x70, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x2d, 0xb, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x16, 0x22, 0x4, 0x66, 0x12, 0x68, 0x4c, 0x8, 0x91, 0xf3, 0xfd, 0xc, 0x3a, 0xb1, 0xf1, 0xfd, 0x16, 0x4, 0x3, 0x80, 0xc4, 0x63, 0xca, 0xd3, 0xed, 0xc, 0x16, 0xee, 0x0, 0xf2, 0x3, 0x0, 0xc0, 0x20, 0x0, 0xf9, 0xb, 0xb, 0xee, 0x1b, 0x33, 0x56, 0xe, 0xff, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0xc0, 0x20, 0x0, 0xe8, 0x9, 0xa0, 0xee, 0x10, 0x16, 0x4e, 0xff, 0xc0, 0x44, 0xc0, 0x3d, 0xd, 0x56, 0xe4, 0xfc, 0x1d, 0xf0, 0x4a, 0x83, 0x91, 0xe4, 0xfd, 0xa1, 0xe4, 0xfd, 0xb1, 0xe4, 0xfd, 0x87, 0x13, 0xef, 0xc0, 0x20, 0x0, 0xc8, 0x9, 0xa0, 0xcc, 0x10, 0x56, 0x4c, 0xff, 0xc2, 0x3, 0x0, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0x1b, 0x33, 0x87, 0x93, 0xe7, 0x6, 0xf5, 0xff, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x29, 0xfe, 0x80, 0x81, 0xc0, 0x10, 0x18, 0x0, 0x81, 0xcf, 0xfd, 0xe0, 0x8, 0x0, 0x81, 0xd7, 0xfd, 0x92, 0x8, 0x0, 0x16, 0x29, 0x0, 0x86, 0x70, 0x4, 0xc, 0x13, 0x32, 0x48, 0x0, 0x52, 0xa1, 0x0, 0x96, 0xda, 0x0, 0xc0, 0x20, 0x0, 0x81, 0xca, 0xfd, 0x59, 0x8, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x81, 0xcf, 0xfd, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xce, 0xfd, 0xa0, 0x99, 0x10, 0xa2, 0xa4, 0x0, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0xcb, 0xfd, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x7c, 0x8a, 0xa0, 0x99, 0x10, 0xc, 0x67, 0x70, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0xc6, 0xfd, 0xe0, 0x8, 0x0, 0x82, 0xa, 0x18, 0xc, 0x3a, 0x9d, 0x3, 0xa9, 0xb1, 0xa7, 0x18, 0x1, 0xc, 0x9, 0xc, 0x4a, 0xa2, 0x61, 0x22, 0xa7, 0x18, 0x2, 0xf0, 0x39, 0x11, 0x81, 0xc4, 0xfd, 0x82, 0x61, 0x25, 0xc, 0x84, 0x82, 0xa0, 0xff, 0x82, 0x61, 0x23, 0xc, 0x78, 0x82, 0x61, 0x26, 0xb1, 0xc7, 0xfd, 0x81, 0xba, 0xfd, 0x91, 0xcd, 0xfd, 0x99, 0xa1, 0x1c, 0x9, 0x92, 0x61, 0x1f, 0xa1, 0xbe, 0xfd, 0x21, 0xc0, 0xfd, 0x61, 0xd4, 0xfd, 0x7c, 0xf9, 0x92, 0x61, 0x24, 0xc, 0x29, 0x92, 0x61, 0x1b, 0x72, 0x61, 0x21, 0x69, 0xc1, 0x16, 0x63, 0x1c, 0x26, 0x13, 0x2, 0x86, 0x45, 0x4, 0xa2, 0x61, 0x20, 0x22, 0x61, 0x19, 0xb2, 0x61, 0x1c, 0x52, 0x61, 0x1d, 0x32, 0x61, 0x1a, 0x1c, 0x3a, 0xe0, 0x8, 0x0, 0xa1, 0xaa, 0xfd, 0xc, 0x9, 0xc0, 0x20, 0x0, 0x99, 0xa, 0x81, 0xa9, 0xfd, 0xc0, 0x20, 0x0, 0x42, 0x61, 0x1e, 0x49, 0x8, 0xc0, 0x20, 0x0, 0x92, 0x61, 0x18, 0xa2, 0x61, 0x17, 0x99, 0xa, 0xc0, 0x20, 0x0, 0x92, 0x21, 0x22, 0x99, 0x8, 0x81, 0xa2, 0xfd, 0xc0, 0x20, 0x0, 0xc8, 0x8, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0x32, 0xc8, 0x0, 0xc, 0x1f, 0x21, 0x9f, 0xfd, 0x8d, 0xf, 0x9d, 0xf, 0x4d, 0xf, 0x66, 0x28, 0x2, 0x46, 0x2c, 0x0, 0x97, 0x18, 0x7, 0x92, 0xc2, 0xfc, 0xc0, 0x20, 0x0, 0xc8, 0x9, 0x2c, 0x9, 0x90, 0x9f, 0x63, 0x1c, 0x9b, 0x0, 0xb, 0x40, 0xc0, 0x70, 0x91, 0xa2, 0xa0, 0xb0, 0xa2, 0xda, 0x2b, 0xaa, 0xa1, 0x79, 0xa, 0x1b, 0x68, 0xb2, 0x21, 0x26, 0x97, 0xbb, 0x1c, 0xc0, 0x20, 0x0, 0xc8, 0x2, 0x90, 0x8c, 0x11, 0x70, 0x78, 0x20, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0x79, 0x8, 0xed, 0x6, 0xb6, 0xcf, 0x7, 0x86, 0x8, 0x0, 0xed, 0x8, 0xf6, 0xcf, 0x1d, 0x90, 0x80, 0x60, 0x1c, 0xfb, 0xb0, 0x88, 0x10, 0x0, 0x8, 0x40, 0x82, 0x21, 0x24, 0x80, 0x80, 0x91, 0x80, 0x87, 0x10, 0xa2, 0xa0, 0xb0, 0xa2, 0xda, 0x2b, 0xaa, 0xa1, 0x89, 0xa, 0x7b, 0x89, 0x80, 0x53, 0x41, 0x57, 0xb4, 0x2, 0x6, 0x11, 0x4, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xad, 0x3, 0x62, 0x61, 0x27, 0x6d, 0xc, 0xcd, 0x5, 0x82, 0x21, 0x25, 0x42, 0x61, 0x28, 0x4d, 0xe, 0x7d, 0xf, 0xe0, 0x8, 0x0, 0xfd, 0x7, 0x9d, 0x4, 0x42, 0x21, 0x28, 0xcd, 0x6, 0x5a, 0x33, 0x50, 0x44, 0xc0, 0x4b, 0x22, 0xf2, 0xcf, 0xe0, 0x82, 0x21, 0x27, 0x26, 0x28, 0x2, 0x46, 0xd3, 0xff, 0xb2, 0x21, 0x20, 0x62, 0x21, 0x18, 0x16, 0x94, 0x0, 0x62, 0x43, 0x0, 0xb, 0x44, 0x1b, 0x33, 0x56, 0x54, 0xff, 0xc, 0x17, 0x82, 0x1, 0xa4, 0x70, 0x88, 0x10, 0x16, 0x88, 0x1, 0x81, 0x69, 0xfd, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x68, 0xfd, 0xa0, 0x99, 0x10, 0xa2, 0xa3, 0x0, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x66, 0xfd, 0xc0, 0x20, 0x0, 0x82, 0x6b, 0x60, 0xa2, 0xa0, 0x60, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0xc0, 0x20, 0x0, 0xa2, 0x21, 0x17, 0x88, 0xa, 0x92, 0x21, 0x22, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0xa, 0x81, 0x5e, 0xfd, 0x98, 0xb1, 0x80, 0x99, 0x10, 0x90, 0xa8, 0xc0, 0xd0, 0x99, 0x11, 0x0, 0x19, 0x40, 0xb2, 0x21, 0x23, 0x0, 0xbb, 0xa1, 0xc2, 0x21, 0x24, 0xc0, 0xbb, 0x30, 0xc8, 0xa, 0xb0, 0xfc, 0x10, 0x0, 0xc6, 0xa1, 0x0, 0xd7, 0xa1, 0x7d, 0xf, 0x70, 0xfc, 0x20, 0x70, 0xed, 0x20, 0xf0, 0xc, 0x13, 0xe2, 0xea, 0x0, 0xb0, 0xfe, 0x10, 0x77, 0x9f, 0xeb, 0x0, 0x9, 0x40, 0xe0, 0x90, 0x91, 0xa2, 0x21, 0x23, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x16, 0x29, 0x0, 0x86, 0xd6, 0x3, 0x1b, 0x28, 0x86, 0x78, 0x0, 0xa2, 0x61, 0x20, 0x42, 0x61, 0x1e, 0x52, 0x61, 0x1d, 0x91, 0x48, 0xfd, 0xc0, 0x20, 0x0, 0xa8, 0x9, 0xb0, 0xaa, 0x10, 0x56, 0xca, 0x0, 0xc0, 0x20, 0x0, 0xa8, 0x9, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0xb2, 0x61, 0x1c, 0x1c, 0x4a, 0xe0, 0x8, 0x0, 0x81, 0x41, 0xfd, 0x91, 0x41, 0xfd, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x51, 0x40, 0xfd, 0xc, 0x7, 0xc0, 0x20, 0x0, 0x79, 0x5, 0x91, 0x3f, 0xfd, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x79, 0x5, 0x81, 0x3c, 0xfd, 0x91, 0x3d, 0xfd, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x3d, 0xfd, 0xc0, 0x20, 0x0, 0x98, 0xa1, 0x89, 0x9, 0x41, 0x3b, 0xfd, 0xc0, 0x20, 0x0, 0x88, 0x4, 0xc, 0xc9, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x4, 0xc0, 0x20, 0x0, 0x88, 0x4, 0x7c, 0xd9, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x4, 0xc0, 0x20, 0x0, 0x88, 0x4, 0x92, 0xaf, 0xcf, 0x90, 0x88, 0x10, 0x92, 0x21, 0x1f, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x4, 0x81, 0x2e, 0xfd, 0xc0, 0x20, 0x0, 0x92, 0x21, 0x20, 0x82, 0x69, 0x1b, 0x1c, 0xba, 0xe0, 0x2, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x4, 0x91, 0x2a, 0xfd, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x4, 0xc0, 0x20, 0x0, 0x88, 0x4, 0x91, 0x27, 0xfd, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x4, 0x81, 0x25, 0xfd, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x91, 0x24, 0xfd, 0x90, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x96, 0x7a, 0xff, 0xc0, 0x20, 0x0, 0xa8, 0x4, 0xb1, 0x1f, 0xfd, 0xb0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x4, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x90, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x96, 0x7a, 0xff, 0xc0, 0x20, 0x0, 0xa8, 0x4, 0xb1, 0x17, 0xfd, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x4, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x90, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x96, 0x7a, 0xff, 0xc0, 0x20, 0x0, 0xa8, 0x4, 0xb1, 0xf, 0xfd, 0xb0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x4, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x90, 0x9a, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x96, 0x79, 0xff, 0xc, 0xfa, 0xe0, 0x6, 0x0, 0xc0, 0x20, 0x0, 0x88, 0x5, 0xc, 0x1c, 0xc0, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x5, 0x21, 0x4, 0xfd, 0x82, 0xc2, 0x14, 0x98, 0xb1, 0x80, 0xa9, 0x10, 0xa0, 0x98, 0xc0, 0xd0, 0x8a, 0x11, 0x0, 0x18, 0x40, 0xa2, 0x21, 0x23, 0x0, 0xaa, 0xa1, 0xb2, 0x21, 0x24, 0xb0, 0xaa, 0x30, 0xb8, 0x9, 0xa0, 0xeb, 0x10, 0x0, 0xb7, 0xa1, 0x0, 0xcc, 0xa1, 0xfd, 0xe, 0xf0, 0xeb, 0x20, 0xf0, 0xdc, 0x20, 0xe0, 0xc, 0x13, 0xd2, 0xe9, 0x0, 0xa0, 0xed, 0x10, 0xf7, 0x9e, 0xeb, 0x0, 0x8, 0x40, 0xd0, 0x80, 0x91, 0x92, 0x21, 0x23, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x16, 0x28, 0x0, 0x6, 0x66, 0x3, 0x32, 0x61, 0x1a, 0x82, 0x21, 0x1b, 0x82, 0x52, 0x0, 0x2b, 0xa2, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0xec, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0xc, 0xa8, 0x82, 0x42, 0x12, 0x72, 0x42, 0x10, 0xc, 0x7, 0x61, 0xe6, 0xfc, 0x51, 0xe6, 0xfc, 0x31, 0xe6, 0xfc, 0x4d, 0x7, 0x82, 0xa0, 0xb0, 0x67, 0x14, 0x15, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x4a, 0xa8, 0xbd, 0x7, 0xcd, 0x5, 0xe0, 0x3, 0x0, 0x5a, 0x44, 0xc6, 0xf8, 0xff, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x52, 0xc8, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x41, 0xd7, 0xfc, 0xad, 0x5, 0xcd, 0x4, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x81, 0xd7, 0xfc, 0xe0, 0x8, 0x0, 0x81, 0xd6, 0xfc, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x1c, 0xc9, 0x90, 0x88, 0x10, 0x92, 0x21, 0x1e, 0x97, 0x18, 0x4, 0x8d, 0xa, 0x46, 0x0, 0x0, 0xc, 0x18, 0xc, 0x9, 0x92, 0x61, 0x1e, 0x97, 0x1a, 0x1, 0x8d, 0xa, 0x91, 0xce, 0xfc, 0xad, 0x8, 0x62, 0x21, 0x1e, 0xbd, 0x6, 0x92, 0x61, 0x17, 0xe0, 0x9, 0x0, 0x81, 0x8a, 0xfc, 0x92, 0xa0, 0xc4, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x82, 0x21, 0x1d, 0x92, 0xa0, 0xc0, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0x80, 0xfc, 0x92, 0xa0, 0xbc, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x81, 0x80, 0xfc, 0x92, 0xa0, 0xb8, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x82, 0x21, 0x1c, 0x92, 0xa0, 0xb4, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x89, 0x9, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0x69, 0x8, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x81, 0xb6, 0xfc, 0x89, 0x91, 0xe0, 0x8, 0x0, 0x22, 0x61, 0x2a, 0x22, 0x21, 0x1a, 0x22, 0x61, 0x29, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0x72, 0xc8, 0x0, 0x8b, 0xa7, 0x5c, 0x6c, 0xbd, 0x6, 0xe0, 0x3, 0x0, 0xa2, 0xc7, 0x5e, 0xbd, 0x5, 0xcd, 0x4, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x81, 0xab, 0xfc, 0x8a, 0xa7, 0xc2, 0xa1, 0xcd, 0xbd, 0x6, 0xe0, 0x3, 0x0, 0x4c, 0x98, 0x92, 0xa0, 0xb3, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0x18, 0x92, 0xa0, 0xb2, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0x88, 0x92, 0xa0, 0xb1, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x4c, 0xf8, 0x92, 0xa0, 0xb0, 0x92, 0xd9, 0x2b, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0x4c, 0x81, 0x99, 0xfc, 0xad, 0x2, 0x82, 0x61, 0x19, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc1, 0x5c, 0xfc, 0xbd, 0x6, 0xc2, 0x61, 0x1a, 0x32, 0x61, 0x18, 0xe0, 0x3, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x8b, 0x98, 0x99, 0x81, 0x2b, 0x88, 0x89, 0x71, 0x81, 0xac, 0xfc, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x1b, 0x88, 0x89, 0x51, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x82, 0xc8, 0x0, 0x1b, 0x88, 0x89, 0x41, 0x82, 0xc7, 0x1e, 0x89, 0x61, 0x81, 0x84, 0xfc, 0x82, 0x61, 0x1c, 0xa2, 0x21, 0x29, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x2b, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc2, 0x21, 0x1a, 0x82, 0x21, 0x1c, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0xed, 0xb, 0xf6, 0x8e, 0x2, 0x86, 0xe7, 0x2, 0x82, 0x2, 0x0, 0x92, 0x2, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x2, 0x0, 0x99, 0x11, 0xa2, 0x2, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x69, 0x20, 0x82, 0x2, 0x4, 0x92, 0x2, 0x5, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0x6, 0x0, 0x99, 0x11, 0xa2, 0x2, 0x7, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x1c, 0x83, 0x0, 0x13, 0x40, 0x60, 0x98, 0x81, 0xa1, 0x6a, 0xfc, 0xa0, 0xa6, 0x10, 0x66, 0xfa, 0x2, 0x86, 0xd3, 0x2, 0xb2, 0x21, 0x1e, 0xa1, 0x86, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x85, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x84, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x83, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x82, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x81, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x80, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x7f, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x7e, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa2, 0x21, 0x1b, 0xc1, 0x7d, 0xfc, 0xca, 0xc1, 0xa2, 0x4c, 0x0, 0xa1, 0x7c, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xa1, 0x7b, 0xfc, 0xaa, 0xa1, 0xb2, 0x4a, 0x0, 0xc, 0x17, 0xa1, 0x79, 0xfc, 0xaa, 0xa1, 0x72, 0x4a, 0x0, 0x41, 0x4c, 0xfc, 0xa1, 0x77, 0xfc, 0xaa, 0xa1, 0x42, 0x4a, 0x0, 0x0, 0x3, 0x40, 0x40, 0xa0, 0x91, 0xb1, 0x75, 0xfc, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0xa2, 0x21, 0x1f, 0x0, 0xa, 0x40, 0x40, 0xa0, 0x91, 0xb1, 0x72, 0xfc, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0x40, 0xa8, 0x41, 0xb1, 0x70, 0xfc, 0xba, 0xb1, 0xa2, 0x4b, 0x0, 0xa1, 0x6f, 0xfc, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0xa2, 0x21, 0x23, 0xa0, 0xf9, 0x10, 0xa2, 0xcf, 0xfe, 0x1c, 0x2b, 0x92, 0xa0, 0xc0, 0x92, 0x61, 0x22, 0x92, 0xa0, 0xc6, 0xc1, 0x3c, 0xfc, 0xc2, 0x61, 0x28, 0xc1, 0x39, 0xfc, 0xc2, 0x61, 0x20, 0xc1, 0x3a, 0xfc, 0xc2, 0x61, 0x1d, 0xd1, 0x39, 0xfc, 0xc1, 0x3b, 0xfc, 0xc2, 0x61, 0x27, 0xc1, 0x3a, 0xfc, 0xc2, 0x61, 0x24, 0xa7, 0xbb, 0x2, 0x6, 0x3d, 0x0, 0xb2, 0xa0, 0xc8, 0xc1, 0x2e, 0xfc, 0xc0, 0xaa, 0xa0, 0xa8, 0xa, 0xc1, 0x38, 0xfc, 0xc, 0xb5, 0xa0, 0xa, 0x0, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0x37, 0xbe, 0x2, 0x86, 0xd4, 0x0, 0x82, 0x2, 0x17, 0x82, 0x61, 0x27, 0x82, 0x2, 0x16, 0x82, 0x61, 0x24, 0x82, 0x2, 0x14, 0x82, 0x61, 0x22, 0x82, 0x2, 0x15, 0x82, 0x61, 0x20, 0xd2, 0x2, 0xb, 0xe2, 0x2, 0xa, 0xbd, 0xf, 0xf2, 0x2, 0x8, 0x72, 0x2, 0x9, 0x62, 0x2, 0xf, 0x52, 0x2, 0xe, 0x42, 0x2, 0xc, 0x32, 0x2, 0xd, 0xc2, 0x2, 0x13, 0xa2, 0x2, 0x12, 0x92, 0x2, 0x10, 0x22, 0x2, 0x11, 0xc, 0x8, 0x82, 0x51, 0x61, 0x82, 0x51, 0x62, 0xc, 0x18, 0x82, 0x41, 0xc0, 0x80, 0x82, 0x11, 0x90, 0x88, 0x20, 0x0, 0x9a, 0x11, 0x80, 0xac, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xc9, 0x20, 0x80, 0x83, 0x11, 0x40, 0x88, 0x20, 0x0, 0x95, 0x11, 0x52, 0x21, 0x28, 0x80, 0xa6, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xc0, 0x88, 0x82, 0x82, 0x61, 0x2f, 0x80, 0x87, 0x11, 0xf0, 0x88, 0x20, 0xfd, 0xb, 0x0, 0x9e, 0x11, 0x80, 0xad, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x82, 0x61, 0x2e, 0x92, 0x21, 0x20, 0x80, 0x99, 0x11, 0xa2, 0x21, 0x22, 0xa0, 0x99, 0x20, 0xa2, 0x21, 0x24, 0x0, 0xaa, 0x11, 0xb2, 0x21, 0x27, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0x92, 0x61, 0x2c, 0x9a, 0x88, 0x82, 0x61, 0x2b, 0x81, 0x13, 0xfc, 0x80, 0x89, 0x10, 0x82, 0x61, 0x2d, 0x26, 0xbf, 0x5, 0x26, 0x2f, 0x2, 0x46, 0xa7, 0x0, 0x81, 0x10, 0xfc, 0xc7, 0x38, 0x2, 0xc6, 0xc6, 0x1, 0xa2, 0xa0, 0xc2, 0x6, 0x9f, 0x0, 0xa2, 0xaf, 0x30, 0xaa, 0xaf, 0xb1, 0xf2, 0xfb, 0xb0, 0xaa, 0xa0, 0xa8, 0xa, 0xa0, 0xa, 0x0, 0x81, 0xf8, 0xfb, 0xe0, 0x8, 0x0, 0x52, 0x21, 0x28, 0x16, 0x2a, 0x27, 0xa2, 0xa0, 0xc4, 0x86, 0x96, 0x0, 0x37, 0xbe, 0x2, 0x86, 0x93, 0x0, 0xad, 0x6, 0x52, 0x21, 0x28, 0x66, 0x1f, 0x2, 0x46, 0x92, 0x0, 0xb2, 0x1, 0xc0, 0xad, 0x9, 0x16, 0x1b, 0x24, 0x72, 0xc2, 0x18, 0xa2, 0xa0, 0xef, 0x92, 0xce, 0xe8, 0x16, 0x69, 0x1, 0xbd, 0x7, 0xcd, 0x9, 0xd2, 0xb, 0x0, 0xa0, 0xad, 0x30, 0x1b, 0xbb, 0xb, 0xcc, 0x56, 0x2c, 0xff, 0xb2, 0x21, 0x23, 0xb0, 0xaa, 0x10, 0xb2, 0x2, 0x8, 0xc2, 0x2, 0x9, 0x80, 0xcc, 0x11, 0xb0, 0xbc, 0x20, 0xc2, 0x2, 0xa, 0x0, 0xcc, 0x11, 0xd2, 0x2, 0xb, 0x80, 0xdd, 0x1, 0xc0, 0xcd, 0x20, 0xb0, 0x3c, 0x20, 0x97, 0x13, 0x2, 0x6, 0xc5, 0x1, 0x87, 0x1a, 0x2, 0x6, 0xc5, 0x1, 0x6d, 0xe, 0xa2, 0x21, 0x29, 0x81, 0xf9, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x2d, 0xf, 0xe0, 0x5, 0x0, 0x9d, 0x2, 0x81, 0xe3, 0xfb, 0x82, 0x61, 0x16, 0x66, 0x39, 0x2, 0x86, 0xbe, 0x1, 0x82, 0xa0, 0xd4, 0x87, 0x99, 0x2, 0xc6, 0xc3, 0x1, 0x1c, 0x18, 0x87, 0x99, 0x2, 0xc6, 0xcc, 0x1, 0x26, 0x79, 0x2, 0x86, 0x3c, 0xff, 0x82, 0x21, 0x2e, 0x37, 0x38, 0x2, 0xc6, 0x4, 0x2, 0xa2, 0xa0, 0xc9, 0x86, 0x6b, 0x0, 0xc, 0x98, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0x87, 0xbe, 0x2, 0x6, 0x68, 0x0, 0x82, 0x2, 0x8, 0xad, 0x6, 0x66, 0x28, 0x2, 0x46, 0x65, 0x0, 0xc2, 0x1, 0xc0, 0xad, 0x9, 0x16, 0xdc, 0x18, 0x92, 0x21, 0x2e, 0xad, 0xb, 0x56, 0x59, 0x18, 0xc, 0x9, 0x92, 0x41, 0xc0, 0x56, 0xf8, 0x18, 0xa2, 0x21, 0x29, 0x81, 0xdb, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x5, 0x0, 0xa1, 0xbf, 0xfb, 0x88, 0xc1, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x20, 0xe0, 0x8, 0x0, 0x6, 0x5c, 0x0, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0xf6, 0xbe, 0x2, 0x86, 0x54, 0x0, 0x82, 0x21, 0x2e, 0xad, 0xb, 0x56, 0xa8, 0x14, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x56, 0xb8, 0x13, 0x82, 0x2, 0xc, 0x92, 0x2, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xe, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xf, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x79, 0x20, 0xa2, 0x21, 0x29, 0x81, 0xbf, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x5, 0x0, 0xa1, 0xa2, 0xfb, 0x88, 0xc1, 0xe0, 0x8, 0x0, 0xe0, 0x7, 0x0, 0x46, 0x40, 0x0, 0x82, 0x21, 0x1e, 0x6d, 0x7, 0x52, 0x21, 0x28, 0x70, 0x88, 0x10, 0x56, 0x38, 0xf, 0xa2, 0x21, 0x29, 0x81, 0xb4, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x5, 0x0, 0xa2, 0x21, 0x21, 0x67, 0x2a, 0x4, 0xc, 0x8, 0x46, 0x0, 0x0, 0xc, 0x18, 0x92, 0x21, 0x26, 0x67, 0x2a, 0x1, 0x1b, 0x96, 0x6d, 0x9, 0x46, 0xf4, 0xff, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0x37, 0xbe, 0x2, 0x46, 0x2b, 0x0, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0x92, 0x2, 0xc, 0xa2, 0x2, 0xd, 0x80, 0xaa, 0x11, 0x90, 0x9a, 0x20, 0xa2, 0x2, 0xe, 0x0, 0xaa, 0x11, 0xb2, 0x2, 0xf, 0x80, 0xbb, 0x1, 0xa0, 0xab, 0x20, 0x90, 0x9a, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc6, 0x1e, 0x0, 0xe7, 0x35, 0x2, 0x6, 0xd6, 0x1, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x91, 0x88, 0xfb, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x0, 0x3, 0x40, 0x80, 0x90, 0x91, 0xa1, 0x81, 0xfb, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0x92, 0x21, 0x1f, 0x0, 0x9, 0x40, 0x80, 0x90, 0x91, 0xa1, 0x7e, 0xfb, 0xaa, 0xa1, 0x92, 0x4a, 0x0, 0x80, 0x88, 0x41, 0x91, 0x7c, 0xfb, 0x9a, 0x91, 0x82, 0x49, 0x0, 0x86, 0x27, 0x1, 0xb6, 0xce, 0x2, 0x46, 0x2b, 0x1, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0x81, 0x7b, 0xfb, 0x8a, 0x81, 0xa2, 0x48, 0x0, 0xc, 0x18, 0x91, 0x79, 0xfb, 0x9a, 0x91, 0x82, 0x49, 0x0, 0xa2, 0x21, 0x29, 0x81, 0x77, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xe0, 0x5, 0x0, 0x46, 0xc4, 0xfe, 0xe7, 0x35, 0x2, 0xc6, 0xb2, 0x1, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0xc, 0xb, 0x82, 0x21, 0x17, 0xe0, 0x8, 0x0, 0x6, 0x10, 0x1, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0xb6, 0xbe, 0xa4, 0x82, 0x2, 0xb, 0x82, 0x61, 0x27, 0x82, 0x2, 0xa, 0x82, 0x61, 0x24, 0x82, 0x2, 0x8, 0x82, 0x61, 0x22, 0x32, 0x2, 0x9, 0x72, 0x2, 0xf, 0x62, 0x2, 0xe, 0x8d, 0x5, 0x52, 0x2, 0xc, 0x42, 0x2, 0xd, 0xa2, 0x21, 0x29, 0x91, 0x5c, 0xfb, 0x9a, 0x91, 0xb2, 0xc9, 0x0, 0xe0, 0x8, 0x0, 0xa1, 0x3d, 0xfb, 0x28, 0xc1, 0xe0, 0x2, 0x0, 0x80, 0x83, 0x11, 0x92, 0x21, 0x22, 0x90, 0x88, 0x20, 0x92, 0x21, 0x24, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x27, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xc0, 0x20, 0x0, 0x98, 0xa1, 0x98, 0x9, 0x16, 0xb8, 0x63, 0x1c, 0x4a, 0x80, 0xb4, 0x11, 0x50, 0xbb, 0x20, 0x0, 0xc6, 0x11, 0x80, 0xd7, 0x1, 0xc0, 0xcd, 0x20, 0xb0, 0xbc, 0x20, 0x0, 0xa, 0x40, 0x90, 0xa0, 0x91, 0xc, 0xfc, 0xc0, 0xaa, 0x10, 0xc0, 0x99, 0x11, 0xc1, 0x2a, 0xfb, 0xc0, 0x99, 0x10, 0xa0, 0x99, 0x20, 0xb0, 0x99, 0x82, 0x80, 0xb9, 0xc2, 0xc, 0xa, 0x81, 0x27, 0xfb, 0xe0, 0x8, 0x0, 0xa2, 0xa3, 0xe8, 0xe0, 0x2, 0x0, 0x46, 0x8e, 0xfe, 0xd2, 0x61, 0x20, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0x37, 0xbe, 0x2, 0x46, 0xbd, 0xff, 0xc2, 0x61, 0x15, 0x82, 0x2, 0xf, 0x82, 0x61, 0x22, 0x82, 0x2, 0xe, 0x82, 0x61, 0x16, 0x42, 0x2, 0xc, 0x32, 0x2, 0xd, 0x52, 0x2, 0xb, 0x72, 0x2, 0xa, 0x62, 0x2, 0x8, 0x22, 0x2, 0x9, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0xb, 0xc1, 0xba, 0xfa, 0x82, 0x21, 0x18, 0xe0, 0x8, 0x0, 0x81, 0x33, 0xfb, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x82, 0x21, 0x1d, 0xe0, 0x8, 0x0, 0x80, 0x82, 0x11, 0x60, 0x88, 0x20, 0x0, 0x97, 0x11, 0x80, 0xa5, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x59, 0x20, 0x80, 0x83, 0x11, 0x40, 0x88, 0x20, 0x92, 0x21, 0x16, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x22, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x79, 0x20, 0x16, 0x67, 0x4, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x41, 0xa6, 0xfa, 0xad, 0x5, 0xcd, 0x4, 0x82, 0x21, 0x27, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x23, 0x80, 0x8a, 0x10, 0x56, 0xf8, 0xe5, 0x40, 0x47, 0x63, 0x81, 0x1c, 0xfb, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xcd, 0x4, 0x82, 0x21, 0x24, 0xe0, 0x8, 0x0, 0x4a, 0x55, 0x40, 0x77, 0xc0, 0x56, 0x87, 0xfb, 0x81, 0xff, 0xfa, 0x8a, 0x81, 0x52, 0xc8, 0x0, 0x81, 0x11, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x5c, 0x8c, 0xad, 0x5, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x81, 0xd, 0xfb, 0x8a, 0x81, 0x42, 0xc8, 0x0, 0xad, 0x4, 0xbd, 0x5, 0x82, 0x21, 0x20, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x29, 0x81, 0x0, 0xfb, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x1c, 0xd, 0xcd, 0x4, 0x82, 0x21, 0x15, 0xe0, 0x8, 0x0, 0x46, 0x4b, 0xfe, 0x6d, 0xc, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x52, 0xc8, 0x0, 0xc, 0x4, 0x1c, 0x4c, 0xad, 0x5, 0xbd, 0x4, 0x82, 0x21, 0x18, 0xe0, 0x8, 0x0, 0x81, 0xd5, 0xfa, 0xad, 0x4, 0xbd, 0x4, 0xcd, 0x5, 0xe0, 0x8, 0x0, 0x16, 0xea, 0x2a, 0xa2, 0xa0, 0xc3, 0x46, 0x71, 0xff, 0xa2, 0x21, 0x22, 0x52, 0x21, 0x28, 0xf6, 0xbe, 0x2, 0x6, 0x6f, 0xff, 0x82, 0x2, 0x8, 0x92, 0x2, 0x9, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xa, 0x0, 0x99, 0x11, 0xa2, 0x2, 0xb, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xa9, 0x20, 0x82, 0x2, 0xc, 0x92, 0x2, 0xd, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0x2, 0xe, 0x0, 0x99, 0x11, 0xb2, 0x2, 0xf, 0x80, 0xbb, 0x1, 0x90, 0x9b, 0x20, 0x80, 0xb9, 0x20, 0x81, 0xbc, 0xfa, 0xe0, 0x8, 0x0, 0x16, 0x9a, 0xd8, 0x3c, 0x6a, 0x86, 0x5c, 0xff, 0xd2, 0x61, 0x20, 0xa2, 0x21, 0x29, 0x81, 0xd8, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x52, 0x21, 0x28, 0x7d, 0xe, 0xe0, 0x5, 0x0, 0xa2, 0x21, 0x22, 0x37, 0xb7, 0x2, 0xc6, 0x54, 0xff, 0x82, 0x2, 0xf, 0x82, 0x61, 0x16, 0x82, 0x2, 0xe, 0x82, 0x61, 0x15, 0x82, 0x2, 0xc, 0x82, 0x61, 0x14, 0x82, 0x2, 0xd, 0x82, 0x61, 0x13, 0x82, 0x2, 0xb, 0x82, 0x61, 0x12, 0x82, 0x2, 0xa, 0x82, 0x61, 0x11, 0x82, 0x2, 0x8, 0x82, 0x61, 0x10, 0x82, 0x2, 0x9, 0x89, 0xf1, 0x82, 0x2, 0x17, 0x82, 0x61, 0x22, 0x82, 0x2, 0x16, 0x89, 0xe1, 0x82, 0x2, 0x14, 0x89, 0xd1, 0x62, 0x2, 0x15, 0x32, 0x2, 0x13, 0x72, 0x2, 0x12, 0x42, 0x2, 0x10, 0x22, 0x2, 0x11, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0x5, 0xc1, 0x46, 0xfa, 0xbd, 0x5, 0x82, 0x21, 0x18, 0xe0, 0x8, 0x0, 0x81, 0xbe, 0xfa, 0x8a, 0x81, 0x59, 0x8, 0x81, 0xbd, 0xfa, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0x82, 0x21, 0x1d, 0xe0, 0x8, 0x0, 0x80, 0x82, 0x11, 0x40, 0x88, 0x20, 0x0, 0x97, 0x11, 0x80, 0xa3, 0x1, 0x90, 0x9a, 0x20, 0x80, 0xb9, 0x20, 0x80, 0x86, 0x11, 0x98, 0xd1, 0x90, 0x88, 0x20, 0x98, 0xe1, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x22, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xb2, 0x61, 0x22, 0xb0, 0xb8, 0x82, 0x88, 0xf1, 0x80, 0x88, 0x11, 0x92, 0x21, 0x10, 0x90, 0x88, 0x20, 0x92, 0x21, 0x11, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x12, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x39, 0x20, 0x82, 0x21, 0x13, 0x80, 0x88, 0x11, 0x92, 0x21, 0x14, 0x90, 0x88, 0x20, 0x92, 0x21, 0x15, 0x0, 0x99, 0x11, 0xa2, 0x21, 0x16, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x99, 0x20, 0x8d, 0x5, 0x6d, 0x9, 0xb2, 0x61, 0x1d, 0x92, 0x61, 0x16, 0x97, 0x38, 0x2, 0x46, 0x2b, 0x0, 0xba, 0x78, 0x16, 0x36, 0x6, 0x77, 0xb5, 0x60, 0x82, 0x21, 0x22, 0x60, 0x48, 0x63, 0x81, 0x6c, 0xfa, 0x87, 0x34, 0x2, 0x86, 0xce, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xad, 0x3, 0xcd, 0x4, 0x82, 0x21, 0x27, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x23, 0x80, 0x8a, 0x10, 0x56, 0x48, 0xc2, 0xa2, 0x21, 0x29, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x22, 0xc8, 0x0, 0xbd, 0x2, 0xcd, 0x4, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0x81, 0x88, 0xfa, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xbd, 0x2, 0xcd, 0x4, 0x82, 0x21, 0x24, 0xe0, 0x8, 0x0, 0x5a, 0x54, 0x4a, 0x33, 0x40, 0x66, 0xc0, 0x56, 0xb6, 0xf9, 0xa2, 0x21, 0x29, 0x81, 0x7f, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0xc, 0x4c, 0x82, 0x21, 0x1c, 0xe0, 0x8, 0x0, 0x88, 0xb1, 0xb7, 0x38, 0x2, 0x46, 0xb3, 0x0, 0x82, 0xa, 0x0, 0x92, 0xa, 0x1, 0x80, 0x99, 0x11, 0x80, 0x89, 0x20, 0x92, 0xa, 0x2, 0x0, 0x99, 0x11, 0xa2, 0xa, 0x3, 0x80, 0xaa, 0x1, 0x90, 0x9a, 0x20, 0x80, 0x89, 0x20, 0xb2, 0x21, 0x1d, 0x92, 0x21, 0x16, 0x97, 0xb8, 0x2, 0x46, 0xd4, 0xff, 0x81, 0x5b, 0xfa, 0x8a, 0x81, 0x52, 0xc8, 0x0, 0x81, 0x6d, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x5c, 0x8c, 0xad, 0x5, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x81, 0x6a, 0xfa, 0x8a, 0x81, 0x42, 0xc8, 0x0, 0xad, 0x4, 0xbd, 0x5, 0x82, 0x21, 0x20, 0xe0, 0x8, 0x0, 0xa2, 0x21, 0x29, 0x1c, 0xc, 0xbd, 0x4, 0x82, 0x21, 0x19, 0xe0, 0x8, 0x0, 0xc6, 0xa9, 0xfd, 0x82, 0x21, 0x20, 0xe0, 0x8, 0x0, 0x52, 0x21, 0x28, 0x6, 0xde, 0xfe, 0x81, 0x47, 0xfa, 0xe0, 0x8, 0x0, 0x16, 0xfa, 0xb6, 0xa2, 0xa0, 0xc5, 0xc6, 0xd5, 0xfe, 0x2b, 0xb2, 0x1c, 0xec, 0xa8, 0x71, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xb1, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x52, 0x48, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x62, 0x48, 0x0, 0xa8, 0x81, 0x88, 0x91, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x23, 0x80, 0x8a, 0x10, 0x52, 0x21, 0x28, 0x56, 0x28, 0xb2, 0x46, 0xcc, 0xfe, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0x72, 0x8, 0x0, 0x1c, 0x3c, 0xa8, 0x51, 0xb8, 0x41, 0x82, 0x21, 0x25, 0xe0, 0x8, 0x0, 0x81, 0x32, 0xfa, 0x8a, 0x81, 0x72, 0x48, 0x0, 0xa2, 0x21, 0x29, 0x81, 0x3c, 0xfa, 0x8a, 0x81, 0xb2, 0xc8, 0x0, 0x81, 0x2d, 0xfa, 0x8a, 0x81, 0xc2, 0xc8, 0x0, 0x1c, 0x4d, 0xe0, 0x6, 0x0, 0x86, 0x86, 0xfd, 0xa2, 0x21, 0x22, 0xc6, 0xb7, 0xfe, 0xa2, 0xa0, 0xc1, 0x46, 0xb6, 0xfe, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xbd, 0x7, 0xcd, 0x3, 0x82, 0x21, 0x16, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x23, 0x80, 0x8a, 0x10, 0x56, 0xe8, 0xab, 0x6, 0x7c, 0xfd, 0x81, 0x13, 0xfa, 0xe0, 0x8, 0x0, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xc, 0x1b, 0x81, 0xb0, 0xf9, 0xcd, 0x7, 0xdd, 0x3, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x23, 0x80, 0x8a, 0x10, 0x56, 0x88, 0xa9, 0x81, 0xb, 0xfa, 0xe0, 0x8, 0x0, 0x6, 0x71, 0xfd, 0x72, 0x61, 0x1d, 0x81, 0x9, 0xfa, 0x82, 0x61, 0x15, 0x58, 0x8, 0xc, 0x8, 0xc, 0x19, 0xcd, 0x9, 0x92, 0x61, 0x22, 0xbd, 0x9, 0x32, 0x61, 0x20, 0x2d, 0x3, 0x82, 0x61, 0x24, 0x3d, 0x8, 0x82, 0x21, 0x2e, 0x92, 0x21, 0x22, 0xa2, 0x21, 0x24, 0xa7, 0x98, 0x2, 0x92, 0x21, 0x24, 0x16, 0x22, 0xe, 0x16, 0xf8, 0xd, 0x16, 0xdc, 0xe, 0x81, 0x1a, 0xfa, 0x8a, 0x81, 0x29, 0x8, 0x71, 0xfb, 0xf9, 0x50, 0x87, 0xc0, 0x91, 0x2, 0xfa, 0x9a, 0x91, 0x89, 0x9, 0x61, 0xf9, 0xf9, 0x67, 0x35, 0x2, 0xc6, 0x4b, 0x0, 0x82, 0x21, 0x2f, 0x87, 0xb2, 0x5, 0x82, 0x21, 0x1b, 0x80, 0xbb, 0x20, 0x82, 0x21, 0x20, 0x37, 0xb8, 0x2, 0x86, 0x46, 0x0, 0x82, 0xa0, 0xb0, 0x82, 0xd8, 0x6f, 0x8a, 0x81, 0xb9, 0x8, 0xb2, 0x61, 0x27, 0xb9, 0x1, 0x82, 0x21, 0x1d, 0x3a, 0xb8, 0xd1, 0xed, 0xf9, 0x5a, 0xed, 0x81, 0x7, 0xfa, 0x8a, 0x81, 0xc2, 0xc8, 0x0, 0x81, 0xf1, 0xf9, 0x8a, 0x81, 0xf2, 0xc8, 0x0, 0x81, 0xe9, 0xf9, 0xa8, 0x61, 0xe0, 0x8, 0x0, 0xcd, 0xa, 0x81, 0x0, 0xfa, 0x8a, 0x81, 0x48, 0x8, 0x82, 0x21, 0x2f, 0x40, 0x88, 0xc0, 0x82, 0x61, 0x2f, 0x81, 0xe8, 0xf9, 0x8a, 0x81, 0x88, 0x8, 0x5a, 0x58, 0x16, 0x2c, 0x0, 0x77, 0x95, 0x27, 0x7d, 0xc, 0x67, 0x35, 0x2, 0x6, 0x30, 0x0, 0x82, 0xa0, 0xa4, 0x8a, 0x81, 0xa2, 0xc8, 0x0, 0xb1, 0xda, 0xf9, 0xcd, 0x5, 0x82, 0x21, 0x16, 0xe0, 0x8, 0x0, 0x82, 0x21, 0x23, 0x80, 0x8a, 0x10, 0x56, 0xc8, 0x9a, 0xc, 0x5, 0xcd, 0x7, 0x3a, 0x34, 0x40, 0x22, 0xc0, 0xb2, 0x21, 0x27, 0x6, 0xcc, 0xff, 0x98, 0xb1, 0x90, 0x96, 0x10, 0xa2, 0x21, 0x22, 0x56, 0x59, 0x99, 0x3b, 0x97, 0x7c, 0xca, 0xa0, 0xa9, 0x10, 0x70, 0x9a, 0xc0, 0x97, 0x33, 0x1, 0x4d, 0xa, 0x97, 0x33, 0x4d, 0x90, 0x93, 0xc0, 0x90, 0x92, 0x41, 0x86, 0x11, 0x0, 0xa2, 0x21, 0x15, 0x59, 0xa, 0xd6, 0x3c, 0x1, 0x82, 0xa0, 0xc7, 0x82, 0x41, 0xc1, 0x86, 0x27, 0xfd, 0x82, 0x21, 0x15, 0x59, 0x8, 0xc, 0x19, 0xc, 0xc, 0x8d, 0x9, 0x56, 0xc, 0x1, 0xc, 0x1a, 0xa0, 0x99, 0x10, 0x16, 0x89, 0x0, 0x82, 0xa0, 0xc8, 0x82, 0x41, 0xc1, 0xc6, 0x1f, 0xfd, 0x56, 0x2c, 0x0, 0x46, 0x1e, 0xfd, 0x16, 0x28, 0x0, 0xc6, 0x1c, 0xfd, 0x82, 0xa0, 0xc9, 0x82, 0x41, 0xc1, 0x86, 0x1a, 0xfd, 0xc, 0x9, 0xe0, 0x99, 0x11, 0x82, 0xc8, 0xfc, 0xa2, 0x21, 0x2c, 0x56, 0x29, 0x0, 0x46, 0x16, 0xfd, 0xb8, 0x4, 0xb9, 0xa, 0x4b, 0xaa, 0xa2, 0x61, 0x2c, 0x92, 0xc9, 0xfc, 0x4b, 0x44, 0x82, 0x61, 0x2e, 0x82, 0xc8, 0xfc, 0x56, 0x89, 0xfe, 0xc6, 0xf, 0xfd, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x82, 0xa0, 0xff, 0x80, 0x72, 0x10, 0x81, 0x56, 0xf9, 0xe0, 0x8, 0x0, 0x1c, 0x48, 0x87, 0x97, 0x19, 0x81, 0x6f, 0xf9, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xc, 0x4b, 0xb0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x7c, 0xb9, 0x81, 0xc0, 0xf9, 0x6, 0x6, 0x0, 0x81, 0xbc, 0xf9, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb2, 0xa4, 0x0, 0xb0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x92, 0xab, 0xff, 0x81, 0xb8, 0xf9, 0xc0, 0x20, 0x0, 0xb8, 0x8, 0x90, 0x9b, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x96, 0xa, 0x1, 0xc0, 0x20, 0x0, 0x81, 0x45, 0xf9, 0x92, 0xa1, 0x0, 0x99, 0x8, 0xa0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x20, 0x65, 0x0, 0x81, 0xae, 0xf9, 0x90, 0xeb, 0x3, 0x80, 0x89, 0x10, 0x92, 0xa1, 0x0, 0xa1, 0x3c, 0xf9, 0x90, 0xc, 0x13, 0xbd, 0x8, 0xb2, 0xea, 0x0, 0xc0, 0x20, 0x0, 0x26, 0xfb, 0x1a, 0xb8, 0xa, 0x87, 0x9b, 0x7, 0x81, 0x5e, 0xf9, 0x80, 0x22, 0x20, 0x1d, 0xf0, 0x90, 0xc, 0x13, 0xbd, 0x8, 0xb2, 0xea, 0x0, 0xc0, 0x20, 0x0, 0x66, 0xfb, 0xf1, 0x1d, 0xf0, 0x36, 0x41, 0x0, 0x81, 0x9f, 0xf9, 0x90, 0xeb, 0x3, 0x80, 0x99, 0x10, 0xc, 0x8, 0x87, 0x19, 0x5, 0x91, 0x9c, 0xf9, 0x86, 0x0, 0x0, 0x91, 0x9c, 0xf9, 0xa1, 0x1c, 0xf9, 0xa0, 0xa2, 0x10, 0x90, 0x9a, 0xa0, 0xc, 0x1a, 0xc0, 0x20, 0x0, 0xa9, 0x9, 0xc, 0x29, 0xa0, 0xe4, 0x3, 0x90, 0x9a, 0x20, 0x80, 0xe4, 0x61, 0x80, 0x99, 0x20, 0x10, 0x20, 0x0, 0x90, 0xe4, 0x13, 0x10, 0x20, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0xc1, 0x1, 0x29, 0x21, 0xa2, 0xc1, 0x40, 0xc, 0x7, 0xc2, 0xa0, 0x80, 0x81, 0x4b, 0xf9, 0xbd, 0x7, 0xe0, 0x8, 0x0, 0x77, 0x13, 0x5, 0x81, 0x8a, 0xf9, 0x86, 0x0, 0x0, 0x81, 0x89, 0xf9, 0x89, 0x61, 0x62, 0x21, 0x3b, 0xa2, 0x21, 0x3a, 0xb2, 0x21, 0x39, 0xc2, 0x21, 0x38, 0xc, 0x18, 0x89, 0x51, 0x7c, 0xfe, 0x2c, 0x8, 0x89, 0x41, 0x4c, 0x8, 0x89, 0x31, 0xa0, 0x8c, 0x20, 0x60, 0xdb, 0x20, 0xd0, 0x88, 0x20, 0x16, 0xc8, 0x1b, 0x72, 0x41, 0x3f, 0x72, 0x41, 0x3e, 0x72, 0x41, 0x3d, 0x72, 0x41, 0x3c, 0x72, 0x41, 0x3b, 0x72, 0x41, 0x3a, 0x72, 0x41, 0x39, 0x72, 0x41, 0x38, 0x72, 0x41, 0x37, 0x72, 0x41, 0x36, 0x72, 0x41, 0x35, 0x72, 0x41, 0x34, 0x72, 0x41, 0x33, 0x72, 0x41, 0x32, 0x72, 0x41, 0x31, 0x88, 0x51, 0x82, 0x41, 0x30, 0x72, 0x41, 0x2f, 0x72, 0x41, 0x2e, 0x72, 0x41, 0x2d, 0x72, 0x41, 0x2c, 0x72, 0x41, 0x2b, 0x72, 0x41, 0x2a, 0x72, 0x41, 0x29, 0x72, 0x41, 0x28, 0x72, 0x41, 0x27, 0x72, 0x41, 0x26, 0x72, 0x41, 0x25, 0x72, 0x41, 0x24, 0x72, 0x41, 0x23, 0x72, 0x41, 0x22, 0x72, 0x41, 0x21, 0x72, 0x41, 0x20, 0x77, 0x9c, 0xf, 0xe0, 0x8b, 0x30, 0xb, 0xdb, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x31, 0x6, 0x3, 0x0, 0xe0, 0x8c, 0x30, 0xb, 0xdc, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x41, 0x80, 0x59, 0xc0, 0x77, 0x9a, 0xf, 0xe0, 0x86, 0x30, 0xb, 0xd6, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x31, 0x6, 0x3, 0x0, 0xe0, 0x8a, 0x30, 0xb, 0xda, 0xd0, 0x88, 0x10, 0x80, 0xf8, 0x40, 0x98, 0x41, 0x80, 0x89, 0xc0, 0x69, 0x71, 0xb0, 0xdc, 0x20, 0x77, 0x9d, 0x2, 0x52, 0xc8, 0x40, 0x50, 0x83, 0x41, 0xc, 0xfd, 0xd0, 0x88, 0x10, 0xd2, 0xc1, 0x20, 0xd2, 0xcd, 0x10, 0x80, 0x4d, 0xc0, 0x82, 0x4, 0x8, 0xd2, 0x4, 0x9, 0x80, 0xdd, 0x11, 0x80, 0x8d, 0x20, 0xd2, 0x4, 0xa, 0x0, 0xdd, 0x11, 0x32, 0x4, 0xb, 0x80, 0x33, 0x1, 0xd0, 0xd3, 0x20, 0x80, 0x3d, 0x20, 0x82, 0x4, 0xc, 0xd2, 0x4, 0xd, 0x80, 0xdd, 0x11, 0x80, 0x8d, 0x20, 0xd2, 0x4, 0xe, 0x0, 0xdd, 0x11, 0x22, 0x4, 0xf, 0x80, 0x22, 0x1, 0xd0, 0xd2, 0x20, 0x80, 0x8d, 0x20, 0xc, 0x7d, 0xd0, 0x25, 0x10, 0x0, 0x12, 0x40, 0x30, 0x88, 0x81, 0x98, 0x61, 0x90, 0xd5, 0xa0, 0xc0, 0x20, 0x0, 0xd8, 0xd, 0x51, 0x3a, 0xf9, 0x50, 0xdd, 0xa0, 0xd8, 0xd, 0xc0, 0xdd, 0x11, 0x52, 0xc1, 0x40, 0xda, 0x55, 0xd8, 0x35, 0x80, 0xdd, 0x20, 0xd9, 0x35, 0xd2, 0x4, 0x0, 0xf2, 0x4, 0x1, 0x80, 0xff, 0x11, 0xd0, 0xdf, 0x20, 0xf2, 0x4, 0x2, 0x0, 0xff, 0x11, 0x62, 0x4, 0x3, 0x80, 0x66, 0x1, 0xf0, 0xf6, 0x20, 0xd0, 0xff, 0x20, 0x0, 0x12, 0x40, 0x0, 0xdf, 0xa1, 0x68, 0x5, 0xd0, 0x66, 0x20, 0x69, 0x5, 0x62, 0x4, 0x4, 0x92, 0x4, 0x5, 0x80, 0x99, 0x11, 0x60, 0x99, 0x20, 0x62, 0x4, 0x6, 0x0, 0x66, 0x11, 0x42, 0x4, 0x7, 0x80, 0x44, 0x1, 0x60, 0x64, 0x20, 0x90, 0x96, 0x20, 0x0, 0x12, 0x40, 0xf0, 0xf9, 0x81, 0x68, 0x15, 0xf0, 0x66, 0x20, 0x69, 0x15, 0x0, 0x63, 0xa1, 0x90, 0x91, 0x41, 0xe0, 0x42, 0x30, 0x1c, 0xf3, 0x30, 0x44, 0x10, 0x0, 0x4, 0x40, 0x90, 0x90, 0x91, 0x90, 0x96, 0x20, 0x68, 0x25, 0x90, 0x66, 0x20, 0x69, 0x25, 0xe0, 0x88, 0x30, 0x68, 0x71, 0x80, 0x66, 0x10, 0xe0, 0x8f, 0x30, 0x80, 0xbb, 0x10, 0xe0, 0x89, 0x30, 0x80, 0xaa, 0x10, 0xe0, 0x8d, 0x30, 0x80, 0xcc, 0x10, 0x86, 0x8d, 0xff, 0xb2, 0xc1, 0x40, 0xc2, 0xa0, 0x80, 0x81, 0xae, 0xf8, 0xa8, 0x21, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x8b, 0xf8, 0x80, 0x82, 0x10, 0x92, 0xa0, 0x62, 0x87, 0x39, 0x10, 0x0, 0x82, 0x11, 0x80, 0x80, 0x31, 0x91, 0x7, 0xf9, 0x90, 0x88, 0x90, 0x22, 0x18, 0x0, 0x1d, 0xf0, 0x22, 0xa0, 0x63, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x3, 0xf9, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x81, 0x7f, 0xf8, 0x80, 0x39, 0x10, 0xc, 0x18, 0x2c, 0xb, 0xad, 0x8, 0xb7, 0x93, 0x1, 0xc, 0xa, 0x2c, 0x8b, 0x2d, 0x8, 0xb7, 0x13, 0x2, 0xf0, 0x2a, 0x11, 0xb, 0xa9, 0x7c, 0xeb, 0xb7, 0x3a, 0x1, 0x2d, 0x8, 0x1c, 0xa, 0x0, 0xa, 0x40, 0x90, 0x90, 0x91, 0x97, 0x13, 0x1, 0x2d, 0x8, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x61, 0x0, 0xc, 0x7, 0x61, 0x70, 0xf8, 0x52, 0xa0, 0xff, 0x41, 0xf2, 0xf8, 0x32, 0xa0, 0x63, 0x81, 0xf1, 0xf8, 0x89, 0x21, 0x81, 0xea, 0xf8, 0x89, 0x11, 0x1c, 0x2, 0x81, 0xe9, 0xf8, 0x89, 0x1, 0x60, 0x87, 0x10, 0x57, 0xb8, 0x29, 0xad, 0x7, 0xe0, 0x4, 0x0, 0x60, 0x8a, 0x10, 0x1b, 0x77, 0x37, 0x18, 0xec, 0xe0, 0x8a, 0x11, 0x98, 0x21, 0x90, 0x88, 0x10, 0x98, 0x11, 0x9a, 0x98, 0xc0, 0x20, 0x0, 0x29, 0x9, 0x98, 0x1, 0x9a, 0x88, 0xc0, 0x20, 0x0, 0x29, 0x8, 0xc6, 0xf3, 0xff, 0x1d, 0xf0, 0x36, 0xc1, 0x0, 0x81, 0xe1, 0xf8, 0x89, 0xa1, 0xe0, 0x8, 0x0, 0x26, 0x1a, 0x2, 0x86, 0x97, 0x1, 0x21, 0xde, 0xf8, 0xc0, 0x20, 0x0, 0x88, 0x2, 0x91, 0xdd, 0xf8, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x2, 0xc, 0x3a, 0x81, 0x8c, 0xf8, 0x89, 0xe1, 0xe0, 0x8, 0x0, 0x81, 0xd9, 0xf8, 0x89, 0x91, 0x82, 0xa1, 0x2c, 0x89, 0x81, 0x1c, 0xe8, 0x89, 0x71, 0xc, 0x6, 0xc, 0x17, 0xc, 0x28, 0x89, 0xd1, 0x82, 0xa1, 0x0, 0x89, 0xb1, 0x82, 0xa2, 0x0, 0x89, 0x1, 0x31, 0xd2, 0xf8, 0x81, 0x44, 0xf8, 0x89, 0x51, 0x81, 0xd2, 0xf8, 0x89, 0x41, 0x82, 0xa0, 0xff, 0x89, 0x31, 0x81, 0x77, 0xf8, 0x89, 0x21, 0x79, 0x11, 0x69, 0x61, 0xc0, 0x20, 0x0, 0x88, 0x2, 0x98, 0x91, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x2, 0xa8, 0x81, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0x88, 0xa1, 0xe0, 0x8, 0x0, 0x5d, 0xa, 0xb9, 0xc1, 0xc0, 0x20, 0x0, 0x88, 0x2, 0x98, 0x71, 0x0, 0x9, 0x40, 0x80, 0x90, 0x91, 0x66, 0x39, 0x2, 0x6, 0x75, 0x1, 0x8d, 0x7, 0xa8, 0xd1, 0xa7, 0x19, 0x1, 0x8d, 0x6, 0x77, 0x99, 0x1, 0x88, 0xd1, 0xad, 0x7, 0x77, 0x99, 0x1, 0xad, 0x6, 0xc0, 0x20, 0x0, 0xb8, 0x2, 0xc8, 0xb1, 0xc0, 0x4b, 0x10, 0x40, 0xb8, 0x41, 0xb0, 0xaa, 0x20, 0x26, 0x29, 0x9, 0xc, 0x19, 0x90, 0x9a, 0x10, 0xdd, 0x6, 0x56, 0x89, 0x1, 0x70, 0xba, 0x10, 0x98, 0x1, 0x67, 0x9b, 0x1, 0x98, 0xb1, 0xc0, 0x20, 0x0, 0xb8, 0x2, 0x90, 0x9b, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x2, 0xdd, 0xa, 0xc0, 0x20, 0x0, 0x98, 0x3, 0xa8, 0x51, 0xa0, 0xb9, 0x10, 0x91, 0x7c, 0xf8, 0x61, 0xaa, 0xf8, 0xa2, 0xa0, 0x7f, 0x16, 0xab, 0x2, 0xc0, 0x20, 0x0, 0xb8, 0x6, 0xa0, 0xbb, 0x10, 0xc2, 0xa0, 0x80, 0xc0, 0xbb, 0x20, 0xc0, 0x20, 0x0, 0xb9, 0x6, 0xc0, 0x20, 0x0, 0xb8, 0x3, 0x90, 0xbb, 0x10, 0x56, 0xcb, 0x0, 0xc0, 0x20, 0x0, 0xb8, 0x6, 0xc, 0x1c, 0xc0, 0xbb, 0x10, 0x16, 0x7b, 0xfe, 0xc0, 0x20, 0x0, 0xb8, 0x3, 0xc8, 0x41, 0xc0, 0xcb, 0x10, 0xb8, 0x31, 0xb0, 0xb8, 0x10, 0x30, 0x8b, 0x11, 0xc0, 0x88, 0x20, 0xc8, 0x21, 0xc0, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x3, 0x1c, 0x38, 0x7d, 0xd, 0x26, 0x1b, 0xa, 0x26, 0x2b, 0xa, 0x91, 0x95, 0xf8, 0x1c, 0x18, 0x86, 0x0, 0x0, 0x91, 0x94, 0xf8, 0xb2, 0xa4, 0x0, 0x0, 0x18, 0x40, 0x0, 0x8b, 0xa1, 0xc0, 0x20, 0x0, 0xb8, 0x6, 0xa0, 0xab, 0x10, 0x80, 0x8a, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x6, 0xc0, 0x20, 0x0, 0x88, 0x3, 0xa1, 0x33, 0xf8, 0xa0, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0x3, 0x81, 0x8a, 0xf8, 0x90, 0xa8, 0xc2, 0x88, 0xe1, 0xe0, 0x8, 0x0, 0xbd, 0x7, 0x78, 0x11, 0xc0, 0x20, 0x0, 0x88, 0x3, 0x91, 0x52, 0xf8, 0x90, 0x88, 0x10, 0x56, 0x18, 0x1, 0xc0, 0x20, 0x0, 0x88, 0x6, 0xc, 0x19, 0x90, 0x88, 0x10, 0x16, 0x48, 0xfe, 0xc, 0x8, 0x86, 0x2, 0x0, 0x81, 0x7f, 0xf8, 0xc0, 0x20, 0x0, 0x88, 0x8, 0x80, 0x87, 0x41, 0xc0, 0x20, 0x0, 0x98, 0x3, 0xa1, 0x7c, 0xf8, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x3, 0xc0, 0x20, 0x0, 0x98, 0x2, 0xa2, 0xae, 0xff, 0xa0, 0x99, 0x10, 0x40, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x2, 0xc, 0x19, 0x90, 0xab, 0x10, 0x68, 0x61, 0x16, 0xfa, 0x0, 0xc0, 0x20, 0x0, 0xa8, 0x2, 0xb2, 0xad, 0xff, 0xb0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x2, 0xa1, 0x70, 0xf8, 0x16, 0x85, 0x0, 0x66, 0x15, 0xb, 0xb1, 0x70, 0xf8, 0xc6, 0x4, 0x0, 0xb1, 0x6b, 0xf8, 0x46, 0x3, 0x0, 0xb8, 0xc1, 0xa0, 0xbb, 0x82, 0xc1, 0x6a, 0xf8, 0xb7, 0x3c, 0x2, 0x46, 0x14, 0x1, 0xa0, 0xab, 0xc2, 0x60, 0xca, 0x11, 0xc0, 0xa1, 0x41, 0xd0, 0xe8, 0x1, 0xaa, 0xae, 0xc, 0xd, 0xbd, 0x9, 0xd7, 0x1a, 0x1, 0xbd, 0xd, 0xe7, 0x3a, 0x1, 0x9d, 0xd, 0x80, 0x8d, 0x41, 0x9a, 0x88, 0xb0, 0xb8, 0xc0, 0xb, 0xaa, 0x81, 0x61, 0xf8, 0xe0, 0x8, 0x0, 0x16, 0xba, 0xe1, 0x81, 0x5f, 0xf8, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xa1, 0x5e, 0xf8, 0xa9, 0xd1, 0xc0, 0x20, 0x0, 0x88, 0xa, 0x91, 0xfd, 0xf7, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0xa, 0x62, 0xa0, 0x6d, 0x69, 0xe1, 0xc, 0x15, 0x59, 0x91, 0xc, 0xd4, 0xc, 0x2d, 0xc, 0x7, 0x31, 0x56, 0xf8, 0x39, 0xa1, 0xad, 0x6, 0xbd, 0x5, 0xcd, 0x4, 0xed, 0xd, 0xfd, 0x7, 0xe0, 0x3, 0x0, 0xc, 0x3d, 0xad, 0x6, 0xbd, 0x5, 0xcd, 0x4, 0xed, 0xd, 0xfd, 0x7, 0x6d, 0x7, 0xe0, 0x3, 0x0, 0x91, 0x4f, 0xf8, 0x99, 0xc1, 0xc0, 0x20, 0x0, 0x88, 0x9, 0xa1, 0x4d, 0xf8, 0xa9, 0xb1, 0xa0, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x9, 0x81, 0x4b, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x4a, 0xf8, 0xa0, 0x99, 0x10, 0xa1, 0x49, 0xf8, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x48, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x47, 0xf8, 0xa0, 0x99, 0x10, 0xa2, 0xa2, 0x0, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x43, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x91, 0x42, 0xf8, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x41, 0xf8, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0xb1, 0x40, 0xf8, 0xb0, 0xaa, 0x10, 0xb2, 0xa2, 0x1, 0xb0, 0xaa, 0x20, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xa1, 0x3d, 0xf8, 0xc0, 0x20, 0x0, 0xb8, 0xa, 0xc0, 0x20, 0x0, 0x99, 0xa, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x95, 0xf7, 0xa0, 0x99, 0x10, 0xa1, 0x38, 0xf8, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc, 0x5c, 0xc, 0x44, 0x1c, 0x7f, 0xf9, 0x81, 0x58, 0xe1, 0xad, 0x5, 0x78, 0x91, 0xbd, 0x7, 0xdd, 0x4, 0x3d, 0x6, 0xed, 0x3, 0x68, 0xa1, 0xe0, 0x6, 0x0, 0xad, 0x5, 0xbd, 0x7, 0x5d, 0x7, 0xcd, 0x4, 0xdd, 0x4, 0xed, 0x3, 0x7d, 0x3, 0xf8, 0x81, 0xe0, 0x6, 0x0, 0x81, 0x2b, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0x2a, 0xf8, 0xa0, 0x99, 0x10, 0xa1, 0x29, 0xf8, 0xa0, 0x99, 0x20, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x1c, 0xef, 0xf9, 0x81, 0x38, 0xe1, 0xad, 0x3, 0xbd, 0x5, 0xcd, 0x4, 0xdd, 0x4, 0xed, 0x7, 0xe0, 0x6, 0x0, 0xc, 0x6c, 0xad, 0x3, 0xbd, 0x5, 0xdd, 0x4, 0xed, 0x7, 0xf8, 0x81, 0xe0, 0x6, 0x0, 0x81, 0x1f, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x7c, 0xeb, 0xb0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x1c, 0xf8, 0xc0, 0x20, 0x0, 0x79, 0x8, 0x81, 0x1b, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x18, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x15, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x12, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xb0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0x88, 0x2, 0x98, 0xb1, 0x90, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0x2, 0x81, 0xb, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xa1, 0xa, 0xf8, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0xc8, 0xc1, 0x98, 0xc, 0xa1, 0x8b, 0xf7, 0xa0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0xc, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xc1, 0x2, 0xf8, 0xc0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x1, 0xf8, 0xc0, 0x20, 0x0, 0x98, 0x8, 0xc1, 0x0, 0xf8, 0xc0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc1, 0xfe, 0xf7, 0xc0, 0x20, 0x0, 0x98, 0xc, 0xd1, 0xfd, 0xf7, 0xd0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0xc, 0xc0, 0x20, 0x0, 0x98, 0x8, 0x7c, 0xad, 0xd0, 0x99, 0x10, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xc0, 0x20, 0x0, 0xd8, 0xc, 0x91, 0xf6, 0xf7, 0x90, 0xdd, 0x20, 0xc0, 0x20, 0x0, 0xd9, 0xc, 0xc1, 0xf4, 0xf7, 0xc0, 0x20, 0x0, 0xd8, 0xc, 0xb0, 0xbd, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0xc, 0xc0, 0x20, 0x0, 0xf8, 0xd1, 0xb8, 0xf, 0x6c, 0xfc, 0xc0, 0xbb, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0xf, 0xc0, 0x20, 0x0, 0xb8, 0x8, 0xc1, 0xec, 0xf7, 0xc0, 0xbb, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0x8, 0xb1, 0xea, 0xf7, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0x6c, 0xad, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xb1, 0xe7, 0xf7, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0x7c, 0x5d, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xb1, 0xe3, 0xf7, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0xd2, 0xaf, 0xd5, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xb1, 0xdf, 0xf7, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0xd2, 0xaf, 0xdf, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xb1, 0xdc, 0xf7, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0xd2, 0xab, 0xff, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xb1, 0xd8, 0xf7, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0xd1, 0xd7, 0xf7, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xc0, 0x20, 0x0, 0xb8, 0xf, 0xc1, 0xd4, 0xf7, 0xc0, 0xbb, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0xf, 0xb1, 0xd2, 0xf7, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0xd1, 0xd1, 0xf7, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xc0, 0x20, 0x0, 0xc8, 0xb, 0xd1, 0xce, 0xf7, 0xd0, 0xcc, 0x10, 0xc0, 0x20, 0x0, 0xc9, 0xb, 0xc0, 0x20, 0x0, 0xdd, 0xf, 0xc8, 0xd, 0xa0, 0xac, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0xd, 0xc0, 0x20, 0x0, 0xa8, 0xb, 0xc1, 0xc7, 0xf7, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0xb, 0xc0, 0x20, 0x0, 0xa8, 0xd, 0xc1, 0xc4, 0xf7, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0xd, 0xc0, 0x20, 0x0, 0xa8, 0xb, 0xc1, 0xc1, 0xf7, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0xb, 0xc0, 0x20, 0x0, 0xa8, 0xd, 0xc1, 0xbe, 0xf7, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0xd, 0xc0, 0x20, 0x0, 0xa8, 0xb, 0xc1, 0xbb, 0xf7, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0xb, 0xc0, 0x20, 0x0, 0xa8, 0xd, 0xc1, 0xb8, 0xf7, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0xd, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0xc1, 0xb5, 0xf7, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0x81, 0x1, 0xf7, 0xc0, 0x20, 0x0, 0xa8, 0x8, 0x7c, 0x7c, 0xc0, 0xaa, 0x10, 0xc0, 0x20, 0x0, 0xa9, 0x8, 0xc0, 0x20, 0x0, 0x88, 0xb, 0xa1, 0xae, 0xf7, 0xa0, 0x88, 0x10, 0xc0, 0x20, 0x0, 0x89, 0xb, 0xc0, 0x20, 0x0, 0x88, 0xb, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0xb, 0xc0, 0x20, 0x0, 0x88, 0xd, 0x91, 0x13, 0xf7, 0x90, 0x88, 0x20, 0xc0, 0x20, 0x0, 0x89, 0xd, 0x81, 0xa5, 0xf7, 0xc0, 0x20, 0x0, 0x79, 0x8, 0x81, 0xa4, 0xf7, 0x7c, 0xf9, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0xa2, 0xf7, 0x91, 0xa3, 0xf7, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xa1, 0xa2, 0xf7, 0xc0, 0x20, 0x0, 0xb8, 0xa, 0xc1, 0xa1, 0xf7, 0xc0, 0xbb, 0x10, 0xc0, 0x20, 0x0, 0xb9, 0xa, 0xc0, 0x20, 0x0, 0x79, 0x8, 0x81, 0x9e, 0xf7, 0xc0, 0x20, 0x0, 0x99, 0x8, 0xa1, 0x9d, 0xf7, 0xc0, 0x20, 0x0, 0x79, 0xa, 0xc0, 0x20, 0x0, 0x79, 0x8, 0x81, 0x9a, 0xf7, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x91, 0x99, 0xf7, 0xc0, 0x20, 0x0, 0x79, 0x9, 0xc0, 0x20, 0x0, 0x79, 0x8, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0x0, 0x36, 0x41, 0x0, 0x71, 0xd1, 0xf6, 0x52, 0xa3, 0xff, 0x41, 0xd1, 0xf6, 0x31, 0x93, 0xf7, 0xc, 0x16, 0xc0, 0x20, 0x0, 0x88, 0x7, 0x50, 0x88, 0x10, 0x16, 0x8, 0x1, 0xc0, 0x20, 0x0, 0xa8, 0x4, 0xe0, 0x3, 0x0, 0x60, 0x8a, 0x10, 0x16, 0x68, 0xfe, 0xf0, 0x41, 0x0, 0x81, 0xdc, 0xf6, 0xc0, 0x20, 0x0, 0x69, 0x8, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x8d, 0x2, 0x91, 0xbd, 0xf6, 0xb1, 0xba, 0xf6, 0x9a, 0xab, 0x92, 0xa, 0x0, 0xc, 0x12, 0x56, 0x39, 0x2, 0xc1, 0xb5, 0xf6, 0xca, 0xcb, 0xd8, 0xc, 0xda, 0xdb, 0x82, 0x4d, 0x0, 0x88, 0xc, 0x1b, 0x88, 0xd1, 0xb4, 0xf6, 0xd7, 0x98, 0x1, 0xc, 0x8, 0x89, 0xc, 0xda, 0xbb, 0xb8, 0xb, 0x87, 0x9b, 0x2, 0x22, 0x4a, 0x0, 0xc, 0x8, 0x87, 0x99, 0x1, 0x2d, 0x8, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x61, 0xb1, 0xf6, 0xc, 0x47, 0x51, 0xaf, 0xf6, 0x41, 0x74, 0xf7, 0xc, 0x13, 0xc0, 0x20, 0x0, 0x88, 0x6, 0x70, 0x88, 0x10, 0x16, 0x8, 0x1, 0xc0, 0x20, 0x0, 0xa8, 0x5, 0xe0, 0x4, 0x0, 0x30, 0x8a, 0x10, 0x16, 0x68, 0xfe, 0xf0, 0x41, 0x0, 0x81, 0xb2, 0xf6, 0xc0, 0x20, 0x0, 0x79, 0x8, 0x1d, 0xf0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x91, 0x9b, 0xf6, 0x81, 0x9b, 0xf6, 0x9a, 0x98, 0xe8, 0x9, 0xb1, 0x9b, 0xf6, 0xba, 0xa8, 0x98, 0xa, 0xc, 0xd, 0xc, 0x1c, 0xfd, 0xc, 0xe7, 0x99, 0x1, 0xfd, 0xd, 0xe1, 0x98, 0xf6, 0xea, 0xe8, 0x72, 0xe, 0x0, 0xd7, 0x97, 0x1, 0xcd, 0xd, 0xc0, 0x2f, 0x20, 0x66, 0x12, 0x12, 0xc, 0xc, 0xc2, 0x4e, 0x0, 0x1b, 0xd9, 0xb7, 0x1d, 0x1, 0xcd, 0xd, 0xc9, 0xa, 0x9a, 0x88, 0x32, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x81, 0x57, 0xf7, 0xe0, 0x8, 0x0, 0x81, 0x56, 0xf7, 0xe0, 0x8, 0x0, 0xc, 0x8, 0x16, 0x2a, 0x1, 0x91, 0x55, 0xf7, 0xa1, 0x55, 0xf7, 0xa7, 0xb9, 0x9, 0xc0, 0x20, 0x0, 0x89, 0x9, 0x4b, 0x99, 0xa7, 0x39, 0xf5, 0x80, 0xf0, 0x13, 0x80, 0xf1, 0x13, 0x80, 0xf2, 0x13, 0x0, 0x20, 0x0, 0x81, 0x4f, 0xf7, 0x80, 0xe7, 0x13, 0x81, 0x4e, 0xf7, 0xe0, 0x8, 0x0, 0x81, 0x4e, 0xf7, 0xe0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0x8d, 0x2, 0x16, 0xe5, 0x9, 0xc, 0x2, 0xc, 0x1a, 0x9d, 0xa, 0x47, 0x38, 0xf, 0x9d, 0x2, 0x57, 0xb3, 0xd, 0x57, 0x13, 0xf, 0x9d, 0xa, 0x16, 0xd9, 0x0, 0xc6, 0x3c, 0x0, 0x57, 0x33, 0xf1, 0xad, 0x2, 0x57, 0x93, 0xef, 0x56, 0x89, 0xe, 0x16, 0x53, 0xe, 0x90, 0xf3, 0x40, 0xa0, 0xf5, 0x40, 0x90, 0x9a, 0xc0, 0x3c, 0xfa, 0xa0, 0xa9, 0x10, 0x0, 0x1a, 0x40, 0x40, 0xc5, 0x81, 0x2c, 0xa, 0xa0, 0xe9, 0x10, 0x0, 0xd4, 0xa1, 0xc, 0xa, 0xbd, 0xd, 0xa7, 0x9e, 0x1, 0xbd, 0xc, 0xcd, 0xa, 0xa7, 0x9e, 0x1, 0xcd, 0xd, 0x1c, 0xfd, 0xd0, 0x99, 0x10, 0xc, 0x1e, 0x0, 0x19, 0x40, 0x0, 0xfe, 0xa1, 0x2d, 0xa, 0x9d, 0xe, 0xc7, 0x38, 0x1, 0x9d, 0xa, 0xb0, 0x73, 0xc0, 0x90, 0x97, 0xc0, 0x96, 0xd9, 0x1, 0xc0, 0x88, 0xc0, 0x7d, 0xe, 0x47, 0x38, 0x1, 0x7d, 0xa, 0x6d, 0xe, 0x57, 0x39, 0x1, 0x6d, 0xa, 0x57, 0x19, 0x1, 0x7d, 0x6, 0xf0, 0x22, 0x20, 0x56, 0x57, 0x8, 0x3d, 0x9, 0x0, 0x1d, 0x40, 0xc0, 0xcb, 0x81, 0xf0, 0xf1, 0x41, 0xb0, 0xb1, 0x41, 0x86, 0xf0, 0xff, 0x16, 0x63, 0x7, 0x47, 0xb3, 0x7c, 0xa0, 0xf3, 0x40, 0xb0, 0xf4, 0x40, 0x1c, 0xf9, 0xdd, 0x9, 0xa7, 0x1b, 0x5, 0xa0, 0xab, 0xc0, 0xd2, 0xca, 0x20, 0x0, 0x1d, 0x40, 0x40, 0xc5, 0x81, 0x0, 0xe4, 0xa1, 0x2c, 0xa, 0xa0, 0xfd, 0x10, 0xc, 0xa, 0xbd, 0xe, 0xa7, 0x9f, 0x1, 0xbd, 0xc, 0xcd, 0xa, 0xa7, 0x9f, 0x1, 0xcd, 0xe, 0x90, 0xed, 0x10, 0xc, 0x1d, 0x0, 0x1e, 0x40, 0x0, 0xfd, 0xa1, 0xed, 0xa, 0x7d, 0xd, 0xc7, 0x38, 0x1, 0x7d, 0xa, 0xb0, 0x63, 0xc0, 0x70, 0x76, 0xc0, 0x96, 0xa7, 0x0, 0xc0, 0x88, 0xc0, 0xe0, 0xef, 0x20, 0x16, 0x57, 0x3, 0x3d, 0x7, 0x0, 0x19, 0x40, 0xc0, 0xcb, 0x81, 0xf0, 0xf1, 0x41, 0xb0, 0xb1, 0x41, 0x46, 0xf5, 0xff, 0x9d, 0x3, 0x3d, 0x2, 0x6, 0x38, 0x0, 0xc, 0x3, 0xc6, 0x36, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x28, 0xc2, 0x6, 0x6, 0x0, 0x47, 0x93, 0x1e, 0x30, 0xa8, 0xe2, 0x30, 0x28, 0xc2, 0xc, 0x9, 0xc, 0x13, 0x6, 0x30, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x88, 0xc2, 0xe0, 0x28, 0x20, 0xc, 0x9, 0x8d, 0xa, 0x3d, 0x9, 0x6, 0x2c, 0x0, 0x40, 0x93, 0xe2, 0x40, 0x33, 0xc2, 0xa1, 0x19, 0xf6, 0xa7, 0xb4, 0x33, 0x1c, 0xa, 0x0, 0x1a, 0x40, 0x80, 0x99, 0x81, 0x40, 0xb9, 0xe2, 0x0, 0xbb, 0x11, 0xc1, 0x15, 0xf6, 0xc0, 0x88, 0x10, 0x80, 0x8b, 0x20, 0x40, 0xb8, 0xc2, 0x40, 0x99, 0xc2, 0x0, 0xc9, 0x11, 0xb0, 0x2c, 0x20, 0x0, 0xa, 0x40, 0x90, 0x90, 0x91, 0x30, 0x39, 0x20, 0x40, 0x88, 0xe2, 0xc, 0x9, 0x6, 0x1c, 0x0, 0xc, 0xc, 0xc, 0x1b, 0xad, 0xb, 0x47, 0x38, 0x4a, 0xad, 0xc, 0x57, 0xb9, 0x48, 0x57, 0x19, 0x4a, 0xad, 0xb, 0x56, 0x8a, 0x4, 0x1c, 0xfa, 0x0, 0x1a, 0x40, 0x40, 0xb5, 0x81, 0x10, 0xc4, 0x1, 0xe1, 0x38, 0xf6, 0xc, 0xf, 0xc, 0x17, 0xdd, 0xf, 0x6d, 0x7, 0xc7, 0x38, 0x1, 0x6d, 0xf, 0xb0, 0x59, 0xc0, 0x60, 0x65, 0xc0, 0x96, 0xa6, 0x0, 0xc0, 0x88, 0xc0, 0xd0, 0xde, 0x20, 0x16, 0x6, 0x2, 0x9d, 0x6, 0x0, 0x1a, 0x40, 0xc0, 0xcb, 0x81, 0xe0, 0xe1, 0x41, 0xb0, 0xb1, 0x41, 0x46, 0xf5, 0xff, 0x57, 0x39, 0xb6, 0xbd, 0xc, 0x57, 0x99, 0xb4, 0x16, 0x6a, 0xfb, 0xc, 0x2, 0x6, 0x3, 0x0, 0x40, 0xa8, 0xe2, 0x40, 0x88, 0xc2, 0xd0, 0x28, 0x20, 0xc, 0x9, 0x8d, 0xa, 0x4d, 0x8, 0x5d, 0x9, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0x81, 0xcb, 0xf6, 0xad, 0x2, 0xbd, 0x3, 0xcd, 0x4, 0xdd, 0x5, 0xe0, 0x8, 0x0, 0x2d, 0xa, 0x3d, 0xb, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xc, 0x8, 0x37, 0xb2, 0x9, 0xc0, 0x20, 0x0, 0x89, 0x2, 0x4b, 0x22, 0x37, 0x32, 0xf5, 0x1d, 0xf0, 0x36, 0x41, 0x0, 0x1d, 0xf0, 0x0, 0x0, 0x0, 0x36, 0x41, 0x0, 0xc, 0x12, 0x1d, 0xf0, 0x0, 0x36, 0x81, 0x0, 0x0, 0x36, 0x81, 0x0, 0x0, 0x78, 0xad, 0x37, 0x40, 0xb4, 0x0, 0xc9, 0x3f, 0xc0, 0x88, 0x1, 0x20, 0x80, 0x8, 0x0, 0x20, 0x94, 0xb4, 0x37, 0x40, 0x80, 0x0, 0xc9, 0x3f, 0x80, 0xc, 0x40, 0x70, 0xdc, 0x9f, 0x37, 0x40, 0x0, 0x20, 0x0, 0x0, 0x8c, 0x29, 0xc, 0x60, 0x8c, 0x21, 0xc, 0x60, 0x90, 0x29, 0xc, 0x60, 0x90, 0x21, 0xc, 0x60, 0x94, 0x29, 0xc, 0x60, 0x94, 0x21, 0xc, 0x60, 0x98, 0x29, 0xc, 0x60, 0x98, 0x21, 0xc, 0x60, 0xf4, 0xa1, 0x37, 0x40, 0xff, 0xff, 0x0, 0x0, 0x40, 0xaf, 0x37, 0x40, 0x9c, 0xb4, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0xe4, 0xaf, 0x37, 0x40, 0x0, 0xc7, 0xcd, 0x3f, 0x0, 0xe0, 0xf, 0x60, 0x0, 0xe0, 0xf, 0x60, 0x8c, 0xac, 0x37, 0x40, 0x0, 0x0, 0x0, 0x50, 0x0, 0x0, 0x0, 0x50, 0xb8, 0xe3, 0xc9, 0x3f, 0xbe, 0xba, 0xad, 0xde, 0x5c, 0xa2, 0x37, 0x40, 0x20, 0xaa, 0x37, 0x40, 0x0, 0x80, 0x0, 0x0, 0x1c, 0x1a, 0x0, 0x40, 0x0, 0x0, 0x4, 0x0, 0x3, 0x0, 0x4, 0x0, 0x1, 0x0, 0x4, 0x0, 0x2, 0x0, 0x4, 0x0, 0x4, 0x0, 0x4, 0x0, 0x5, 0x0, 0x4, 0x0, 0x6, 0x0, 0x4, 0x0, 0x7, 0x0, 0x4, 0x0, 0x36, 0x41, 0x0, 0x81, 0xd3, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0x81, 0x1, 0x80, 0xe2, 0x3, 0x90, 0xe4, 0x3, 0xc, 0x7a, 0x27, 0xba, 0x2, 0xc6, 0x6c, 0x0, 0x80, 0x89, 0x10, 0x91, 0xcc, 0xff, 0x90, 0x92, 0xa0, 0x98, 0x9, 0x90, 0x98, 0x10, 0x81, 0xca, 0xff, 0x80, 0x89, 0x10, 0x16, 0x48, 0x4, 0x7c, 0xfa, 0xa0, 0xa8, 0x30, 0xb, 0x88, 0x80, 0x8a, 0x10, 0x80, 0xf8, 0x40, 0x2c, 0xa, 0x80, 0x8a, 0xc0, 0xa1, 0xc4, 0xff, 0xa0, 0x99, 0x10, 0x16, 0xd9, 0x0, 0xc, 0x19, 0x0, 0x18, 0x40, 0x0, 0x99, 0xa1, 0x90, 0xe3, 0x13, 0x10, 0x20, 0x0, 0x92, 0xc8, 0xfa, 0xc, 0xaa, 0x97, 0x3a, 0x5a, 0x81, 0xbd, 0xff, 0xa1, 0xbe, 0xff, 0xa0, 0x99, 0xa0, 0x98, 0x9, 0xa0, 0x9, 0x0, 0x81, 0xba, 0xff, 0x86, 0x19, 0x0, 0x81, 0xba, 0xff, 0x80, 0x89, 0x10, 0x16, 0x98, 0x2, 0x80, 0x90, 0x60, 0x90, 0x88, 0x10, 0x80, 0xe3, 0x13, 0x10, 0x20, 0x0, 0x80, 0xeb, 0x3, 0xc, 0x9, 0x99, 0x31, 0x99, 0x21, 0x99, 0x11, 0x99, 0x1, 0x80, 0x8d, 0x41, 0xc, 0x19, 0x90, 0xb8, 0x10, 0xa2, 0xc1, 0x20, 0x81, 0xb0, 0xff, 0xc6, 0xd, 0x0, 0x81, 0xb0, 0xff, 0x90, 0xeb, 0x3, 0x80, 0x89, 0x10, 0xc, 0x6, 0x67, 0x18, 0x2e, 0x91, 0xad, 0xff, 0xc6, 0xa, 0x0, 0x1c, 0xd9, 0x97, 0x98, 0x21, 0x81, 0xa5, 0xff, 0x6, 0x5, 0x0, 0x81, 0xa4, 0xff, 0x86, 0x3, 0x0, 0x81, 0xa2, 0xff, 0x6, 0x2, 0x0, 0x81, 0xa1, 0xff, 0x86, 0x0, 0x0, 0x81, 0x9f, 0xff, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x91, 0xa2, 0xff, 0xc0, 0x20, 0x0, 0x48, 0x9, 0x67, 0x18, 0x5, 0x91, 0xa1, 0xff, 0x86, 0x0, 0x0, 0x91, 0xa0, 0xff, 0xc0, 0x20, 0x0, 0x58, 0x9, 0x67, 0x18, 0x5, 0x91, 0x9e, 0xff, 0x86, 0x0, 0x0, 0x91, 0x9e, 0xff, 0xc0, 0x20, 0x0, 0x98, 0x9, 0x67, 0x18, 0x5, 0x81, 0x9c, 0xff, 0x86, 0x0, 0x0, 0x81, 0x9c, 0xff, 0xc0, 0x20, 0x0, 0xb8, 0x8, 0x80, 0xeb, 0x3, 0xb9, 0x61, 0xb9, 0x31, 0x99, 0x71, 0x99, 0x21, 0x59, 0x11, 0x49, 0x1, 0x80, 0x8d, 0x41, 0xc, 0x19, 0x90, 0xb8, 0x10, 0x72, 0xc1, 0x20, 0x81, 0x8a, 0xff, 0xad, 0x7, 0xe0, 0x8, 0x0, 0xc0, 0x82, 0x11, 0x8a, 0xd7, 0x88, 0x1d, 0x50, 0x88, 0x10, 0x7c, 0xfc, 0x4c, 0xb, 0x98, 0xd, 0x40, 0x99, 0x10, 0x2c, 0xe, 0x67, 0x99, 0x10, 0xc0, 0xa8, 0x30, 0xb, 0xf8, 0xf0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xa0, 0xab, 0xc0, 0x46, 0x3, 0x0, 0xc0, 0xa9, 0x30, 0xb, 0xf9, 0xf0, 0xaa, 0x10, 0xa0, 0xfa, 0x40, 0xa0, 0xae, 0xc0, 0xf8, 0x2d, 0x78, 0x71, 0x70, 0xff, 0x10, 0x67, 0x9f, 0x17, 0xd8, 0x3d, 0xe8, 0x61, 0xe0, 0xdd, 0x10, 0xc0, 0xcd, 0x30, 0xb, 0xdd, 0xd0, 0xcc, 0x10, 0xc0, 0xfc, 0x40, 0xc0, 0xbb, 0xc0, 0x46, 0x3, 0x0, 0xc0, 0xbf, 0x30, 0xb, 0xcf, 0xc0, 0xbb, 0x10, 0xb0, 0xfb, 0x40, 0xb0, 0xbe, 0xc0, 0x80, 0x89, 0x20, 0x67, 0x98, 0x2, 0xa2, 0xcb, 0x40, 0x81, 0x76, 0xff, 0xe0, 0x8, 0x0, 0x81, 0x76, 0xff, 0x80, 0x8a, 0x10, 0x92, 0xa0, 0x63, 0x97, 0x98, 0x2, 0xc6, 0xc6, 0xff, 0x81, 0x73, 0xff, 0x6, 0xc4, 0xff, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x81, 0x6f, 0xff, 0x80, 0x82, 0x10, 0x91, 0x6f, 0xff, 0x90, 0x88, 0xa0, 0x88, 0x8, 0x91, 0x6e, 0xff, 0x97, 0x18, 0x6, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x41, 0x0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x6a, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x66, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x62, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x5e, 0xff, 0xad, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0xf0, 0x20, 0x0, 0x36, 0x41, 0x0, 0x81, 0x5b, 0xff, 0xe0, 0x8, 0x0, 0x81, 0x5a, 0xff, 0x2, 0xa0, 0x0, 0x80, 0x18, 0x20, 0xa1, 0x59, 0xff, 0xb1, 0x59, 0xff, 0x71, 0x5a, 0xff, 0xe0, 0x7, 0x0, 0xa1, 0x59, 0xff, 0xb1, 0x59, 0xff, 0xe0, 0x7, 0x0, 0x81, 0x59, 0xff, 0x91, 0x59, 0xff, 0xc0, 0x20, 0x0, 0x99, 0x8, 0x81, 0x58, 0xff, 0xe0, 0x8, 0x0, 0x81, 0x58, 0xff, 0xe0, 0x8, 0x0, 0x3d, 0xf0, 0x36, 0x41, 0x0, 0xa1, 0x56, 0xff, 0xc, 0x8b, 0x2c, 0xc, 0x81, 0x55, 0xff, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x3d, 0xf0, 0x22, 0x61, 0x4, 0x32, 0x61, 0x5, 0x42, 0x61, 0x6, 0x52, 0x61, 0x7, 0x62, 0x61, 0x8, 0x72, 0x61, 0x9, 0x82, 0x61, 0xa, 0x92, 0x61, 0xb, 0xa2, 0x61, 0xc, 0xb2, 0x61, 0xd, 0xc2, 0x61, 0xe, 0xd2, 0x61, 0xf, 0xe2, 0x61, 0x10, 0xf2, 0x61, 0x11, 0x30, 0x3, 0x3, 0x32, 0x61, 0x12, 0x30, 0x0, 0x3, 0x32, 0x61, 0x15, 0x30, 0x1, 0x3, 0x32, 0x61, 0x16, 0x30, 0x2, 0x3, 0x32, 0x61, 0x17, 0x70, 0x3e, 0xe3, 0x32, 0x61, 0x18, 0x30, 0xc, 0x3, 0x32, 0x61, 0x19, 0x30, 0x4, 0x3, 0x32, 0x61, 0x1a, 0x30, 0x10, 0x3, 0x32, 0x61, 0x1b, 0x30, 0x11, 0x3, 0x32, 0x61, 0x1c, 0x30, 0x20, 0x3, 0x32, 0x61, 0x1d, 0x30, 0x21, 0x3, 0x32, 0x61, 0x1e, 0x30, 0x22, 0x3, 0x32, 0x61, 0x1f, 0x30, 0x23, 0x3, 0x32, 0x61, 0x20, 0x80, 0x3e, 0xe3, 0x32, 0x61, 0x24, 0x90, 0x3e, 0xe3, 0x32, 0x61, 0x25, 0x3, 0x41, 0x26, 0x13, 0x41, 0x27, 0x23, 0x41, 0x28, 0x33, 0x41, 0x29, 0x43, 0x41, 0x2a, 0x53, 0x41, 0x2b, 0x63, 0x41, 0x2c, 0x73, 0x41, 0x2d, 0x83, 0x41, 0x2e, 0x93, 0x41, 0x2f, 0xa3, 0x41, 0x30, 0xb3, 0x41, 0x31, 0xc3, 0x41, 0x32, 0xd3, 0x41, 0x33, 0xe3, 0x41, 0x34, 0xf3, 0x41, 0x35, 0x2, 0x61, 0x36, 0x20, 0xe6, 0x3, 0x2, 0xa0, 0xf, 0x0, 0x32, 0x10, 0xf6, 0x33, 0x2, 0x32, 0xa0, 0x3, 0x1, 0x22, 0xff, 0x0, 0x33, 0x20, 0x30, 0xe6, 0x13, 0x0, 0xb1, 0x3, 0x12, 0xd1, 0x1, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x30, 0x80, 0x40, 0xc0, 0xcc, 0x10, 0x40, 0x80, 0x40, 0x12, 0xd1, 0xff, 0x20, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x36, 0x80, 0x0, 0x0, 0xf0, 0x41, 0x0, 0x32, 0x21, 0x12, 0x30, 0x3, 0x13, 0x32, 0x21, 0x15, 0x30, 0x0, 0x13, 0x32, 0x21, 0x16, 0x30, 0x1, 0x13, 0x32, 0x21, 0x17, 0x30, 0x2, 0x13, 0x32, 0x21, 0x18, 0x30, 0xe7, 0xf3, 0x32, 0x21, 0x19, 0x30, 0xc, 0x13, 0x32, 0x21, 0x1a, 0x30, 0x4, 0x13, 0x32, 0x21, 0x1b, 0x30, 0x10, 0x13, 0x32, 0x21, 0x1c, 0x30, 0x11, 0x13, 0x32, 0x21, 0x1d, 0x30, 0x20, 0x13, 0x32, 0x21, 0x1e, 0x30, 0x21, 0x13, 0x32, 0x21, 0x1f, 0x30, 0x22, 0x13, 0x32, 0x21, 0x20, 0x30, 0x23, 0x13, 0x32, 0x21, 0x24, 0x30, 0xe8, 0xf3, 0x32, 0x21, 0x25, 0x30, 0xe9, 0xf3, 0x3, 0x1, 0x26, 0x13, 0x1, 0x27, 0x23, 0x1, 0x28, 0x33, 0x1, 0x29, 0x43, 0x1, 0x2a, 0x53, 0x1, 0x2b, 0x63, 0x1, 0x2c, 0x73, 0x1, 0x2d, 0x83, 0x1, 0x2e, 0x93, 0x1, 0x2f, 0xa3, 0x1, 0x30, 0xb3, 0x1, 0x31, 0xc3, 0x1, 0x32, 0xd3, 0x1, 0x33, 0xe3, 0x1, 0x34, 0xf3, 0x1, 0x35, 0x22, 0x21, 0x4, 0x32, 0x21, 0x5, 0x42, 0x21, 0x6, 0x52, 0x21, 0x7, 0x62, 0x21, 0x8, 0x72, 0x21, 0x9, 0x82, 0x21, 0xa, 0x92, 0x21, 0xb, 0xa2, 0x21, 0xc, 0xb2, 0x21, 0xd, 0xc2, 0x21, 0xe, 0xd2, 0x21, 0xf, 0xe2, 0x21, 0x10, 0xf2, 0x21, 0x11, 0x80, 0x0, 0x0, 0xf0, 0x41, 0x0, 0x3d, 0xf0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xe6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xe8, 0x3, 0x2, 0x61, 0x13, 0x0, 0xee, 0x3, 0x2, 0x61, 0x14, 0x0, 0xb1, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd1, 0x3, 0x2, 0x61, 0x2, 0xc5, 0xe0, 0xff, 0x1, 0xd8, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0x21, 0x13, 0x26, 0x46, 0x8, 0x10, 0x71, 0x20, 0x55, 0x28, 0x0, 0x46, 0x4, 0x0, 0x1, 0xd3, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x1, 0x10, 0x71, 0x20, 0x55, 0xb5, 0xff, 0x85, 0xee, 0xff, 0x2, 0x21, 0x1, 0x0, 0xe6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x0, 0x30, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xe6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xe8, 0x3, 0x2, 0x61, 0x13, 0x0, 0xee, 0x3, 0x2, 0x61, 0x14, 0x0, 0xc0, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd7, 0x3, 0x2, 0x61, 0x2, 0x45, 0xd9, 0xff, 0x62, 0x21, 0x13, 0x10, 0x71, 0x20, 0x95, 0x21, 0x0, 0x5, 0xe9, 0xff, 0x2, 0x21, 0x1, 0x0, 0xe6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb1, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x0, 0x32, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc2, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb2, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd2, 0x3, 0x2, 0x61, 0x2, 0x85, 0xd4, 0xff, 0x1, 0xa9, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x2, 0x10, 0x71, 0x20, 0x95, 0xaa, 0xff, 0xc5, 0xe3, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc2, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb2, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x32, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc3, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb3, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd3, 0x3, 0x2, 0x61, 0x2, 0x45, 0xcf, 0xff, 0x1, 0x92, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x3, 0x10, 0x71, 0x20, 0x55, 0xa5, 0xff, 0x85, 0xde, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc3, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb3, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x33, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc4, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb4, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd4, 0x3, 0x2, 0x61, 0x2, 0x5, 0xca, 0xff, 0x1, 0x80, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x4, 0x10, 0x71, 0x20, 0xd5, 0xbf, 0xff, 0x45, 0xd9, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc4, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb4, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x34, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc5, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb5, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd5, 0x3, 0x2, 0x61, 0x2, 0xc5, 0xc4, 0xff, 0x1, 0x6c, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x5, 0x10, 0x71, 0x20, 0x95, 0xbb, 0xff, 0x5, 0xd4, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc5, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb5, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x35, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc6, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb6, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd6, 0x3, 0x2, 0x61, 0x2, 0x85, 0xbf, 0xff, 0x1, 0x58, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x6, 0x10, 0x71, 0x20, 0x55, 0xb7, 0xff, 0xc5, 0xce, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc6, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb6, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x36, 0x0, 0xf0, 0x41, 0x0, 0x10, 0x1, 0x20, 0x12, 0xd1, 0xff, 0x2, 0x61, 0x3, 0x0, 0xd1, 0x49, 0x0, 0xc7, 0x3, 0x2, 0x61, 0x1, 0x0, 0xb7, 0x3, 0x2, 0x61, 0x0, 0x0, 0xc1, 0x49, 0x0, 0xd7, 0x3, 0x2, 0x61, 0x2, 0x45, 0xba, 0xff, 0x1, 0x44, 0xfe, 0x0, 0xe6, 0x13, 0x10, 0x20, 0x0, 0x62, 0xa0, 0x7, 0x10, 0x71, 0x20, 0x15, 0xb3, 0xff, 0x85, 0xc9, 0xff, 0x2, 0x21, 0x1, 0x0, 0xc7, 0x13, 0x2, 0x21, 0x0, 0x0, 0xb7, 0x13, 0x2, 0x21, 0x2, 0x12, 0x21, 0x3, 0x10, 0x20, 0x0, 0x10, 0x37, 0x0, 0xf0, 0x41, 0x0, 0x36, 0x41, 0x0, 0x81, 0x10, 0xfe, 0xad, 0x2, 0xbd, 0x3, 0xe0, 0x8, 0x0, 0x1d, 0xf0, 0x0, 0x36, 0x41, 0x0, 0xf0, 0x41, 0x0, 0x0, 0x0, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x0, 0x0, 0x0, 0x0, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x0, 0x0, 0x0, 0x0, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x0, 0x0, 0x0, 0x0, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40, 0x84, 0xac, 0x37, 0x40}, + }, + { + .addr = 1070137376, + .size = 3952, + .data = (uint8_t[]){0x95, 0x94, 0x37, 0x40, 0x99, 0x95, 0x37, 0x40, 0x45, 0x96, 0x37, 0x40, 0x95, 0x94, 0x37, 0x40, 0x95, 0x96, 0x37, 0x40, 0x99, 0x95, 0x37, 0x40, 0x4, 0x97, 0x37, 0x40, 0x3a, 0x97, 0x37, 0x40, 0x8a, 0x97, 0x37, 0x40, 0xe8, 0x97, 0x37, 0x40, 0xe9, 0x9e, 0x37, 0x40, 0x17, 0x98, 0x37, 0x40, 0xe9, 0x9e, 0x37, 0x40, 0x46, 0x98, 0x37, 0x40, 0x95, 0x94, 0x37, 0x40, 0x99, 0x95, 0x37, 0x40, 0x45, 0x96, 0x37, 0x40, 0xef, 0x98, 0x37, 0x40, 0xfb, 0x99, 0x37, 0x40, 0x87, 0x95, 0x37, 0x40, 0x2b, 0x9a, 0x37, 0x40, 0x81, 0x9a, 0x37, 0x40, 0x81, 0x9c, 0x37, 0x40, 0x99, 0x95, 0x37, 0x40, 0x4c, 0xae, 0x37, 0x40, 0xdf, 0xad, 0x37, 0x40, 0x53, 0xae, 0x37, 0x40, 0x53, 0xae, 0x37, 0x40, 0x53, 0xae, 0x37, 0x40, 0x37, 0xae, 0x37, 0x40, 0x53, 0xae, 0x37, 0x40, 0x53, 0xae, 0x37, 0x40, 0x3d, 0xae, 0x37, 0x40, 0x43, 0xae, 0x37, 0x40, 0x49, 0xae, 0x37, 0x40, 0xc0, 0xdb, 0xdc, 0xdb, 0xdd, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x37, 0x6, 0x0, 0x0, 0x0, 0x38, 0x0, 0x0, 0x88, 0xc0, 0x28, 0x0, 0x0, 0x0, 0x53, 0x0, 0x0, 0x1, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x2, 0x0, 0x3, 0x0, 0x4, 0x0, 0x5, 0x0, 0x6, 0x0, 0x7, 0x0, 0x8, 0x0, 0x9, 0x0, 0xa, 0x0, 0xb, 0x0, 0xc, 0x0, 0xd, 0x0, 0xe, 0x0, 0xf, 0x0, 0x10, 0x0, 0x11, 0x0, 0x12, 0x0, 0x13, 0x0, 0x14, 0x0, 0x15, 0x0, 0x16, 0x0, 0x63, 0x0, 0x18, 0x0, 0x19, 0x0, 0x1a, 0x0, 0x1b, 0x0, 0x1c, 0x0, 0x1d, 0x0, 0x1e, 0x0, 0x1f, 0x0, 0x20, 0x0, 0x63, 0x0, 0x63, 0x0, 0x23, 0x0, 0x24, 0x0, 0x25, 0x0, 0x26, 0x0, 0x27, 0x0, 0x28, 0x0, 0x29, 0x0, 0x2a, 0x0, 0x2b, 0x0, 0x2c, 0x0, 0x2d, 0x0, 0x63, 0x0, 0x2f, 0x0, 0x30, 0x0, 0x31, 0x0, 0x32, 0x0, 0x33, 0x0, 0x34, 0x0, 0x35, 0x0, 0x36, 0x0, 0x37, 0x0, 0x38, 0x0, 0x39, 0x0, 0x3a, 0x0, 0x3b, 0x0, 0x3c, 0x0, 0x3d, 0x0, 0x3e, 0x0, 0x3f, 0x0, 0x40, 0x0, 0x41, 0x0, 0x42, 0x0, 0x43, 0x0, 0x44, 0x0, 0x45, 0x0, 0x46, 0x0, 0x47, 0x0, 0x48, 0x0, 0x49, 0x0, 0x4a, 0x0, 0x4b, 0x0, 0x4c, 0x0, 0x4d, 0x0, 0x63, 0x0, 0x4f, 0x0, 0x50, 0x0, 0x51, 0x0, 0x52, 0x0, 0x53, 0x0, 0x54, 0x0, 0x55, 0x0, 0x56, 0x0, 0x57, 0x0, 0x58, 0x0, 0x59, 0x0, 0x5a, 0x0, 0x5b, 0x0, 0x5c, 0x0, 0x5d, 0x0, 0x5e, 0x0, 0x5f, 0x0, 0x60, 0x0, 0x61, 0x0, 0x62, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0}, + }, + }, + }, + + // esp32c2.json + { + .header = { + .entrypoint = 1077411840, + }, + .segments = { + { + .addr = 1077411840, + .size = 10072, + .data = (uint8_t[]){0xb7, 0x0, 0x38, 0x40, 0x67, 0x80, 0x80, 0x0, 0x17, 0x15, 0x93, 0xff, 0x13, 0x5, 0x45, 0xb0, 0x97, 0xd5, 0x93, 0xff, 0x93, 0x85, 0x85, 0xf2, 0x63, 0x57, 0xb5, 0x0, 0x81, 0x46, 0x14, 0xc1, 0x11, 0x5, 0xe3, 0x4e, 0xb5, 0xfe, 0x81, 0x40, 0x1, 0x41, 0x81, 0x41, 0x1, 0x42, 0x81, 0x42, 0x1, 0x43, 0x81, 0x43, 0x1, 0x44, 0x81, 0x44, 0x1, 0x45, 0x81, 0x45, 0x1, 0x46, 0x81, 0x46, 0x1, 0x47, 0x81, 0x47, 0x1, 0x48, 0x81, 0x48, 0x1, 0x49, 0x81, 0x49, 0x1, 0x4a, 0x81, 0x4a, 0x1, 0x4b, 0x81, 0x4b, 0x1, 0x4c, 0x81, 0x4c, 0x1, 0x4d, 0x81, 0x4d, 0x1, 0x4e, 0x81, 0x4e, 0x1, 0x4f, 0x81, 0x4f, 0x97, 0x11, 0x93, 0xff, 0x93, 0x81, 0x81, 0x2a, 0xf3, 0x23, 0x40, 0xf1, 0xb7, 0x2, 0x0, 0x0, 0x93, 0x82, 0x2, 0x0, 0x63, 0xf4, 0x72, 0x0, 0x6f, 0x0, 0x80, 0x4, 0x17, 0x1, 0x95, 0xff, 0x13, 0x1, 0x1, 0xf8, 0x91, 0x42, 0x33, 0x1, 0x51, 0x40, 0x13, 0x71, 0x1, 0xff, 0xa, 0x84, 0x6f, 0x0, 0x40, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x75, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x4d, 0x37, 0xe5, 0xcb, 0x3f, 0xb7, 0xc5, 0xad, 0xde, 0x93, 0x85, 0xe5, 0xab, 0x23, 0x2c, 0xb5, 0xf2, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x4e, 0x6f, 0x0, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0x7, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x35, 0x6, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x47, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x33, 0xe8, 0xb6, 0x0, 0x83, 0x45, 0x55, 0x0, 0x3, 0x46, 0x45, 0x0, 0x83, 0x46, 0x65, 0x0, 0x3, 0x47, 0x75, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x3, 0x46, 0x95, 0x0, 0x83, 0x46, 0x85, 0x0, 0x3, 0x47, 0xa5, 0x0, 0x83, 0x47, 0xb5, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x48, 0xd5, 0x0, 0x3, 0x47, 0xc5, 0x0, 0x83, 0x47, 0xe5, 0x0, 0x83, 0x46, 0xf5, 0x0, 0xa2, 0x8, 0x33, 0xe7, 0xe8, 0x0, 0xc2, 0x7, 0xe2, 0x6, 0xdd, 0x8e, 0xd9, 0x8e, 0x83, 0x48, 0x15, 0x1, 0x83, 0x42, 0x5, 0x1, 0x3, 0x43, 0x25, 0x1, 0x83, 0x47, 0x35, 0x1, 0xa2, 0x8, 0x33, 0xe7, 0x58, 0x0, 0x42, 0x3, 0xe2, 0x7, 0xb3, 0xe7, 0x67, 0x0, 0x5d, 0x8f, 0x83, 0x42, 0x55, 0x1, 0x83, 0x48, 0x45, 0x1, 0x3, 0x43, 0x65, 0x1, 0x3, 0x45, 0x75, 0x1, 0xa2, 0x2, 0xb3, 0xe7, 0x12, 0x1, 0x42, 0x3, 0x62, 0x5, 0x33, 0x65, 0x65, 0x0, 0xc9, 0x8f, 0x42, 0x85, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0xfa, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xfc, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xe, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x2b, 0x29, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x2b, 0x3, 0x45, 0xb4, 0x0, 0x83, 0x45, 0xa4, 0x0, 0x3, 0x46, 0xc4, 0x0, 0x83, 0x46, 0xd4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0xf4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0x4, 0x1, 0x3, 0x47, 0x14, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0x33, 0x66, 0xd7, 0x0, 0x49, 0x8e, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x27, 0x26, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0x24, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x36, 0x89, 0xb2, 0x89, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x23, 0x21, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x23, 0x26, 0x85, 0xce, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x22, 0x93, 0x5, 0x84, 0x0, 0x9, 0x46, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x21, 0x26, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0x1f, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0x6a, 0xc8, 0x6e, 0xc6, 0xaa, 0x8a, 0x3, 0x2b, 0x5, 0x1, 0x4, 0x45, 0x36, 0x8a, 0x32, 0x89, 0xae, 0x89, 0x5a, 0x8c, 0x63, 0x63, 0xdb, 0x0, 0x52, 0x8c, 0x3, 0xa4, 0xca, 0x0, 0x83, 0xad, 0x4a, 0x0, 0x26, 0xc4, 0xe2, 0x94, 0xc1, 0x6b, 0x5, 0x6d, 0x63, 0x7f, 0x94, 0x2, 0x13, 0x15, 0x4, 0x1, 0x9, 0xed, 0xb3, 0xc, 0x74, 0x1, 0x63, 0xea, 0x9d, 0x1, 0x13, 0x55, 0x4, 0x1, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0xe4, 0x19, 0xc9, 0x41, 0xa8, 0x13, 0x55, 0xc4, 0x0, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xc0, 0xe2, 0x49, 0xe1, 0xb3, 0xc, 0xa4, 0x1, 0x23, 0xa6, 0x9a, 0x1, 0x66, 0x84, 0xe3, 0xe5, 0x9c, 0xfc, 0x1, 0x44, 0xd, 0x65, 0x13, 0xd, 0x55, 0xb0, 0x56, 0x9d, 0xa2, 0x4b, 0xde, 0x8c, 0x63, 0x5, 0xc, 0x4, 0x5, 0x65, 0xe2, 0x84, 0x63, 0x63, 0xac, 0x0, 0x85, 0x64, 0x63, 0x6c, 0x8a, 0x6, 0xb3, 0x5, 0x89, 0x0, 0x66, 0x85, 0x26, 0x86, 0x63, 0x87, 0x9, 0x0, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0xdb, 0x29, 0xa0, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x60, 0xde, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xc, 0x23, 0x0, 0xad, 0x0, 0x33, 0xc, 0x9c, 0x40, 0x26, 0x94, 0xa6, 0x9c, 0xe3, 0x1f, 0xc, 0xfa, 0x1, 0x45, 0xb3, 0x85, 0x8b, 0x0, 0xd6, 0x86, 0x8c, 0xc6, 0xb3, 0x5, 0x8b, 0x40, 0x33, 0x36, 0xbb, 0x0, 0x7d, 0x16, 0xf1, 0x8d, 0x8c, 0xca, 0x19, 0xa0, 0x13, 0x5, 0x60, 0x3, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x42, 0x4d, 0xb2, 0x4d, 0x21, 0x61, 0x82, 0x80, 0x0, 0x0, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0xb2, 0x89, 0x2e, 0x89, 0x2a, 0x84, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x14, 0x13, 0x75, 0xf5, 0xf, 0x13, 0x5, 0x5, 0xf4, 0x7d, 0xf5, 0x81, 0x44, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x12, 0x93, 0x75, 0xf5, 0xf, 0x13, 0x86, 0x55, 0xf2, 0x1d, 0xe2, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x11, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0x45, 0xf2, 0x99, 0xcd, 0x13, 0x5, 0x35, 0xf2, 0x71, 0xf9, 0x13, 0x5, 0xb0, 0xd, 0x63, 0xed, 0x34, 0x1, 0x25, 0xa8, 0x93, 0x85, 0x5, 0xf4, 0x91, 0xcd, 0x63, 0xe7, 0x34, 0x1, 0x35, 0xa0, 0x13, 0x5, 0x0, 0xc, 0x63, 0xf3, 0x34, 0x3, 0xb3, 0x5, 0x99, 0x0, 0x23, 0x80, 0xa5, 0x0, 0x85, 0x4, 0x6d, 0xb7, 0x63, 0xeb, 0x99, 0x0, 0x4a, 0x85, 0xa6, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x32, 0x89, 0xae, 0x84, 0x2a, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x2, 0x22, 0x85, 0xa6, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x2, 0x22, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0xb7, 0x5, 0xcb, 0x3f, 0x93, 0x85, 0x5, 0xa, 0x5, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xf, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x32, 0x84, 0xae, 0x84, 0x2a, 0x89, 0x37, 0x5, 0xcb, 0x3f, 0x93, 0x9, 0x15, 0xa, 0x37, 0x5, 0xcb, 0x3f, 0x13, 0xa, 0x35, 0xa, 0x15, 0xce, 0x3, 0xc5, 0x4, 0x0, 0x93, 0x5, 0x5, 0xf4, 0x81, 0xc9, 0x93, 0x5, 0x55, 0xf2, 0x89, 0xe9, 0x9, 0x46, 0x4a, 0x85, 0xd2, 0x85, 0x19, 0xa8, 0x9, 0x46, 0x4a, 0x85, 0xce, 0x85, 0x39, 0xa0, 0xa3, 0x3, 0xa1, 0x0, 0x93, 0x5, 0x71, 0x0, 0x5, 0x46, 0x4a, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x9, 0x85, 0x4, 0x7d, 0x14, 0x61, 0xf4, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x35, 0xcd, 0x37, 0x15, 0xcb, 0x3f, 0x13, 0x5, 0xc5, 0xb2, 0xc5, 0x45, 0xaa, 0x5, 0x2e, 0x95, 0xa1, 0x45, 0x81, 0x47, 0xf3, 0x77, 0x4, 0x30, 0x10, 0x41, 0x54, 0x41, 0x3, 0x47, 0x85, 0x0, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0xa0, 0x5, 0x30, 0x35, 0x8e, 0x59, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x6d, 0xf2, 0x81, 0x45, 0xf3, 0x75, 0x4, 0x30, 0x37, 0x15, 0xcb, 0x3f, 0x13, 0x5, 0xc5, 0xb2, 0x45, 0x47, 0x2a, 0x7, 0xb3, 0x6, 0xe5, 0x0, 0x90, 0x42, 0xdc, 0x42, 0x63, 0x15, 0xf6, 0x0, 0x83, 0xc7, 0x86, 0x0, 0x85, 0xc7, 0x23, 0x84, 0x6, 0x0, 0x93, 0x7, 0x16, 0x0, 0x3d, 0x8f, 0x13, 0x37, 0x17, 0x0, 0x7d, 0x17, 0x7d, 0x8f, 0x98, 0xc2, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0xa1, 0x89, 0x81, 0xc5, 0xa1, 0x45, 0x73, 0xa0, 0x5, 0x30, 0x82, 0x80, 0x0, 0x0, 0x15, 0xc1, 0x2e, 0x96, 0x37, 0x5, 0x0, 0x60, 0xb7, 0x6, 0x80, 0x3, 0x63, 0x8b, 0xc5, 0x0, 0x58, 0x4d, 0x75, 0x8f, 0x75, 0xff, 0x3, 0xc7, 0x5, 0x0, 0x85, 0x5, 0x18, 0xc1, 0xe3, 0x99, 0xc5, 0xfe, 0x82, 0x80, 0x0, 0x0, 0x11, 0x71, 0x86, 0xdf, 0xa2, 0xdd, 0xa6, 0xdb, 0xca, 0xd9, 0xce, 0xd7, 0xd2, 0xd5, 0xd6, 0xd3, 0xda, 0xd1, 0xde, 0xcf, 0xe2, 0xcd, 0xe6, 0xcb, 0xea, 0xc9, 0xee, 0xc7, 0x29, 0x65, 0x13, 0x5, 0x5, 0x82, 0x33, 0x1, 0xa1, 0x40, 0x1, 0x45, 0x73, 0x75, 0x4, 0x30, 0xb7, 0x15, 0xcb, 0x3f, 0x3, 0xc6, 0xd5, 0xb0, 0x19, 0xc2, 0x6f, 0x0, 0x30, 0x70, 0x5, 0x46, 0x21, 0x89, 0xa3, 0x86, 0xc5, 0xb0, 0x1, 0xc5, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x37, 0x85, 0x0, 0x60, 0x20, 0x55, 0x28, 0x55, 0x93, 0x74, 0x5, 0x8, 0x99, 0xc4, 0x5, 0x45, 0x85, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x18, 0x13, 0xb9, 0x14, 0x0, 0x13, 0x75, 0x4, 0x4, 0x93, 0x34, 0x15, 0x0, 0x5, 0x45, 0xa9, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x1, 0x93, 0x16, 0x35, 0x1, 0x93, 0x55, 0xd5, 0x0, 0x29, 0x46, 0x36, 0x85, 0x81, 0x46, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x75, 0xb7, 0x5, 0xb, 0x1, 0x93, 0x85, 0x5, 0x76, 0xb3, 0x6, 0xb5, 0x2, 0xb3, 0x35, 0xb5, 0x2, 0x37, 0x46, 0x42, 0xf, 0x36, 0x85, 0x81, 0x46, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x73, 0xb6, 0x5, 0x4d, 0x81, 0x33, 0x64, 0xb5, 0x0, 0x26, 0x85, 0xca, 0x85, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x12, 0x93, 0x34, 0x24, 0x2, 0x13, 0xca, 0x14, 0x0, 0x52, 0x85, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xe6, 0x93, 0x5, 0x70, 0x7, 0x63, 0xe5, 0xa5, 0x4, 0x37, 0x85, 0x0, 0x60, 0xc, 0x41, 0x93, 0xf5, 0xf5, 0xab, 0xc, 0xc1, 0x37, 0xf5, 0x4, 0x60, 0x13, 0x6, 0x5, 0x80, 0x2c, 0x42, 0xed, 0x99, 0x2c, 0xc2, 0x2c, 0x42, 0x93, 0xe5, 0x85, 0x0, 0x2c, 0xc2, 0xb7, 0xa, 0xc, 0x60, 0xd6, 0x85, 0x88, 0x45, 0x13, 0x65, 0x45, 0x0, 0x88, 0xc5, 0x13, 0x5, 0x10, 0x2, 0x8a, 0x4, 0x63, 0x6c, 0x85, 0x2, 0x93, 0x9, 0xc0, 0xe, 0x13, 0x9, 0x0, 0x7, 0x31, 0x44, 0x15, 0xa8, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x40, 0xa, 0x37, 0x5, 0xc, 0x60, 0x2c, 0x4d, 0x93, 0xf5, 0x5, 0xc0, 0x2c, 0xcd, 0x2c, 0x4d, 0x7d, 0x76, 0x13, 0x6, 0xf6, 0x3f, 0xf1, 0x8d, 0x2c, 0xcd, 0x9, 0x45, 0x93, 0x5, 0x80, 0x7, 0x75, 0xa8, 0xa1, 0x49, 0x13, 0x9, 0x30, 0x7, 0x13, 0x4, 0x0, 0x5, 0x13, 0x5, 0x60, 0x6, 0x11, 0x46, 0x93, 0x6, 0xb0, 0x6, 0x81, 0x45, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x60, 0xbe, 0x13, 0x5, 0x60, 0x6, 0x9, 0x46, 0x81, 0x45, 0xa2, 0x86, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x40, 0xbd, 0x13, 0x5, 0x60, 0x6, 0xd, 0x46, 0x81, 0x45, 0xce, 0x86, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xbc, 0x13, 0x5, 0x60, 0x6, 0x15, 0x46, 0x89, 0x46, 0x81, 0x45, 0x1, 0x47, 0xa6, 0x87, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x40, 0xbb, 0x13, 0x5, 0x60, 0x6, 0x15, 0x46, 0x99, 0x46, 0x11, 0x47, 0x81, 0x45, 0xa6, 0x87, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0xb9, 0x13, 0x5, 0x60, 0x6, 0x19, 0x46, 0x81, 0x45, 0xca, 0x86, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x40, 0xb8, 0x13, 0x5, 0x60, 0x6, 0x25, 0x46, 0x85, 0x46, 0x89, 0x47, 0x81, 0x45, 0x1, 0x47, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x60, 0xb7, 0x56, 0x86, 0x28, 0x4e, 0xfd, 0x75, 0x6d, 0x8d, 0x13, 0x5, 0x5, 0x40, 0x28, 0xce, 0x8, 0x46, 0x71, 0x99, 0x5, 0x5, 0x8, 0xc6, 0x13, 0x5, 0x80, 0x7, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xc0, 0xfc, 0x1, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xd7, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0xa, 0xa1, 0x0, 0x52, 0x85, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xd3, 0x2a, 0x84, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0x8d, 0x37, 0x5, 0xc, 0x60, 0xc, 0x49, 0x9e, 0x5, 0x63, 0xc7, 0x5, 0x0, 0xc, 0x49, 0x37, 0x6, 0x0, 0x1, 0xd1, 0x8d, 0xc, 0xc9, 0x81, 0x45, 0x1d, 0x46, 0x23, 0x0, 0xc1, 0x2, 0x10, 0x10, 0xd6, 0x86, 0x90, 0xc2, 0x13, 0x6, 0x5, 0x1, 0xd0, 0xc2, 0x13, 0x6, 0x85, 0x1, 0x90, 0xc6, 0x13, 0x6, 0x45, 0x1, 0xd0, 0xc6, 0x71, 0x5, 0x88, 0xca, 0xf3, 0x75, 0x4, 0x30, 0x3, 0x45, 0x1, 0x2, 0x37, 0x6, 0xcb, 0x3f, 0x13, 0x6, 0x46, 0x11, 0xa, 0x5, 0x2a, 0x96, 0x10, 0x42, 0xb7, 0x6, 0xcb, 0x3f, 0x93, 0x86, 0xc6, 0x13, 0xaa, 0x96, 0x94, 0x42, 0x37, 0x7, 0xcb, 0x3f, 0x13, 0x7, 0x47, 0x16, 0x2a, 0x97, 0x18, 0x43, 0xb7, 0x7, 0xcb, 0x3f, 0xd, 0x68, 0x13, 0x8, 0x88, 0xb2, 0xb3, 0x4, 0x1, 0x1, 0x26, 0x96, 0x10, 0x42, 0x93, 0x87, 0xc7, 0x18, 0x3e, 0x95, 0x8, 0x41, 0x1c, 0x42, 0xdd, 0x8e, 0x14, 0xc2, 0x26, 0x97, 0x10, 0x43, 0x14, 0x42, 0x75, 0x8d, 0xa1, 0x89, 0x8, 0xc2, 0x81, 0xc5, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x37, 0x5, 0x4, 0x0, 0x93, 0x5, 0x15, 0x11, 0x37, 0x5, 0x0, 0x60, 0xc, 0xc9, 0x1, 0x46, 0x50, 0xc5, 0x9d, 0x65, 0x89, 0x5, 0xc, 0xc9, 0x50, 0xc5, 0xb7, 0x85, 0x1c, 0x1c, 0x13, 0x86, 0xf5, 0xbf, 0xb3, 0x6, 0xc4, 0x0, 0x93, 0x85, 0x5, 0xc0, 0xb3, 0xd5, 0xb6, 0x2, 0x13, 0x97, 0xc5, 0x0, 0xb7, 0xf7, 0xf, 0x0, 0x3e, 0x97, 0xb7, 0x7, 0x70, 0x3, 0x5d, 0x8f, 0x38, 0xdd, 0xe3, 0x77, 0xd6, 0x42, 0x71, 0x66, 0x13, 0x6, 0x6, 0x20, 0xb3, 0x85, 0xc5, 0x2, 0x12, 0x4, 0xb3, 0x55, 0xb4, 0x2, 0x13, 0x96, 0x5, 0x1, 0x51, 0x82, 0xf2, 0x5, 0xa1, 0x81, 0xd1, 0x8d, 0x4c, 0xc9, 0xc, 0x51, 0x93, 0xe5, 0xc5, 0x0, 0xc, 0xd1, 0xc, 0x51, 0xf5, 0x99, 0xc, 0xd1, 0xc, 0x51, 0x93, 0xf5, 0xf5, 0xfc, 0xc1, 0x5, 0xc, 0xd1, 0x37, 0x25, 0x38, 0x40, 0x13, 0x5, 0x5, 0x6b, 0xb7, 0x25, 0x38, 0x40, 0x93, 0x85, 0x25, 0xa5, 0x6c, 0xc1, 0x73, 0x25, 0x40, 0xf1, 0xe3, 0x1f, 0x5, 0x3c, 0x37, 0x25, 0xc, 0x60, 0x5, 0x44, 0x60, 0xc1, 0x83, 0x25, 0x85, 0xb, 0x93, 0xe5, 0x25, 0x0, 0x23, 0x2c, 0xb5, 0xa, 0xb7, 0x4, 0x0, 0x60, 0x88, 0x50, 0xb7, 0x5, 0x0, 0x4, 0x4d, 0x8d, 0x88, 0xd0, 0x88, 0x50, 0xb7, 0x5, 0x4, 0x0, 0x4d, 0x8d, 0x88, 0xd0, 0x88, 0x50, 0xb7, 0x5, 0xfc, 0xff, 0xfd, 0x15, 0x6d, 0x8d, 0x88, 0xd0, 0x88, 0x50, 0xb7, 0x5, 0x2, 0x0, 0x4d, 0x8d, 0x88, 0xd0, 0x88, 0x50, 0x81, 0x75, 0xfd, 0x15, 0x6d, 0x8d, 0x88, 0xd0, 0x3d, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xe0, 0x6e, 0xc8, 0x44, 0x13, 0x65, 0x15, 0x0, 0xc8, 0xc4, 0xf3, 0x75, 0x4, 0x30, 0x37, 0x15, 0xcb, 0x3f, 0x13, 0x6, 0x45, 0xb1, 0x3, 0x45, 0x46, 0x1, 0x19, 0xe1, 0x23, 0xa, 0x86, 0x0, 0xa1, 0x89, 0x99, 0xc1, 0x73, 0x60, 0x4, 0x30, 0xe3, 0x1f, 0x5, 0x34, 0xd, 0x65, 0x13, 0x5, 0x55, 0xb0, 0xc, 0x10, 0x29, 0x66, 0x13, 0x6, 0xa6, 0x80, 0xb3, 0x9, 0xc1, 0x0, 0x33, 0x8c, 0xa5, 0x0, 0x37, 0x15, 0xcb, 0x3f, 0x89, 0x45, 0x23, 0x1a, 0xb5, 0xb0, 0x13, 0x5, 0x45, 0xb1, 0x23, 0x8, 0x5, 0x0, 0xa9, 0x45, 0x23, 0x9, 0xb5, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0x33, 0x4, 0xa1, 0x0, 0x8d, 0x44, 0x5, 0x65, 0x13, 0x9, 0x5, 0xda, 0x99, 0xc8, 0x22, 0x85, 0x81, 0x45, 0x4a, 0x86, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0xab, 0x4a, 0x94, 0xfd, 0x14, 0xfd, 0xf4, 0xd, 0x6b, 0x13, 0x4, 0xb, 0x8e, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x60, 0xa9, 0x37, 0x45, 0x0, 0x60, 0x8, 0x5d, 0x71, 0x89, 0x61, 0x15, 0x13, 0x35, 0x15, 0x0, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0x76, 0x23, 0xa0, 0xa, 0x0, 0x37, 0x5, 0x0, 0x1, 0xd6, 0x85, 0xc8, 0xc1, 0x41, 0x6a, 0x23, 0xa4, 0x4a, 0x1, 0x5, 0x65, 0xc8, 0xc5, 0x13, 0x5, 0x0, 0x10, 0x88, 0xc9, 0x13, 0x5, 0xfa, 0xff, 0xc8, 0xc9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x6a, 0x37, 0x15, 0xcb, 0x3f, 0x93, 0x4, 0x45, 0xb1, 0x26, 0xd0, 0x48, 0x10, 0x13, 0x9, 0x81, 0x7, 0x13, 0x6, 0x40, 0x5, 0x81, 0x45, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xa0, 0xa2, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x4a, 0x85, 0x22, 0x86, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0xa1, 0x13, 0x5, 0x8b, 0x93, 0xc, 0x10, 0x2e, 0x95, 0x13, 0x6, 0xf0, 0x1c, 0x81, 0x45, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0xe0, 0x9f, 0x13, 0x5, 0xf0, 0x4, 0x23, 0x80, 0xaa, 0x0, 0x13, 0x5, 0x80, 0x4, 0xa3, 0x80, 0xaa, 0x0, 0x13, 0x5, 0x10, 0x4, 0x23, 0x81, 0xaa, 0x0, 0x13, 0x5, 0x90, 0x4, 0xa3, 0x81, 0xaa, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x5, 0xa1, 0x0, 0x11, 0x46, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x98, 0x45, 0x49, 0x2a, 0x9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x81, 0x45, 0x4a, 0x86, 0x97, 0x0, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0x9b, 0x13, 0xd, 0xa, 0xf0, 0x21, 0x4a, 0x85, 0x4b, 0x37, 0x5, 0xcb, 0x3f, 0x13, 0x5, 0xc5, 0x6, 0x2a, 0xce, 0x37, 0x55, 0xcb, 0x3f, 0x13, 0x5, 0x85, 0xf3, 0x2a, 0xc6, 0x37, 0x5, 0xcb, 0x3f, 0x93, 0xd, 0x5, 0x2, 0x9, 0x65, 0x13, 0x5, 0x5, 0x71, 0x2a, 0xc2, 0x19, 0x4b, 0x62, 0xca, 0x2, 0x55, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x89, 0xe3, 0xef, 0x45, 0x1b, 0x2a, 0x84, 0xae, 0x8c, 0x3, 0x45, 0x15, 0x0, 0x83, 0x45, 0x4, 0x0, 0x3, 0x46, 0x24, 0x0, 0x83, 0x46, 0x34, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x64, 0xa6, 0x0, 0x33, 0xf5, 0xa4, 0x1, 0x13, 0x5, 0x5, 0xf0, 0xe3, 0x8, 0x5, 0x18, 0x83, 0x45, 0x44, 0x0, 0x3, 0x47, 0x54, 0x0, 0x83, 0x48, 0x64, 0x0, 0x83, 0x46, 0x74, 0x0, 0x13, 0xd5, 0x84, 0x0, 0x93, 0x97, 0x85, 0x1, 0x5d, 0x8d, 0x23, 0x80, 0x79, 0x1, 0xa3, 0x80, 0xa9, 0x0, 0xa3, 0x81, 0x9, 0x0, 0x9, 0x46, 0x23, 0x81, 0xc9, 0x0, 0xa3, 0x83, 0x9, 0x0, 0x23, 0x83, 0x9, 0x0, 0xa3, 0x82, 0x9, 0x0, 0x23, 0x82, 0x9, 0x0, 0x23, 0x84, 0x9, 0x0, 0xa3, 0x84, 0x9, 0x0, 0xa3, 0x86, 0x9, 0x0, 0x23, 0x86, 0x9, 0x0, 0xa3, 0x85, 0x9, 0x0, 0x23, 0x85, 0x79, 0x1, 0xa3, 0x88, 0x9, 0x0, 0x23, 0x88, 0x9, 0x0, 0xa3, 0x87, 0x9, 0x0, 0x93, 0x7a, 0xf5, 0xf, 0x13, 0x85, 0xea, 0xff, 0x23, 0x87, 0x9, 0x0, 0x49, 0x46, 0x63, 0x6e, 0xa6, 0xa, 0xa, 0x5, 0x6e, 0x95, 0x8, 0x41, 0x2, 0x85, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe9, 0xbc, 0x78, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x22, 0xf1, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x54, 0x1, 0x3, 0x46, 0x44, 0x1, 0x83, 0x46, 0x64, 0x1, 0x3, 0x47, 0x74, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x3, 0x46, 0xd4, 0x0, 0x83, 0x46, 0xc4, 0x0, 0x3, 0x47, 0xe4, 0x0, 0x83, 0x47, 0xf4, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x46, 0x94, 0x0, 0x3, 0x47, 0x84, 0x0, 0x83, 0x47, 0xa4, 0x0, 0x83, 0x44, 0xb4, 0x0, 0xa2, 0x6, 0xd9, 0x8e, 0xc2, 0x7, 0xe2, 0x4, 0xc5, 0x8f, 0xdd, 0x8e, 0x7d, 0x77, 0x69, 0x8f, 0x3a, 0xd6, 0x2a, 0xd4, 0x36, 0x95, 0x2a, 0xd2, 0x33, 0x5, 0xb6, 0x2, 0x2a, 0xda, 0x36, 0xd8, 0x2, 0xdc, 0xa3, 0x0, 0x7c, 0x1, 0x41, 0x45, 0x63, 0x85, 0xaa, 0x0, 0x9, 0x45, 0x63, 0x99, 0xaa, 0x70, 0x13, 0x5, 0x20, 0xc, 0x11, 0x66, 0x63, 0x60, 0xb6, 0x70, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x40, 0x4d, 0xaa, 0x85, 0x13, 0x5, 0x50, 0xc, 0x63, 0x97, 0x5, 0x6e, 0xcd, 0xad, 0x13, 0x85, 0xa, 0xf3, 0xa, 0x5, 0x72, 0x46, 0x32, 0x95, 0x8, 0x41, 0x2, 0x85, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0x48, 0xaa, 0x85, 0x13, 0x5, 0x40, 0xc, 0x63, 0x96, 0x5, 0x6c, 0xc1, 0xad, 0x61, 0x45, 0x63, 0xe0, 0xac, 0x6c, 0x26, 0x85, 0x63, 0x8f, 0x7a, 0x6b, 0x3, 0x45, 0x1c, 0x0, 0x63, 0xf, 0x5, 0x58, 0x13, 0x88, 0x8c, 0xfe, 0x93, 0x2, 0x84, 0x1, 0x63, 0x4, 0x8, 0x5e, 0xb3, 0x4, 0x94, 0x1, 0x93, 0x7, 0xf0, 0xe, 0x16, 0x85, 0x3, 0x46, 0x5, 0x0, 0x5, 0x5, 0xb1, 0x8f, 0xe3, 0x1c, 0x95, 0xfe, 0x93, 0xf7, 0xf7, 0xf, 0xf9, 0xa3, 0x13, 0x5, 0x0, 0xc, 0x63, 0x83, 0x4c, 0x69, 0x83, 0x45, 0x84, 0x0, 0x26, 0x85, 0x9, 0x46, 0x63, 0x8d, 0xc5, 0x66, 0x3, 0x45, 0x1c, 0x0, 0x63, 0xd, 0x5, 0x54, 0x42, 0x56, 0x13, 0x5, 0x80, 0xc, 0x63, 0x14, 0x6, 0x66, 0xa3, 0x0, 0xc, 0x0, 0x63, 0x94, 0x5, 0x66, 0x2, 0x55, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x4a, 0x12, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x40, 0x32, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x36, 0x81, 0xa5, 0x2d, 0x45, 0x63, 0x77, 0x95, 0x7b, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0xd7, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x43, 0x1d, 0xa5, 0x81, 0x44, 0x85, 0x45, 0x85, 0x88, 0x63, 0x9f, 0x4, 0x60, 0x63, 0x54, 0xbb, 0x0, 0x1d, 0x44, 0x19, 0xa0, 0x13, 0x84, 0x15, 0x0, 0x2, 0x55, 0x93, 0xa5, 0x75, 0x0, 0x93, 0xc4, 0x15, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x45, 0xa2, 0x85, 0xc9, 0xbf, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x51, 0x46, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xc0, 0x6f, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0x33, 0x6, 0xa1, 0x0, 0x1, 0x45, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xe0, 0x30, 0x63, 0xa, 0x5, 0x4a, 0x13, 0x5, 0x30, 0xc, 0x5d, 0xab, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe7, 0xbc, 0x5a, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x22, 0xd1, 0x51, 0x8d, 0x83, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x88, 0xc1, 0x69, 0xa3, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xed, 0xbc, 0x56, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x22, 0x5, 0xc9, 0x8d, 0x42, 0x6, 0x83, 0x46, 0xb4, 0x0, 0x3, 0x4a, 0xc4, 0x0, 0x83, 0x44, 0xd4, 0x0, 0x3, 0x4c, 0xe4, 0x0, 0x83, 0x4a, 0xf4, 0x0, 0x2, 0x55, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x39, 0x11, 0x65, 0x13, 0x5, 0x85, 0xa9, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xc0, 0x20, 0x37, 0x5, 0x0, 0x60, 0x48, 0x49, 0x63, 0xe, 0x4, 0x68, 0xa2, 0x4, 0xb3, 0xe5, 0x44, 0x1, 0x42, 0xc, 0xe2, 0xa, 0x33, 0xe6, 0x8a, 0x1, 0xd1, 0x8d, 0x13, 0x16, 0xc5, 0x0, 0x21, 0x82, 0x22, 0x5, 0x71, 0x81, 0x51, 0x8d, 0x33, 0x5, 0xb5, 0x2, 0xb3, 0x55, 0x85, 0x2, 0x1, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x80, 0x20, 0x13, 0x5, 0x80, 0x3e, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x80, 0x1c, 0x52, 0x4c, 0x21, 0x4a, 0x61, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xec, 0xbc, 0x4c, 0xc2, 0x55, 0x13, 0x5, 0x80, 0xc, 0x63, 0x97, 0x5, 0x4c, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x42, 0xc1, 0x63, 0x15, 0x5, 0x4c, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x22, 0x5, 0x83, 0x46, 0xf4, 0x0, 0xc9, 0x8d, 0x42, 0x6, 0x2, 0x55, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x2f, 0x12, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x80, 0x16, 0x2, 0x94, 0x69, 0xa1, 0x2d, 0x45, 0x63, 0x7c, 0x95, 0x5f, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x42, 0xbc, 0x8, 0x41, 0x23, 0x82, 0xa9, 0x0, 0x93, 0x55, 0x85, 0x1, 0xa3, 0x83, 0xb9, 0x0, 0x93, 0x55, 0x5, 0x1, 0x23, 0x83, 0xb9, 0x0, 0x21, 0x81, 0xa3, 0x82, 0xa9, 0x0, 0xb9, 0xa9, 0x13, 0x5, 0x0, 0x2, 0x63, 0xe6, 0xac, 0x44, 0x93, 0x5, 0x24, 0x0, 0x79, 0x46, 0x1d, 0x65, 0x13, 0x5, 0xa5, 0xf2, 0xa, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0x56, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x23, 0x0, 0x95, 0x0, 0xad, 0x45, 0xa3, 0x0, 0xb5, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x5, 0xf3, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x19, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x98, 0x5, 0x40, 0x11, 0xa9, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe2, 0xbc, 0x40, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x82, 0xb6, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xba, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x4f, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xc4, 0x63, 0x8, 0xa, 0x4, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x5, 0x66, 0x22, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x10, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x95, 0x5, 0x50, 0x5, 0x65, 0xd2, 0x84, 0x63, 0x63, 0xaa, 0x0, 0x85, 0x64, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x26, 0x86, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0xc0, 0x33, 0xa, 0x9a, 0x40, 0x26, 0x94, 0xe3, 0x1c, 0xa, 0xfa, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xb0, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0x48, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x88, 0x8a, 0x95, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xbd, 0x3, 0xc4, 0xa9, 0x7, 0x3d, 0x46, 0x29, 0x65, 0x13, 0x5, 0xd5, 0x81, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x55, 0x88, 0x8a, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x40, 0x45, 0x2, 0x55, 0x23, 0x89, 0x89, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0xc6, 0x81, 0xa, 0x96, 0xc1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x1e, 0x21, 0x4a, 0x7d, 0xb4, 0x2, 0x55, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x15, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe6, 0xbc, 0x2e, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xa5, 0x33, 0x67, 0xa6, 0x0, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xa6, 0x55, 0x8e, 0xb3, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x54, 0x1, 0x83, 0x45, 0x44, 0x1, 0x3, 0x46, 0x64, 0x1, 0x83, 0x46, 0x74, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x82, 0xa6, 0x3a, 0x84, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x6c, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x3b, 0x23, 0xa9, 0x9, 0x0, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x80, 0xaf, 0x81, 0x44, 0x1, 0x4c, 0x33, 0x5, 0x5a, 0x3, 0x2a, 0xcc, 0x22, 0x8a, 0x63, 0x7d, 0x80, 0xa, 0x62, 0x45, 0x2a, 0x9c, 0x63, 0xb, 0xa, 0x6, 0x63, 0xf9, 0x84, 0x7, 0x22, 0x8b, 0x56, 0x84, 0x63, 0xe3, 0x4a, 0x1, 0x52, 0x84, 0x5, 0x65, 0x5, 0x5, 0x63, 0x72, 0xa4, 0x3c, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x66, 0x85, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0xf9, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x9d, 0x5, 0x10, 0x2, 0x55, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x2f, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xa8, 0x33, 0xa, 0x8a, 0x40, 0xa2, 0x9c, 0xa2, 0x94, 0x5a, 0x84, 0x19, 0x4b, 0xe3, 0x19, 0xa, 0xf8, 0x2, 0x55, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x81, 0x8a, 0x95, 0x11, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x22, 0xd, 0x46, 0x63, 0x77, 0xb6, 0x34, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x45, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x5, 0x55, 0x8d, 0x33, 0x6c, 0xb5, 0x0, 0xe3, 0x67, 0x8c, 0xf4, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0x94, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0x2c, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x88, 0x8a, 0x95, 0x97, 0x20, 0xc8, 0xff, 0xe7, 0x80, 0x20, 0xa1, 0x2, 0x55, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x88, 0x8a, 0x95, 0x41, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x25, 0x79, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xe5, 0xbc, 0x16, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x80, 0xf0, 0xaa, 0x85, 0x13, 0x5, 0x60, 0x3, 0x63, 0x9f, 0x5, 0x10, 0xd, 0xa2, 0x13, 0x5, 0x60, 0xc, 0x11, 0xaa, 0x52, 0x4c, 0x21, 0x4a, 0x19, 0x4b, 0x31, 0xa2, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x3, 0x44, 0x5, 0x0, 0x4d, 0x46, 0x29, 0x65, 0x13, 0x5, 0x55, 0x89, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x95, 0xf2, 0x8a, 0x95, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x0, 0x21, 0x2, 0x55, 0x23, 0x85, 0x89, 0x8, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0x46, 0x89, 0xa, 0x96, 0xd1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xfa, 0xb5, 0xb0, 0x93, 0x7, 0xf0, 0xe, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x44, 0xa4, 0x0, 0x3, 0x44, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x4, 0x62, 0x4, 0x45, 0x8c, 0xb3, 0x64, 0xa4, 0x0, 0x63, 0x9e, 0x4, 0x9, 0x22, 0x7, 0xd9, 0x8d, 0xc2, 0x8, 0xe2, 0x6, 0x33, 0xe5, 0x16, 0x1, 0xc9, 0x8d, 0x13, 0x5, 0x10, 0xc, 0x63, 0x95, 0xb7, 0x8, 0x16, 0xc8, 0x2, 0x55, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xed, 0xd, 0x45, 0x63, 0x8c, 0xaa, 0x16, 0x13, 0x85, 0xca, 0xf2, 0x59, 0xc1, 0x45, 0x45, 0x63, 0x86, 0xaa, 0xa, 0x1d, 0x45, 0xc2, 0x46, 0xe3, 0x92, 0xaa, 0x80, 0x42, 0x56, 0x13, 0x5, 0x90, 0xc, 0x63, 0x69, 0x96, 0x4, 0x93, 0xf5, 0x3c, 0x0, 0x13, 0x5, 0x0, 0xc, 0xb9, 0xe1, 0x13, 0x85, 0x36, 0x0, 0x71, 0x99, 0xb3, 0x5, 0xd5, 0x40, 0x63, 0xf3, 0xb4, 0x0, 0x11, 0x45, 0xb3, 0xb6, 0xb4, 0x0, 0xb3, 0x85, 0xb4, 0x40, 0x13, 0xd7, 0x25, 0x0, 0xfd, 0x16, 0xa2, 0x55, 0xf9, 0x8e, 0x71, 0x16, 0x8a, 0x6, 0x63, 0x83, 0x6, 0xfc, 0x18, 0x41, 0x11, 0x5, 0x98, 0xc1, 0x91, 0x5, 0x2e, 0xd4, 0x32, 0xd8, 0x71, 0x16, 0xf1, 0x16, 0xe5, 0xfa, 0x6f, 0xf0, 0xf, 0xfb, 0x13, 0x5, 0x0, 0xc, 0x23, 0x84, 0x79, 0x1, 0xa3, 0x84, 0xa9, 0x0, 0x2, 0x55, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0xe4, 0x6f, 0xf0, 0xef, 0xf8, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0xd8, 0x8, 0x10, 0x85, 0x45, 0x42, 0x46, 0xa6, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xf0, 0x93, 0x75, 0xf5, 0xf, 0xf9, 0xf1, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x80, 0xd6, 0x6f, 0xf0, 0x4f, 0xf6, 0x37, 0x15, 0xcb, 0x3f, 0x3, 0x24, 0x5, 0xb1, 0x81, 0x4c, 0x85, 0x4a, 0x5, 0x48, 0x26, 0xc4, 0x42, 0x46, 0x42, 0x55, 0xf9, 0xc0, 0x71, 0xc1, 0x63, 0x8c, 0xa, 0xc, 0x23, 0xa5, 0x99, 0x8, 0x21, 0x6a, 0x33, 0x5, 0x8a, 0x40, 0x5, 0xa, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x88, 0xc1, 0x63, 0x70, 0x44, 0x11, 0x22, 0x45, 0x63, 0x6d, 0x95, 0xf, 0x52, 0x55, 0x33, 0xb5, 0xa4, 0x0, 0x6, 0x5, 0x33, 0x68, 0xa8, 0x0, 0xb2, 0x46, 0x33, 0x87, 0x86, 0x0, 0xb3, 0x5, 0x96, 0x1, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0x33, 0x6, 0xa1, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x7, 0xa1, 0x0, 0x28, 0x18, 0x42, 0xcc, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x20, 0xcd, 0x3, 0xac, 0xa9, 0x8, 0xd2, 0x55, 0x1d, 0x66, 0x13, 0x6, 0x86, 0xf2, 0xa, 0x96, 0x10, 0x42, 0xaa, 0x8a, 0x33, 0x85, 0x85, 0x41, 0x2a, 0xda, 0x32, 0x94, 0x63, 0x85, 0xa, 0x0, 0x21, 0x65, 0x63, 0x1f, 0xa4, 0x0, 0x63, 0x7e, 0x44, 0x9, 0x8, 0x10, 0xb2, 0x45, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xd6, 0x93, 0x75, 0xf5, 0xf, 0xb5, 0xe9, 0x1, 0x44, 0x21, 0x4a, 0xb3, 0x84, 0x84, 0x41, 0xe2, 0x9c, 0x52, 0x4c, 0x42, 0x46, 0x62, 0x48, 0x91, 0xbf, 0x8, 0x10, 0xc2, 0x45, 0x26, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0xd4, 0x93, 0x75, 0xf5, 0xf, 0xe3, 0x93, 0x5, 0xee, 0x6f, 0xf0, 0xaf, 0xe8, 0xb7, 0x15, 0xcb, 0x3f, 0x23, 0xa8, 0x85, 0xb0, 0x63, 0xc2, 0xa, 0x4, 0xb3, 0x35, 0xa0, 0x0, 0x63, 0x8a, 0xa, 0x0, 0x39, 0xa8, 0xb7, 0x15, 0xcb, 0x3f, 0x23, 0xa8, 0x85, 0xb0, 0x85, 0x45, 0x63, 0x99, 0xa, 0x0, 0x99, 0xc5, 0x13, 0x5, 0x80, 0xc, 0x23, 0x0, 0xac, 0x0, 0x6f, 0xf0, 0x8f, 0xe5, 0x63, 0x8a, 0xa, 0xe4, 0x63, 0x18, 0x5, 0xe4, 0x13, 0x5, 0x90, 0xc, 0x23, 0x0, 0xac, 0x0, 0x6f, 0xf0, 0x4f, 0xe4, 0x52, 0x4c, 0x21, 0x4a, 0x51, 0xbd, 0x13, 0x5, 0x70, 0xc, 0x23, 0x0, 0xac, 0x0, 0x6f, 0xf0, 0x2f, 0xe3, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x1, 0xb7, 0x45, 0xf, 0x0, 0x93, 0x85, 0x5, 0x24, 0x33, 0x55, 0xb5, 0x2, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x9, 0xc9, 0x5, 0x46, 0x63, 0x1c, 0xc5, 0x0, 0x37, 0x65, 0x62, 0x2, 0x13, 0x5, 0x5, 0xa0, 0x82, 0x80, 0x37, 0xc5, 0x8c, 0x1, 0x13, 0x5, 0x5, 0xa8, 0x82, 0x80, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0x33, 0x85, 0xa5, 0x2, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x2, 0x93, 0x15, 0x45, 0x0, 0xc1, 0x81, 0x31, 0x81, 0x37, 0x86, 0x0, 0x60, 0x3, 0x20, 0x6, 0xb, 0x42, 0x5, 0x4d, 0x8d, 0x23, 0x28, 0xa6, 0xa, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x9, 0xc9, 0x5, 0x46, 0x63, 0x1c, 0xc5, 0x0, 0x37, 0xb5, 0xc4, 0x4, 0x13, 0x5, 0x5, 0x40, 0x82, 0x80, 0x37, 0x65, 0x62, 0x2, 0x13, 0x5, 0x5, 0xa0, 0x82, 0x80, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0x33, 0x85, 0xa5, 0x2, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x1, 0x45, 0x37, 0x24, 0xc, 0x60, 0x93, 0x4, 0x15, 0x0, 0x93, 0xf5, 0xf4, 0xf, 0x95, 0xc1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x8, 0x42, 0x5, 0x93, 0x55, 0x5, 0x1, 0x13, 0x86, 0x65, 0xfd, 0x26, 0x85, 0x6d, 0xd2, 0x8a, 0x5, 0xa2, 0x95, 0x23, 0xa0, 0x5, 0x0, 0x26, 0x85, 0xd9, 0xbf, 0x37, 0x25, 0x38, 0x40, 0x13, 0x5, 0x5, 0x10, 0x5, 0x5, 0x73, 0x10, 0x55, 0x30, 0x37, 0x5, 0xcb, 0x3f, 0x13, 0x5, 0x85, 0xa, 0x93, 0x5, 0xc0, 0x3, 0x5, 0x48, 0xb7, 0x26, 0xc, 0x60, 0x5, 0x47, 0x95, 0xcd, 0xf3, 0x27, 0x40, 0xf1, 0xa1, 0xe3, 0x4, 0x41, 0x3, 0xa4, 0xc6, 0xb, 0xb3, 0x17, 0x98, 0x0, 0x13, 0xc6, 0xf7, 0xff, 0x61, 0x8e, 0x23, 0xae, 0xc6, 0xa, 0x73, 0x26, 0x40, 0xf1, 0x1d, 0xe2, 0x8a, 0x4, 0xb6, 0x94, 0x23, 0xa4, 0xe4, 0xc, 0x3, 0xa6, 0x86, 0xb, 0x5d, 0x8e, 0x23, 0xac, 0xc6, 0xa, 0xf1, 0x15, 0x11, 0x5, 0x5, 0x7, 0xe1, 0xf5, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x0, 0x0, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0xa0, 0x2, 0x63, 0x64, 0xb5, 0x0, 0x13, 0x5, 0xa0, 0x2, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x13, 0x75, 0xf5, 0xf, 0x5, 0x46, 0x41, 0xc9, 0x85, 0x46, 0x5, 0x45, 0x37, 0x87, 0x0, 0x60, 0x38, 0x57, 0x13, 0x79, 0x7, 0x10, 0x93, 0x54, 0x89, 0x0, 0xd1, 0x8c, 0x81, 0xe6, 0x99, 0xc0, 0x81, 0x44, 0x19, 0xa8, 0x13, 0x6, 0x0, 0x20, 0x99, 0xe0, 0x13, 0x6, 0x0, 0x10, 0xb7, 0x86, 0x0, 0x60, 0xb8, 0x56, 0x59, 0x8e, 0xb0, 0xd6, 0x37, 0xf6, 0x1, 0x60, 0x34, 0x56, 0xce, 0x6, 0x63, 0xd2, 0x6, 0x2, 0x83, 0x26, 0x6, 0x8, 0x93, 0xf6, 0xf6, 0x7, 0x93, 0x86, 0x6, 0x8, 0x23, 0x20, 0xd6, 0x8, 0x34, 0x56, 0xc2, 0x6, 0x63, 0xc6, 0x6, 0x0, 0x83, 0x26, 0x6, 0x8, 0x85, 0x8a, 0xed, 0xda, 0x34, 0x56, 0x37, 0x97, 0x0, 0x80, 0x7d, 0x17, 0xf9, 0x8e, 0x13, 0x17, 0xd5, 0x0, 0x93, 0x97, 0x5, 0x1, 0x5d, 0x8f, 0xd9, 0x8e, 0x34, 0xd6, 0x3, 0x26, 0x6, 0x8, 0x85, 0x46, 0x13, 0x76, 0xf6, 0x7, 0x63, 0x5, 0xd5, 0x2, 0x89, 0x46, 0x63, 0x17, 0xd5, 0x2, 0x21, 0x65, 0xcd, 0x46, 0x5, 0xa8, 0x37, 0x85, 0x0, 0x60, 0x28, 0x55, 0x79, 0x81, 0x55, 0xc5, 0x5, 0x46, 0x63, 0x0, 0xc5, 0xa, 0x9, 0x46, 0x63, 0x13, 0xc5, 0xa, 0x5, 0x46, 0xa9, 0xbf, 0xcd, 0x46, 0x45, 0x65, 0x13, 0x5, 0x75, 0xb0, 0x31, 0xa0, 0xc5, 0x46, 0x37, 0x15, 0x2, 0x0, 0x13, 0x5, 0x5, 0x34, 0xb3, 0x96, 0xd5, 0x0, 0x55, 0x8e, 0x37, 0xf4, 0x1, 0x60, 0x23, 0x20, 0xc4, 0x8, 0x37, 0x46, 0xf, 0x0, 0x13, 0x6, 0x6, 0x24, 0x34, 0x54, 0xb3, 0x85, 0xc5, 0x2, 0x33, 0xd5, 0xa5, 0x2, 0xb7, 0x5, 0x0, 0x80, 0xd5, 0x8d, 0x2c, 0xd4, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0x80, 0x91, 0x28, 0x54, 0x42, 0x5, 0x63, 0x48, 0x5, 0x0, 0x3, 0x25, 0x4, 0x8, 0x5, 0x89, 0x6d, 0xd9, 0x1, 0x45, 0x29, 0xa0, 0x37, 0xf5, 0x1, 0x60, 0x68, 0x55, 0x1d, 0x81, 0xb7, 0xf5, 0x1, 0x60, 0xb0, 0x55, 0x6, 0x6, 0x5, 0x82, 0xb0, 0xd5, 0xb7, 0x85, 0x0, 0x60, 0xb0, 0x55, 0x13, 0x76, 0xf6, 0xef, 0x33, 0x66, 0x26, 0x1, 0xb0, 0xd5, 0x89, 0xc4, 0xb0, 0x55, 0x13, 0x76, 0xf6, 0xdf, 0xb0, 0xd5, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x1, 0x46, 0x81, 0x46, 0x9, 0x45, 0xd1, 0xb5, 0x81, 0x46, 0xc1, 0xb5, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x37, 0x86, 0x0, 0x60, 0x34, 0x56, 0x2e, 0x84, 0xf1, 0x75, 0x93, 0x85, 0xf5, 0x3, 0x5, 0xc1, 0x13, 0xf5, 0xf6, 0xfb, 0x28, 0xd6, 0x48, 0x4e, 0x6d, 0x8d, 0x13, 0x65, 0x5, 0x14, 0x48, 0xce, 0x13, 0x5, 0x20, 0x3, 0x97, 0xf0, 0xc7, 0xff, 0xe7, 0x80, 0xa0, 0x88, 0x9, 0xa8, 0x13, 0xe5, 0x6, 0x4, 0x28, 0xd6, 0x48, 0x4e, 0x6d, 0x8d, 0x13, 0x65, 0x5, 0x50, 0x48, 0xce, 0x37, 0x85, 0x0, 0x60, 0x2c, 0x55, 0x93, 0xf5, 0xf5, 0xf7, 0x7d, 0x14, 0x13, 0x76, 0x4, 0x8, 0xd1, 0x8d, 0x2c, 0xd5, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x13, 0x5, 0xd0, 0x6, 0x35, 0x46, 0x8d, 0x46, 0xd, 0x47, 0x81, 0x45, 0x81, 0x47, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0xaf, 0x13, 0x5, 0xd0, 0x6, 0x35, 0x46, 0x89, 0x46, 0x9, 0x47, 0x81, 0x45, 0x81, 0x47, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0xa0, 0xad, 0xb7, 0x89, 0x0, 0x60, 0x4e, 0x84, 0x48, 0x4c, 0xb7, 0xc5, 0xff, 0x0, 0x93, 0x85, 0xf5, 0x3, 0x6d, 0x8d, 0xb7, 0x5, 0x0, 0x14, 0x93, 0x85, 0x5, 0x50, 0x4d, 0x8d, 0x48, 0xcc, 0x8, 0x54, 0xc1, 0x75, 0x93, 0x85, 0xf5, 0xf, 0x6d, 0x8d, 0x13, 0x5, 0x5, 0x20, 0x8, 0xd4, 0x37, 0x45, 0xc, 0x60, 0x83, 0x25, 0xc5, 0xa, 0xf9, 0x99, 0x23, 0x26, 0xb5, 0xa, 0xc, 0x45, 0xf9, 0x99, 0xc, 0xc5, 0x37, 0x35, 0x0, 0x60, 0x83, 0x25, 0xc5, 0xd, 0xf9, 0x99, 0x23, 0x2e, 0xb5, 0xc, 0x37, 0x25, 0x0, 0x60, 0x83, 0x25, 0xc5, 0xd, 0xf9, 0x99, 0x23, 0x2e, 0xb5, 0xc, 0x28, 0x54, 0xb7, 0x5, 0x0, 0xfc, 0xfd, 0x15, 0x6d, 0x8d, 0x28, 0xd4, 0x8, 0x40, 0xf9, 0x75, 0xfd, 0x15, 0x6d, 0x8d, 0x8, 0xc0, 0x48, 0x54, 0xb7, 0x5, 0x7c, 0xfe, 0xfd, 0x15, 0x6d, 0x8d, 0xb7, 0x5, 0x80, 0x0, 0x4d, 0x8d, 0x48, 0xd4, 0x8, 0x40, 0xfd, 0x75, 0x93, 0x85, 0xf5, 0x57, 0x6d, 0x8d, 0x8, 0xc0, 0x68, 0x58, 0xb7, 0x5, 0x0, 0x80, 0xfd, 0x15, 0x6d, 0x8d, 0x68, 0xd8, 0x37, 0x5, 0xc, 0x60, 0x50, 0x45, 0x79, 0x9a, 0x50, 0xc5, 0x70, 0x5c, 0x13, 0x76, 0xf6, 0xfd, 0x70, 0xdc, 0x37, 0x66, 0x2, 0x60, 0x13, 0x7, 0x6, 0x8, 0x54, 0x4f, 0xa9, 0x9a, 0x54, 0xcf, 0x54, 0x57, 0x93, 0xf6, 0x6, 0xf8, 0x54, 0xd7, 0x70, 0x5c, 0xb7, 0x6, 0xf0, 0xff, 0xfd, 0x16, 0x75, 0x8e, 0x70, 0xdc, 0x93, 0x86, 0x9, 0x8, 0x90, 0x42, 0xf1, 0x8d, 0x8c, 0xc2, 0xc, 0x45, 0xdd, 0x99, 0xc, 0xc5, 0x88, 0x42, 0xed, 0x75, 0xfd, 0x15, 0x6d, 0x8d, 0x88, 0xc2, 0x23, 0xac, 0x9, 0x2, 0x7d, 0x55, 0x68, 0xc0, 0x13, 0x5, 0x10, 0x6, 0x89, 0x46, 0x9, 0x47, 0x81, 0x45, 0x1, 0x46, 0x81, 0x47, 0x97, 0x10, 0xc8, 0xff, 0xe7, 0x80, 0x0, 0x9d, 0x28, 0x54, 0xb7, 0x5, 0x0, 0x20, 0x4d, 0x8d, 0x28, 0xd4, 0xd, 0x45, 0x97, 0xe0, 0xc7, 0xff, 0xe7, 0x80, 0x40, 0x70, 0x37, 0x5, 0x0, 0x3c, 0x13, 0xa, 0xf5, 0xef, 0xce, 0x85, 0xa8, 0x55, 0x33, 0x75, 0x45, 0x1, 0xa8, 0xd5, 0x13, 0x5, 0xc0, 0x12, 0x97, 0xe0, 0xc7, 0xff, 0xe7, 0x80, 0x60, 0x6e, 0x3, 0xa5, 0xc9, 0xa, 0x13, 0x14, 0x5, 0x1, 0x41, 0x80, 0x93, 0x5, 0x84, 0xfd, 0x99, 0xe1, 0x5, 0x49, 0x31, 0xa0, 0x93, 0x5, 0x64, 0xfe, 0x33, 0x39, 0xb0, 0x0, 0x6, 0x9, 0x93, 0x55, 0x5, 0x1, 0xa1, 0x8d, 0x93, 0xb5, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x35, 0xe5, 0xff, 0x6d, 0x8d, 0x11, 0xe1, 0x5, 0x49, 0x93, 0x5, 0x0, 0x40, 0x1, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xc9, 0xaa, 0x84, 0x4a, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xb3, 0x59, 0xc1, 0x13, 0x16, 0xa5, 0x0, 0x13, 0xd5, 0xd4, 0x0, 0xce, 0x4, 0x93, 0x55, 0x16, 0x0, 0xb3, 0x86, 0xb4, 0x0, 0xb3, 0xb5, 0x96, 0x0, 0x2e, 0x95, 0x93, 0xb5, 0x16, 0x0, 0xb3, 0x5, 0xb5, 0x40, 0x13, 0x85, 0xf6, 0xff, 0x81, 0x46, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x3a, 0x2d, 0xd5, 0xb7, 0x85, 0x0, 0x60, 0xe8, 0xc5, 0x37, 0x35, 0x1d, 0x8f, 0x13, 0x5, 0xa5, 0x12, 0x13, 0x87, 0x5, 0x8, 0x48, 0xd3, 0x37, 0x5, 0xb0, 0x84, 0x8, 0xd3, 0x23, 0xa2, 0x5, 0xa, 0x37, 0x45, 0xd8, 0x50, 0x13, 0x5, 0x15, 0xaa, 0x48, 0xcf, 0x50, 0x43, 0xb7, 0xf6, 0xff, 0x7f, 0xfd, 0x16, 0x75, 0x8e, 0x50, 0xc3, 0x23, 0xae, 0x5, 0x8, 0xb7, 0xf5, 0x1, 0x60, 0xe8, 0xd1, 0x1, 0x45, 0xa8, 0xc5, 0xe8, 0xd1, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0xa0, 0x82, 0x80, 0x37, 0x25, 0x38, 0x40, 0x13, 0x5, 0x5, 0xe0, 0x73, 0x10, 0x55, 0x30, 0x82, 0x80, 0xb7, 0x8, 0x0, 0x60, 0xb7, 0x15, 0xcb, 0x3f, 0x93, 0x82, 0xc5, 0xb2, 0x11, 0x66, 0x16, 0x96, 0xc5, 0x46, 0xaa, 0x6, 0x33, 0x87, 0xd2, 0x0, 0x5, 0x48, 0x83, 0xa7, 0xc8, 0x1, 0x93, 0xf7, 0xf7, 0x3f, 0x8d, 0xcb, 0x83, 0xa7, 0x8, 0x0, 0x3, 0x45, 0x86, 0x40, 0xd, 0xe9, 0x48, 0x43, 0x16, 0x95, 0x23, 0x0, 0xf5, 0x0, 0x48, 0x43, 0x5, 0x5, 0xb3, 0x47, 0xd5, 0x0, 0xc, 0x43, 0x93, 0xb7, 0x17, 0x0, 0xfd, 0x17, 0x7d, 0x8d, 0x48, 0xc3, 0xe3, 0x98, 0xa5, 0xfc, 0x23, 0x4, 0x6, 0x41, 0xe1, 0xb7, 0x37, 0x5, 0x0, 0x60, 0x85, 0x45, 0xc, 0xc9, 0x82, 0x80, 0x0, 0x0, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x51, 0x8d, 0x82, 0x82, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x82, 0x82, 0x3, 0x45, 0x14, 0x1, 0x83, 0x45, 0x4, 0x1, 0x3, 0x46, 0x24, 0x1, 0x83, 0x46, 0x34, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x82, 0x82, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x82, 0x8a, 0x95, 0x13, 0x6, 0x80, 0x5, 0x82, 0x82, 0x33, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x82, 0x82, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x56, 0xd5, 0x0, 0x33, 0x15, 0xc5, 0x0, 0xb3, 0x95, 0xc5, 0x0, 0xd5, 0x8d, 0x82, 0x80, 0xb3, 0x15, 0xc5, 0x0, 0x1, 0x45, 0x82, 0x80, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0x33, 0x55, 0xc5, 0x0, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x96, 0xd5, 0x0, 0x55, 0x8d, 0xb3, 0xd5, 0xc5, 0x0, 0x82, 0x80, 0x33, 0xd5, 0xc5, 0x0, 0x81, 0x45, 0x82, 0x80, 0x1, 0x46, 0xc1, 0x46, 0x33, 0x57, 0xd5, 0x0, 0x63, 0x63, 0xb7, 0x0, 0x3a, 0x85, 0x33, 0x37, 0xb7, 0x0, 0x7d, 0x17, 0x75, 0x8f, 0x85, 0x82, 0x3a, 0x96, 0xed, 0xf6, 0x32, 0x85, 0x82, 0x80, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x82, 0x21, 0x3a, 0x8a, 0xb6, 0x89, 0x32, 0x8b, 0xae, 0x84, 0x2a, 0x89, 0x11, 0xc7, 0x63, 0x2, 0x4b, 0x3, 0x33, 0x35, 0x4b, 0x1, 0x5, 0xa0, 0x63, 0x5, 0xb, 0x8, 0x63, 0x7a, 0x3b, 0x9, 0x4e, 0x85, 0xda, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xfb, 0x5d, 0xe1, 0xfd, 0x4a, 0x6d, 0xa0, 0x33, 0xb5, 0x34, 0x1, 0x81, 0x46, 0x25, 0xe1, 0x63, 0xf, 0xb, 0x4, 0x5a, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xf9, 0xaa, 0x8a, 0x13, 0x76, 0xf5, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x18, 0x81, 0x46, 0x5, 0x46, 0x33, 0x17, 0x56, 0x1, 0x33, 0xb6, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x84, 0xc7, 0x40, 0x63, 0x4d, 0x4, 0x0, 0x89, 0x8c, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x37, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb7, 0x34, 0x1, 0xd9, 0x8e, 0x81, 0xef, 0x22, 0x8b, 0x5, 0x81, 0x13, 0x96, 0xf5, 0x1, 0x51, 0x8d, 0x85, 0x81, 0x5, 0x83, 0xf9, 0xb7, 0x5a, 0x84, 0x36, 0x88, 0x69, 0xa0, 0x1, 0x48, 0x59, 0xa0, 0x1, 0x44, 0x1, 0x48, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xa5, 0xa8, 0x63, 0x16, 0x3b, 0x9, 0x1, 0x44, 0x33, 0xd5, 0x64, 0x3, 0xb3, 0xf4, 0x64, 0x3, 0xb3, 0x35, 0xa0, 0x0, 0x7d, 0x15, 0x93, 0x6, 0x15, 0x0, 0x13, 0xb5, 0x16, 0x0, 0x33, 0x88, 0xa5, 0x0, 0x99, 0xa8, 0x93, 0x5, 0x0, 0x2, 0xb3, 0x8a, 0xa5, 0x40, 0x13, 0xf6, 0xfa, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xf, 0x81, 0x46, 0x5, 0x46, 0x33, 0x16, 0x56, 0x1, 0x33, 0xb7, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x87, 0xe7, 0x40, 0x63, 0x46, 0x7, 0x0, 0x89, 0x8c, 0xd1, 0x8e, 0x9, 0xcb, 0x3a, 0x8b, 0x5, 0x81, 0x13, 0x97, 0xf5, 0x1, 0x59, 0x8d, 0x85, 0x81, 0x5, 0x82, 0xf1, 0xbf, 0x1, 0x44, 0x1, 0x48, 0x33, 0xd5, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xc9, 0x8e, 0x4a, 0x85, 0x4, 0xc5, 0x14, 0xc1, 0x40, 0xc5, 0x23, 0x22, 0x9, 0x1, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xc, 0x82, 0x80, 0x93, 0xd5, 0x9, 0x1, 0x33, 0x58, 0x3b, 0x3, 0x33, 0x74, 0x3b, 0x3, 0x95, 0xe9, 0x93, 0xd5, 0x4, 0x1, 0x13, 0x16, 0x4, 0x1, 0xd1, 0x8d, 0x33, 0xd6, 0x35, 0x3, 0xb3, 0xf5, 0x35, 0x3, 0xc2, 0x4, 0xc1, 0x80, 0xc2, 0x5, 0xc5, 0x8d, 0xb3, 0xd6, 0x35, 0x3, 0xb3, 0xf4, 0x35, 0x3, 0x93, 0x15, 0x6, 0x1, 0x41, 0x82, 0x33, 0x68, 0x6, 0x1, 0xcd, 0x8e, 0x1, 0x44, 0x75, 0xb7, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x35, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb5, 0x34, 0x1, 0x99, 0xc1, 0x81, 0x46, 0x61, 0xbf, 0x93, 0xd6, 0x19, 0x0, 0x7e, 0xa, 0xb3, 0x66, 0xda, 0x0, 0x93, 0x97, 0xf9, 0x1, 0x37, 0x7, 0x0, 0x80, 0x33, 0xb5, 0xf4, 0x0, 0x33, 0x6, 0xd4, 0x40, 0x9, 0x8e, 0x63, 0x46, 0x6, 0x0, 0x9d, 0x8c, 0xd9, 0x8d, 0x9, 0xca, 0x32, 0x84, 0x85, 0x83, 0x13, 0x95, 0xf6, 0x1, 0xc9, 0x8f, 0x85, 0x82, 0x5, 0x83, 0xf9, 0xbf, 0x1, 0x44, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xcd, 0x8e, 0x91, 0xbf, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xdb, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xdd, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x22, 0x4, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xe0, 0xb2, 0x45, 0x22, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0x5a, 0xc0, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0xaa, 0x85, 0x28, 0x0, 0x82, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x3b, 0x75, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x3e, 0x7d, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7e, 0x45, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7e, 0x49, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7e, 0x51, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7e, 0x9d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7d, 0xa5, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7d, 0xa9, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x7d, 0xb1, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x7d, 0x3d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7d, 0x5, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7d, 0xd, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7d, 0x11, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7d, 0x19, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7c, 0xe5, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7c, 0xed, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0xb5, 0xf1, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0xb4, 0xf9, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0xb3, 0xc1, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0xb3, 0x4d, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0xb2, 0x55, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0xb1, 0x59, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0xb0, 0x61, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0xaf, 0xad, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0xae, 0xb5, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0xad, 0xb9, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0xac, 0x81, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0xac, 0x89, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0xab, 0x15, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0xaa, 0x1d, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0xa9, 0x21, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0xa8, 0x29, 0xa0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x1f, 0x16, 0xc2, 0x1a, 0xc4, 0x1e, 0xc6, 0x72, 0xc8, 0x76, 0xca, 0x7a, 0xcc, 0x7e, 0xce, 0x2a, 0xd0, 0x2e, 0xd2, 0x32, 0xd4, 0x36, 0xd6, 0x3a, 0xd8, 0x3e, 0xda, 0x42, 0xdc, 0x46, 0xde, 0xa2, 0xc0, 0xa6, 0xc2, 0xca, 0xc4, 0xce, 0xc6, 0xd2, 0xc8, 0xd6, 0xca, 0xda, 0xcc, 0xde, 0xce, 0xe2, 0xd0, 0xe6, 0xd2, 0xea, 0xd4, 0xee, 0xd6, 0x8e, 0xd8, 0x92, 0xda, 0x73, 0x23, 0x10, 0x34, 0x9a, 0xde, 0x73, 0x23, 0x0, 0x30, 0x1a, 0xc1, 0x73, 0x23, 0x20, 0x34, 0x1a, 0xc3, 0x73, 0x23, 0x30, 0x34, 0x1a, 0xc5, 0x0, 0x11, 0xa2, 0xdc, 0xa, 0x85, 0x71, 0x11, 0x6, 0xc0, 0xef, 0x0, 0xc0, 0x15, 0x82, 0x40, 0x2a, 0xc0, 0x48, 0x0, 0x82, 0x90, 0x2, 0x45, 0xef, 0x0, 0x60, 0x17, 0x11, 0x1, 0x76, 0x53, 0x73, 0x10, 0x13, 0x34, 0xa, 0x43, 0x73, 0x10, 0x3, 0x30, 0x82, 0x40, 0x92, 0x42, 0x22, 0x43, 0xb2, 0x43, 0x42, 0x4e, 0xd2, 0x4e, 0x62, 0x4f, 0xf2, 0x4f, 0x2, 0x55, 0x92, 0x55, 0x22, 0x56, 0xb2, 0x56, 0x42, 0x57, 0xd2, 0x57, 0x62, 0x58, 0xf2, 0x58, 0x6, 0x44, 0x96, 0x44, 0x26, 0x49, 0xb6, 0x49, 0x46, 0x4a, 0xd6, 0x4a, 0x66, 0x4b, 0xf6, 0x4b, 0x6, 0x5c, 0x96, 0x5c, 0x26, 0x5d, 0xb6, 0x5d, 0xc6, 0x51, 0x56, 0x52, 0x66, 0x51, 0x73, 0x0, 0x20, 0x30, 0x1, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x1f, 0xd0, 0x6f, 0xf0, 0xbf, 0xd0, 0x6f, 0xf0, 0x5f, 0xd1, 0x6f, 0xf0, 0xff, 0xd1, 0x6f, 0xf0, 0x9f, 0xd2, 0x6f, 0xf0, 0x3f, 0xd3, 0x6f, 0xf0, 0xdf, 0xd3, 0x6f, 0xf0, 0x7f, 0xd4, 0x6f, 0xf0, 0x1f, 0xd5, 0x6f, 0xf0, 0xbf, 0xd5, 0x6f, 0xf0, 0x5f, 0xd6, 0x6f, 0xf0, 0xff, 0xd6, 0x6f, 0xf0, 0x9f, 0xd7, 0x6f, 0xf0, 0x3f, 0xd8, 0x6f, 0xf0, 0xdf, 0xd8, 0x6f, 0xf0, 0x7f, 0xd9, 0x6f, 0xf0, 0x1f, 0xda, 0x6f, 0xf0, 0xbf, 0xda, 0x6f, 0xf0, 0x5f, 0xdb, 0x6f, 0xf0, 0xff, 0xdb, 0x6f, 0xf0, 0x9f, 0xdc, 0x6f, 0xf0, 0x3f, 0xdd, 0x6f, 0xf0, 0xdf, 0xdd, 0x6f, 0xf0, 0x7f, 0xde, 0x6f, 0xf0, 0x1f, 0xdf, 0x6f, 0xf0, 0xbf, 0xdf, 0x6f, 0xf0, 0x5f, 0xe0, 0x6f, 0xf0, 0xff, 0xe0, 0x6f, 0xf0, 0x9f, 0xe1, 0x6f, 0xf0, 0x3f, 0xe2, 0x6f, 0xf0, 0xdf, 0xe2, 0x6f, 0xf0, 0x7f, 0xe3, 0x73, 0x25, 0x20, 0x34, 0xa, 0x5, 0xb7, 0x25, 0xc, 0x60, 0x2e, 0x95, 0x3, 0x26, 0x85, 0xc, 0x3, 0xa5, 0x85, 0x14, 0xbd, 0x46, 0x63, 0x78, 0xd6, 0x0, 0x5, 0x6, 0x23, 0xa4, 0xc5, 0x14, 0xa1, 0x45, 0x73, 0xa0, 0x5, 0x30, 0x82, 0x80, 0xa1, 0x45, 0x73, 0xb0, 0x5, 0x30, 0xb7, 0x25, 0xc, 0x60, 0x23, 0xa4, 0xa5, 0x14, 0x82, 0x80, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0x88, 0x0, 0x0, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0x86, 0x13, 0x95, 0x15, 0x0, 0x5, 0x81, 0xb1, 0x45, 0x63, 0x7b, 0xb5, 0x0, 0xa, 0x5, 0xb7, 0x5, 0xcb, 0x3f, 0x93, 0x85, 0x45, 0xe, 0x2e, 0x95, 0x1c, 0x41, 0x91, 0xc3, 0x82, 0x87, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0x84, 0xaa, 0x85, 0x5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0x4d, 0x71, 0x10, 0x2, 0x23, 0x26, 0x16, 0x4, 0x20, 0xc6, 0x64, 0xc2, 0x23, 0x20, 0x26, 0x5, 0x23, 0x2e, 0x36, 0x3, 0x23, 0x2c, 0x46, 0x3, 0x23, 0x2a, 0x56, 0x3, 0x23, 0x28, 0x66, 0x3, 0x23, 0x26, 0x76, 0x3, 0x23, 0x24, 0x86, 0x3, 0x23, 0x22, 0x96, 0x3, 0x23, 0x20, 0xa6, 0x3, 0x23, 0x2e, 0xb6, 0x1, 0x73, 0x26, 0x40, 0xf1, 0x2e, 0xc8, 0x63, 0x1d, 0x6, 0x38, 0xb7, 0x25, 0xc, 0x60, 0x3, 0xa9, 0xc5, 0xa, 0x3, 0xad, 0x5, 0xb, 0x73, 0x26, 0x40, 0xf1, 0x63, 0x13, 0x6, 0x38, 0x5, 0x46, 0x33, 0x16, 0xa6, 0x0, 0x23, 0xa0, 0xc5, 0xc, 0xf3, 0x25, 0x40, 0xf1, 0x63, 0x9a, 0x5, 0x36, 0x7d, 0x15, 0x2a, 0xc4, 0x28, 0x8, 0x13, 0x6, 0x0, 0x10, 0x97, 0xe0, 0xc7, 0xff, 0xe7, 0x80, 0xe0, 0x20, 0x81, 0x4d, 0x81, 0x4b, 0x37, 0xb5, 0x7c, 0x7, 0x13, 0xb, 0x15, 0x53, 0x37, 0x5, 0xcb, 0x3f, 0x13, 0x6, 0x5, 0x8, 0xb7, 0x26, 0xc, 0x60, 0x4a, 0xc0, 0x6a, 0xc2, 0x5a, 0xc6, 0x32, 0xca, 0x33, 0x65, 0xb9, 0x1, 0xb3, 0x65, 0x7d, 0x1, 0x4d, 0x8d, 0x63, 0xb, 0x5, 0x18, 0x63, 0x9b, 0xd, 0x2, 0x33, 0x5, 0x70, 0x41, 0x33, 0xf5, 0xab, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x9, 0x9, 0x2, 0xb3, 0x5, 0x20, 0x41, 0xb3, 0x75, 0xb9, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0xb0, 0x41, 0x33, 0xf5, 0xad, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x1b, 0x9, 0xfc, 0xb3, 0x5, 0xa0, 0x41, 0xb3, 0x75, 0xbd, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0x65, 0xa9, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x13, 0x95, 0x24, 0x0, 0x55, 0x8d, 0x8, 0x41, 0x13, 0xbc, 0x4, 0x4, 0x13, 0x84, 0x4, 0xfc, 0x93, 0x5, 0x0, 0x4, 0xb3, 0x8a, 0x95, 0x40, 0x93, 0xbc, 0x14, 0x0, 0x51, 0xc1, 0xa, 0x5, 0x36, 0x95, 0x3, 0x2a, 0x85, 0xc, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xa2, 0x2a, 0x84, 0xae, 0x89, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xa1, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0x22, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0xce, 0x85, 0x13, 0x7a, 0xfa, 0x0, 0x13, 0x84, 0xfc, 0xff, 0xb3, 0x79, 0xa4, 0x0, 0x6d, 0x8c, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x9e, 0xb3, 0x6, 0x80, 0x41, 0x33, 0xf6, 0xa6, 0x0, 0xed, 0x8e, 0x12, 0xa, 0x28, 0x8, 0x2a, 0x9a, 0xd2, 0x84, 0xc8, 0x40, 0x8c, 0x40, 0xd8, 0x44, 0x9c, 0x44, 0x55, 0x8d, 0xd1, 0x8d, 0x41, 0x8f, 0xb3, 0xe7, 0x37, 0x1, 0x9c, 0xc4, 0xd8, 0xc4, 0x8c, 0xc0, 0xc8, 0xc0, 0xb1, 0xa8, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x9a, 0xaa, 0x89, 0x2e, 0x8a, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x99, 0x2a, 0x8b, 0x2e, 0x84, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x99, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0xa2, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0x5a, 0x85, 0x33, 0x6, 0x80, 0x41, 0xb3, 0x76, 0x46, 0x1, 0x33, 0x76, 0x36, 0x1, 0xfd, 0x1c, 0x33, 0xf4, 0xbc, 0x0, 0xb3, 0xf9, 0xac, 0x0, 0x32, 0x4b, 0x13, 0x45, 0xf4, 0xff, 0x93, 0xc5, 0xf9, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0x13, 0x46, 0xf6, 0xff, 0x33, 0x79, 0xc9, 0x0, 0x33, 0x7d, 0xdd, 0x0, 0xb3, 0xfd, 0xbd, 0x0, 0xb3, 0xfb, 0xab, 0x0, 0x52, 0x46, 0xb7, 0x26, 0xc, 0x60, 0x8d, 0xb5, 0x39, 0x45, 0xa2, 0x45, 0x63, 0x6d, 0xb5, 0x18, 0x13, 0x95, 0x25, 0x0, 0xb7, 0x5, 0xcb, 0x3f, 0x93, 0x85, 0x85, 0xa, 0x2e, 0x95, 0x8, 0x41, 0xc1, 0x45, 0x12, 0x46, 0x63, 0x71, 0xb5, 0x18, 0x12, 0x5, 0x2c, 0x8, 0x2e, 0x95, 0x4c, 0x41, 0x8, 0x41, 0x1, 0x49, 0x1, 0x4b, 0xb3, 0xfb, 0xc5, 0x0, 0x82, 0x45, 0x33, 0x7c, 0xb5, 0x0, 0x37, 0xb5, 0x7c, 0x7, 0x93, 0xc, 0x15, 0x53, 0x37, 0x5, 0xcb, 0x3f, 0x13, 0xd, 0x5, 0x8, 0x93, 0xd, 0x0, 0x4, 0x33, 0x65, 0x2c, 0x1, 0xb3, 0xe5, 0x6b, 0x1, 0x4d, 0x8d, 0x63, 0x9, 0x5, 0x10, 0x63, 0x1b, 0x9, 0x2, 0x33, 0x5, 0x60, 0x41, 0x33, 0x75, 0xab, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x9, 0xc, 0x2, 0xb3, 0x5, 0x80, 0x41, 0xb3, 0x75, 0xbc, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0x20, 0x41, 0x33, 0x75, 0xa9, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x1b, 0xc, 0xfc, 0xb3, 0x5, 0x70, 0x41, 0xb3, 0xf5, 0xbb, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0x65, 0x7c, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x11, 0x93, 0x15, 0x5, 0x1, 0xc1, 0x81, 0x93, 0x85, 0x65, 0xfd, 0x91, 0xc5, 0xc2, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xb, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x84, 0xaa, 0x89, 0xae, 0x8a, 0x13, 0x86, 0x4, 0xfc, 0x5, 0x45, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x82, 0x2a, 0x8a, 0x2e, 0x84, 0x33, 0x86, 0x9d, 0x40, 0x5, 0x45, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x82, 0x63, 0xe3, 0xb4, 0x1, 0xa2, 0x85, 0x63, 0xe3, 0xb4, 0x1, 0x52, 0x85, 0x13, 0xb6, 0x4, 0x4, 0x33, 0x6, 0xc0, 0x40, 0xb3, 0x76, 0x56, 0x1, 0x33, 0x76, 0x36, 0x1, 0x13, 0xb7, 0x14, 0x0, 0x7d, 0x17, 0xf9, 0x8d, 0x79, 0x8d, 0x13, 0x45, 0xf5, 0xff, 0x93, 0xc5, 0xf5, 0xff, 0x13, 0x46, 0xf6, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0xb3, 0xfb, 0xdb, 0x0, 0x33, 0x7c, 0xcc, 0x0, 0x33, 0x7b, 0xbb, 0x0, 0x33, 0x79, 0xa9, 0x0, 0xdd, 0xb5, 0x8, 0x2, 0x83, 0x20, 0xc5, 0x4, 0x20, 0x45, 0x64, 0x41, 0x3, 0x29, 0x5, 0x4, 0x83, 0x29, 0xc5, 0x3, 0x3, 0x2a, 0x85, 0x3, 0x83, 0x2a, 0x45, 0x3, 0x3, 0x2b, 0x5, 0x3, 0x83, 0x2b, 0xc5, 0x2, 0x3, 0x2c, 0x85, 0x2, 0x83, 0x2c, 0x45, 0x2, 0x3, 0x2d, 0x5, 0x2, 0x83, 0x2d, 0xc5, 0x1, 0x71, 0x61, 0x82, 0x80, 0x0, 0x0, 0x42, 0x5, 0x41, 0x81, 0x37, 0x26, 0x38, 0x40, 0x13, 0x6, 0x6, 0x6b, 0xa, 0x5, 0x32, 0x95, 0x1c, 0x41, 0x37, 0x25, 0x38, 0x40, 0x13, 0x5, 0xe5, 0xa3, 0x63, 0x84, 0xa7, 0x0, 0x2e, 0x85, 0x82, 0x87, 0x0, 0x0, 0xaa, 0x85, 0x9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xc0, 0xaa, 0x85, 0xd, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xbf, 0xaa, 0x85, 0x11, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xbe, 0xaa, 0x85, 0x15, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xbd, 0xaa, 0x85, 0x19, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xbd, 0xaa, 0x85, 0x1d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xbc, 0xaa, 0x85, 0x21, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xbb, 0xaa, 0x85, 0x25, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xba, 0xaa, 0x85, 0x29, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xba, 0xaa, 0x85, 0x2d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb9, 0xaa, 0x85, 0x31, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xb8, 0xaa, 0x85, 0x35, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xb7, 0xaa, 0x85, 0x39, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xb7, 0xaa, 0x85, 0x3d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb6, 0x0, 0x0, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40}, + }, + { + .addr = 1070268448, + .size = 404, + .data = (uint8_t[]){0xd0, 0xb, 0x38, 0x40, 0xa2, 0xc, 0x38, 0x40, 0xde, 0xc, 0x38, 0x40, 0xd0, 0xb, 0x38, 0x40, 0x8a, 0xe, 0x38, 0x40, 0xa2, 0xc, 0x38, 0x40, 0x4c, 0xd, 0x38, 0x40, 0xb4, 0xd, 0x38, 0x40, 0xe8, 0xe, 0x38, 0x40, 0x14, 0xf, 0x38, 0x40, 0xe2, 0x14, 0x38, 0x40, 0x32, 0xd, 0x38, 0x40, 0xe2, 0x14, 0x38, 0x40, 0xe8, 0xd, 0x38, 0x40, 0xd0, 0xb, 0x38, 0x40, 0xa2, 0xc, 0x38, 0x40, 0xde, 0xc, 0x38, 0x40, 0x5e, 0xf, 0x38, 0x40, 0x80, 0xd, 0x38, 0x40, 0x8e, 0xc, 0x38, 0x40, 0xf8, 0x11, 0x38, 0x40, 0x64, 0x10, 0x38, 0x40, 0x28, 0xd, 0x38, 0x40, 0xa2, 0xc, 0x38, 0x40, 0x0, 0x1, 0x1c, 0x2, 0x1d, 0xe, 0x18, 0x3, 0x1e, 0x16, 0x14, 0xf, 0x19, 0x11, 0x4, 0x8, 0x1f, 0x1b, 0xd, 0x17, 0x15, 0x13, 0x10, 0x7, 0x1a, 0xc, 0x12, 0x6, 0xb, 0x5, 0xa, 0x9, 0xc0, 0xdb, 0xdc, 0xdb, 0xdd, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x3e, 0x1a, 0x38, 0x40, 0x0, 0x0, 0x0, 0x0, 0x3e, 0x1a, 0x38, 0x40, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x40, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0xbf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff}, + }, + }, + }, + + // placeholder + {}, + + // esp32h2.json + { + .header = { + .entrypoint = 1082130432, + }, + .segments = { + { + .addr = 1082130432, + .size = 10728, + .data = (uint8_t[]){0xb7, 0x0, 0x80, 0x40, 0x67, 0x80, 0x80, 0x0, 0x17, 0x35, 0x0, 0x0, 0x13, 0x5, 0x5, 0xb6, 0x97, 0xf5, 0x0, 0x0, 0x93, 0x85, 0x45, 0xf8, 0x63, 0x57, 0xb5, 0x0, 0x81, 0x46, 0x14, 0xc1, 0x11, 0x5, 0xe3, 0x4e, 0xb5, 0xfe, 0x17, 0x5, 0x80, 0xf, 0x13, 0x5, 0xa5, 0xfd, 0x97, 0x5, 0x80, 0xf, 0x93, 0x85, 0x25, 0xfd, 0x63, 0x57, 0xb5, 0x0, 0x81, 0x46, 0x14, 0xc1, 0x11, 0x5, 0xe3, 0x4e, 0xb5, 0xfe, 0x81, 0x40, 0x1, 0x41, 0x81, 0x41, 0x1, 0x42, 0x81, 0x42, 0x1, 0x43, 0x81, 0x43, 0x1, 0x44, 0x81, 0x44, 0x1, 0x45, 0x81, 0x45, 0x1, 0x46, 0x81, 0x46, 0x1, 0x47, 0x81, 0x47, 0x1, 0x48, 0x81, 0x48, 0x1, 0x49, 0x81, 0x49, 0x1, 0x4a, 0x81, 0x4a, 0x1, 0x4b, 0x81, 0x4b, 0x1, 0x4c, 0x81, 0x4c, 0x1, 0x4d, 0x81, 0x4d, 0x1, 0x4e, 0x81, 0x4e, 0x1, 0x4f, 0x81, 0x4f, 0x97, 0x31, 0x0, 0x0, 0x93, 0x81, 0x61, 0x2e, 0xf3, 0x23, 0x40, 0xf1, 0xb7, 0x2, 0x0, 0x0, 0x93, 0x82, 0x2, 0x0, 0x63, 0xf4, 0x72, 0x0, 0x6f, 0x0, 0x80, 0x4, 0x17, 0xf1, 0x3, 0x0, 0x13, 0x1, 0x21, 0xf3, 0x91, 0x42, 0x33, 0x1, 0x51, 0x40, 0x13, 0x71, 0x1, 0xff, 0xa, 0x84, 0x6f, 0x0, 0x40, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x65, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x56, 0x37, 0x5, 0x81, 0x40, 0xb7, 0xc5, 0xad, 0xde, 0x93, 0x85, 0xe5, 0xab, 0x23, 0x2a, 0xb5, 0xf8, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x55, 0x6f, 0x0, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0x5, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x35, 0x6, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x47, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x33, 0xe8, 0xb6, 0x0, 0x83, 0x45, 0x55, 0x0, 0x3, 0x46, 0x45, 0x0, 0x83, 0x46, 0x65, 0x0, 0x3, 0x47, 0x75, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x3, 0x46, 0x95, 0x0, 0x83, 0x46, 0x85, 0x0, 0x3, 0x47, 0xa5, 0x0, 0x83, 0x47, 0xb5, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x48, 0xd5, 0x0, 0x3, 0x47, 0xc5, 0x0, 0x83, 0x47, 0xe5, 0x0, 0x83, 0x46, 0xf5, 0x0, 0xa2, 0x8, 0x33, 0xe7, 0xe8, 0x0, 0xc2, 0x7, 0xe2, 0x6, 0xdd, 0x8e, 0xd9, 0x8e, 0x83, 0x48, 0x15, 0x1, 0x83, 0x42, 0x5, 0x1, 0x3, 0x43, 0x25, 0x1, 0x83, 0x47, 0x35, 0x1, 0xa2, 0x8, 0x33, 0xe7, 0x58, 0x0, 0x42, 0x3, 0xe2, 0x7, 0xb3, 0xe7, 0x67, 0x0, 0x5d, 0x8f, 0x83, 0x42, 0x55, 0x1, 0x83, 0x48, 0x45, 0x1, 0x3, 0x43, 0x65, 0x1, 0x3, 0x45, 0x75, 0x1, 0xa2, 0x2, 0xb3, 0xe7, 0x12, 0x1, 0x42, 0x3, 0x62, 0x5, 0x33, 0x65, 0x65, 0x0, 0xc9, 0x8f, 0x42, 0x85, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0xf9, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xfc, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xe, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x2a, 0x29, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x2b, 0x3, 0x45, 0xb4, 0x0, 0x83, 0x45, 0xa4, 0x0, 0x3, 0x46, 0xc4, 0x0, 0x83, 0x46, 0xd4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0xf4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0x4, 0x1, 0x3, 0x47, 0x14, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0x33, 0x66, 0xd7, 0x0, 0x49, 0x8e, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x26, 0x26, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0x24, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x36, 0x89, 0xb2, 0x89, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x22, 0x21, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x22, 0x26, 0x85, 0xce, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x22, 0x93, 0x5, 0x84, 0x0, 0x9, 0x46, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x21, 0x26, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x1e, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0x6a, 0xc8, 0x6e, 0xc6, 0xaa, 0x8a, 0x3, 0x2b, 0x45, 0x1, 0x44, 0x45, 0x36, 0x8a, 0x32, 0x89, 0xae, 0x89, 0xda, 0x8c, 0x63, 0x63, 0xdb, 0x0, 0xd2, 0x8c, 0x3, 0xa4, 0xa, 0x1, 0x83, 0xad, 0x8a, 0x0, 0x26, 0xc4, 0xe6, 0x94, 0xc1, 0x6b, 0x5, 0x6d, 0x63, 0x7f, 0x94, 0x2, 0x13, 0x15, 0x4, 0x1, 0x9, 0xed, 0x33, 0xc, 0x74, 0x1, 0x63, 0xea, 0x8d, 0x1, 0x13, 0x55, 0x4, 0x1, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xe2, 0x19, 0xc9, 0x61, 0xa0, 0x13, 0x55, 0xc4, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xa0, 0xe1, 0x2d, 0xed, 0x33, 0xc, 0xa4, 0x1, 0x23, 0xa8, 0x8a, 0x1, 0x62, 0x84, 0xe3, 0x65, 0x9c, 0xfc, 0x1, 0x44, 0xa2, 0x4b, 0x5e, 0x8c, 0x63, 0x85, 0xc, 0x4, 0x5, 0x65, 0xe6, 0x84, 0x63, 0xe3, 0xac, 0x0, 0x85, 0x64, 0x63, 0x6c, 0x8a, 0x6, 0xb3, 0x5, 0x89, 0x0, 0x62, 0x85, 0x26, 0x86, 0x63, 0x87, 0x9, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xda, 0x29, 0xa0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0xdd, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xc, 0xa3, 0x8e, 0xaa, 0x0, 0xb3, 0x8c, 0x9c, 0x40, 0x26, 0x94, 0x26, 0x9c, 0xe3, 0x9f, 0xc, 0xfa, 0x1, 0x45, 0xb3, 0x85, 0x8b, 0x0, 0xd6, 0x86, 0xcc, 0xc6, 0xb3, 0x5, 0x8b, 0x40, 0x33, 0x36, 0xbb, 0x0, 0x7d, 0x16, 0xf1, 0x8d, 0xcc, 0xca, 0x19, 0xa0, 0x13, 0x5, 0x60, 0x3, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x42, 0x4d, 0xb2, 0x4d, 0x21, 0x61, 0x82, 0x80, 0x0, 0x0, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0xb2, 0x89, 0x2e, 0x89, 0x2a, 0x84, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x14, 0x13, 0x75, 0xf5, 0xf, 0x13, 0x5, 0x5, 0xf4, 0x7d, 0xf5, 0x81, 0x44, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x12, 0x93, 0x75, 0xf5, 0xf, 0x13, 0x86, 0x55, 0xf2, 0x1d, 0xe2, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x11, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0x45, 0xf2, 0x99, 0xcd, 0x13, 0x5, 0x35, 0xf2, 0x71, 0xf9, 0x13, 0x5, 0xb0, 0xd, 0x63, 0xed, 0x34, 0x1, 0x25, 0xa8, 0x93, 0x85, 0x5, 0xf4, 0x91, 0xcd, 0x63, 0xe7, 0x34, 0x1, 0x35, 0xa0, 0x13, 0x5, 0x0, 0xc, 0x63, 0xf3, 0x34, 0x3, 0xb3, 0x5, 0x99, 0x0, 0x23, 0x80, 0xa5, 0x0, 0x85, 0x4, 0x6d, 0xb7, 0x63, 0xeb, 0x99, 0x0, 0x4a, 0x85, 0xa6, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x32, 0x89, 0xae, 0x84, 0x2a, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x2, 0x22, 0x85, 0xa6, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x2, 0x22, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0xb7, 0x35, 0x80, 0x40, 0x93, 0x85, 0x85, 0xaa, 0x5, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0x12, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x32, 0x84, 0xae, 0x84, 0x2a, 0x89, 0x37, 0x35, 0x80, 0x40, 0x93, 0x9, 0x95, 0xaa, 0x37, 0x35, 0x80, 0x40, 0x13, 0xa, 0xb5, 0xaa, 0x15, 0xce, 0x3, 0xc5, 0x4, 0x0, 0x93, 0x5, 0x5, 0xf4, 0x81, 0xc9, 0x93, 0x5, 0x55, 0xf2, 0x89, 0xe9, 0x9, 0x46, 0x4a, 0x85, 0xd2, 0x85, 0x19, 0xa8, 0x9, 0x46, 0x4a, 0x85, 0xce, 0x85, 0x39, 0xa0, 0xa3, 0x3, 0xa1, 0x0, 0x93, 0x5, 0x71, 0x0, 0x5, 0x46, 0x4a, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xd, 0x85, 0x4, 0x7d, 0x14, 0x61, 0xf4, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x39, 0xc9, 0x85, 0x45, 0x63, 0x14, 0xb5, 0xa, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x85, 0xb8, 0xc5, 0x45, 0xaa, 0x5, 0x2e, 0x95, 0xa1, 0x45, 0x81, 0x47, 0xf3, 0x77, 0x4, 0x30, 0x10, 0x41, 0x54, 0x41, 0x3, 0x47, 0x85, 0x0, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0xa0, 0x5, 0x30, 0x35, 0x8e, 0x59, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x6d, 0xf2, 0x1, 0x44, 0x73, 0x74, 0x4, 0x30, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x68, 0x5, 0x89, 0x35, 0xc1, 0x21, 0x88, 0x39, 0xc8, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0xb9, 0xa0, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x85, 0xb8, 0xc5, 0x45, 0xaa, 0x5, 0x2e, 0x95, 0xa1, 0x45, 0x81, 0x47, 0xf3, 0x77, 0x4, 0x30, 0x10, 0x41, 0x54, 0x41, 0x3, 0x47, 0x85, 0x0, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0xa0, 0x5, 0x30, 0x35, 0x8e, 0x59, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x6d, 0xf2, 0x1, 0x44, 0x73, 0x74, 0x4, 0x30, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x63, 0x5, 0x89, 0x19, 0xc9, 0x21, 0x88, 0x1, 0xc4, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x2e, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x0, 0x0, 0x31, 0xc1, 0x85, 0x46, 0x63, 0x10, 0xd5, 0x6, 0x37, 0xf5, 0x0, 0x60, 0xd, 0x48, 0x15, 0xca, 0x93, 0x6, 0x0, 0x4, 0xb2, 0x87, 0x63, 0x64, 0xd6, 0x0, 0x93, 0x7, 0x0, 0x4, 0xb3, 0x88, 0xf5, 0x0, 0x3e, 0x87, 0x99, 0xc7, 0x83, 0xc6, 0x5, 0x0, 0x85, 0x5, 0x14, 0xc1, 0x7d, 0x17, 0x7d, 0xfb, 0x23, 0x22, 0x5, 0x1, 0x4c, 0x41, 0x8d, 0x89, 0xf5, 0xdd, 0x1d, 0x8e, 0xc6, 0x85, 0x61, 0xfa, 0x82, 0x80, 0x2e, 0x96, 0x37, 0x5, 0x0, 0x60, 0xe3, 0x8c, 0xc5, 0xfe, 0x54, 0x4d, 0xa2, 0x6, 0xe3, 0xce, 0x6, 0xfe, 0x83, 0xc6, 0x5, 0x0, 0x85, 0x5, 0x14, 0xc1, 0xe3, 0x98, 0xc5, 0xfe, 0xc5, 0xb7, 0x0, 0x0, 0x11, 0x71, 0x86, 0xdf, 0xa2, 0xdd, 0xa6, 0xdb, 0xca, 0xd9, 0xce, 0xd7, 0xd2, 0xd5, 0xd6, 0xd3, 0xda, 0xd1, 0xde, 0xcf, 0xe2, 0xcd, 0xe6, 0xcb, 0xea, 0xc9, 0xee, 0xc7, 0x29, 0x65, 0x13, 0x5, 0x5, 0x82, 0x33, 0x1, 0xa1, 0x40, 0x1, 0x45, 0x73, 0x75, 0x4, 0x30, 0xb7, 0x35, 0x80, 0x40, 0x3, 0xc6, 0xa5, 0xb6, 0xe3, 0x14, 0x6, 0x66, 0x5, 0x46, 0x21, 0x89, 0x23, 0x85, 0xc5, 0xb6, 0x1, 0xc5, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x37, 0x5, 0xb, 0x60, 0x93, 0x6, 0x5, 0x8, 0xec, 0x46, 0x37, 0x6, 0x0, 0x70, 0xd1, 0x8d, 0xec, 0xc6, 0xec, 0x46, 0x37, 0x6, 0x0, 0x2, 0xd1, 0x8d, 0xec, 0xc6, 0x37, 0xd5, 0xa, 0x60, 0x4c, 0x45, 0x93, 0xe5, 0x45, 0x0, 0x4c, 0xc5, 0xc, 0x45, 0x93, 0xe5, 0x15, 0x0, 0xc, 0xc5, 0x37, 0xe4, 0xa, 0x60, 0x13, 0x6, 0x4, 0x80, 0x8, 0x4e, 0x6d, 0x99, 0x8, 0xce, 0x8, 0x4e, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0xb3, 0x9, 0xb1, 0x0, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x33, 0xa, 0xb1, 0x0, 0x13, 0x65, 0x85, 0x0, 0x8, 0xce, 0x13, 0x5, 0x60, 0x6, 0x89, 0x45, 0xd, 0x46, 0x81, 0x46, 0x1, 0x47, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x0, 0xdf, 0x13, 0x5, 0x60, 0x6, 0x8d, 0x45, 0x15, 0x46, 0x5, 0x47, 0x81, 0x46, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xdd, 0x13, 0x5, 0x60, 0x6, 0x95, 0x45, 0x15, 0x46, 0x91, 0x46, 0xd, 0x47, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xdc, 0x13, 0x5, 0x60, 0x6, 0x95, 0x45, 0x1d, 0x46, 0x99, 0x46, 0x5, 0x47, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xdb, 0x3, 0x25, 0x84, 0x81, 0x1e, 0x5, 0xe3, 0x5d, 0x5, 0xfe, 0x37, 0xe5, 0xa, 0x60, 0x13, 0x6, 0x5, 0x80, 0xc, 0x4e, 0x93, 0xe5, 0x45, 0x0, 0xc, 0xce, 0xc, 0x4e, 0xdd, 0x99, 0xc, 0xce, 0x37, 0x64, 0x9, 0x60, 0x13, 0x6, 0x4, 0x10, 0x48, 0x4a, 0x13, 0x75, 0x5, 0xf0, 0x48, 0xca, 0x8, 0x4e, 0x13, 0x75, 0x5, 0xf0, 0x9, 0x5, 0x8, 0xce, 0x48, 0x46, 0xb7, 0x5, 0xfd, 0xff, 0xfd, 0x15, 0x6d, 0x8d, 0xc1, 0x65, 0x4d, 0x8d, 0x48, 0xc6, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xe7, 0x13, 0x5, 0x0, 0x6, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xa0, 0x8c, 0x37, 0x15, 0xb, 0x60, 0x3, 0x20, 0x45, 0x1, 0xb7, 0x25, 0x84, 0x1e, 0x93, 0x85, 0x45, 0xe8, 0x4c, 0xc9, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0x91, 0x3, 0x45, 0x85, 0x1, 0x8d, 0x45, 0x63, 0x1e, 0xb5, 0x6, 0x93, 0x5, 0x4, 0x8, 0xc8, 0x45, 0x13, 0x65, 0x15, 0x0, 0xc8, 0xc5, 0xc8, 0x45, 0x75, 0x99, 0xc8, 0xc5, 0x37, 0xf4, 0x0, 0x60, 0x81, 0x45, 0xc, 0xc8, 0x21, 0x45, 0x48, 0xc8, 0xc, 0xc8, 0x11, 0x45, 0x48, 0xc8, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x45, 0x8e, 0xb7, 0x25, 0x80, 0x40, 0x93, 0x85, 0x65, 0xbb, 0x23, 0x2a, 0xb5, 0x8, 0x13, 0x5, 0x50, 0x2, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xe2, 0x8, 0x48, 0x13, 0x65, 0x45, 0x0, 0x8, 0xc8, 0x37, 0x35, 0x80, 0x40, 0x93, 0xa, 0x85, 0xb6, 0x13, 0xf5, 0xca, 0xff, 0x93, 0xf5, 0x3a, 0x0, 0x8e, 0x5, 0x5, 0x49, 0x33, 0x16, 0xb9, 0x0, 0x2f, 0x25, 0xc5, 0x44, 0x33, 0x55, 0xb5, 0x0, 0x13, 0x75, 0xf5, 0xf, 0xe3, 0x1c, 0x5, 0x4a, 0x85, 0xa, 0x69, 0xa2, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0x10, 0x0, 0xd1, 0x8d, 0xc, 0xd1, 0xc, 0x40, 0x93, 0xe5, 0x15, 0x0, 0xc, 0xc0, 0xc, 0x40, 0xf5, 0x99, 0xc, 0xc0, 0xb7, 0x5, 0x4, 0x0, 0x93, 0x85, 0x15, 0x11, 0xc, 0xc9, 0x1, 0x46, 0x50, 0xc5, 0x9d, 0x65, 0x89, 0x5, 0xc, 0xc9, 0x50, 0xc5, 0xc, 0x40, 0xf1, 0x99, 0x85, 0x5, 0xc, 0xc0, 0x4c, 0x40, 0x37, 0x6, 0x80, 0xff, 0xf1, 0x8d, 0x37, 0x6, 0x70, 0x0, 0xd1, 0x8d, 0x4c, 0xc0, 0x93, 0x5, 0x50, 0x11, 0x4c, 0xc9, 0x83, 0x25, 0x85, 0x9, 0x93, 0xe5, 0x15, 0x0, 0x23, 0x2c, 0xb5, 0x8, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x37, 0x4, 0x0, 0x60, 0x8, 0x50, 0x13, 0x65, 0xc5, 0x0, 0x8, 0xd0, 0x8, 0x50, 0x75, 0x99, 0x8, 0xd0, 0x8, 0x50, 0x13, 0x75, 0xf5, 0xfc, 0x41, 0x5, 0x8, 0xd0, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x45, 0x8e, 0xb7, 0x25, 0x80, 0x40, 0x93, 0x85, 0xc5, 0xb3, 0x23, 0x22, 0xb5, 0x8, 0x13, 0x5, 0x10, 0x2, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xd4, 0x8, 0x50, 0xb7, 0x5, 0x4, 0x0, 0x4d, 0x8d, 0x8, 0xd0, 0x8, 0x50, 0xb7, 0x5, 0x80, 0x0, 0x4d, 0x8d, 0x8, 0xd0, 0x3, 0x25, 0x84, 0x9, 0x13, 0x65, 0x15, 0x0, 0x23, 0x2c, 0xa4, 0x8, 0x3, 0x25, 0x84, 0x9, 0x5, 0x89, 0x6d, 0xfd, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0x80, 0xff, 0x7d, 0x16, 0xf1, 0x8d, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x82, 0x39, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0x40, 0x0, 0xd1, 0x8d, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0x37, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0xc0, 0xff, 0x7d, 0x16, 0xf1, 0x8d, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0x35, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x3d, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x6f, 0x37, 0x5, 0x0, 0x60, 0x4c, 0x45, 0x93, 0xe5, 0x15, 0x0, 0x4c, 0xc5, 0x37, 0x35, 0x80, 0x40, 0x93, 0xa, 0x5, 0xb7, 0x93, 0x85, 0x4a, 0x1, 0x13, 0xf6, 0xc5, 0xff, 0x8d, 0x89, 0x8e, 0x5, 0x85, 0x46, 0xb3, 0x96, 0xb6, 0x0, 0x2f, 0x26, 0xd6, 0x44, 0xb3, 0x55, 0xb6, 0x0, 0x93, 0xf5, 0xf5, 0xf, 0xe3, 0x9a, 0x5, 0x34, 0x89, 0x45, 0x23, 0x18, 0xb5, 0xb6, 0x13, 0x85, 0x2a, 0x0, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x39, 0x46, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xb0, 0x1, 0x49, 0x23, 0x88, 0xa, 0x0, 0x29, 0x45, 0x23, 0x89, 0xaa, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x4, 0xa1, 0x0, 0xd, 0x44, 0x5, 0x65, 0x13, 0xb, 0x5, 0xda, 0x19, 0xc8, 0x26, 0x85, 0x81, 0x45, 0x5a, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0xad, 0xda, 0x94, 0x7d, 0x14, 0x7d, 0xf4, 0x8d, 0x6b, 0x13, 0x84, 0xb, 0x8e, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xa0, 0xab, 0x37, 0x45, 0x0, 0x60, 0x8, 0x5d, 0x71, 0x89, 0x61, 0x15, 0x13, 0x35, 0x15, 0x0, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x7d, 0x23, 0x20, 0xa, 0x0, 0x37, 0x5, 0x0, 0x1, 0xd2, 0x85, 0xc8, 0xc1, 0x41, 0x6b, 0x23, 0x24, 0x6a, 0x1, 0x5, 0x65, 0xc8, 0xc5, 0x13, 0x5, 0x0, 0x10, 0x88, 0xc9, 0x13, 0x5, 0xfb, 0xff, 0xc8, 0xc9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x6c, 0x4a, 0xce, 0x56, 0xd0, 0x48, 0x10, 0x93, 0x4, 0xa1, 0x7, 0x13, 0x6, 0x60, 0x5, 0x81, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x40, 0xa5, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x26, 0x85, 0x22, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0xa4, 0x13, 0x85, 0xeb, 0x93, 0x6c, 0x8, 0x2e, 0x95, 0x13, 0x6, 0xd0, 0x1c, 0x81, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x80, 0xa2, 0x13, 0x5, 0xf0, 0x4, 0x23, 0x0, 0xaa, 0x0, 0x13, 0x5, 0x80, 0x4, 0xa3, 0x0, 0xaa, 0x0, 0x13, 0x5, 0x10, 0x4, 0x23, 0x1, 0xaa, 0x0, 0x13, 0x5, 0x90, 0x4, 0xa3, 0x1, 0xaa, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x5, 0xa1, 0x0, 0x11, 0x46, 0x4a, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x9b, 0x45, 0x49, 0x2a, 0x9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x81, 0x45, 0x4a, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xa0, 0x9d, 0xa1, 0x4b, 0x13, 0xb, 0xb, 0xf0, 0x5, 0x4d, 0x9, 0x4a, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x45, 0xa3, 0x2a, 0xcc, 0x37, 0x75, 0x80, 0x40, 0x13, 0x5, 0x45, 0xf9, 0x2a, 0xc6, 0x37, 0x35, 0x80, 0x40, 0x93, 0xd, 0x85, 0x9e, 0x9, 0x65, 0x13, 0x5, 0x5, 0x71, 0x2a, 0xc2, 0x19, 0x4c, 0x72, 0x45, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x8b, 0xe3, 0xe0, 0x75, 0x1d, 0x2a, 0x84, 0xae, 0x8c, 0x3, 0x45, 0x15, 0x0, 0x83, 0x45, 0x4, 0x0, 0x3, 0x46, 0x24, 0x0, 0x83, 0x46, 0x34, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x64, 0xa6, 0x0, 0x33, 0xf5, 0x64, 0x1, 0x13, 0x5, 0x5, 0xf0, 0xe3, 0x9, 0x5, 0x18, 0x83, 0x45, 0x44, 0x0, 0x3, 0x47, 0x54, 0x0, 0x83, 0x48, 0x64, 0x0, 0x83, 0x46, 0x74, 0x0, 0x13, 0xd5, 0x84, 0x0, 0x93, 0x97, 0x85, 0x1, 0x5d, 0x8d, 0x23, 0x80, 0xa9, 0x1, 0xa3, 0x80, 0xa9, 0x0, 0xa3, 0x81, 0x9, 0x0, 0x23, 0x81, 0x49, 0x1, 0xa3, 0x83, 0x9, 0x0, 0x23, 0x83, 0x9, 0x0, 0xa3, 0x82, 0x9, 0x0, 0x23, 0x82, 0x9, 0x0, 0x23, 0x84, 0x9, 0x0, 0xa3, 0x84, 0x9, 0x0, 0xa3, 0x86, 0x9, 0x0, 0x23, 0x86, 0x9, 0x0, 0xa3, 0x85, 0x9, 0x0, 0x23, 0x85, 0xa9, 0x1, 0xa3, 0x88, 0x9, 0x0, 0x23, 0x88, 0x9, 0x0, 0xa3, 0x87, 0x9, 0x0, 0x93, 0x7a, 0xf5, 0xf, 0x13, 0x85, 0xea, 0xff, 0x23, 0x87, 0x9, 0x0, 0x49, 0x46, 0x63, 0x60, 0xa6, 0xc, 0xa, 0x5, 0x6e, 0x95, 0x8, 0x41, 0x2, 0x85, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xea, 0xbc, 0x78, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0x9, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x54, 0x1, 0x3, 0x46, 0x44, 0x1, 0x83, 0x46, 0x64, 0x1, 0x3, 0x47, 0x74, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x3, 0x46, 0xd4, 0x0, 0x83, 0x46, 0xc4, 0x0, 0x3, 0x47, 0xe4, 0x0, 0x83, 0x47, 0xf4, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x46, 0x94, 0x0, 0x3, 0x47, 0x84, 0x0, 0x83, 0x47, 0xa4, 0x0, 0x83, 0x44, 0xb4, 0x0, 0xa2, 0x6, 0xd9, 0x8e, 0xc2, 0x7, 0xe2, 0x4, 0xc5, 0x8f, 0xdd, 0x8e, 0x7d, 0x77, 0x69, 0x8f, 0x3a, 0xd6, 0x2a, 0xd4, 0x36, 0x95, 0x2a, 0xd2, 0x33, 0x5, 0xb6, 0x2, 0x2a, 0xda, 0x36, 0xd8, 0x23, 0x1e, 0x1, 0x2, 0x23, 0x1d, 0x1, 0x2, 0x23, 0xc, 0xa1, 0x3, 0x41, 0x45, 0x63, 0x84, 0xaa, 0x0, 0x63, 0x98, 0x4a, 0x71, 0x13, 0x5, 0x20, 0xc, 0x11, 0x66, 0x63, 0x6f, 0xb6, 0x6e, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x4f, 0xaa, 0x85, 0x13, 0x5, 0x50, 0xc, 0x63, 0x96, 0x5, 0x6e, 0xc5, 0xad, 0x13, 0x85, 0xa, 0xf3, 0xa, 0x5, 0x62, 0x46, 0x32, 0x95, 0x8, 0x41, 0x2, 0x85, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x49, 0xaa, 0x85, 0x13, 0x5, 0x40, 0xc, 0x63, 0x95, 0x5, 0x6c, 0xf9, 0xa5, 0x61, 0x45, 0x63, 0xef, 0xac, 0x6a, 0x26, 0x85, 0x63, 0x8e, 0xaa, 0x6b, 0x3, 0x45, 0x81, 0x3, 0x63, 0xe, 0x5, 0x58, 0x13, 0x88, 0x8c, 0xfe, 0x93, 0x2, 0x84, 0x1, 0x63, 0x3, 0x8, 0x5e, 0xb3, 0x4, 0x94, 0x1, 0x93, 0x7, 0xf0, 0xe, 0x16, 0x85, 0x3, 0x46, 0x5, 0x0, 0x5, 0x5, 0xb1, 0x8f, 0xe3, 0x1c, 0x95, 0xfe, 0x93, 0xf7, 0xf7, 0xf, 0xf1, 0xa3, 0x13, 0x5, 0x0, 0xc, 0x63, 0x82, 0x7c, 0x69, 0x83, 0x45, 0x84, 0x0, 0x26, 0x85, 0x63, 0x8d, 0x45, 0x67, 0x3, 0x45, 0x81, 0x3, 0x63, 0xd, 0x5, 0x54, 0x42, 0x56, 0x13, 0x5, 0x80, 0xc, 0x63, 0x14, 0x6, 0x66, 0x23, 0xc, 0x1, 0x2, 0x63, 0x94, 0x5, 0x66, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x4d, 0x12, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x33, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x37, 0x81, 0xa5, 0x2d, 0x45, 0x63, 0x78, 0x95, 0x7b, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x2, 0xf0, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x4a, 0x1d, 0xa5, 0x81, 0x44, 0x85, 0x45, 0x85, 0x88, 0x63, 0x9f, 0x4, 0x60, 0x63, 0x54, 0xbc, 0x0, 0x1d, 0x44, 0x19, 0xa0, 0x13, 0x84, 0x15, 0x0, 0x72, 0x45, 0x93, 0xa5, 0x75, 0x0, 0x93, 0xc4, 0x15, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x48, 0xa2, 0x85, 0xc9, 0xbf, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x51, 0x46, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x72, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0x33, 0x6, 0xa1, 0x0, 0x1, 0x45, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x32, 0x63, 0xa, 0x5, 0x4a, 0x13, 0x5, 0x30, 0xc, 0x5d, 0xab, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe7, 0xbc, 0x5a, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x82, 0xe9, 0x51, 0x8d, 0x83, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x88, 0xc1, 0x69, 0xa3, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xed, 0xbc, 0x56, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x22, 0x5, 0xc9, 0x8d, 0x42, 0x6, 0x83, 0x46, 0xb4, 0x0, 0x3, 0x4a, 0xc4, 0x0, 0x83, 0x44, 0xd4, 0x0, 0x83, 0x4b, 0xe4, 0x0, 0x83, 0x4a, 0xf4, 0x0, 0x72, 0x45, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x3c, 0x11, 0x65, 0x13, 0x5, 0x85, 0xa9, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x21, 0x37, 0x5, 0x0, 0x60, 0x48, 0x49, 0x63, 0xf, 0x4, 0x68, 0xa2, 0x4, 0xb3, 0xe5, 0x44, 0x1, 0xc2, 0xb, 0xe2, 0xa, 0x33, 0xe6, 0x7a, 0x1, 0xd1, 0x8d, 0x13, 0x16, 0xc5, 0x0, 0x21, 0x82, 0x22, 0x5, 0x71, 0x81, 0x51, 0x8d, 0x33, 0x5, 0xb5, 0x2, 0xb3, 0x55, 0x85, 0x2, 0x1, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x21, 0x13, 0x5, 0x80, 0x3e, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x1d, 0xa1, 0x4b, 0x9, 0x4a, 0x61, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xec, 0xbc, 0x4c, 0xc2, 0x55, 0x13, 0x5, 0x80, 0xc, 0x63, 0x97, 0x5, 0x4c, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0xd9, 0x63, 0x15, 0x5, 0x4c, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x22, 0x5, 0x83, 0x46, 0xf4, 0x0, 0xc9, 0x8d, 0x42, 0x6, 0x72, 0x45, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x32, 0x12, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x17, 0x2, 0x94, 0x69, 0xa1, 0x2d, 0x45, 0x63, 0x7d, 0x95, 0x5f, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0xd4, 0x8, 0x41, 0x23, 0x82, 0xa9, 0x0, 0x93, 0x55, 0x85, 0x1, 0xa3, 0x83, 0xb9, 0x0, 0x93, 0x55, 0x5, 0x1, 0x23, 0x83, 0xb9, 0x0, 0x21, 0x81, 0xa3, 0x82, 0xa9, 0x0, 0xb9, 0xa9, 0x13, 0x5, 0x0, 0x2, 0x63, 0xe6, 0xac, 0x44, 0x93, 0x5, 0x24, 0x0, 0x79, 0x46, 0x1d, 0x65, 0x13, 0x5, 0xa5, 0xf2, 0xa, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x58, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x23, 0x0, 0x95, 0x0, 0xad, 0x45, 0xa3, 0x0, 0xb5, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x5, 0xf3, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x1c, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x98, 0x5, 0x40, 0x11, 0xa9, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe2, 0xbc, 0x40, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0xce, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x22, 0xd4, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x52, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x78, 0x63, 0x8, 0xa, 0x4, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x5, 0x66, 0x22, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x13, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x96, 0x5, 0x50, 0x5, 0x65, 0xd2, 0x84, 0x63, 0x63, 0xaa, 0x0, 0x85, 0x64, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x26, 0x86, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x74, 0x33, 0xa, 0x9a, 0x40, 0x26, 0x94, 0xe3, 0x1c, 0xa, 0xfa, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x22, 0xc9, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x4b, 0x29, 0x65, 0x13, 0x5, 0x45, 0x88, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x89, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x71, 0x3, 0xc4, 0xa9, 0x7, 0x3d, 0x46, 0x29, 0x65, 0x13, 0x5, 0xd5, 0x81, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x55, 0x88, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x47, 0x72, 0x45, 0x23, 0x89, 0x89, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0xc6, 0x81, 0xa, 0x96, 0xc1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x21, 0x9, 0x4a, 0x7d, 0xb4, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x18, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe6, 0xbc, 0x2e, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x62, 0xbd, 0x33, 0x67, 0xa6, 0x0, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x62, 0xbe, 0x55, 0x8e, 0xb3, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x54, 0x1, 0x83, 0x45, 0x44, 0x1, 0x3, 0x46, 0x64, 0x1, 0x83, 0x46, 0x74, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0xbf, 0x3a, 0x84, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x6c, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x3d, 0x23, 0xa9, 0x9, 0x0, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x81, 0x44, 0x81, 0x4b, 0x33, 0x5, 0x5a, 0x3, 0x2a, 0xca, 0x22, 0x8a, 0x63, 0x7d, 0x80, 0xa, 0x52, 0x45, 0xaa, 0x9b, 0x63, 0xb, 0xa, 0x6, 0x63, 0xf9, 0x74, 0x7, 0x22, 0x8c, 0x56, 0x84, 0x63, 0xe3, 0x4a, 0x1, 0x52, 0x84, 0x5, 0x65, 0x5, 0x5, 0x63, 0x73, 0xa4, 0x3c, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x66, 0x85, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0xfc, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x9d, 0x5, 0x10, 0x72, 0x45, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x32, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x5c, 0x33, 0xa, 0x8a, 0x40, 0xa2, 0x9c, 0xa2, 0x94, 0x62, 0x84, 0x19, 0x4c, 0xe3, 0x19, 0xa, 0xf8, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x81, 0x8a, 0x95, 0x11, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x25, 0xd, 0x46, 0x63, 0x78, 0xb6, 0x34, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x45, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x5, 0x55, 0x8d, 0xb3, 0x6b, 0xb5, 0x0, 0xe3, 0xe7, 0x8b, 0xf4, 0x97, 0x12, 0x0, 0x0, 0xe7, 0x82, 0x22, 0xad, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x2f, 0x29, 0x65, 0x13, 0x5, 0x45, 0x88, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x89, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x55, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x88, 0x8a, 0x95, 0x41, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x28, 0x79, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xe5, 0xbc, 0x16, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xf2, 0xaa, 0x85, 0x13, 0x5, 0x60, 0x3, 0x63, 0x9f, 0x5, 0x10, 0xd, 0xa2, 0x13, 0x5, 0x60, 0xc, 0x11, 0xaa, 0xa1, 0x4b, 0x9, 0x4a, 0x19, 0x4c, 0x31, 0xa2, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x3, 0x44, 0x5, 0x0, 0x4d, 0x46, 0x29, 0x65, 0x13, 0x5, 0x55, 0x89, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x95, 0xf2, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x23, 0x72, 0x45, 0x23, 0x85, 0x89, 0x8, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0x46, 0x89, 0xa, 0x96, 0xd1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xfd, 0xb5, 0xb0, 0x93, 0x7, 0xf0, 0xe, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x44, 0xa4, 0x0, 0x3, 0x44, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x4, 0x62, 0x4, 0x45, 0x8c, 0xb3, 0x64, 0xa4, 0x0, 0x63, 0x9e, 0x4, 0x9, 0x22, 0x7, 0xd9, 0x8d, 0xc2, 0x8, 0xe2, 0x6, 0x33, 0xe5, 0x16, 0x1, 0xc9, 0x8d, 0x13, 0x5, 0x10, 0xc, 0x63, 0x95, 0xb7, 0x8, 0x16, 0xc8, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xf0, 0xd, 0x45, 0x63, 0x8d, 0xaa, 0x16, 0x13, 0x85, 0xca, 0xf2, 0x59, 0xc1, 0x45, 0x45, 0x63, 0x86, 0xaa, 0xa, 0x1d, 0x45, 0xc2, 0x46, 0xe3, 0x92, 0xaa, 0x80, 0x42, 0x56, 0x13, 0x5, 0x90, 0xc, 0x63, 0x69, 0x96, 0x4, 0x93, 0xf5, 0x3c, 0x0, 0x13, 0x5, 0x0, 0xc, 0xb9, 0xe1, 0x13, 0x85, 0x36, 0x0, 0x71, 0x99, 0xb3, 0x5, 0xd5, 0x40, 0x63, 0xf3, 0xb4, 0x0, 0x11, 0x45, 0xb3, 0xb6, 0xb4, 0x0, 0xb3, 0x85, 0xb4, 0x40, 0x13, 0xd7, 0x25, 0x0, 0xfd, 0x16, 0xa2, 0x55, 0xf9, 0x8e, 0x71, 0x16, 0x8a, 0x6, 0x63, 0x83, 0x6, 0xfc, 0x18, 0x41, 0x11, 0x5, 0x98, 0xc1, 0x91, 0x5, 0x2e, 0xd4, 0x32, 0xd8, 0x71, 0x16, 0xf1, 0x16, 0xe5, 0xfa, 0x6f, 0xf0, 0xf, 0xfb, 0x13, 0x5, 0x0, 0xc, 0x23, 0x84, 0xa9, 0x1, 0xa3, 0x84, 0xa9, 0x0, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0xe7, 0x6f, 0xf0, 0xef, 0xf8, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0xda, 0x68, 0x8, 0x85, 0x45, 0x42, 0x46, 0xa6, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xf3, 0x93, 0x75, 0xf5, 0xf, 0xf9, 0xf1, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0xd8, 0x6f, 0xf0, 0x4f, 0xf6, 0x37, 0x35, 0x80, 0x40, 0x3, 0x24, 0xc5, 0xb6, 0x81, 0x4c, 0x85, 0x4a, 0x5, 0x48, 0x26, 0xc4, 0x42, 0x46, 0x42, 0x55, 0xe1, 0xc4, 0x79, 0xc1, 0x63, 0x8d, 0xa, 0xc, 0x23, 0xa5, 0x99, 0x8, 0x21, 0x6a, 0x33, 0x5, 0x8a, 0x40, 0x5, 0xa, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x88, 0xc1, 0x63, 0x71, 0x44, 0x11, 0x22, 0x45, 0x63, 0x6e, 0x95, 0xf, 0x52, 0x55, 0x33, 0xb5, 0xa4, 0x0, 0x6, 0x5, 0x33, 0x68, 0xa8, 0x0, 0xb2, 0x46, 0x33, 0x87, 0x86, 0x0, 0xb3, 0x5, 0x96, 0x1, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0x33, 0x6, 0xa1, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x7, 0xa1, 0x0, 0x13, 0x5, 0xa1, 0x3, 0x42, 0xca, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0xce, 0x83, 0xab, 0xa9, 0x8, 0xd2, 0x55, 0x1d, 0x66, 0x13, 0x6, 0x86, 0xf2, 0xa, 0x96, 0x10, 0x42, 0xaa, 0x8a, 0x33, 0x85, 0x75, 0x41, 0x2a, 0xda, 0x32, 0x94, 0x63, 0x85, 0xa, 0x0, 0x21, 0x65, 0x63, 0x1f, 0xa4, 0x0, 0x63, 0x7e, 0x44, 0x9, 0x68, 0x8, 0xb2, 0x45, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0xd9, 0x93, 0x75, 0xf5, 0xf, 0xb5, 0xe9, 0x1, 0x44, 0x9, 0x4a, 0xb3, 0x84, 0x74, 0x41, 0xde, 0x9c, 0xa1, 0x4b, 0x42, 0x46, 0x52, 0x48, 0x89, 0xbf, 0x68, 0x8, 0xc2, 0x45, 0x26, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0xd6, 0x93, 0x75, 0xf5, 0xf, 0xe3, 0x92, 0x5, 0xee, 0x6f, 0xf0, 0x8f, 0xe8, 0xb7, 0x35, 0x80, 0x40, 0x23, 0xa6, 0x85, 0xb6, 0x63, 0xc2, 0xa, 0x4, 0xb3, 0x35, 0xa0, 0x0, 0x63, 0x8a, 0xa, 0x0, 0x39, 0xa8, 0xb7, 0x35, 0x80, 0x40, 0x23, 0xa6, 0x85, 0xb6, 0x85, 0x45, 0x63, 0x99, 0xa, 0x0, 0x99, 0xc5, 0x13, 0x5, 0x80, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0x6f, 0xe5, 0x63, 0x89, 0xa, 0xe4, 0x63, 0x17, 0x5, 0xe4, 0x13, 0x5, 0x90, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0x2f, 0xe4, 0xa1, 0x4b, 0x9, 0x4a, 0x49, 0xbd, 0x13, 0x5, 0x70, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0xf, 0xe3, 0x0, 0x0, 0xb3, 0x8, 0xd6, 0x40, 0x93, 0xf7, 0xf8, 0xf, 0x21, 0x48, 0x63, 0xf7, 0x7, 0x11, 0x37, 0xd8, 0xa, 0x60, 0x83, 0x27, 0x88, 0x0, 0x93, 0xe7, 0x47, 0x0, 0x23, 0x24, 0xf8, 0x0, 0x37, 0xe3, 0xa, 0x60, 0x3, 0x28, 0x43, 0x83, 0xb7, 0x7, 0x0, 0x10, 0xb3, 0x67, 0xf8, 0x0, 0x23, 0x2a, 0xf3, 0x82, 0x3, 0x28, 0x3, 0x82, 0xb7, 0x7, 0x0, 0xff, 0xb3, 0x77, 0xf8, 0x0, 0x13, 0x8, 0xa5, 0xf9, 0x93, 0x72, 0xf8, 0xf, 0x9d, 0x43, 0x23, 0x20, 0xf3, 0x82, 0x63, 0xe9, 0x53, 0x2, 0x93, 0x7, 0x90, 0x9, 0xb3, 0xd7, 0x7, 0x1, 0x85, 0x8b, 0x95, 0xc3, 0xb7, 0x37, 0x80, 0x40, 0x93, 0x83, 0x87, 0xa4, 0x93, 0x97, 0x22, 0x0, 0x9e, 0x97, 0x3, 0xae, 0x7, 0x0, 0xb7, 0xe3, 0xa, 0x60, 0x83, 0xa7, 0x3, 0x82, 0xb3, 0xe7, 0xc7, 0x1, 0x23, 0xa0, 0xf3, 0x82, 0x13, 0x75, 0xf5, 0xf, 0x93, 0xf5, 0xf5, 0xf, 0xa2, 0x5, 0xb3, 0xe3, 0xa5, 0x0, 0x23, 0x20, 0x73, 0x80, 0x83, 0x25, 0x3, 0x80, 0x9a, 0x5, 0xe3, 0xcd, 0x5, 0xfe, 0xb7, 0xe5, 0xa, 0x60, 0x83, 0xa7, 0x5, 0x80, 0xc1, 0x83, 0x7d, 0x53, 0x33, 0x15, 0xd3, 0x0, 0x13, 0x45, 0xf5, 0xff, 0x5, 0x6, 0x33, 0x16, 0xc3, 0x0, 0x51, 0x8d, 0x7d, 0x8d, 0x85, 0x8, 0x33, 0x16, 0x13, 0x1, 0x13, 0x46, 0xf6, 0xff, 0x79, 0x8e, 0x33, 0x16, 0xd6, 0x0, 0x51, 0x8d, 0x13, 0x75, 0xf5, 0xf, 0x42, 0x5, 0x37, 0x6, 0x0, 0x1, 0x33, 0xe6, 0xc3, 0x0, 0x51, 0x8d, 0x23, 0xa0, 0xa5, 0x80, 0x3, 0xa5, 0x5, 0x80, 0x1a, 0x5, 0xe3, 0x4d, 0x5, 0xfe, 0x1d, 0x45, 0x63, 0x66, 0x55, 0x2, 0x13, 0x5, 0x90, 0x9, 0x33, 0x55, 0x5, 0x1, 0x5, 0x89, 0x19, 0xcd, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x85, 0xa6, 0x8a, 0x2, 0x16, 0x95, 0x8, 0x41, 0xb7, 0xe5, 0xa, 0x60, 0x3, 0xa6, 0x5, 0x82, 0x71, 0x8d, 0x23, 0xa0, 0xa5, 0x82, 0x82, 0x80, 0x0, 0x0, 0x37, 0x65, 0x9, 0x60, 0x83, 0x25, 0x85, 0x14, 0x93, 0xe5, 0x15, 0x0, 0x23, 0x24, 0xb5, 0x14, 0x83, 0x25, 0x85, 0x14, 0x85, 0x89, 0xed, 0xfd, 0x82, 0x80, 0xf3, 0x25, 0x40, 0xf1, 0x85, 0xe1, 0x42, 0x5, 0x41, 0x81, 0xa, 0x5, 0xb7, 0x5, 0x1, 0x60, 0x2e, 0x95, 0x85, 0x45, 0xc, 0xc1, 0x37, 0x15, 0x0, 0x20, 0xc, 0x41, 0x93, 0xe5, 0x25, 0x0, 0xc, 0xc1, 0x82, 0x80, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x1, 0x45, 0x37, 0x9, 0x1, 0x60, 0xfd, 0x44, 0x13, 0x4, 0x15, 0x0, 0x93, 0x75, 0xf4, 0xf, 0x8d, 0xc1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x8, 0x42, 0x5, 0x93, 0x55, 0x5, 0x1, 0x13, 0x86, 0xf5, 0xfb, 0x22, 0x85, 0x6d, 0xd2, 0x8a, 0x5, 0xca, 0x95, 0x84, 0xc1, 0x22, 0x85, 0xe1, 0xbf, 0x37, 0x25, 0x80, 0x40, 0x13, 0x5, 0x5, 0x30, 0x5, 0x5, 0x73, 0x10, 0x55, 0x30, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0xc5, 0xaf, 0x93, 0x5, 0xc0, 0x3, 0x5, 0x48, 0xb7, 0x16, 0x0, 0x20, 0x5, 0x47, 0x8d, 0xc9, 0xf3, 0x27, 0x40, 0xf1, 0x9d, 0xef, 0x4, 0x41, 0xc0, 0x42, 0xb3, 0x17, 0x98, 0x0, 0x13, 0xc6, 0xf7, 0xff, 0x61, 0x8e, 0xd0, 0xc2, 0x73, 0x26, 0x40, 0xf1, 0x5, 0xe6, 0x8a, 0x4, 0xb6, 0x94, 0x98, 0xc8, 0x90, 0x42, 0x5d, 0x8e, 0x90, 0xc2, 0xf1, 0x15, 0x11, 0x5, 0x5, 0x7, 0xe9, 0xf9, 0x7d, 0x55, 0x73, 0x10, 0x45, 0x30, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x0, 0x0, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0x10, 0x4, 0x63, 0x64, 0xb5, 0x0, 0x13, 0x5, 0x10, 0x4, 0x82, 0x80, 0x37, 0x15, 0xb, 0x60, 0x8, 0x49, 0x93, 0x15, 0x5, 0x1, 0xc1, 0x81, 0x13, 0x56, 0x5, 0x1, 0x2d, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x7d, 0x15, 0x13, 0x35, 0xe5, 0xff, 0x71, 0x8d, 0x13, 0x86, 0x5, 0xfe, 0x33, 0x36, 0xc0, 0x0, 0x71, 0x8d, 0x82, 0x80, 0x5d, 0x71, 0x86, 0xc6, 0xa2, 0xc4, 0xa6, 0xc2, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x5a, 0xd8, 0x5e, 0xd6, 0x62, 0xd4, 0x66, 0xd2, 0x6a, 0xd0, 0x6e, 0xce, 0x13, 0x5, 0xd0, 0x6, 0xa1, 0x45, 0x1, 0x46, 0x81, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xd9, 0x13, 0x5, 0xd0, 0x6, 0xa1, 0x45, 0x5, 0x46, 0x85, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xd8, 0x13, 0x5, 0xd0, 0x6, 0xa1, 0x45, 0x9, 0x46, 0x89, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xd7, 0x13, 0x5, 0xd0, 0x6, 0xa1, 0x45, 0xd, 0x46, 0x8d, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xd6, 0x13, 0x5, 0xd0, 0x6, 0xa1, 0x45, 0x11, 0x46, 0x91, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xd4, 0x13, 0x5, 0xd0, 0x6, 0xa1, 0x45, 0x15, 0x46, 0x95, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xd3, 0x13, 0x5, 0xd0, 0x6, 0xbd, 0x45, 0x9, 0x46, 0x89, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xd2, 0xb7, 0xc, 0xb, 0x60, 0x23, 0xaa, 0xc, 0xe, 0x23, 0xac, 0xc, 0xe, 0x23, 0xae, 0xc, 0xe, 0x23, 0xa0, 0xc, 0x10, 0x23, 0xa2, 0xc, 0x10, 0x23, 0xa4, 0xc, 0x10, 0xe6, 0x86, 0x88, 0x56, 0xb7, 0x5, 0x0, 0x8, 0xfd, 0x15, 0x6d, 0x8d, 0x37, 0x6, 0x0, 0xc8, 0x51, 0x8d, 0x88, 0xd6, 0x3, 0xa5, 0xcc, 0x9, 0x6d, 0x8d, 0xb7, 0x5, 0x0, 0xd0, 0x4d, 0x8d, 0x23, 0xae, 0xac, 0x8, 0x13, 0x86, 0xc, 0x10, 0x48, 0x5a, 0x22, 0x5, 0x21, 0x81, 0xb7, 0x5, 0x0, 0xf, 0x4d, 0x8d, 0x48, 0xda, 0x48, 0x5e, 0x42, 0x5, 0x41, 0x81, 0xb7, 0x5, 0xa4, 0x6, 0x4d, 0x8d, 0x48, 0xde, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xec, 0x63, 0x14, 0x5, 0x30, 0xb7, 0xa, 0x0, 0xf0, 0x3, 0xa5, 0xc, 0x40, 0xfd, 0x1a, 0x56, 0xcc, 0xb7, 0xb, 0x0, 0x80, 0xfd, 0x1b, 0x4d, 0x99, 0x23, 0xa0, 0xac, 0x40, 0xd, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x80, 0xb7, 0x94, 0x0, 0x60, 0x69, 0x75, 0x7d, 0x15, 0x2a, 0xca, 0x7d, 0x75, 0x7d, 0x15, 0x2a, 0xc8, 0x37, 0x5, 0x1, 0x80, 0x7d, 0x15, 0x2a, 0xc6, 0x21, 0x65, 0x13, 0x5, 0x25, 0xa1, 0x2a, 0xc2, 0x9, 0x65, 0x13, 0x5, 0x95, 0xd6, 0x2a, 0xc4, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0x2a, 0xc0, 0x37, 0x64, 0x9, 0x60, 0xb7, 0xa, 0x0, 0x20, 0x3, 0xa5, 0xc, 0x40, 0x71, 0x99, 0x23, 0xa0, 0xac, 0x40, 0x3, 0xa5, 0xc, 0x42, 0xe2, 0x45, 0x6d, 0x8d, 0x23, 0xa0, 0xac, 0x42, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0xe5, 0x83, 0xa6, 0xc, 0x40, 0x3, 0xa6, 0xc, 0x40, 0x13, 0xfd, 0x36, 0x0, 0x93, 0x6, 0xfd, 0xff, 0xaa, 0x8d, 0x2e, 0x8a, 0x9, 0x45, 0x63, 0xe4, 0xa6, 0x0, 0x13, 0x7d, 0x36, 0x0, 0x63, 0x5, 0xd, 0x2, 0x5, 0x45, 0x63, 0xb, 0xad, 0x0, 0x9, 0x45, 0x63, 0x12, 0xad, 0x2, 0x83, 0x25, 0x4, 0x13, 0xf1, 0x99, 0x5, 0x45, 0x5, 0x4b, 0x15, 0xa0, 0x83, 0x25, 0x4, 0x13, 0x1, 0x45, 0x1, 0x4b, 0xf1, 0x99, 0x85, 0x5, 0x19, 0xa8, 0x1, 0x4b, 0x5, 0x45, 0x19, 0xa8, 0x3, 0x25, 0x4, 0x13, 0x1, 0x4b, 0x71, 0x99, 0x93, 0x5, 0x25, 0x0, 0x5, 0x45, 0x23, 0x28, 0xb4, 0x12, 0x9, 0x4d, 0x83, 0xa5, 0xc, 0x42, 0x8e, 0x5, 0xfd, 0x81, 0xb3, 0x69, 0xb5, 0x0, 0x63, 0x99, 0x9, 0x0, 0x3, 0xa5, 0xc, 0x42, 0xb7, 0x5, 0x0, 0x10, 0x4d, 0x8d, 0x23, 0xa0, 0xac, 0x42, 0x93, 0x86, 0xc, 0x40, 0x88, 0x52, 0xb7, 0x5, 0x0, 0x10, 0x4d, 0x8d, 0x88, 0xd2, 0x13, 0x87, 0xc, 0x8, 0x48, 0x57, 0x4d, 0x8d, 0x48, 0xd7, 0x48, 0x57, 0x37, 0x6, 0x0, 0x20, 0x51, 0x8d, 0x48, 0xd7, 0x3, 0xa0, 0xcc, 0xa, 0x3, 0xa0, 0xc, 0x42, 0x48, 0x57, 0x8c, 0x52, 0x33, 0x7c, 0xc5, 0x0, 0x37, 0x5, 0x0, 0x40, 0x33, 0xf9, 0xa5, 0x0, 0x63, 0x9, 0xb, 0x2, 0x63, 0x1e, 0xc, 0x0, 0x3, 0xa5, 0xcc, 0xa, 0x33, 0x65, 0x55, 0x1, 0x23, 0xa6, 0xac, 0xa, 0x13, 0x5, 0xc0, 0x12, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x6d, 0x63, 0x19, 0x9, 0x0, 0x3, 0xa5, 0xc, 0x42, 0xb7, 0x5, 0x0, 0x40, 0x4d, 0x8d, 0x23, 0xa0, 0xac, 0x42, 0xa8, 0x54, 0x4e, 0x5, 0x63, 0x52, 0x5, 0x2, 0x3, 0xa5, 0x4, 0x8, 0x13, 0x75, 0xf5, 0x7, 0x13, 0x5, 0x5, 0x8, 0x23, 0xa0, 0xa4, 0x8, 0xa8, 0x54, 0x42, 0x5, 0x63, 0x46, 0x5, 0x0, 0x3, 0xa5, 0x4, 0x8, 0x5, 0x89, 0x6d, 0xd9, 0xa8, 0x54, 0xd2, 0x45, 0x6d, 0x8d, 0x93, 0x15, 0xdd, 0x0, 0x4d, 0x8d, 0xa8, 0xd4, 0xa8, 0x54, 0xc2, 0x45, 0x6d, 0x8d, 0xa8, 0xd4, 0xa8, 0x54, 0xb2, 0x45, 0x6d, 0x8d, 0xb7, 0x5, 0x0, 0x4, 0x4d, 0x8d, 0xa8, 0xd4, 0x3, 0xa5, 0x4, 0x8, 0xb7, 0x5, 0x0, 0x8, 0x63, 0x4, 0xd, 0x0, 0xb7, 0x5, 0x0, 0x20, 0x13, 0x75, 0xf5, 0x7, 0x4d, 0x8d, 0x23, 0xa0, 0xa4, 0x8, 0x22, 0x45, 0x63, 0x3, 0xd, 0x0, 0x12, 0x45, 0xac, 0x54, 0xb3, 0xf5, 0x75, 0x1, 0xac, 0xd4, 0xac, 0x54, 0x37, 0x6, 0x0, 0x80, 0xd1, 0x8d, 0xac, 0xd4, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x63, 0xa8, 0x54, 0x42, 0x5, 0x63, 0x48, 0x5, 0x0, 0x3, 0xa5, 0x4, 0x8, 0x5, 0x89, 0x6d, 0xd9, 0x1, 0x44, 0x19, 0xa0, 0xe0, 0x54, 0x1d, 0x80, 0xa8, 0x54, 0x33, 0x75, 0x75, 0x1, 0xa8, 0xd4, 0x63, 0x98, 0x9, 0x0, 0x3, 0xa5, 0xc, 0x42, 0xe2, 0x45, 0x6d, 0x8d, 0x23, 0xa0, 0xac, 0x42, 0x63, 0x9, 0xb, 0x2, 0x63, 0xe, 0xc, 0x0, 0x3, 0xa5, 0xcc, 0xa, 0x33, 0x65, 0x55, 0x1, 0x23, 0xa6, 0xac, 0xa, 0x13, 0x5, 0xc0, 0x12, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x5e, 0x63, 0x9, 0x9, 0x0, 0x3, 0xa5, 0xc, 0x42, 0xb7, 0x5, 0x0, 0x40, 0x4d, 0x8d, 0x23, 0xa0, 0xac, 0x42, 0x63, 0x95, 0xd, 0x0, 0x13, 0x6, 0x0, 0x2, 0x31, 0xa0, 0x82, 0x45, 0x33, 0x5, 0xba, 0x2, 0x33, 0x56, 0xb5, 0x2, 0x45, 0xc2, 0x2a, 0x6, 0x13, 0x55, 0xd4, 0x0, 0x4e, 0x4, 0x93, 0x55, 0x16, 0x0, 0x2e, 0x94, 0xb3, 0x35, 0xb4, 0x0, 0x2e, 0x95, 0x93, 0x35, 0x14, 0x0, 0xb3, 0x5, 0xb5, 0x40, 0x13, 0x5, 0xf4, 0xff, 0x81, 0x46, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x45, 0x37, 0x64, 0x9, 0x60, 0xe3, 0x4, 0x5, 0xdc, 0xb7, 0x15, 0xb, 0x60, 0x3, 0xa0, 0x45, 0x0, 0xc8, 0xc1, 0x37, 0x45, 0xd8, 0x50, 0x13, 0x5, 0x15, 0xaa, 0xb7, 0x25, 0xb, 0x60, 0x13, 0x87, 0x5, 0xc0, 0x48, 0xd3, 0x37, 0x6, 0xc4, 0x12, 0x10, 0xd3, 0x23, 0xa2, 0x5, 0xc2, 0x48, 0xcf, 0x10, 0x43, 0xb7, 0xf6, 0xff, 0x7f, 0xfd, 0x16, 0x75, 0x8e, 0x10, 0xc3, 0x23, 0xae, 0x5, 0xc0, 0xb7, 0x95, 0x0, 0x60, 0xe8, 0xd1, 0x1, 0x46, 0xb0, 0xc5, 0xf0, 0xd1, 0xb7, 0xa5, 0x0, 0x60, 0xe8, 0xd1, 0xb0, 0xc5, 0xf0, 0xd1, 0xb6, 0x40, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x22, 0x5c, 0x92, 0x5c, 0x2, 0x5d, 0xf2, 0x4d, 0x61, 0x61, 0x82, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0xa0, 0x82, 0x80, 0x37, 0x25, 0x80, 0x40, 0x13, 0x5, 0x5, 0x0, 0x73, 0x10, 0x55, 0x30, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x37, 0x4, 0x0, 0x60, 0x48, 0x4c, 0x13, 0x75, 0xf5, 0xf, 0x9, 0xc9, 0x8, 0x40, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x1, 0x5, 0x89, 0x75, 0xd5, 0x0, 0x0, 0x37, 0x5, 0x0, 0x60, 0x85, 0x45, 0xc, 0xc9, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x35, 0x80, 0x40, 0x13, 0x86, 0x85, 0xb8, 0x91, 0x65, 0xb2, 0x95, 0x83, 0xc5, 0x85, 0x40, 0x8d, 0xe9, 0xc5, 0x46, 0xaa, 0x6, 0x33, 0x7, 0xd6, 0x0, 0x5c, 0x43, 0x3e, 0x96, 0x23, 0x0, 0xa6, 0x0, 0x48, 0x43, 0x5, 0x5, 0xa9, 0x8e, 0x10, 0x43, 0x93, 0xb6, 0x16, 0x0, 0xfd, 0x16, 0x75, 0x8d, 0x48, 0xc3, 0x63, 0x17, 0xa6, 0x0, 0x37, 0x75, 0x80, 0x40, 0x5, 0x46, 0x23, 0x8, 0xc5, 0xf8, 0x33, 0x35, 0xb0, 0x0, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x37, 0xf4, 0x0, 0x60, 0x48, 0x40, 0x11, 0x89, 0x9, 0xc9, 0x8, 0x40, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xfa, 0x5, 0x89, 0x7d, 0xd5, 0x0, 0x0, 0x37, 0xf5, 0x0, 0x60, 0x91, 0x45, 0x4c, 0xc9, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0x35, 0x80, 0x40, 0x13, 0x8, 0x85, 0xb8, 0xc5, 0x47, 0xaa, 0x7, 0x33, 0x7, 0xf8, 0x0, 0x14, 0x43, 0x48, 0x43, 0x83, 0x45, 0x87, 0x0, 0x35, 0x8d, 0x33, 0x66, 0xb5, 0x0, 0x33, 0x35, 0xc0, 0x0, 0x11, 0xce, 0x23, 0x4, 0x7, 0x0, 0x93, 0x85, 0x16, 0x0, 0xad, 0x8f, 0x13, 0xb6, 0x17, 0x0, 0x7d, 0x16, 0xf1, 0x8d, 0xc, 0xc3, 0xc2, 0x96, 0x83, 0xc5, 0x6, 0x0, 0x82, 0x80, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x51, 0x8d, 0x82, 0x82, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x82, 0x82, 0x3, 0x45, 0x14, 0x1, 0x83, 0x45, 0x4, 0x1, 0x3, 0x46, 0x24, 0x1, 0x83, 0x46, 0x34, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x82, 0x82, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x82, 0x8a, 0x95, 0x13, 0x6, 0x80, 0x5, 0x82, 0x82, 0xc, 0xd1, 0x83, 0x25, 0x85, 0x9, 0x93, 0xe5, 0x15, 0x0, 0x23, 0x2c, 0xb5, 0x8, 0x82, 0x82, 0x33, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x82, 0x82, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x56, 0xd5, 0x0, 0x33, 0x15, 0xc5, 0x0, 0xb3, 0x95, 0xc5, 0x0, 0xd5, 0x8d, 0x82, 0x80, 0xb3, 0x15, 0xc5, 0x0, 0x1, 0x45, 0x82, 0x80, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0x33, 0x55, 0xc5, 0x0, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x96, 0xd5, 0x0, 0x55, 0x8d, 0xb3, 0xd5, 0xc5, 0x0, 0x82, 0x80, 0x33, 0xd5, 0xc5, 0x0, 0x81, 0x45, 0x82, 0x80, 0x1, 0x46, 0xc1, 0x46, 0x33, 0x57, 0xd5, 0x0, 0x63, 0x63, 0xb7, 0x0, 0x3a, 0x85, 0x33, 0x37, 0xb7, 0x0, 0x7d, 0x17, 0x75, 0x8f, 0x85, 0x82, 0x3a, 0x96, 0xed, 0xf6, 0x32, 0x85, 0x82, 0x80, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x82, 0x21, 0x3a, 0x8a, 0xb6, 0x89, 0x32, 0x8b, 0xae, 0x84, 0x2a, 0x89, 0x11, 0xc7, 0x63, 0x2, 0x4b, 0x3, 0x33, 0x35, 0x4b, 0x1, 0x5, 0xa0, 0x63, 0x5, 0xb, 0x8, 0x63, 0x7a, 0x3b, 0x9, 0x4e, 0x85, 0xda, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xfb, 0x5d, 0xe1, 0xfd, 0x4a, 0x6d, 0xa0, 0x33, 0xb5, 0x34, 0x1, 0x81, 0x46, 0x25, 0xe1, 0x63, 0xf, 0xb, 0x4, 0x5a, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xf9, 0xaa, 0x8a, 0x13, 0x76, 0xf5, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x18, 0x81, 0x46, 0x5, 0x46, 0x33, 0x17, 0x56, 0x1, 0x33, 0xb6, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x84, 0xc7, 0x40, 0x63, 0x4d, 0x4, 0x0, 0x89, 0x8c, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x37, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb7, 0x34, 0x1, 0xd9, 0x8e, 0x81, 0xef, 0x22, 0x8b, 0x5, 0x81, 0x13, 0x96, 0xf5, 0x1, 0x51, 0x8d, 0x85, 0x81, 0x5, 0x83, 0xf9, 0xb7, 0x5a, 0x84, 0x36, 0x88, 0x69, 0xa0, 0x1, 0x48, 0x59, 0xa0, 0x1, 0x44, 0x1, 0x48, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xa5, 0xa8, 0x63, 0x16, 0x3b, 0x9, 0x1, 0x44, 0x33, 0xd5, 0x64, 0x3, 0xb3, 0xf4, 0x64, 0x3, 0xb3, 0x35, 0xa0, 0x0, 0x7d, 0x15, 0x93, 0x6, 0x15, 0x0, 0x13, 0xb5, 0x16, 0x0, 0x33, 0x88, 0xa5, 0x0, 0x99, 0xa8, 0x93, 0x5, 0x0, 0x2, 0xb3, 0x8a, 0xa5, 0x40, 0x13, 0xf6, 0xfa, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xf, 0x81, 0x46, 0x5, 0x46, 0x33, 0x16, 0x56, 0x1, 0x33, 0xb7, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x87, 0xe7, 0x40, 0x63, 0x46, 0x7, 0x0, 0x89, 0x8c, 0xd1, 0x8e, 0x9, 0xcb, 0x3a, 0x8b, 0x5, 0x81, 0x13, 0x97, 0xf5, 0x1, 0x59, 0x8d, 0x85, 0x81, 0x5, 0x82, 0xf1, 0xbf, 0x1, 0x44, 0x1, 0x48, 0x33, 0xd5, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xc9, 0x8e, 0x4a, 0x85, 0x4, 0xc5, 0x14, 0xc1, 0x40, 0xc5, 0x23, 0x22, 0x9, 0x1, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xc, 0x82, 0x80, 0x93, 0xd5, 0x9, 0x1, 0x33, 0x58, 0x3b, 0x3, 0x33, 0x74, 0x3b, 0x3, 0x95, 0xe9, 0x93, 0xd5, 0x4, 0x1, 0x13, 0x16, 0x4, 0x1, 0xd1, 0x8d, 0x33, 0xd6, 0x35, 0x3, 0xb3, 0xf5, 0x35, 0x3, 0xc2, 0x4, 0xc1, 0x80, 0xc2, 0x5, 0xc5, 0x8d, 0xb3, 0xd6, 0x35, 0x3, 0xb3, 0xf4, 0x35, 0x3, 0x93, 0x15, 0x6, 0x1, 0x41, 0x82, 0x33, 0x68, 0x6, 0x1, 0xcd, 0x8e, 0x1, 0x44, 0x75, 0xb7, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x35, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb5, 0x34, 0x1, 0x99, 0xc1, 0x81, 0x46, 0x61, 0xbf, 0x93, 0xd6, 0x19, 0x0, 0x7e, 0xa, 0xb3, 0x66, 0xda, 0x0, 0x93, 0x97, 0xf9, 0x1, 0x37, 0x7, 0x0, 0x80, 0x33, 0xb5, 0xf4, 0x0, 0x33, 0x6, 0xd4, 0x40, 0x9, 0x8e, 0x63, 0x46, 0x6, 0x0, 0x9d, 0x8c, 0xd9, 0x8d, 0x9, 0xca, 0x32, 0x84, 0x85, 0x83, 0x13, 0x95, 0xf6, 0x1, 0xc9, 0x8f, 0x85, 0x82, 0x5, 0x83, 0xf9, 0xbf, 0x1, 0x44, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xcd, 0x8e, 0x91, 0xbf, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xdb, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xdd, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x22, 0x4, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xe0, 0xb2, 0x45, 0x22, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0x5a, 0xc0, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0xaa, 0x85, 0x28, 0x0, 0x82, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x3b, 0x75, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x3f, 0x7d, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7e, 0x45, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x7e, 0x49, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x7e, 0x51, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7e, 0x9d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7e, 0xa5, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7e, 0xa9, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7e, 0xb1, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7d, 0x3d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7d, 0x5, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x7d, 0xd, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x7d, 0x11, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7d, 0x19, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7d, 0xe5, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7d, 0xed, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7d, 0xf1, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7c, 0xf9, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7c, 0xc1, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x7c, 0x4d, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0xa0, 0x55, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x9f, 0x59, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x9f, 0x61, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x9e, 0xad, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x9d, 0xb5, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x9c, 0xb9, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x9b, 0x81, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x9a, 0x89, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x99, 0x15, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x98, 0x1d, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x98, 0x21, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x97, 0x29, 0xa0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x1f, 0x16, 0xc2, 0x1a, 0xc4, 0x1e, 0xc6, 0x72, 0xc8, 0x76, 0xca, 0x7a, 0xcc, 0x7e, 0xce, 0x2a, 0xd0, 0x2e, 0xd2, 0x32, 0xd4, 0x36, 0xd6, 0x3a, 0xd8, 0x3e, 0xda, 0x42, 0xdc, 0x46, 0xde, 0xa2, 0xc0, 0xa6, 0xc2, 0xca, 0xc4, 0xce, 0xc6, 0xd2, 0xc8, 0xd6, 0xca, 0xda, 0xcc, 0xde, 0xce, 0xe2, 0xd0, 0xe6, 0xd2, 0xea, 0xd4, 0xee, 0xd6, 0x8e, 0xd8, 0x92, 0xda, 0x73, 0x23, 0x10, 0x34, 0x9a, 0xde, 0x73, 0x23, 0x0, 0x30, 0x1a, 0xc1, 0x73, 0x23, 0x20, 0x34, 0x1a, 0xc3, 0x73, 0x23, 0x30, 0x34, 0x1a, 0xc5, 0x0, 0x11, 0xa2, 0xdc, 0xa, 0x85, 0x71, 0x11, 0x6, 0xc0, 0xef, 0x0, 0xc0, 0x15, 0x82, 0x40, 0x2a, 0xc0, 0x48, 0x0, 0x82, 0x90, 0x2, 0x45, 0xef, 0x0, 0x80, 0x17, 0x11, 0x1, 0x76, 0x53, 0x73, 0x10, 0x13, 0x34, 0xa, 0x43, 0x73, 0x10, 0x3, 0x30, 0x82, 0x40, 0x92, 0x42, 0x22, 0x43, 0xb2, 0x43, 0x42, 0x4e, 0xd2, 0x4e, 0x62, 0x4f, 0xf2, 0x4f, 0x2, 0x55, 0x92, 0x55, 0x22, 0x56, 0xb2, 0x56, 0x42, 0x57, 0xd2, 0x57, 0x62, 0x58, 0xf2, 0x58, 0x6, 0x44, 0x96, 0x44, 0x26, 0x49, 0xb6, 0x49, 0x46, 0x4a, 0xd6, 0x4a, 0x66, 0x4b, 0xf6, 0x4b, 0x6, 0x5c, 0x96, 0x5c, 0x26, 0x5d, 0xb6, 0x5d, 0xc6, 0x51, 0x56, 0x52, 0x66, 0x51, 0x73, 0x0, 0x20, 0x30, 0x1, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x1f, 0xd0, 0x6f, 0xf0, 0xbf, 0xd0, 0x6f, 0xf0, 0x5f, 0xd1, 0x6f, 0xf0, 0xff, 0xd1, 0x6f, 0xf0, 0x9f, 0xd2, 0x6f, 0xf0, 0x3f, 0xd3, 0x6f, 0xf0, 0xdf, 0xd3, 0x6f, 0xf0, 0x7f, 0xd4, 0x6f, 0xf0, 0x1f, 0xd5, 0x6f, 0xf0, 0xbf, 0xd5, 0x6f, 0xf0, 0x5f, 0xd6, 0x6f, 0xf0, 0xff, 0xd6, 0x6f, 0xf0, 0x9f, 0xd7, 0x6f, 0xf0, 0x3f, 0xd8, 0x6f, 0xf0, 0xdf, 0xd8, 0x6f, 0xf0, 0x7f, 0xd9, 0x6f, 0xf0, 0x1f, 0xda, 0x6f, 0xf0, 0xbf, 0xda, 0x6f, 0xf0, 0x5f, 0xdb, 0x6f, 0xf0, 0xff, 0xdb, 0x6f, 0xf0, 0x9f, 0xdc, 0x6f, 0xf0, 0x3f, 0xdd, 0x6f, 0xf0, 0xdf, 0xdd, 0x6f, 0xf0, 0x7f, 0xde, 0x6f, 0xf0, 0x1f, 0xdf, 0x6f, 0xf0, 0xbf, 0xdf, 0x6f, 0xf0, 0x5f, 0xe0, 0x6f, 0xf0, 0xff, 0xe0, 0x6f, 0xf0, 0x9f, 0xe1, 0x6f, 0xf0, 0x3f, 0xe2, 0x6f, 0xf0, 0xdf, 0xe2, 0x6f, 0xf0, 0x7f, 0xe3, 0x73, 0x25, 0x20, 0x34, 0xa, 0x5, 0xb7, 0x15, 0x0, 0x20, 0x2e, 0x95, 0x10, 0x49, 0x3, 0xa5, 0x5, 0x9, 0xbd, 0x46, 0x63, 0x78, 0xd6, 0x0, 0x5, 0x6, 0x23, 0xa8, 0xc5, 0x8, 0xa1, 0x45, 0x73, 0xa0, 0x5, 0x30, 0x13, 0x75, 0xf5, 0xf, 0x82, 0x80, 0xa1, 0x45, 0x73, 0xb0, 0x5, 0x30, 0xb7, 0x15, 0x0, 0x20, 0x23, 0xa8, 0xa5, 0x8, 0x82, 0x80, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0x83, 0x76, 0x0, 0x0, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0x63, 0x75, 0x13, 0x95, 0x15, 0x0, 0x5, 0x81, 0xb1, 0x45, 0x63, 0x7b, 0xb5, 0x0, 0xa, 0x5, 0xb7, 0x35, 0x80, 0x40, 0x93, 0x85, 0x85, 0xb3, 0x2e, 0x95, 0x1c, 0x41, 0x91, 0xc3, 0x82, 0x87, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0xe3, 0x72, 0x0, 0x0, 0xaa, 0x85, 0x5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0x4d, 0x71, 0x10, 0x2, 0x23, 0x26, 0x16, 0x4, 0x20, 0xc6, 0x64, 0xc2, 0x23, 0x20, 0x26, 0x5, 0x23, 0x2e, 0x36, 0x3, 0x23, 0x2c, 0x46, 0x3, 0x23, 0x2a, 0x56, 0x3, 0x23, 0x28, 0x66, 0x3, 0x23, 0x26, 0x76, 0x3, 0x23, 0x24, 0x86, 0x3, 0x23, 0x22, 0x96, 0x3, 0x23, 0x20, 0xa6, 0x3, 0x23, 0x2e, 0xb6, 0x1, 0x73, 0x26, 0x40, 0xf1, 0x2e, 0xc8, 0x63, 0x1e, 0x6, 0x38, 0xb7, 0x5, 0x1, 0x60, 0x83, 0xac, 0x45, 0x10, 0x83, 0xad, 0x85, 0x10, 0xf3, 0x25, 0x40, 0xf1, 0x63, 0x94, 0x5, 0x38, 0x85, 0x45, 0xb3, 0x95, 0xa5, 0x0, 0x37, 0x16, 0x0, 0x20, 0xc, 0xc6, 0xf3, 0x25, 0x40, 0xf1, 0x63, 0x9a, 0x5, 0x36, 0x7d, 0x15, 0x2a, 0xc4, 0x28, 0x8, 0x13, 0x6, 0x0, 0x10, 0x97, 0xe0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x2, 0x81, 0x4b, 0x1, 0x4c, 0x37, 0xb5, 0x7c, 0x7, 0x13, 0xb, 0x15, 0x53, 0x37, 0x35, 0x80, 0x40, 0x13, 0x6, 0x85, 0xa8, 0x66, 0xc2, 0x6e, 0xc0, 0x5a, 0xc6, 0x32, 0xca, 0x33, 0xe5, 0x7c, 0x1, 0xb3, 0xe5, 0x8d, 0x1, 0x4d, 0x8d, 0x63, 0xd, 0x5, 0x18, 0x63, 0x9b, 0xb, 0x2, 0x33, 0x5, 0x80, 0x41, 0x33, 0x75, 0xac, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x89, 0xc, 0x2, 0xb3, 0x5, 0x90, 0x41, 0xb3, 0xf5, 0xbc, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0x70, 0x41, 0x33, 0xf5, 0xab, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x9b, 0xc, 0xfc, 0xb3, 0x5, 0xb0, 0x41, 0xb3, 0xf5, 0xbd, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0xe5, 0xbc, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x13, 0x95, 0x24, 0x0, 0xb7, 0x5, 0x1, 0x60, 0x4d, 0x8d, 0x8, 0x41, 0x13, 0xbd, 0x4, 0x4, 0x13, 0x84, 0x4, 0xfc, 0x93, 0x5, 0x0, 0x4, 0xb3, 0x8a, 0x95, 0x40, 0x13, 0xb9, 0x14, 0x0, 0x41, 0xc5, 0xa, 0x5, 0xb7, 0x15, 0x0, 0x20, 0x2e, 0x95, 0x3, 0x2a, 0x5, 0x1, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x9a, 0x2a, 0x84, 0xae, 0x89, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x99, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0x22, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0xce, 0x85, 0x93, 0x79, 0xfa, 0x0, 0x13, 0x4, 0xf9, 0xff, 0x33, 0x79, 0xa4, 0x0, 0x6d, 0x8c, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x96, 0xb3, 0x6, 0xa0, 0x41, 0x33, 0xf6, 0xa6, 0x0, 0xed, 0x8e, 0x92, 0x9, 0x28, 0x8, 0xaa, 0x99, 0xce, 0x84, 0xc8, 0x40, 0x8c, 0x40, 0xd8, 0x44, 0x9c, 0x44, 0x55, 0x8d, 0xd1, 0x8d, 0x41, 0x8f, 0xb3, 0xe7, 0x27, 0x1, 0x9c, 0xc4, 0xd8, 0xc4, 0x8c, 0xc0, 0xc8, 0xc0, 0xb1, 0xa8, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x92, 0xaa, 0x89, 0x2e, 0x8a, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x91, 0x2a, 0x8b, 0x2e, 0x84, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x90, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0xa2, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0x5a, 0x85, 0x33, 0x6, 0xa0, 0x41, 0xb3, 0x76, 0x46, 0x1, 0x33, 0x76, 0x36, 0x1, 0x7d, 0x19, 0x33, 0x74, 0xb9, 0x0, 0x33, 0x79, 0xa9, 0x0, 0x32, 0x4b, 0x13, 0x45, 0xf4, 0xff, 0x93, 0x45, 0xf9, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0x13, 0x46, 0xf6, 0xff, 0xb3, 0xfc, 0xcc, 0x0, 0xb3, 0xfd, 0xdd, 0x0, 0xb3, 0xfb, 0xbb, 0x0, 0x33, 0x7c, 0xac, 0x0, 0x52, 0x46, 0xb9, 0xbd, 0x49, 0x45, 0xa2, 0x45, 0x63, 0x6d, 0xb5, 0x18, 0x13, 0x95, 0x25, 0x0, 0xb7, 0x35, 0x80, 0x40, 0x93, 0x85, 0x5, 0xab, 0x2e, 0x95, 0x8, 0x41, 0xc1, 0x45, 0x12, 0x46, 0x82, 0x46, 0x63, 0x70, 0xb5, 0x18, 0x12, 0x5, 0x2c, 0x8, 0x2e, 0x95, 0x4c, 0x41, 0x8, 0x41, 0x1, 0x49, 0x1, 0x4b, 0xb3, 0xfb, 0xd5, 0x0, 0x33, 0x7c, 0xc5, 0x0, 0x37, 0xb5, 0x7c, 0x7, 0x93, 0xc, 0x15, 0x53, 0x37, 0x35, 0x80, 0x40, 0x13, 0xd, 0x85, 0xa8, 0x93, 0xd, 0x0, 0x4, 0x33, 0x65, 0x2c, 0x1, 0xb3, 0xe5, 0x6b, 0x1, 0x4d, 0x8d, 0x63, 0x9, 0x5, 0x10, 0x63, 0x1b, 0x9, 0x2, 0x33, 0x5, 0x60, 0x41, 0x33, 0x75, 0xab, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x9, 0xc, 0x2, 0xb3, 0x5, 0x80, 0x41, 0xb3, 0x75, 0xbc, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0x20, 0x41, 0x33, 0x75, 0xa9, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x1b, 0xc, 0xfc, 0xb3, 0x5, 0x70, 0x41, 0xb3, 0xf5, 0xbb, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0x65, 0x7c, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0xfb, 0x93, 0x15, 0x5, 0x1, 0xc1, 0x81, 0x93, 0x85, 0xf5, 0xfb, 0x91, 0xc5, 0xc2, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xb, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x7c, 0xaa, 0x89, 0xae, 0x8a, 0x13, 0x86, 0x4, 0xfc, 0x5, 0x45, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x7a, 0x2a, 0x8a, 0x2e, 0x84, 0x33, 0x86, 0x9d, 0x40, 0x5, 0x45, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x7a, 0x63, 0xe3, 0xb4, 0x1, 0xa2, 0x85, 0x63, 0xe3, 0xb4, 0x1, 0x52, 0x85, 0x13, 0xb6, 0x4, 0x4, 0x33, 0x6, 0xc0, 0x40, 0xb3, 0x76, 0x56, 0x1, 0x33, 0x76, 0x36, 0x1, 0x13, 0xb7, 0x14, 0x0, 0x7d, 0x17, 0xf9, 0x8d, 0x79, 0x8d, 0x13, 0x45, 0xf5, 0xff, 0x93, 0xc5, 0xf5, 0xff, 0x13, 0x46, 0xf6, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0xb3, 0xfb, 0xdb, 0x0, 0x33, 0x7c, 0xcc, 0x0, 0x33, 0x7b, 0xbb, 0x0, 0x33, 0x79, 0xa9, 0x0, 0xdd, 0xb5, 0x8, 0x2, 0x83, 0x20, 0xc5, 0x4, 0x20, 0x45, 0x64, 0x41, 0x3, 0x29, 0x5, 0x4, 0x83, 0x29, 0xc5, 0x3, 0x3, 0x2a, 0x85, 0x3, 0x83, 0x2a, 0x45, 0x3, 0x3, 0x2b, 0x5, 0x3, 0x83, 0x2b, 0xc5, 0x2, 0x3, 0x2c, 0x85, 0x2, 0x83, 0x2c, 0x45, 0x2, 0x3, 0x2d, 0x5, 0x2, 0x83, 0x2d, 0xc5, 0x1, 0x71, 0x61, 0x82, 0x80, 0x0, 0x0, 0x42, 0x5, 0x41, 0x81, 0x37, 0x36, 0x80, 0x40, 0x13, 0x6, 0x46, 0x8e, 0xa, 0x5, 0x32, 0x95, 0x1c, 0x41, 0x37, 0x25, 0x80, 0x40, 0x13, 0x5, 0x85, 0xb2, 0x63, 0x84, 0xa7, 0x0, 0x2e, 0x85, 0x82, 0x87, 0x0, 0x0, 0xaa, 0x85, 0x9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xc0, 0xaa, 0x85, 0xd, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xbf, 0xaa, 0x85, 0x11, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xbe, 0xaa, 0x85, 0x15, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xbd, 0xaa, 0x85, 0x19, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xbd, 0xaa, 0x85, 0x1d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xbc, 0xaa, 0x85, 0x21, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xbb, 0xaa, 0x85, 0x25, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xba, 0xaa, 0x85, 0x29, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xba, 0xaa, 0x85, 0x2d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xb9, 0xaa, 0x85, 0x31, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xb8, 0xaa, 0x85, 0x35, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xb7, 0xaa, 0x85, 0x39, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xb7, 0xaa, 0x85, 0x3d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xb6, 0xaa, 0x85, 0x41, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xb5, 0xaa, 0x85, 0x45, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xb4, 0xaa, 0x85, 0x49, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xb4, 0xaa, 0x85, 0x4d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xb3, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40}, + }, + { + .addr = 1082141160, + .size = 384, + .data = (uint8_t[]){0xbc, 0xb, 0x80, 0x40, 0x92, 0xc, 0x80, 0x40, 0xce, 0xc, 0x80, 0x40, 0xbc, 0xb, 0x80, 0x40, 0x78, 0xe, 0x80, 0x40, 0x92, 0xc, 0x80, 0x40, 0x3a, 0xd, 0x80, 0x40, 0xa2, 0xd, 0x80, 0x40, 0xd6, 0xe, 0x80, 0x40, 0x2, 0xf, 0x80, 0x40, 0xd2, 0x14, 0x80, 0x40, 0x20, 0xd, 0x80, 0x40, 0xd2, 0x14, 0x80, 0x40, 0xd6, 0xd, 0x80, 0x40, 0xbc, 0xb, 0x80, 0x40, 0x92, 0xc, 0x80, 0x40, 0xce, 0xc, 0x80, 0x40, 0x4c, 0xf, 0x80, 0x40, 0x6e, 0xd, 0x80, 0x40, 0x7e, 0xc, 0x80, 0x40, 0xe6, 0x11, 0x80, 0x40, 0x52, 0x10, 0x80, 0x40, 0x16, 0xd, 0x80, 0x40, 0x92, 0xc, 0x80, 0x40, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x0, 0x1, 0x1c, 0x2, 0x1d, 0xe, 0x18, 0x3, 0x1e, 0x16, 0x14, 0xf, 0x19, 0x11, 0x4, 0x8, 0x1f, 0x1b, 0xd, 0x17, 0x15, 0x13, 0x10, 0x7, 0x1a, 0xc, 0x12, 0x6, 0xb, 0x5, 0xa, 0x9, 0xc0, 0xdb, 0xdc, 0xdb, 0xdd, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x28, 0x1b, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x28, 0x1b, 0x80, 0x40}, + }, + }, + }, + + // esp32c6.json + { + .header = { + .entrypoint = 1082130432, + }, + .segments = { + { + .addr = 1082130432, + .size = 16420, + .data = (uint8_t[]){0xb7, 0x0, 0x80, 0x40, 0x67, 0x80, 0x80, 0x0, 0x17, 0x45, 0x0, 0x0, 0x13, 0x5, 0xc5, 0x19, 0x97, 0x5, 0x1, 0x0, 0x93, 0x85, 0x85, 0x5c, 0x63, 0x57, 0xb5, 0x0, 0x81, 0x46, 0x14, 0xc1, 0x11, 0x5, 0xe3, 0x4e, 0xb5, 0xfe, 0x17, 0x5, 0x80, 0xf, 0x13, 0x5, 0xa5, 0xfd, 0x97, 0x5, 0x80, 0xf, 0x93, 0x85, 0x25, 0xfd, 0x63, 0x57, 0xb5, 0x0, 0x81, 0x46, 0x14, 0xc1, 0x11, 0x5, 0xe3, 0x4e, 0xb5, 0xfe, 0x81, 0x40, 0x1, 0x41, 0x81, 0x41, 0x1, 0x42, 0x81, 0x42, 0x1, 0x43, 0x81, 0x43, 0x1, 0x44, 0x81, 0x44, 0x1, 0x45, 0x81, 0x45, 0x1, 0x46, 0x81, 0x46, 0x1, 0x47, 0x81, 0x47, 0x1, 0x48, 0x81, 0x48, 0x1, 0x49, 0x81, 0x49, 0x1, 0x4a, 0x81, 0x4a, 0x1, 0x4b, 0x81, 0x4b, 0x1, 0x4c, 0x81, 0x4c, 0x1, 0x4d, 0x81, 0x4d, 0x1, 0x4e, 0x81, 0x4e, 0x1, 0x4f, 0x81, 0x4f, 0x97, 0x51, 0x0, 0x0, 0x93, 0x81, 0x21, 0x92, 0xf3, 0x23, 0x40, 0xf1, 0xb7, 0x2, 0x0, 0x0, 0x93, 0x82, 0x2, 0x0, 0x63, 0xf4, 0x72, 0x0, 0x6f, 0x0, 0x80, 0x4, 0x17, 0xe1, 0x6, 0x0, 0x13, 0x1, 0x21, 0x57, 0x91, 0x42, 0x33, 0x1, 0x51, 0x40, 0x13, 0x71, 0x1, 0xff, 0xa, 0x84, 0x6f, 0x0, 0x40, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x20, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xb6, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x72, 0x37, 0x15, 0x81, 0x40, 0xb7, 0xc5, 0xad, 0xde, 0x93, 0x85, 0xe5, 0xab, 0x23, 0x2c, 0xb5, 0x5c, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x55, 0x6f, 0x0, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0x6, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x35, 0x6, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x47, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x33, 0xe8, 0xb6, 0x0, 0x83, 0x45, 0x55, 0x0, 0x3, 0x46, 0x45, 0x0, 0x83, 0x46, 0x65, 0x0, 0x3, 0x47, 0x75, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x3, 0x46, 0x95, 0x0, 0x83, 0x46, 0x85, 0x0, 0x3, 0x47, 0xa5, 0x0, 0x83, 0x47, 0xb5, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x48, 0xd5, 0x0, 0x3, 0x47, 0xc5, 0x0, 0x83, 0x47, 0xe5, 0x0, 0x83, 0x46, 0xf5, 0x0, 0xa2, 0x8, 0x33, 0xe7, 0xe8, 0x0, 0xc2, 0x7, 0xe2, 0x6, 0xdd, 0x8e, 0xd9, 0x8e, 0x83, 0x48, 0x15, 0x1, 0x83, 0x42, 0x5, 0x1, 0x3, 0x43, 0x25, 0x1, 0x83, 0x47, 0x35, 0x1, 0xa2, 0x8, 0x33, 0xe7, 0x58, 0x0, 0x42, 0x3, 0xe2, 0x7, 0xb3, 0xe7, 0x67, 0x0, 0x5d, 0x8f, 0x83, 0x42, 0x55, 0x1, 0x83, 0x48, 0x45, 0x1, 0x3, 0x43, 0x65, 0x1, 0x3, 0x45, 0x75, 0x1, 0xa2, 0x2, 0xb3, 0xe7, 0x12, 0x1, 0x42, 0x3, 0x62, 0x5, 0x33, 0x65, 0x65, 0x0, 0xc9, 0x8f, 0x42, 0x85, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x40, 0xfa, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xfc, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xb2, 0x86, 0x2e, 0x86, 0x81, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xe, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x2a, 0x29, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x2b, 0x3, 0x45, 0xb4, 0x0, 0x83, 0x45, 0xa4, 0x0, 0x3, 0x46, 0xc4, 0x0, 0x83, 0x46, 0xd4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0xf4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0x4, 0x1, 0x3, 0x47, 0x14, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0x33, 0x66, 0xd7, 0x0, 0x49, 0x8e, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x26, 0x26, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0x24, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x36, 0x89, 0xb2, 0x89, 0x2e, 0x84, 0xaa, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x22, 0x21, 0x46, 0x26, 0x85, 0xa2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x22, 0x26, 0x85, 0xce, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x22, 0x93, 0x5, 0x84, 0x0, 0x9, 0x46, 0x26, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x21, 0x26, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x1e, 0x39, 0x71, 0x6, 0xde, 0x22, 0xdc, 0x26, 0xda, 0x4a, 0xd8, 0x4e, 0xd6, 0x52, 0xd4, 0x56, 0xd2, 0x5a, 0xd0, 0x5e, 0xce, 0x62, 0xcc, 0x66, 0xca, 0x6a, 0xc8, 0x6e, 0xc6, 0xaa, 0x8a, 0x3, 0x2b, 0x45, 0x1, 0x44, 0x45, 0x36, 0x8a, 0x32, 0x89, 0xae, 0x89, 0xda, 0x8c, 0x63, 0x63, 0xdb, 0x0, 0xd2, 0x8c, 0x3, 0xa4, 0xa, 0x1, 0x83, 0xad, 0x8a, 0x0, 0x26, 0xc4, 0xe6, 0x94, 0xc1, 0x6b, 0x5, 0x6d, 0x63, 0x7f, 0x94, 0x2, 0x13, 0x15, 0x4, 0x1, 0x9, 0xed, 0x33, 0xc, 0x74, 0x1, 0x63, 0xea, 0x8d, 0x1, 0x13, 0x55, 0x4, 0x1, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0xe3, 0x19, 0xc9, 0x61, 0xa0, 0x13, 0x55, 0xc4, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0xe2, 0x2d, 0xed, 0x33, 0xc, 0xa4, 0x1, 0x23, 0xa8, 0x8a, 0x1, 0x62, 0x84, 0xe3, 0x65, 0x9c, 0xfc, 0x1, 0x44, 0xa2, 0x4b, 0x5e, 0x8c, 0x63, 0x85, 0xc, 0x4, 0x5, 0x65, 0xe6, 0x84, 0x63, 0xe3, 0xac, 0x0, 0x85, 0x64, 0x63, 0x6c, 0x8a, 0x6, 0xb3, 0x5, 0x89, 0x0, 0x62, 0x85, 0x26, 0x86, 0x63, 0x87, 0x9, 0x0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0xdb, 0x29, 0xa0, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x40, 0xde, 0x13, 0x35, 0x15, 0x0, 0x7d, 0x15, 0x13, 0x75, 0x45, 0xc, 0xa3, 0x8e, 0xaa, 0x0, 0xb3, 0x8c, 0x9c, 0x40, 0x26, 0x94, 0x26, 0x9c, 0xe3, 0x9f, 0xc, 0xfa, 0x1, 0x45, 0xb3, 0x85, 0x8b, 0x0, 0xd6, 0x86, 0xcc, 0xc6, 0xb3, 0x5, 0x8b, 0x40, 0x33, 0x36, 0xbb, 0x0, 0x7d, 0x16, 0xf1, 0x8d, 0xcc, 0xca, 0x19, 0xa0, 0x13, 0x5, 0x60, 0x3, 0xf2, 0x50, 0x62, 0x54, 0xd2, 0x54, 0x42, 0x59, 0xb2, 0x59, 0x22, 0x5a, 0x92, 0x5a, 0x2, 0x5b, 0xf2, 0x4b, 0x62, 0x4c, 0xd2, 0x4c, 0x42, 0x4d, 0xb2, 0x4d, 0x21, 0x61, 0x82, 0x80, 0x0, 0x0, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0xb2, 0x89, 0x2e, 0x89, 0x2a, 0x84, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x14, 0x13, 0x75, 0xf5, 0xf, 0x13, 0x5, 0x5, 0xf4, 0x7d, 0xf5, 0x81, 0x44, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x12, 0x93, 0x75, 0xf5, 0xf, 0x13, 0x86, 0x55, 0xf2, 0x1d, 0xe2, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x11, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0x45, 0xf2, 0x99, 0xcd, 0x13, 0x5, 0x35, 0xf2, 0x71, 0xf9, 0x13, 0x5, 0xb0, 0xd, 0x63, 0xed, 0x34, 0x1, 0x25, 0xa8, 0x93, 0x85, 0x5, 0xf4, 0x91, 0xcd, 0x63, 0xe7, 0x34, 0x1, 0x35, 0xa0, 0x13, 0x5, 0x0, 0xc, 0x63, 0xf3, 0x34, 0x3, 0xb3, 0x5, 0x99, 0x0, 0x23, 0x80, 0xa5, 0x0, 0x85, 0x4, 0x6d, 0xb7, 0x63, 0xeb, 0x99, 0x0, 0x4a, 0x85, 0xa6, 0x85, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x5, 0x61, 0x82, 0x80, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x32, 0x89, 0xae, 0x84, 0x2a, 0x84, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x2, 0x22, 0x85, 0xa6, 0x85, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x2, 0x22, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0xb7, 0x45, 0x80, 0x40, 0x93, 0x85, 0x45, 0xe, 0x5, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0x12, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x32, 0x84, 0xae, 0x84, 0x2a, 0x89, 0x37, 0x45, 0x80, 0x40, 0x93, 0x9, 0x55, 0xe, 0x37, 0x45, 0x80, 0x40, 0x13, 0xa, 0x75, 0xe, 0x15, 0xce, 0x3, 0xc5, 0x4, 0x0, 0x93, 0x5, 0x5, 0xf4, 0x81, 0xc9, 0x93, 0x5, 0x55, 0xf2, 0x89, 0xe9, 0x9, 0x46, 0x4a, 0x85, 0xd2, 0x85, 0x19, 0xa8, 0x9, 0x46, 0x4a, 0x85, 0xce, 0x85, 0x39, 0xa0, 0xa3, 0x3, 0xa1, 0x0, 0x93, 0x5, 0x71, 0x0, 0x5, 0x46, 0x4a, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xd, 0x85, 0x4, 0x7d, 0x14, 0x61, 0xf4, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x39, 0xc9, 0x85, 0x45, 0x63, 0x14, 0xb5, 0xa, 0x37, 0x45, 0x80, 0x40, 0x13, 0x5, 0xc5, 0x1c, 0xc5, 0x45, 0xaa, 0x5, 0x2e, 0x95, 0xa1, 0x45, 0x81, 0x47, 0xf3, 0x77, 0x4, 0x30, 0x10, 0x41, 0x54, 0x41, 0x3, 0x47, 0x85, 0x0, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0xa0, 0x5, 0x30, 0x35, 0x8e, 0x59, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x6d, 0xf2, 0x1, 0x44, 0x73, 0x74, 0x4, 0x30, 0x97, 0x30, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xc3, 0x5, 0x89, 0x35, 0xc1, 0x21, 0x88, 0x39, 0xc8, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0xb9, 0xa0, 0x37, 0x45, 0x80, 0x40, 0x13, 0x5, 0xc5, 0x1c, 0xc5, 0x45, 0xaa, 0x5, 0x2e, 0x95, 0xa1, 0x45, 0x81, 0x47, 0xf3, 0x77, 0x4, 0x30, 0x10, 0x41, 0x54, 0x41, 0x3, 0x47, 0x85, 0x0, 0xa1, 0x8b, 0x99, 0xc3, 0x73, 0xa0, 0x5, 0x30, 0x35, 0x8e, 0x59, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x6d, 0xf2, 0x1, 0x44, 0x73, 0x74, 0x4, 0x30, 0x97, 0x30, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xbe, 0x5, 0x89, 0x19, 0xc9, 0x21, 0x88, 0x1, 0xc4, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x2e, 0x85, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x0, 0x0, 0x31, 0xc1, 0x85, 0x46, 0x63, 0x10, 0xd5, 0x6, 0x37, 0xf5, 0x0, 0x60, 0xd, 0x48, 0x15, 0xca, 0x93, 0x6, 0x0, 0x4, 0xb2, 0x87, 0x63, 0x64, 0xd6, 0x0, 0x93, 0x7, 0x0, 0x4, 0xb3, 0x88, 0xf5, 0x0, 0x3e, 0x87, 0x99, 0xc7, 0x83, 0xc6, 0x5, 0x0, 0x85, 0x5, 0x14, 0xc1, 0x7d, 0x17, 0x7d, 0xfb, 0x23, 0x22, 0x5, 0x1, 0x4c, 0x41, 0x8d, 0x89, 0xf5, 0xdd, 0x1d, 0x8e, 0xc6, 0x85, 0x61, 0xfa, 0x82, 0x80, 0x2e, 0x96, 0x37, 0x5, 0x0, 0x60, 0xe3, 0x8c, 0xc5, 0xfe, 0x54, 0x4d, 0xa2, 0x6, 0xe3, 0xce, 0x6, 0xfe, 0x83, 0xc6, 0x5, 0x0, 0x85, 0x5, 0x14, 0xc1, 0xe3, 0x98, 0xc5, 0xfe, 0xc5, 0xb7, 0x0, 0x0, 0x11, 0x71, 0x86, 0xdf, 0xa2, 0xdd, 0xa6, 0xdb, 0xca, 0xd9, 0xce, 0xd7, 0xd2, 0xd5, 0xd6, 0xd3, 0xda, 0xd1, 0xde, 0xcf, 0xe2, 0xcd, 0xe6, 0xcb, 0xea, 0xc9, 0xee, 0xc7, 0x29, 0x65, 0x13, 0x5, 0x5, 0x82, 0x33, 0x1, 0xa1, 0x40, 0x1, 0x45, 0x73, 0x75, 0x4, 0x30, 0xb7, 0x45, 0x80, 0x40, 0x3, 0xc6, 0xc5, 0x1a, 0xe3, 0x16, 0x6, 0x68, 0x5, 0x46, 0x21, 0x89, 0x23, 0x86, 0xc5, 0x1a, 0x1, 0xc5, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x37, 0x4, 0xb, 0x60, 0x13, 0x6, 0x4, 0x8, 0x68, 0x46, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0xb3, 0x9, 0xb1, 0x0, 0xb7, 0x5, 0x0, 0x70, 0x4d, 0x8d, 0x68, 0xc6, 0x68, 0x46, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x33, 0xa, 0xb1, 0x0, 0xb7, 0x5, 0x0, 0x2, 0x4d, 0x8d, 0x68, 0xc6, 0x21, 0x45, 0x85, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x1, 0x37, 0xf5, 0xa, 0x60, 0xc, 0x49, 0x93, 0xe5, 0x15, 0x0, 0xc, 0xc9, 0x93, 0x5, 0x4, 0x80, 0x88, 0x4d, 0x6d, 0x99, 0x88, 0xcd, 0x88, 0x4d, 0x13, 0x65, 0x85, 0x0, 0x88, 0xcd, 0x9, 0x45, 0x93, 0x5, 0x0, 0x5, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x3, 0xd, 0x45, 0xa1, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x3, 0x13, 0x5, 0x60, 0x6, 0x95, 0x45, 0x9, 0x46, 0x81, 0x46, 0x1, 0x47, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xe8, 0x13, 0x5, 0x60, 0x6, 0x95, 0x45, 0x19, 0x46, 0x91, 0x46, 0x1, 0x47, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xe7, 0x19, 0x45, 0x93, 0x5, 0x30, 0x7, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xff, 0x13, 0x5, 0x60, 0x6, 0xa5, 0x45, 0x5, 0x46, 0x9, 0x47, 0x81, 0x46, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xe5, 0x3, 0x25, 0x84, 0x81, 0x1e, 0x5, 0xe3, 0x5d, 0x5, 0xfe, 0x37, 0x5, 0xb, 0x60, 0x13, 0x6, 0x5, 0x80, 0xc, 0x4e, 0x93, 0xe5, 0x45, 0x0, 0xc, 0xce, 0xc, 0x4e, 0xdd, 0x99, 0xc, 0xce, 0x21, 0x45, 0xa1, 0x44, 0x81, 0x45, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xf6, 0x37, 0x64, 0x9, 0x60, 0x48, 0x4c, 0xc1, 0x75, 0xfd, 0x15, 0x13, 0x86, 0x5, 0x10, 0x71, 0x8d, 0x13, 0x5, 0x5, 0x50, 0x48, 0xcc, 0x93, 0x6, 0x4, 0x10, 0x88, 0x4e, 0x1, 0x76, 0x13, 0x6, 0xf6, 0xf, 0x71, 0x8d, 0x88, 0xce, 0x88, 0x4e, 0x6d, 0x8d, 0x88, 0xce, 0x88, 0x4a, 0xb7, 0x5, 0xfd, 0xff, 0xfd, 0x15, 0x6d, 0x8d, 0xc1, 0x65, 0x4d, 0x8d, 0x88, 0xca, 0x13, 0x5, 0x0, 0xa, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0x89, 0x5, 0x45, 0x5, 0x49, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xfc, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0x8f, 0x3, 0x45, 0x85, 0x1, 0x8d, 0x45, 0x63, 0x1c, 0xb5, 0x6, 0x93, 0x5, 0x4, 0x8, 0xc8, 0x45, 0x13, 0x65, 0x15, 0x0, 0xc8, 0xc5, 0xc8, 0x45, 0x75, 0x99, 0xc8, 0xc5, 0x37, 0xf4, 0x0, 0x60, 0x1, 0x45, 0x8, 0xc8, 0x44, 0xc8, 0x8, 0xc8, 0x11, 0x45, 0x48, 0xc8, 0x37, 0x45, 0x80, 0x40, 0x13, 0x5, 0x5, 0xef, 0xb7, 0x35, 0x80, 0x40, 0x93, 0x85, 0xa5, 0x16, 0x23, 0x20, 0xb5, 0xc, 0x13, 0x5, 0x0, 0x3, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x0, 0xfc, 0x8, 0x48, 0x13, 0x65, 0x45, 0x0, 0x8, 0xc8, 0x37, 0x45, 0x80, 0x40, 0x93, 0xa, 0x45, 0x1a, 0x13, 0xf5, 0xca, 0xff, 0x93, 0xf5, 0x3a, 0x0, 0x8e, 0x5, 0x33, 0x16, 0xb9, 0x0, 0x2f, 0x25, 0xc5, 0x44, 0x33, 0x55, 0xb5, 0x0, 0x13, 0x75, 0xf5, 0xf, 0xe3, 0x1d, 0x5, 0x4a, 0x85, 0xa, 0x71, 0xa2, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0x10, 0x0, 0xd1, 0x8d, 0xc, 0xd1, 0xc, 0x40, 0x93, 0xe5, 0x15, 0x0, 0xc, 0xc0, 0xc, 0x40, 0xf5, 0x99, 0xc, 0xc0, 0xb7, 0x5, 0x4, 0x0, 0x93, 0x85, 0x15, 0x11, 0xc, 0xc9, 0x1, 0x46, 0x50, 0xc5, 0x9d, 0x65, 0x89, 0x5, 0xc, 0xc9, 0x50, 0xc5, 0xc, 0x40, 0xf1, 0x99, 0x85, 0x5, 0xc, 0xc0, 0x4c, 0x40, 0x37, 0x6, 0x80, 0xff, 0xf1, 0x8d, 0x37, 0x6, 0x70, 0x0, 0xd1, 0x8d, 0x4c, 0xc0, 0x93, 0x5, 0xb0, 0x15, 0x4c, 0xc9, 0x97, 0x32, 0x0, 0x0, 0xe7, 0x82, 0x2, 0x9b, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x37, 0x4, 0x0, 0x60, 0x8, 0x50, 0x13, 0x65, 0xc5, 0x0, 0x8, 0xd0, 0x8, 0x50, 0x75, 0x99, 0x8, 0xd0, 0x8, 0x50, 0x13, 0x75, 0xf5, 0xfc, 0x41, 0x5, 0x8, 0xd0, 0x37, 0x45, 0x80, 0x40, 0x13, 0x5, 0x5, 0xef, 0xb7, 0x35, 0x80, 0x40, 0x93, 0x85, 0x5, 0xf, 0x23, 0x26, 0xb5, 0xa, 0x13, 0x5, 0xb0, 0x2, 0x97, 0x10, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xef, 0x8, 0x50, 0xb7, 0x5, 0x4, 0x0, 0x4d, 0x8d, 0x8, 0xd0, 0x8, 0x50, 0xb7, 0x5, 0x80, 0x0, 0x4d, 0x8d, 0x8, 0xd0, 0x3, 0x25, 0x84, 0x9, 0x13, 0x65, 0x15, 0x0, 0x23, 0x2c, 0xa4, 0x8, 0x3, 0x25, 0x84, 0x9, 0x5, 0x89, 0x6d, 0xfd, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0x80, 0xff, 0x7d, 0x16, 0xf1, 0x8d, 0xc, 0xd1, 0x97, 0x32, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0x92, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0x40, 0x0, 0xd1, 0x8d, 0xc, 0xd1, 0x97, 0x32, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0x90, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x37, 0x5, 0x0, 0x60, 0xc, 0x51, 0x37, 0x6, 0xc0, 0xff, 0x7d, 0x16, 0xf1, 0x8d, 0xc, 0xd1, 0x97, 0x32, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0x8e, 0x83, 0x25, 0x85, 0x9, 0x85, 0x89, 0xed, 0xfd, 0x3d, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x6d, 0x37, 0x5, 0x0, 0x60, 0x4c, 0x45, 0x93, 0xe5, 0x15, 0x0, 0x4c, 0xc5, 0x37, 0x45, 0x80, 0x40, 0x93, 0xa, 0x45, 0x1b, 0x93, 0x85, 0x4a, 0x1, 0x13, 0xf6, 0xc5, 0xff, 0x8d, 0x89, 0x8e, 0x5, 0x85, 0x46, 0xb3, 0x96, 0xb6, 0x0, 0x2f, 0x26, 0xd6, 0x44, 0xb3, 0x55, 0xb6, 0x0, 0x93, 0xf5, 0xf5, 0xf, 0xe3, 0x9a, 0x5, 0x34, 0x89, 0x45, 0x23, 0x1a, 0xb5, 0x1a, 0x13, 0x85, 0x2a, 0x0, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x39, 0x46, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x20, 0xaf, 0x1, 0x49, 0x23, 0x88, 0xa, 0x0, 0x29, 0x45, 0x23, 0x89, 0xaa, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x4, 0xa1, 0x0, 0xd, 0x44, 0x5, 0x65, 0x13, 0xb, 0x5, 0xda, 0x19, 0xc8, 0x26, 0x85, 0x81, 0x45, 0x5a, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x0, 0xac, 0xda, 0x94, 0x7d, 0x14, 0x7d, 0xf4, 0x8d, 0x6b, 0x13, 0x84, 0xb, 0x8e, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0xa9, 0x37, 0x45, 0x0, 0x60, 0x8, 0x5d, 0x71, 0x89, 0x61, 0x15, 0x13, 0x35, 0x15, 0x0, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x7b, 0x23, 0x20, 0xa, 0x0, 0x37, 0x5, 0x0, 0x1, 0xd2, 0x85, 0xc8, 0xc1, 0x41, 0x6b, 0x23, 0x24, 0x6a, 0x1, 0x5, 0x65, 0xc8, 0xc5, 0x13, 0x5, 0x0, 0x10, 0x88, 0xc9, 0x13, 0x5, 0xfb, 0xff, 0xc8, 0xc9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x6a, 0x4a, 0xce, 0x56, 0xd0, 0x48, 0x10, 0x93, 0x4, 0xa1, 0x7, 0x13, 0x6, 0x60, 0x5, 0x81, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x80, 0xa3, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x26, 0x85, 0x22, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0x60, 0xa2, 0x13, 0x85, 0xeb, 0x93, 0x6c, 0x8, 0x2e, 0x95, 0x13, 0x6, 0xd0, 0x1c, 0x81, 0x45, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xc0, 0xa0, 0x13, 0x5, 0xf0, 0x4, 0x23, 0x0, 0xaa, 0x0, 0x13, 0x5, 0x80, 0x4, 0xa3, 0x0, 0xaa, 0x0, 0x13, 0x5, 0x10, 0x4, 0x23, 0x1, 0xaa, 0x0, 0x13, 0x5, 0x90, 0x4, 0xa3, 0x1, 0xaa, 0x0, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xb3, 0x5, 0xa1, 0x0, 0x11, 0x46, 0x4a, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x98, 0x45, 0x49, 0x2a, 0x9, 0xd, 0x65, 0x13, 0x5, 0x85, 0xb2, 0xa, 0x95, 0x81, 0x45, 0x4a, 0x86, 0x97, 0x0, 0x80, 0xff, 0xe7, 0x80, 0xe0, 0x9b, 0xa1, 0x4b, 0x13, 0xb, 0xb, 0xf0, 0x5, 0x4d, 0x9, 0x4a, 0x37, 0x45, 0x80, 0x40, 0x13, 0x5, 0x5, 0x7, 0x2a, 0xcc, 0x37, 0x85, 0x80, 0x40, 0x13, 0x5, 0x85, 0x5d, 0x2a, 0xc6, 0x37, 0x45, 0x80, 0x40, 0x93, 0xd, 0x45, 0x2, 0x9, 0x65, 0x13, 0x5, 0x5, 0x71, 0x2a, 0xc2, 0x19, 0x4c, 0x72, 0x45, 0x8d, 0x65, 0x93, 0x85, 0x85, 0xb2, 0x8a, 0x95, 0x4a, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x89, 0xe3, 0xe0, 0x75, 0x1d, 0x2a, 0x84, 0xae, 0x8c, 0x3, 0x45, 0x15, 0x0, 0x83, 0x45, 0x4, 0x0, 0x3, 0x46, 0x24, 0x0, 0x83, 0x46, 0x34, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x64, 0xa6, 0x0, 0x33, 0xf5, 0x64, 0x1, 0x13, 0x5, 0x5, 0xf0, 0xe3, 0x9, 0x5, 0x18, 0x83, 0x45, 0x44, 0x0, 0x3, 0x47, 0x54, 0x0, 0x83, 0x48, 0x64, 0x0, 0x83, 0x46, 0x74, 0x0, 0x13, 0xd5, 0x84, 0x0, 0x93, 0x97, 0x85, 0x1, 0x5d, 0x8d, 0x23, 0x80, 0xa9, 0x1, 0xa3, 0x80, 0xa9, 0x0, 0xa3, 0x81, 0x9, 0x0, 0x23, 0x81, 0x49, 0x1, 0xa3, 0x83, 0x9, 0x0, 0x23, 0x83, 0x9, 0x0, 0xa3, 0x82, 0x9, 0x0, 0x23, 0x82, 0x9, 0x0, 0x23, 0x84, 0x9, 0x0, 0xa3, 0x84, 0x9, 0x0, 0xa3, 0x86, 0x9, 0x0, 0x23, 0x86, 0x9, 0x0, 0xa3, 0x85, 0x9, 0x0, 0x23, 0x85, 0xa9, 0x1, 0xa3, 0x88, 0x9, 0x0, 0x23, 0x88, 0x9, 0x0, 0xa3, 0x87, 0x9, 0x0, 0x93, 0x7a, 0xf5, 0xf, 0x13, 0x85, 0xea, 0xff, 0x23, 0x87, 0x9, 0x0, 0x49, 0x46, 0x63, 0x60, 0xa6, 0xc, 0xa, 0x5, 0x6e, 0x95, 0x8, 0x41, 0x2, 0x85, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xea, 0xbc, 0x78, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0x62, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x54, 0x1, 0x3, 0x46, 0x44, 0x1, 0x83, 0x46, 0x64, 0x1, 0x3, 0x47, 0x74, 0x1, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x3, 0x46, 0xd4, 0x0, 0x83, 0x46, 0xc4, 0x0, 0x3, 0x47, 0xe4, 0x0, 0x83, 0x47, 0xf4, 0x0, 0x22, 0x6, 0x55, 0x8e, 0x42, 0x7, 0xe2, 0x7, 0x5d, 0x8f, 0x59, 0x8e, 0x83, 0x46, 0x94, 0x0, 0x3, 0x47, 0x84, 0x0, 0x83, 0x47, 0xa4, 0x0, 0x83, 0x44, 0xb4, 0x0, 0xa2, 0x6, 0xd9, 0x8e, 0xc2, 0x7, 0xe2, 0x4, 0xc5, 0x8f, 0xdd, 0x8e, 0x7d, 0x77, 0x69, 0x8f, 0x3a, 0xd6, 0x2a, 0xd4, 0x36, 0x95, 0x2a, 0xd2, 0x33, 0x5, 0xb6, 0x2, 0x2a, 0xda, 0x36, 0xd8, 0x23, 0x1e, 0x1, 0x2, 0x23, 0x1d, 0x1, 0x2, 0x23, 0xc, 0xa1, 0x3, 0x41, 0x45, 0x63, 0x84, 0xaa, 0x0, 0x63, 0x98, 0x4a, 0x71, 0x13, 0x5, 0x20, 0xc, 0x11, 0x66, 0x63, 0x6f, 0xb6, 0x6e, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x4d, 0xaa, 0x85, 0x13, 0x5, 0x50, 0xc, 0x63, 0x96, 0x5, 0x6e, 0xc5, 0xad, 0x13, 0x85, 0xa, 0xf3, 0xa, 0x5, 0x62, 0x46, 0x32, 0x95, 0x8, 0x41, 0x2, 0x85, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x48, 0xaa, 0x85, 0x13, 0x5, 0x40, 0xc, 0x63, 0x95, 0x5, 0x6c, 0xf9, 0xa5, 0x61, 0x45, 0x63, 0xef, 0xac, 0x6a, 0x26, 0x85, 0x63, 0x8e, 0xaa, 0x6b, 0x3, 0x45, 0x81, 0x3, 0x63, 0xe, 0x5, 0x58, 0x13, 0x88, 0x8c, 0xfe, 0x93, 0x2, 0x84, 0x1, 0x63, 0x3, 0x8, 0x5e, 0xb3, 0x4, 0x94, 0x1, 0x93, 0x7, 0xf0, 0xe, 0x16, 0x85, 0x3, 0x46, 0x5, 0x0, 0x5, 0x5, 0xb1, 0x8f, 0xe3, 0x1c, 0x95, 0xfe, 0x93, 0xf7, 0xf7, 0xf, 0xf1, 0xa3, 0x13, 0x5, 0x0, 0xc, 0x63, 0x82, 0x7c, 0x69, 0x83, 0x45, 0x84, 0x0, 0x26, 0x85, 0x63, 0x8d, 0x45, 0x67, 0x3, 0x45, 0x81, 0x3, 0x63, 0xd, 0x5, 0x54, 0x42, 0x56, 0x13, 0x5, 0x80, 0xc, 0x63, 0x14, 0x6, 0x66, 0x23, 0xc, 0x1, 0x2, 0x63, 0x94, 0x5, 0x66, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x4b, 0x12, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x30, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x35, 0x81, 0xa5, 0x2d, 0x45, 0x63, 0x78, 0x95, 0x7b, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0x2, 0x49, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x48, 0x1d, 0xa5, 0x81, 0x44, 0x85, 0x45, 0x85, 0x88, 0x63, 0x9f, 0x4, 0x60, 0x63, 0x54, 0xbc, 0x0, 0x1d, 0x44, 0x19, 0xa0, 0x13, 0x84, 0x15, 0x0, 0x72, 0x45, 0x93, 0xa5, 0x75, 0x0, 0x93, 0xc4, 0x15, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x45, 0xa2, 0x85, 0xc9, 0xbf, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x51, 0x46, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x70, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0x33, 0x6, 0xa1, 0x0, 0x1, 0x45, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x30, 0x63, 0xa, 0x5, 0x4a, 0x13, 0x5, 0x30, 0xc, 0x5d, 0xab, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe7, 0xbc, 0x5a, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0x82, 0x42, 0x51, 0x8d, 0x83, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0xd5, 0x8d, 0x88, 0xc1, 0x69, 0xa3, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xed, 0xbc, 0x56, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x22, 0x5, 0xc9, 0x8d, 0x42, 0x6, 0x83, 0x46, 0xb4, 0x0, 0x3, 0x4a, 0xc4, 0x0, 0x83, 0x44, 0xd4, 0x0, 0x83, 0x4b, 0xe4, 0x0, 0x83, 0x4a, 0xf4, 0x0, 0x72, 0x45, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x3a, 0x11, 0x65, 0x13, 0x5, 0x85, 0xa9, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x1f, 0x37, 0x5, 0x0, 0x60, 0x48, 0x49, 0x63, 0xf, 0x4, 0x68, 0xa2, 0x4, 0xb3, 0xe5, 0x44, 0x1, 0xc2, 0xb, 0xe2, 0xa, 0x33, 0xe6, 0x7a, 0x1, 0xd1, 0x8d, 0x13, 0x16, 0xc5, 0x0, 0x21, 0x82, 0x22, 0x5, 0x71, 0x81, 0x51, 0x8d, 0x33, 0x5, 0xb5, 0x2, 0xb3, 0x55, 0x85, 0x2, 0x1, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x1f, 0x13, 0x5, 0x80, 0x3e, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x1b, 0xa1, 0x4b, 0x9, 0x4a, 0x61, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xec, 0xbc, 0x4c, 0xc2, 0x55, 0x13, 0x5, 0x80, 0xc, 0x63, 0x97, 0x5, 0x4c, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0x32, 0x63, 0x15, 0x5, 0x4c, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x22, 0x5, 0x83, 0x46, 0xf4, 0x0, 0xc9, 0x8d, 0x42, 0x6, 0x72, 0x45, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xb6, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x2f, 0x12, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x15, 0x2, 0x94, 0x69, 0xa1, 0x2d, 0x45, 0x63, 0x7d, 0x95, 0x5f, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0xa2, 0x2d, 0x8, 0x41, 0x23, 0x82, 0xa9, 0x0, 0x93, 0x55, 0x85, 0x1, 0xa3, 0x83, 0xb9, 0x0, 0x93, 0x55, 0x5, 0x1, 0x23, 0x83, 0xb9, 0x0, 0x21, 0x81, 0xa3, 0x82, 0xa9, 0x0, 0xb9, 0xa9, 0x13, 0x5, 0x0, 0x2, 0x63, 0xe6, 0xac, 0x44, 0x93, 0x5, 0x24, 0x0, 0x79, 0x46, 0x1d, 0x65, 0x13, 0x5, 0xa5, 0xf2, 0xa, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x0, 0x57, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x23, 0x0, 0x95, 0x0, 0xad, 0x45, 0xa3, 0x0, 0xb5, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x5, 0xf3, 0xa, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x1a, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x98, 0x5, 0x40, 0x11, 0xa9, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe2, 0xbc, 0x40, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0xe2, 0x27, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0x2a, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x33, 0x64, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x50, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x79, 0x63, 0x8, 0xa, 0x4, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x5, 0x66, 0x22, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x11, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x96, 0x5, 0x50, 0x5, 0x65, 0xd2, 0x84, 0x63, 0x63, 0xaa, 0x0, 0x85, 0x64, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x26, 0x86, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x60, 0x75, 0x33, 0xa, 0x9a, 0x40, 0x26, 0x94, 0xe3, 0x1c, 0xa, 0xfa, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0x62, 0x24, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x49, 0x29, 0x65, 0x13, 0x5, 0x45, 0x88, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x89, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x72, 0x3, 0xc4, 0xa9, 0x7, 0x3d, 0x46, 0x29, 0x65, 0x13, 0x5, 0xd5, 0x81, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x55, 0x88, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x46, 0x72, 0x45, 0x23, 0x89, 0x89, 0x0, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0xc6, 0x81, 0xa, 0x96, 0xc1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x1f, 0x9, 0x4a, 0x7d, 0xb4, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x16, 0x13, 0x5, 0x0, 0xc, 0xe1, 0x45, 0x63, 0xe6, 0xbc, 0x2e, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0x62, 0x16, 0x33, 0x67, 0xa6, 0x0, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0x62, 0x17, 0x55, 0x8e, 0xb3, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x54, 0x1, 0x83, 0x45, 0x44, 0x1, 0x3, 0x46, 0x64, 0x1, 0x83, 0x46, 0x74, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0x82, 0x16, 0x3a, 0x84, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0xb3, 0x6c, 0xa6, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x5, 0x66, 0x81, 0x45, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x3b, 0x23, 0xa9, 0x9, 0x0, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x64, 0x81, 0x44, 0x81, 0x4b, 0x33, 0x5, 0x5a, 0x3, 0x2a, 0xca, 0x22, 0x8a, 0x63, 0x7d, 0x80, 0xa, 0x52, 0x45, 0xaa, 0x9b, 0x63, 0xb, 0xa, 0x6, 0x63, 0xf9, 0x74, 0x7, 0x22, 0x8c, 0x56, 0x84, 0x63, 0xe3, 0x4a, 0x1, 0x52, 0x84, 0x5, 0x65, 0x5, 0x5, 0x63, 0x73, 0xa4, 0x3c, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x5, 0xa1, 0x0, 0x66, 0x85, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0xfa, 0x93, 0x75, 0xf5, 0xf, 0x63, 0x9d, 0x5, 0x10, 0x72, 0x45, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x30, 0x29, 0x65, 0x13, 0x5, 0xc5, 0x82, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x22, 0x86, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x5d, 0x33, 0xa, 0x8a, 0x40, 0xa2, 0x9c, 0xa2, 0x94, 0x62, 0x84, 0x19, 0x4c, 0xe3, 0x19, 0xa, 0xf8, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x81, 0x8a, 0x95, 0x11, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x22, 0xd, 0x46, 0x63, 0x78, 0xb6, 0x34, 0x83, 0x45, 0x15, 0x0, 0x3, 0x46, 0x5, 0x0, 0x83, 0x46, 0x25, 0x0, 0x3, 0x45, 0x35, 0x0, 0xa2, 0x5, 0xd1, 0x8d, 0xc2, 0x6, 0x62, 0x5, 0x55, 0x8d, 0xb3, 0x6b, 0xb5, 0x0, 0xe3, 0xe7, 0x8b, 0xf4, 0x97, 0x22, 0x0, 0x0, 0xe7, 0x82, 0x62, 0x8, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x2d, 0x29, 0x65, 0x13, 0x5, 0x45, 0x88, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x89, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x80, 0x56, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0x45, 0x88, 0x8a, 0x95, 0x41, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x26, 0x79, 0xb1, 0x13, 0x5, 0x0, 0xc, 0xc1, 0x45, 0x63, 0xe5, 0xbc, 0x16, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0xb3, 0xe5, 0xc6, 0x0, 0xc9, 0x8d, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x46, 0xa4, 0x0, 0x3, 0x47, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x6, 0x62, 0x7, 0xd9, 0x8e, 0x55, 0x8d, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xf0, 0xaa, 0x85, 0x13, 0x5, 0x60, 0x3, 0x63, 0x9f, 0x5, 0x10, 0xd, 0xa2, 0x13, 0x5, 0x60, 0xc, 0x11, 0xaa, 0xa1, 0x4b, 0x9, 0x4a, 0x19, 0x4c, 0x31, 0xa2, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xa, 0x95, 0x3, 0x44, 0x5, 0x0, 0x4d, 0x46, 0x29, 0x65, 0x13, 0x5, 0x55, 0x89, 0xa, 0x95, 0x9d, 0x65, 0x93, 0x85, 0x95, 0xf2, 0x8a, 0x95, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xe0, 0x21, 0x72, 0x45, 0x23, 0x85, 0x89, 0x8, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x29, 0x66, 0x13, 0x6, 0x46, 0x89, 0xa, 0x96, 0xd1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0xfa, 0xb5, 0xb0, 0x93, 0x7, 0xf0, 0xe, 0x3, 0x45, 0x94, 0x0, 0x3, 0x46, 0x84, 0x0, 0x83, 0x44, 0xa4, 0x0, 0x3, 0x44, 0xb4, 0x0, 0x22, 0x5, 0x51, 0x8d, 0xc2, 0x4, 0x62, 0x4, 0x45, 0x8c, 0xb3, 0x64, 0xa4, 0x0, 0x63, 0x9e, 0x4, 0x9, 0x22, 0x7, 0xd9, 0x8d, 0xc2, 0x8, 0xe2, 0x6, 0x33, 0xe5, 0x16, 0x1, 0xc9, 0x8d, 0x13, 0x5, 0x10, 0xc, 0x63, 0x95, 0xb7, 0x8, 0x16, 0xc8, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xee, 0xd, 0x45, 0x63, 0x8d, 0xaa, 0x16, 0x13, 0x85, 0xca, 0xf2, 0x59, 0xc1, 0x45, 0x45, 0x63, 0x86, 0xaa, 0xa, 0x1d, 0x45, 0xc2, 0x46, 0xe3, 0x92, 0xaa, 0x80, 0x42, 0x56, 0x13, 0x5, 0x90, 0xc, 0x63, 0x69, 0x96, 0x4, 0x93, 0xf5, 0x3c, 0x0, 0x13, 0x5, 0x0, 0xc, 0xb9, 0xe1, 0x13, 0x85, 0x36, 0x0, 0x71, 0x99, 0xb3, 0x5, 0xd5, 0x40, 0x63, 0xf3, 0xb4, 0x0, 0x11, 0x45, 0xb3, 0xb6, 0xb4, 0x0, 0xb3, 0x85, 0xb4, 0x40, 0x13, 0xd7, 0x25, 0x0, 0xfd, 0x16, 0xa2, 0x55, 0xf9, 0x8e, 0x71, 0x16, 0x8a, 0x6, 0x63, 0x83, 0x6, 0xfc, 0x18, 0x41, 0x11, 0x5, 0x98, 0xc1, 0x91, 0x5, 0x2e, 0xd4, 0x32, 0xd8, 0x71, 0x16, 0xf1, 0x16, 0xe5, 0xfa, 0x6f, 0xf0, 0xf, 0xfb, 0x13, 0x5, 0x0, 0xc, 0x23, 0x84, 0xa9, 0x1, 0xa3, 0x84, 0xa9, 0x0, 0x72, 0x45, 0xa9, 0x65, 0x93, 0x85, 0xa5, 0x80, 0x8a, 0x95, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xe5, 0x6f, 0xf0, 0xef, 0xf8, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xd8, 0x68, 0x8, 0x85, 0x45, 0x42, 0x46, 0xa6, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xf1, 0x93, 0x75, 0xf5, 0xf, 0xf9, 0xf1, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xd6, 0x6f, 0xf0, 0x4f, 0xf6, 0x37, 0x45, 0x80, 0x40, 0x3, 0x24, 0x5, 0x1b, 0x81, 0x4c, 0x85, 0x4a, 0x5, 0x48, 0x26, 0xc4, 0x42, 0x46, 0x42, 0x55, 0xe1, 0xc4, 0x79, 0xc1, 0x63, 0x8d, 0xa, 0xc, 0x23, 0xa5, 0x99, 0x8, 0x21, 0x6a, 0x33, 0x5, 0x8a, 0x40, 0x5, 0xa, 0x9d, 0x65, 0x93, 0x85, 0x85, 0xf2, 0x8a, 0x95, 0x88, 0xc1, 0x63, 0x71, 0x44, 0x11, 0x22, 0x45, 0x63, 0x6e, 0x95, 0xf, 0x52, 0x55, 0x33, 0xb5, 0xa4, 0x0, 0x6, 0x5, 0x33, 0x68, 0xa8, 0x0, 0xb2, 0x46, 0x33, 0x87, 0x86, 0x0, 0xb3, 0x5, 0x96, 0x1, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0x33, 0x6, 0xa1, 0x0, 0x1d, 0x65, 0x13, 0x5, 0x85, 0xf2, 0xb3, 0x7, 0xa1, 0x0, 0x13, 0x5, 0xa1, 0x3, 0x42, 0xca, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0xcc, 0x83, 0xab, 0xa9, 0x8, 0xd2, 0x55, 0x1d, 0x66, 0x13, 0x6, 0x86, 0xf2, 0xa, 0x96, 0x10, 0x42, 0xaa, 0x8a, 0x33, 0x85, 0x75, 0x41, 0x2a, 0xda, 0x32, 0x94, 0x63, 0x85, 0xa, 0x0, 0x21, 0x65, 0x63, 0x1f, 0xa4, 0x0, 0x63, 0x7e, 0x44, 0x9, 0x68, 0x8, 0xb2, 0x45, 0x22, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0xd7, 0x93, 0x75, 0xf5, 0xf, 0xb5, 0xe9, 0x1, 0x44, 0x9, 0x4a, 0xb3, 0x84, 0x74, 0x41, 0xde, 0x9c, 0xa1, 0x4b, 0x42, 0x46, 0x52, 0x48, 0x89, 0xbf, 0x68, 0x8, 0xc2, 0x45, 0x26, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0xd4, 0x93, 0x75, 0xf5, 0xf, 0xe3, 0x92, 0x5, 0xee, 0x6f, 0xf0, 0x8f, 0xe8, 0xb7, 0x45, 0x80, 0x40, 0x23, 0xa8, 0x85, 0x1a, 0x63, 0xc2, 0xa, 0x4, 0xb3, 0x35, 0xa0, 0x0, 0x63, 0x8a, 0xa, 0x0, 0x39, 0xa8, 0xb7, 0x45, 0x80, 0x40, 0x23, 0xa8, 0x85, 0x1a, 0x85, 0x45, 0x63, 0x99, 0xa, 0x0, 0x99, 0xc5, 0x13, 0x5, 0x80, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0x6f, 0xe5, 0x63, 0x89, 0xa, 0xe4, 0x63, 0x17, 0x5, 0xe4, 0x13, 0x5, 0x90, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0x2f, 0xe4, 0xa1, 0x4b, 0x9, 0x4a, 0x49, 0xbd, 0x13, 0x5, 0x70, 0xc, 0xa3, 0xc, 0xa1, 0x2, 0x6f, 0xf0, 0xf, 0xe3, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x2e, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x1, 0x13, 0x75, 0xf5, 0xf, 0x33, 0x35, 0xa0, 0x0, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0xfd, 0x46, 0x13, 0xc7, 0xf5, 0xff, 0x33, 0x15, 0xe5, 0x0, 0x91, 0x8d, 0x8d, 0x8e, 0x33, 0x55, 0xd5, 0x0, 0x3a, 0x96, 0x1d, 0x8a, 0x93, 0x5, 0xf0, 0xf, 0xb3, 0xd5, 0xc5, 0x0, 0x6d, 0x8d, 0x82, 0x80, 0xb2, 0x86, 0x2e, 0x86, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0x7d, 0x48, 0x93, 0xc7, 0xf5, 0xff, 0x7d, 0x57, 0x33, 0x17, 0xf7, 0x0, 0x91, 0x8d, 0xb3, 0x5, 0xb8, 0x40, 0x1c, 0x41, 0xb3, 0x55, 0xb7, 0x0, 0x33, 0x97, 0xc5, 0x0, 0x13, 0x47, 0xf7, 0xff, 0x7d, 0x8f, 0xf5, 0x8d, 0x93, 0xf5, 0xf5, 0xf, 0xb3, 0x95, 0xc5, 0x0, 0xd9, 0x8d, 0xc, 0xc1, 0x82, 0x80, 0x2e, 0x86, 0x81, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xfc, 0x85, 0x46, 0x2e, 0x86, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xfb, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0xb6, 0x84, 0xb2, 0x89, 0xb3, 0xa, 0xd6, 0x40, 0x13, 0xf6, 0xfa, 0xf, 0xa1, 0x46, 0x63, 0x72, 0xd6, 0xc, 0x3a, 0x89, 0x2e, 0x84, 0x2a, 0x8a, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xb, 0x13, 0x75, 0xfa, 0xf, 0x93, 0x75, 0xf4, 0xf, 0xa2, 0x5, 0x4d, 0x8d, 0xb7, 0x25, 0xb, 0x60, 0x23, 0xa0, 0xa5, 0x40, 0x3, 0xa6, 0x5, 0x40, 0x1a, 0x6, 0xe3, 0x4d, 0x6, 0xfe, 0xb7, 0x25, 0xb, 0x60, 0x3, 0xa6, 0x85, 0x40, 0xfd, 0x56, 0x33, 0x97, 0x96, 0x0, 0x13, 0x47, 0xf7, 0xff, 0x85, 0x9, 0xb3, 0x97, 0x36, 0x1, 0x5d, 0x8f, 0x79, 0x8e, 0x85, 0xa, 0xb3, 0x96, 0x56, 0x1, 0x93, 0xc6, 0xf6, 0xff, 0xb3, 0xf6, 0x26, 0x1, 0xb3, 0x96, 0x96, 0x0, 0x55, 0x8e, 0x13, 0x76, 0xf6, 0xf, 0x42, 0x6, 0xb7, 0x6, 0x0, 0x1, 0x55, 0x8d, 0x51, 0x8d, 0x23, 0xa0, 0xa5, 0x40, 0x3, 0xa5, 0x5, 0x40, 0x1a, 0x5, 0xe3, 0x4d, 0x5, 0xfe, 0x93, 0x5, 0xaa, 0xf9, 0x13, 0xf5, 0xf5, 0xf, 0x1d, 0x46, 0x63, 0x66, 0xa6, 0x2, 0x13, 0x6, 0x90, 0x9, 0xb3, 0x55, 0xb6, 0x0, 0x85, 0x89, 0x99, 0xcd, 0xb7, 0x45, 0x80, 0x40, 0x93, 0x85, 0x45, 0x8, 0xa, 0x5, 0x2e, 0x95, 0x8, 0x41, 0xb7, 0x25, 0xb, 0x60, 0x3, 0xa6, 0x45, 0x41, 0x71, 0x8d, 0x23, 0xaa, 0xa5, 0x40, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x5, 0x61, 0x82, 0x80, 0x0, 0x0, 0xb7, 0xf5, 0xa, 0x60, 0x90, 0x4d, 0x13, 0x66, 0x46, 0x0, 0x90, 0xcd, 0x37, 0x26, 0xb, 0x60, 0x83, 0x25, 0xc6, 0x7f, 0xb7, 0x6, 0x0, 0x10, 0xcd, 0x8e, 0x93, 0x5, 0xa5, 0xf9, 0x13, 0xf5, 0xf5, 0xf, 0x1d, 0x47, 0x23, 0x2e, 0xd6, 0x7e, 0x63, 0x66, 0xa7, 0x2, 0x13, 0x6, 0x90, 0x9, 0xb3, 0x55, 0xb6, 0x0, 0x85, 0x89, 0x99, 0xcd, 0xb7, 0x45, 0x80, 0x40, 0x93, 0x85, 0x45, 0xa, 0xa, 0x5, 0x2e, 0x95, 0x8, 0x41, 0xb7, 0x25, 0xb, 0x60, 0x3, 0xa6, 0x45, 0x41, 0x51, 0x8d, 0x23, 0xaa, 0xa5, 0x40, 0x82, 0x80, 0x1, 0x46, 0x73, 0x76, 0x4, 0x30, 0x21, 0x89, 0x29, 0xc1, 0xb7, 0x46, 0x80, 0x40, 0x3, 0xa5, 0x86, 0x1a, 0x99, 0xcd, 0x93, 0x5, 0x15, 0x0, 0x5, 0x47, 0x23, 0xa4, 0xb6, 0x1a, 0x63, 0x16, 0xe5, 0x2, 0x37, 0xf5, 0xa, 0x60, 0xc, 0x4d, 0x93, 0xe5, 0x45, 0x0, 0xc, 0xcd, 0x31, 0xa8, 0x85, 0x45, 0x63, 0x17, 0xb5, 0x0, 0xb7, 0xf5, 0xa, 0x60, 0x94, 0x4d, 0xed, 0x9a, 0x94, 0xcd, 0x7d, 0x15, 0xb7, 0x45, 0x80, 0x40, 0x23, 0xa4, 0xa5, 0x1a, 0x21, 0x8a, 0x1, 0xc6, 0x21, 0x45, 0x73, 0x20, 0x5, 0x30, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x2e, 0x84, 0xaa, 0x84, 0x13, 0x5, 0x60, 0x6, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xf4, 0x13, 0xf5, 0xf4, 0xf, 0x22, 0x5, 0x93, 0x75, 0xf4, 0xf, 0xc2, 0x5, 0x4d, 0x8d, 0xb7, 0x5, 0x0, 0x1, 0x93, 0x85, 0x65, 0x6, 0xc9, 0x8d, 0x37, 0x25, 0xb, 0x60, 0x23, 0x20, 0xb5, 0x40, 0x83, 0x25, 0x5, 0x40, 0x9a, 0x5, 0xe3, 0xcd, 0x5, 0xfe, 0x37, 0x25, 0xb, 0x60, 0x83, 0x25, 0x45, 0x41, 0x93, 0xf5, 0xf5, 0xfd, 0x23, 0x2a, 0xb5, 0x40, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x41, 0x1, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x2, 0x93, 0x15, 0x45, 0x0, 0xc1, 0x81, 0x31, 0x81, 0x37, 0x16, 0xb, 0x60, 0x3, 0x20, 0x46, 0x1, 0x42, 0x5, 0x4d, 0x8d, 0x48, 0xca, 0xb2, 0x40, 0x41, 0x1, 0x82, 0x80, 0x9, 0xc9, 0x5, 0x46, 0x63, 0x1c, 0xc5, 0x0, 0x37, 0xb5, 0xc4, 0x4, 0x13, 0x5, 0x5, 0x40, 0x82, 0x80, 0x37, 0x65, 0x62, 0x2, 0x13, 0x5, 0x5, 0xa0, 0x82, 0x80, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0x33, 0x85, 0xa5, 0x2, 0x82, 0x80, 0xf3, 0x25, 0x40, 0xf1, 0x85, 0xe1, 0x42, 0x5, 0x41, 0x81, 0xa, 0x5, 0xb7, 0x5, 0x1, 0x60, 0x2e, 0x95, 0x85, 0x45, 0xc, 0xc1, 0x37, 0x15, 0x0, 0x20, 0xc, 0x41, 0x93, 0xe5, 0x25, 0x0, 0xc, 0xc1, 0x82, 0x80, 0x0, 0x0, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x26, 0xc2, 0x4a, 0xc0, 0x1, 0x45, 0x37, 0x9, 0x1, 0x60, 0xfd, 0x44, 0x13, 0x4, 0x15, 0x0, 0x93, 0x75, 0xf4, 0xf, 0x8d, 0xc1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x8, 0x42, 0x5, 0x93, 0x55, 0x5, 0x1, 0x13, 0x86, 0x35, 0xfb, 0x22, 0x85, 0x6d, 0xd2, 0x8a, 0x5, 0xca, 0x95, 0x84, 0xc1, 0x22, 0x85, 0xe1, 0xbf, 0x37, 0x45, 0x80, 0x40, 0x13, 0x5, 0x5, 0x90, 0x5, 0x5, 0x73, 0x10, 0x55, 0x30, 0x37, 0x45, 0x80, 0x40, 0x13, 0x5, 0x85, 0x13, 0x93, 0x5, 0xc0, 0x3, 0x5, 0x48, 0xb7, 0x16, 0x0, 0x20, 0x5, 0x47, 0x8d, 0xc9, 0xf3, 0x27, 0x40, 0xf1, 0x9d, 0xef, 0x4, 0x41, 0xc0, 0x42, 0xb3, 0x17, 0x98, 0x0, 0x13, 0xc6, 0xf7, 0xff, 0x61, 0x8e, 0xd0, 0xc2, 0x73, 0x26, 0x40, 0xf1, 0x5, 0xe6, 0x8a, 0x4, 0xb6, 0x94, 0x98, 0xc8, 0x90, 0x42, 0x5d, 0x8e, 0x90, 0xc2, 0xf1, 0x15, 0x11, 0x5, 0x5, 0x7, 0xe9, 0xf9, 0x7d, 0x55, 0x73, 0x10, 0x45, 0x30, 0xb2, 0x40, 0x22, 0x44, 0x92, 0x44, 0x2, 0x49, 0x41, 0x1, 0x82, 0x80, 0x0, 0x0, 0x13, 0x75, 0xf5, 0xf, 0x93, 0x5, 0xd0, 0x4, 0x63, 0x64, 0xb5, 0x0, 0x13, 0x5, 0xd0, 0x4, 0x82, 0x80, 0x2e, 0x86, 0xd5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xc8, 0xf9, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xc8, 0xfd, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xc7, 0xd9, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xc6, 0x2e, 0x86, 0xe9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xc5, 0x2e, 0x86, 0xed, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xc5, 0xf1, 0x45, 0x5, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xc4, 0x2e, 0x86, 0xf5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xc3, 0x2e, 0x86, 0xf9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xc2, 0x2e, 0x86, 0xe1, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xc2, 0xe5, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xc1, 0xe9, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xc0, 0x2e, 0x86, 0xe5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xbf, 0xc1, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xbf, 0xc5, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xbe, 0xc9, 0x45, 0x5, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xbd, 0xa1, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xc1, 0xb9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xc0, 0xb5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xc0, 0xbd, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xbf, 0xe9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xbf, 0xf1, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xbe, 0x85, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xbd, 0x8d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xbd, 0xc9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xbc, 0xe1, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb3, 0xe9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xb2, 0xed, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xb2, 0xf1, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xb1, 0xf5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xb0, 0xe5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xb0, 0xf9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xaf, 0xfd, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x3, 0xaf, 0xc1, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xae, 0xc5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xad, 0xc9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xad, 0x2e, 0x86, 0xf1, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xb0, 0xd5, 0x45, 0x1, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0xaf, 0xd9, 0x45, 0x5, 0x46, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xc3, 0xae, 0xd5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x43, 0xaa, 0xd9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xa9, 0x37, 0x15, 0xb, 0x60, 0x8, 0x49, 0x93, 0x15, 0x5, 0x1, 0xc1, 0x81, 0x13, 0x56, 0x5, 0x1, 0x2d, 0x8e, 0x13, 0x36, 0x16, 0x0, 0x7d, 0x15, 0x13, 0x35, 0xe5, 0xff, 0x71, 0x8d, 0x19, 0xe1, 0x93, 0x5, 0x80, 0x2, 0x13, 0x85, 0x85, 0xfd, 0x33, 0x35, 0xa0, 0x0, 0x82, 0x80, 0x5d, 0x71, 0x86, 0xc6, 0xa2, 0xc4, 0xa6, 0xc2, 0xca, 0xc0, 0x4e, 0xde, 0x52, 0xdc, 0x56, 0xda, 0x5a, 0xd8, 0x5e, 0xd6, 0x62, 0xd4, 0x66, 0xd2, 0x6a, 0xd0, 0x6e, 0xce, 0xb7, 0x15, 0xb, 0x60, 0x83, 0xa9, 0x5, 0x85, 0x13, 0xa, 0xf1, 0x0, 0x5, 0x49, 0xd, 0x45, 0x9, 0x44, 0x93, 0x8a, 0x45, 0x85, 0x11, 0x4b, 0xad, 0x4b, 0x13, 0xc, 0x0, 0x2, 0xfd, 0x5c, 0xd, 0x4d, 0x63, 0xd, 0x65, 0x7, 0x13, 0x6, 0x0, 0x2, 0xa2, 0x85, 0x63, 0x64, 0xc4, 0x0, 0x93, 0x5, 0x0, 0x2, 0x63, 0x4, 0xa5, 0x1, 0x83, 0xa9, 0xca, 0xff, 0x13, 0xd6, 0x69, 0x1, 0x93, 0xd, 0x15, 0x0, 0x63, 0x6b, 0x74, 0x1, 0x83, 0xa9, 0xa, 0x0, 0x13, 0x95, 0xa9, 0x0, 0x49, 0x8e, 0x6e, 0x8d, 0x6e, 0x85, 0x63, 0x79, 0x84, 0x1, 0xb3, 0x6, 0xb0, 0x40, 0xf9, 0x8a, 0xb3, 0xd6, 0xdc, 0x0, 0x75, 0x8e, 0x2a, 0x8d, 0x9d, 0x5, 0x93, 0xd4, 0x35, 0x0, 0x32, 0xc8, 0x63, 0x62, 0x99, 0x10, 0xc, 0x8, 0x52, 0x85, 0x26, 0x86, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x98, 0x33, 0x9, 0x99, 0x40, 0x26, 0x9a, 0x1, 0x14, 0x91, 0xa, 0x6e, 0x85, 0xe3, 0x9c, 0x6d, 0xf9, 0x29, 0xa0, 0x23, 0x0, 0xa, 0x0, 0x5, 0xa, 0x7d, 0x19, 0xe3, 0x1c, 0x9, 0xfe, 0x3, 0x45, 0xf1, 0x0, 0x2a, 0xc4, 0xb7, 0x15, 0xb, 0x60, 0x3, 0xaa, 0x5, 0x85, 0x13, 0xd, 0x71, 0x1, 0x85, 0x49, 0xd, 0x45, 0x91, 0x4a, 0x13, 0x8b, 0x45, 0x85, 0xbd, 0x4b, 0x13, 0xc, 0x0, 0x2, 0xfd, 0x5c, 0x11, 0x44, 0xd, 0x49, 0x63, 0xd, 0x55, 0x7, 0x13, 0x6, 0x0, 0x2, 0xa2, 0x85, 0x63, 0x64, 0xc4, 0x0, 0x93, 0x5, 0x0, 0x2, 0x63, 0x4, 0x25, 0x1, 0x3, 0x2a, 0xcb, 0xff, 0x13, 0x56, 0x2a, 0x1, 0x93, 0xd, 0x15, 0x0, 0x63, 0x6b, 0x74, 0x1, 0x3, 0x2a, 0xb, 0x0, 0x13, 0x15, 0xea, 0x0, 0x49, 0x8e, 0x6e, 0x89, 0x6e, 0x85, 0x63, 0x79, 0x84, 0x1, 0xb3, 0x6, 0xb0, 0x40, 0xf9, 0x8a, 0xb3, 0xd6, 0xdc, 0x0, 0x75, 0x8e, 0x2a, 0x89, 0x9d, 0x5, 0x93, 0xd4, 0x35, 0x0, 0x32, 0xcc, 0x63, 0xef, 0x99, 0x4, 0x2c, 0x8, 0x6a, 0x85, 0x26, 0x86, 0x97, 0xf0, 0x7f, 0xff, 0xe7, 0x80, 0xc0, 0x8d, 0xb3, 0x89, 0x99, 0x40, 0x26, 0x9d, 0x1, 0x14, 0x11, 0xb, 0x6e, 0x85, 0xe3, 0x9c, 0x5d, 0xf9, 0x29, 0xa0, 0x23, 0x0, 0xd, 0x0, 0x5, 0xd, 0xfd, 0x19, 0xe3, 0x9c, 0x9, 0xfe, 0x3, 0x45, 0x71, 0x1, 0x93, 0x5, 0x40, 0x6, 0x22, 0x46, 0xb3, 0x5, 0xb6, 0x2, 0x2e, 0x95, 0xb6, 0x40, 0x26, 0x44, 0x96, 0x44, 0x6, 0x49, 0xf2, 0x59, 0x62, 0x5a, 0xd2, 0x5a, 0x42, 0x5b, 0xb2, 0x5b, 0x22, 0x5c, 0x92, 0x5c, 0x2, 0x5d, 0xf2, 0x4d, 0x61, 0x61, 0x82, 0x80, 0x0, 0x0, 0x51, 0x71, 0x86, 0xd7, 0xa2, 0xd5, 0xa6, 0xd3, 0xca, 0xd1, 0xce, 0xcf, 0xd2, 0xcd, 0xd6, 0xcb, 0xda, 0xc9, 0xde, 0xc7, 0xe2, 0xc5, 0xe6, 0xc3, 0xea, 0xc1, 0x6e, 0xdf, 0xb7, 0x9, 0x0, 0x80, 0xfd, 0x19, 0x4e, 0xc3, 0x37, 0x9, 0x0, 0x40, 0x7d, 0x19, 0x37, 0x5, 0x0, 0x10, 0x7d, 0x15, 0xaa, 0xd0, 0x37, 0xa, 0xb, 0x60, 0x3, 0x25, 0x4a, 0x15, 0xc1, 0x65, 0xfd, 0x15, 0xae, 0xd2, 0xb7, 0x5, 0x0, 0xc, 0x4d, 0x8d, 0x23, 0x2a, 0xaa, 0x14, 0x13, 0x5, 0xd0, 0x6, 0x95, 0x45, 0x1d, 0x46, 0x9d, 0x46, 0x5, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x91, 0x13, 0x5, 0xd0, 0x6, 0x9d, 0x45, 0x1d, 0x46, 0x9d, 0x46, 0x5, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x8f, 0x13, 0x5, 0xd0, 0x6, 0xb5, 0x45, 0x9, 0x46, 0x89, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x8e, 0x13, 0x5, 0xd0, 0x6, 0xb5, 0x45, 0xd, 0x46, 0x8d, 0x46, 0x1, 0x47, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x8d, 0x2, 0xc5, 0x60, 0x1, 0x2, 0xc7, 0x2, 0xc9, 0x28, 0x1, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xbd, 0x28, 0x1, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xc0, 0x28, 0x1, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xc1, 0x28, 0x1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xbc, 0x28, 0x1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xbc, 0x2a, 0x45, 0x37, 0xb, 0x80, 0xf8, 0x7d, 0x1b, 0x33, 0x75, 0x65, 0x1, 0x2a, 0xc5, 0x28, 0x1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xbb, 0x22, 0x85, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xbb, 0x22, 0x85, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xbb, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xbb, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xbb, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xbb, 0x4a, 0x45, 0xb7, 0x5, 0x0, 0x80, 0x4d, 0x8d, 0x2a, 0xc9, 0x7d, 0x55, 0x2a, 0xcb, 0x2a, 0xcd, 0x0, 0x11, 0x2, 0xd1, 0x2e, 0xcf, 0xb7, 0x4, 0x0, 0x80, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xbb, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xb6, 0x22, 0x85, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xca, 0x22, 0x85, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xb6, 0xa, 0x55, 0x33, 0x75, 0x25, 0x1, 0xaa, 0xd8, 0x2a, 0xd1, 0x2, 0xd9, 0x8, 0x19, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xb6, 0x8, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xb6, 0x8, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0xb6, 0x8, 0x19, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xb1, 0x8, 0x19, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xc5, 0x8, 0x19, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xb1, 0x2, 0xd3, 0x20, 0x11, 0x2, 0xd5, 0x2, 0xd7, 0x48, 0x11, 0x85, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0xb4, 0x1a, 0x55, 0xb7, 0x5, 0x0, 0xc4, 0xfd, 0x15, 0x6d, 0x8d, 0xae, 0x8b, 0x2a, 0xd3, 0x48, 0x11, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xaa, 0x48, 0x11, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xaa, 0x2a, 0x55, 0x91, 0x65, 0x93, 0x85, 0x5, 0x8d, 0x4d, 0x8d, 0x13, 0x75, 0xf5, 0x8d, 0x2a, 0xd5, 0xb9, 0x45, 0x5, 0x46, 0x22, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x70, 0xbd, 0x45, 0x5, 0x46, 0x22, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x6f, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xaf, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xaf, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xaf, 0x2a, 0x55, 0xb7, 0xd, 0x8, 0x0, 0xfd, 0x1d, 0x33, 0x75, 0xb5, 0x1, 0x83, 0x45, 0xc1, 0xa, 0x37, 0x6, 0x0, 0xc8, 0x51, 0x8d, 0x2a, 0xc1, 0x37, 0xc, 0x0, 0xc8, 0x2a, 0xd5, 0x2e, 0xd7, 0x13, 0x5, 0x0, 0xa, 0x2a, 0xdb, 0x48, 0x19, 0xa9, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x6e, 0x48, 0x19, 0xad, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x6d, 0x48, 0x19, 0xb1, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x6c, 0x5a, 0x55, 0xb7, 0x45, 0xc, 0xfc, 0xfd, 0x15, 0x6d, 0x8d, 0xb7, 0x5, 0x1, 0x1, 0x4d, 0x8d, 0x2a, 0xdb, 0x48, 0x19, 0xf5, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x6a, 0x48, 0x19, 0xf9, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x69, 0x2, 0xdd, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0xa8, 0xca, 0x5c, 0x5a, 0x55, 0xaa, 0xdc, 0x6a, 0x55, 0xaa, 0xda, 0x2a, 0x45, 0xaa, 0xc0, 0x3a, 0x45, 0xaa, 0xc2, 0x5a, 0x45, 0xaa, 0xc6, 0x6a, 0x45, 0xaa, 0xc4, 0x7a, 0x45, 0xaa, 0xc8, 0x9a, 0x5a, 0x2, 0xc5, 0x60, 0x1, 0x2, 0xc7, 0x2, 0xc9, 0x28, 0x1, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x94, 0x28, 0x1, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x97, 0x28, 0x1, 0x85, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x97, 0x28, 0x1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x92, 0x28, 0x1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x92, 0x2a, 0x45, 0x33, 0x75, 0x65, 0x1, 0x2a, 0xc5, 0x28, 0x1, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x92, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x94, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x94, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x94, 0x22, 0x85, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x90, 0x22, 0x85, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x90, 0x4a, 0x45, 0x45, 0x8d, 0x2a, 0xc9, 0x0, 0x11, 0x2, 0xcb, 0x2, 0xcd, 0x2, 0xd1, 0xb7, 0x4, 0x0, 0x40, 0x26, 0xcf, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x92, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x8d, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0xa1, 0x85, 0x45, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x8d, 0xa, 0x55, 0x33, 0x75, 0x25, 0x1, 0x45, 0x8d, 0xaa, 0xd4, 0x2a, 0xd1, 0x2, 0xd9, 0x8, 0x19, 0x85, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x8d, 0x8, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x8d, 0x8, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xc0, 0x8d, 0x8, 0x19, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x88, 0x8, 0x19, 0x85, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x9c, 0x8, 0x19, 0x85, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x88, 0x2, 0xd3, 0x20, 0x11, 0x2, 0xd5, 0x2, 0xd7, 0x48, 0x11, 0x81, 0x45, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x8b, 0x1a, 0x55, 0x33, 0x75, 0x75, 0x1, 0xde, 0xde, 0x2a, 0xd3, 0x48, 0x11, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x81, 0x48, 0x11, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x81, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x89, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x89, 0x22, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0x89, 0x2a, 0x55, 0x83, 0x45, 0xc1, 0xa, 0x33, 0x75, 0xb5, 0x1, 0x33, 0x65, 0x85, 0x1, 0xaa, 0xd6, 0x2a, 0xd5, 0x2e, 0xd7, 0x41, 0x45, 0x2a, 0xdb, 0x48, 0x19, 0xa9, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x48, 0x48, 0x19, 0xad, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x48, 0x5a, 0x55, 0xb7, 0x45, 0x8f, 0xff, 0xfd, 0x15, 0x6d, 0x8d, 0xb7, 0x5, 0x10, 0x0, 0x4d, 0x8d, 0x2a, 0xdb, 0x48, 0x19, 0xf5, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x46, 0x2, 0xdd, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x28, 0x19, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x84, 0x4a, 0x5c, 0x5a, 0x55, 0xaa, 0xce, 0x6a, 0x55, 0xaa, 0xcc, 0x2a, 0x45, 0x2a, 0xd0, 0x3a, 0x45, 0x2a, 0xd2, 0x5a, 0x45, 0x2a, 0xd8, 0x6a, 0x45, 0x2a, 0xd6, 0x7a, 0x45, 0x2a, 0xd4, 0x1a, 0x55, 0x2a, 0xde, 0x2, 0xc5, 0x64, 0x1, 0x2, 0xc7, 0x2, 0xc9, 0x28, 0x1, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x70, 0x28, 0x1, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x71, 0x2a, 0x45, 0x33, 0x75, 0x65, 0x1, 0x2a, 0xc5, 0x28, 0x1, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x72, 0x28, 0x1, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x72, 0x28, 0x1, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x6d, 0x28, 0x1, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x6d, 0x85, 0x45, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x6e, 0x85, 0x45, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x6e, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x6e, 0x26, 0x85, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x6e, 0x26, 0x85, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x6e, 0x4a, 0x45, 0x33, 0x75, 0x35, 0x1, 0x2a, 0xc9, 0x4, 0x11, 0x2, 0xcb, 0x2, 0xcd, 0x2, 0xcf, 0x2, 0xd1, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x6f, 0x26, 0x85, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x6a, 0x85, 0x45, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x7e, 0x85, 0x45, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x6a, 0xa, 0x55, 0x4a, 0xc4, 0x33, 0x7d, 0x25, 0x1, 0x6a, 0xd1, 0x2, 0xd3, 0x24, 0x11, 0x2, 0xd5, 0x2, 0xd7, 0x48, 0x11, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x6b, 0x1a, 0x55, 0x33, 0x75, 0x75, 0x1, 0x2a, 0xd3, 0x48, 0x11, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x62, 0x48, 0x11, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x62, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x6a, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x6a, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x6a, 0x2a, 0x55, 0x33, 0x75, 0xb5, 0x1, 0x83, 0x45, 0xc1, 0xa, 0x37, 0x6, 0x0, 0x8, 0x51, 0x8d, 0xaa, 0xca, 0x2a, 0xd5, 0x2e, 0xd7, 0x13, 0x5, 0x0, 0x20, 0x2a, 0xd9, 0x8, 0x19, 0xa9, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x29, 0x8, 0x19, 0xb1, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x28, 0x8, 0x19, 0xb5, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x28, 0x4a, 0x55, 0xb7, 0x5, 0x71, 0xe0, 0xfd, 0x15, 0x6d, 0x8d, 0xb7, 0x5, 0x80, 0x12, 0x4d, 0x8d, 0x2a, 0xd9, 0x8, 0x19, 0xf9, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x26, 0x8, 0x19, 0xfd, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x25, 0x2, 0xdb, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x48, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x63, 0x2, 0xdd, 0x28, 0x19, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x58, 0x28, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x58, 0x28, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x59, 0x28, 0x19, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x53, 0x28, 0x19, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x67, 0x28, 0x19, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x53, 0xea, 0x5b, 0x4a, 0x55, 0x2a, 0xdc, 0x5a, 0x55, 0x2a, 0xda, 0x2a, 0x45, 0x2a, 0xc6, 0x3a, 0x45, 0x2a, 0xc8, 0x5a, 0x45, 0x2a, 0xce, 0x6a, 0x45, 0x2a, 0xcc, 0x7a, 0x45, 0x2a, 0xca, 0x9a, 0x5d, 0x3, 0x20, 0xa, 0x0, 0x6, 0x45, 0x23, 0x20, 0xaa, 0x0, 0x3, 0x20, 0x4a, 0x1, 0x16, 0x45, 0x23, 0x2a, 0xaa, 0x0, 0x3, 0x25, 0xa, 0x3, 0xb7, 0x5, 0x0, 0x80, 0x4d, 0x8d, 0x23, 0x28, 0xaa, 0x2, 0x36, 0x45, 0x23, 0x22, 0xaa, 0x0, 0x26, 0x45, 0x23, 0x24, 0xaa, 0x0, 0xb7, 0x5, 0x0, 0xc0, 0x46, 0x45, 0x6d, 0x8d, 0x23, 0x26, 0xaa, 0x0, 0x3, 0x24, 0x4a, 0x2, 0xc6, 0x54, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x5a, 0xb7, 0x9, 0x0, 0x4, 0xfd, 0x19, 0xb3, 0x75, 0x34, 0x1, 0x6a, 0x5, 0x33, 0x64, 0xb5, 0x0, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x59, 0x13, 0x19, 0xb5, 0x1, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x58, 0x72, 0x5, 0x33, 0x65, 0xa9, 0x0, 0x49, 0x8c, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x58, 0x76, 0x5, 0x41, 0x8d, 0x23, 0x22, 0xaa, 0x2, 0x3, 0x24, 0xa, 0x1, 0x66, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x54, 0x37, 0x9, 0x0, 0xc1, 0x7d, 0x19, 0xb3, 0x75, 0x24, 0x1, 0x62, 0x5, 0x33, 0x64, 0xb5, 0x0, 0x66, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x56, 0x13, 0x1b, 0x95, 0x1, 0x66, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x52, 0x6a, 0x5, 0x33, 0x65, 0xab, 0x0, 0x33, 0x6b, 0xa4, 0x0, 0x66, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x52, 0x93, 0x14, 0xb5, 0x1, 0x66, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x51, 0x13, 0x14, 0xc5, 0x1, 0x66, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x51, 0x45, 0x8c, 0x76, 0x5, 0x41, 0x8d, 0x33, 0x65, 0xab, 0x0, 0x23, 0x28, 0xaa, 0x0, 0x3, 0x24, 0x8a, 0x1, 0x56, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x50, 0xb7, 0xc, 0x0, 0x2, 0xfd, 0x1c, 0xb3, 0x75, 0x94, 0x1, 0x66, 0x5, 0x33, 0x64, 0xb5, 0x0, 0xb7, 0x4, 0x0, 0x3c, 0xb3, 0xf4, 0x9a, 0x0, 0x56, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x4e, 0x7a, 0x5, 0x45, 0x8d, 0x49, 0x8c, 0x56, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x4e, 0x7e, 0x5, 0x41, 0x8d, 0x23, 0x2c, 0xaa, 0x0, 0x3, 0x24, 0x8a, 0x2, 0x8a, 0x44, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x4d, 0x96, 0x5a, 0xb3, 0x75, 0x54, 0x1, 0x42, 0x5, 0x33, 0x6b, 0xb5, 0x0, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x4c, 0x13, 0x14, 0x15, 0x1, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x4c, 0x4a, 0x5, 0x41, 0x8d, 0x33, 0x65, 0xab, 0x0, 0xb7, 0x5, 0x0, 0xc8, 0x4d, 0x8d, 0x23, 0x24, 0xaa, 0x2, 0x3, 0x25, 0xca, 0x2, 0x13, 0x75, 0xf5, 0xf, 0x23, 0x26, 0xaa, 0x2, 0x66, 0x55, 0x23, 0x2e, 0xaa, 0x0, 0x56, 0x55, 0x23, 0x20, 0xaa, 0x2, 0x3, 0x20, 0x4a, 0x3, 0x2, 0x55, 0x23, 0x2a, 0xaa, 0x2, 0x3, 0x20, 0x8a, 0x4, 0x12, 0x55, 0x23, 0x24, 0xaa, 0x4, 0x3, 0x25, 0x4a, 0x6, 0xb7, 0x5, 0x0, 0x80, 0x4d, 0x8d, 0x23, 0x22, 0xaa, 0x6, 0x42, 0x55, 0x23, 0x2c, 0xaa, 0x2, 0x32, 0x55, 0x23, 0x2e, 0xaa, 0x2, 0x22, 0x55, 0xb7, 0x5, 0x0, 0xc0, 0x6d, 0x8d, 0x23, 0x20, 0xaa, 0x4, 0x3, 0x24, 0x8a, 0x5, 0xa6, 0x54, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x3f, 0xb3, 0x75, 0x34, 0x1, 0x6a, 0x5, 0x33, 0x6b, 0xb5, 0x0, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x3f, 0x13, 0x14, 0xb5, 0x1, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x3e, 0x72, 0x5, 0x41, 0x8d, 0x33, 0x64, 0xab, 0x0, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x3e, 0x76, 0x5, 0xb7, 0x5, 0x0, 0x40, 0x4d, 0x8d, 0x41, 0x8d, 0x23, 0x2c, 0xaa, 0x4, 0x3, 0x24, 0x4a, 0x4, 0x62, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x3a, 0xb3, 0x75, 0x24, 0x1, 0x62, 0x5, 0x33, 0x64, 0xb5, 0x0, 0x62, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x3c, 0x93, 0x14, 0x95, 0x1, 0x62, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x38, 0x6a, 0x5, 0x45, 0x8d, 0x33, 0x6b, 0xa4, 0x0, 0x62, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x38, 0x93, 0x14, 0xb5, 0x1, 0x62, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x37, 0x13, 0x14, 0xc5, 0x1, 0x62, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x37, 0x45, 0x8c, 0x76, 0x5, 0x41, 0x8d, 0x33, 0x65, 0xab, 0x0, 0x23, 0x22, 0xaa, 0x4, 0x3, 0x24, 0xca, 0x4, 0x72, 0x5b, 0x5a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x36, 0xb3, 0x75, 0x94, 0x1, 0x66, 0x5, 0x33, 0x64, 0xb5, 0x0, 0x37, 0xc, 0x0, 0x3c, 0xb3, 0x74, 0x8b, 0x1, 0x5a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x35, 0x7a, 0x5, 0x45, 0x8d, 0x49, 0x8c, 0x5a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x34, 0x7e, 0x5, 0x41, 0x8d, 0x23, 0x26, 0xaa, 0x4, 0x3, 0x24, 0xca, 0x5, 0xb6, 0x54, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x34, 0xb3, 0x75, 0x54, 0x1, 0x42, 0x5, 0x33, 0x6b, 0xb5, 0x0, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x33, 0x13, 0x14, 0x15, 0x1, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x33, 0x4a, 0x5, 0x41, 0x8d, 0x33, 0x65, 0xab, 0x0, 0xb7, 0x5, 0x0, 0xc8, 0x4d, 0x8d, 0x23, 0x2e, 0xaa, 0x4, 0x3, 0x25, 0xa, 0x6, 0x13, 0x75, 0xf5, 0xf, 0x23, 0x20, 0xaa, 0x6, 0x76, 0x45, 0x23, 0x28, 0xaa, 0x4, 0x66, 0x45, 0x23, 0x2a, 0xaa, 0x4, 0x3, 0x20, 0x8a, 0x6, 0x32, 0x45, 0x23, 0x24, 0xaa, 0x6, 0x3, 0x20, 0xca, 0x7, 0x42, 0x45, 0x23, 0x2e, 0xaa, 0x6, 0x3, 0x25, 0x8a, 0x9, 0x9a, 0x45, 0x6d, 0x8d, 0x23, 0x2c, 0xaa, 0x8, 0x72, 0x45, 0x23, 0x26, 0xaa, 0x6, 0x62, 0x45, 0x23, 0x28, 0xaa, 0x6, 0x52, 0x45, 0xb7, 0x5, 0x0, 0xc0, 0x6d, 0x8d, 0x23, 0x2a, 0xaa, 0x6, 0x3, 0x24, 0xca, 0x8, 0x6a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x26, 0xb3, 0x75, 0x34, 0x1, 0x6a, 0x5, 0x33, 0x64, 0xb5, 0x0, 0x6a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x25, 0x93, 0x14, 0xb5, 0x1, 0x6a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x25, 0x72, 0x5, 0x45, 0x8d, 0x49, 0x8c, 0x6a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x25, 0x76, 0x5, 0x41, 0x8d, 0x23, 0x26, 0xaa, 0x8, 0x3, 0x24, 0x8a, 0x7, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x21, 0xb3, 0x75, 0x24, 0x1, 0x62, 0x5, 0x33, 0x64, 0xb5, 0x0, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x23, 0x93, 0x14, 0x95, 0x1, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x1f, 0x6a, 0x5, 0x45, 0x8d, 0x33, 0x69, 0xa4, 0x0, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x1f, 0x93, 0x14, 0xb5, 0x1, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x1f, 0x13, 0x14, 0xc5, 0x1, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x1e, 0x45, 0x8c, 0x76, 0x5, 0x41, 0x8d, 0x33, 0x65, 0xa9, 0x0, 0x23, 0x2c, 0xaa, 0x6, 0x3, 0x24, 0xa, 0x8, 0x6e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x1d, 0xb3, 0x75, 0x94, 0x1, 0x66, 0x5, 0x33, 0x64, 0xb5, 0x0, 0xb3, 0xf4, 0x8d, 0x1, 0x6e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x1c, 0x7a, 0x5, 0x45, 0x8d, 0x49, 0x8c, 0x6e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x1c, 0x7e, 0x5, 0x41, 0x8d, 0x23, 0x20, 0xaa, 0x8, 0x3, 0x24, 0xa, 0x9, 0xd6, 0x44, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x1b, 0xb3, 0x75, 0x54, 0x1, 0x42, 0x5, 0x33, 0x69, 0xb5, 0x0, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x1b, 0x13, 0x14, 0x15, 0x1, 0x26, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x1a, 0x4a, 0x5, 0x41, 0x8d, 0x33, 0x65, 0xa9, 0x0, 0xb7, 0x5, 0x0, 0x8, 0x4d, 0x8d, 0x23, 0x28, 0xaa, 0x8, 0x3, 0x25, 0x4a, 0x9, 0x13, 0x75, 0xf5, 0xf, 0x23, 0x2a, 0xaa, 0x8, 0x62, 0x55, 0x23, 0x22, 0xaa, 0x8, 0x52, 0x55, 0x23, 0x24, 0xaa, 0x8, 0x37, 0x5, 0x0, 0x80, 0x23, 0x2e, 0xaa, 0xc, 0x37, 0x5, 0x0, 0x10, 0x23, 0x28, 0xaa, 0xc, 0x3, 0x25, 0xca, 0x12, 0xb7, 0x5, 0xfd, 0xff, 0xfd, 0x15, 0x6d, 0x8d, 0xb7, 0x5, 0x2, 0x0, 0x4d, 0x8d, 0x23, 0x26, 0xaa, 0x12, 0x2, 0xc5, 0x28, 0x1, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0xfe, 0x28, 0x1, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x2, 0x2, 0xd3, 0x48, 0x11, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x14, 0x48, 0x11, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x0, 0x48, 0x11, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0x0, 0x2, 0xcb, 0x48, 0x9, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x12, 0x48, 0x9, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x12, 0x5a, 0x45, 0x37, 0x4, 0x80, 0x0, 0x7d, 0x14, 0x61, 0x8d, 0xaa, 0x4b, 0x1a, 0x5b, 0xb7, 0x9, 0x0, 0xd0, 0x33, 0x69, 0x35, 0x1, 0x2, 0xdd, 0x28, 0x19, 0x85, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xfc, 0x28, 0x19, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0xf7, 0x2, 0xc5, 0x28, 0x1, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xd, 0x28, 0x1, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xf9, 0x28, 0x1, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xf9, 0x28, 0x1, 0xfd, 0x45, 0x1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0xbb, 0x2, 0xd3, 0x48, 0x11, 0xe5, 0x45, 0x1, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0xba, 0x1a, 0x55, 0xf6, 0x55, 0x6d, 0x8d, 0x2a, 0xd3, 0x48, 0x11, 0xf9, 0x45, 0x5, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xb9, 0x48, 0x11, 0xfd, 0x45, 0x5, 0x46, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0xb8, 0x2, 0xcb, 0x48, 0x9, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xc0, 0x7, 0x48, 0x9, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0x7, 0x5a, 0x45, 0xea, 0x5a, 0x2a, 0x4c, 0x1a, 0x5d, 0x3, 0x20, 0x8a, 0xa, 0x23, 0x24, 0x7a, 0xb, 0x3, 0x20, 0xca, 0xa, 0x23, 0x26, 0x6a, 0xb, 0x83, 0x24, 0xca, 0x9, 0x61, 0x8d, 0x37, 0xb, 0x0, 0x60, 0xb3, 0x6b, 0x65, 0x1, 0x4a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x5, 0xb7, 0x5, 0x20, 0x0, 0x93, 0x8d, 0xf5, 0xff, 0xb3, 0xf4, 0xb4, 0x1, 0x13, 0x14, 0x55, 0x1, 0x4a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x4, 0x5a, 0x5, 0x45, 0x8c, 0x33, 0x65, 0x35, 0x1, 0x41, 0x8d, 0x23, 0x2e, 0xaa, 0x8, 0x3, 0x25, 0xa, 0xa, 0x6, 0x59, 0x33, 0x75, 0x25, 0x1, 0x23, 0x20, 0xaa, 0xa, 0x3, 0x20, 0xa, 0xc, 0x23, 0x20, 0x5a, 0xd, 0x3, 0x20, 0x4a, 0xc, 0x23, 0x22, 0x8a, 0xd, 0x3, 0x24, 0x4a, 0xb, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x0, 0x33, 0x74, 0xb4, 0x1, 0x93, 0x14, 0x55, 0x1, 0x5e, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0xff, 0x5a, 0x5, 0x45, 0x8c, 0x33, 0x65, 0x65, 0x1, 0x41, 0x8d, 0x23, 0x2a, 0xaa, 0xa, 0x3, 0x25, 0x8a, 0xb, 0x33, 0x75, 0x25, 0x1, 0x23, 0x2c, 0xaa, 0xa, 0x3, 0x25, 0xca, 0xb, 0x9a, 0x45, 0x6d, 0x8d, 0x23, 0x2e, 0xaa, 0xa, 0x3, 0x24, 0x8a, 0xc, 0xe5, 0x45, 0x6a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0xa6, 0x33, 0x79, 0x94, 0x1, 0x93, 0x19, 0x95, 0x1, 0x37, 0x5, 0x0, 0x3c, 0x33, 0x74, 0xad, 0x0, 0xf9, 0x45, 0x6a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0xa4, 0x93, 0x14, 0xe5, 0x1, 0xfd, 0x45, 0x6a, 0x85, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0xa3, 0x7e, 0x5, 0xb3, 0x65, 0x89, 0x0, 0x33, 0xe6, 0x99, 0x0, 0xd1, 0x8d, 0x4d, 0x8d, 0x93, 0x5, 0xa, 0x8, 0xa8, 0xc5, 0xe8, 0x59, 0x13, 0x75, 0x5, 0xfc, 0xe8, 0xd9, 0xa8, 0x5d, 0x13, 0x75, 0x5, 0xfc, 0xa8, 0xdd, 0xe8, 0x5d, 0x13, 0x75, 0x5, 0xfc, 0xe8, 0xdd, 0x13, 0x6, 0xa, 0x10, 0x48, 0x42, 0x13, 0x75, 0x5, 0xfc, 0x48, 0xc2, 0x48, 0x46, 0xb7, 0x5, 0x0, 0xf1, 0xfd, 0x15, 0x6d, 0x8d, 0x48, 0xc6, 0x8, 0x46, 0x13, 0x75, 0x5, 0xfc, 0x8, 0xc6, 0x37, 0xa5, 0xa, 0x60, 0x83, 0x25, 0xc5, 0x80, 0x93, 0xf5, 0xf5, 0xf, 0x37, 0x66, 0x66, 0x64, 0x13, 0x6, 0x6, 0x60, 0xd1, 0x8d, 0x23, 0x26, 0xb5, 0x80, 0x37, 0xf5, 0xa, 0x60, 0xc, 0x51, 0x16, 0x56, 0xf1, 0x8d, 0x37, 0x6, 0x66, 0x66, 0xd1, 0x8d, 0xc, 0xd1, 0x83, 0x25, 0xa, 0x40, 0x50, 0x45, 0x41, 0x9a, 0x50, 0xc5, 0x50, 0x45, 0x8d, 0x89, 0x95, 0xc5, 0x13, 0x65, 0x86, 0x0, 0x5, 0x46, 0x63, 0x8c, 0xc5, 0x0, 0x9, 0x46, 0x63, 0x94, 0xc5, 0x2, 0xb7, 0xf5, 0xa, 0x60, 0xc8, 0xc5, 0xc8, 0x49, 0x71, 0x99, 0x5, 0x5, 0x15, 0xa0, 0xb7, 0xf5, 0xa, 0x60, 0xc8, 0xc5, 0xc8, 0x49, 0x71, 0x99, 0x21, 0xa8, 0x93, 0x65, 0x16, 0x0, 0x4c, 0xc5, 0x48, 0x49, 0x39, 0xa0, 0xb7, 0xf5, 0xa, 0x60, 0xc8, 0xc5, 0xc8, 0x49, 0x71, 0x99, 0x9, 0x5, 0xb7, 0xf5, 0xa, 0x60, 0xc8, 0xc9, 0xc8, 0x45, 0x41, 0x76, 0x3d, 0x6, 0x71, 0x8d, 0xc8, 0xc5, 0x88, 0x4d, 0x13, 0x65, 0x15, 0x0, 0x88, 0xcd, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0xeb, 0x63, 0x15, 0x5, 0x52, 0xb7, 0xb, 0xb, 0x60, 0x3, 0xa5, 0xb, 0x40, 0x37, 0xa, 0x0, 0xf0, 0x7d, 0x1a, 0x52, 0xc1, 0x6d, 0x99, 0x23, 0xa0, 0xab, 0x40, 0xd, 0x45, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x47, 0x37, 0xc, 0x0, 0x10, 0xb7, 0x84, 0x0, 0x60, 0x69, 0x75, 0x7d, 0x15, 0xaa, 0xde, 0x7d, 0x75, 0x7d, 0x15, 0xaa, 0xdc, 0x37, 0x5, 0x1, 0x80, 0x7d, 0x15, 0xaa, 0xda, 0x21, 0x65, 0x13, 0x5, 0x25, 0xa1, 0xaa, 0xd6, 0x9, 0x65, 0x13, 0x5, 0x95, 0xd6, 0xaa, 0xd8, 0x37, 0x45, 0xf, 0x0, 0x13, 0x5, 0x5, 0x24, 0xaa, 0xd4, 0x37, 0x64, 0x9, 0x60, 0x37, 0xa, 0x0, 0x20, 0x3, 0xa5, 0xb, 0x40, 0x71, 0x99, 0x23, 0xa0, 0xab, 0x40, 0x3, 0xa5, 0xb, 0x42, 0x8a, 0x45, 0x6d, 0x8d, 0x23, 0xa0, 0xab, 0x42, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0xe0, 0xe3, 0x2a, 0x8d, 0x2e, 0x89, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x0, 0xe6, 0x83, 0xa5, 0xb, 0x40, 0x3, 0xa5, 0xb, 0x40, 0x93, 0xfc, 0x35, 0x0, 0x93, 0x85, 0xfc, 0xff, 0x9, 0x46, 0x63, 0xe4, 0xc5, 0x0, 0x93, 0x7c, 0x35, 0x0, 0x63, 0x86, 0xc, 0x2, 0xd, 0x45, 0x63, 0x8b, 0xac, 0x0, 0x9, 0x45, 0x63, 0x93, 0xac, 0x2, 0x83, 0x25, 0x44, 0x13, 0xf1, 0x99, 0x5, 0x45, 0x85, 0x4d, 0x15, 0xa0, 0x3, 0x25, 0x44, 0x13, 0x81, 0x4d, 0x71, 0x99, 0x93, 0x5, 0x25, 0x0, 0x5, 0x45, 0x11, 0xa8, 0x81, 0x4d, 0x5, 0x45, 0x11, 0xa8, 0x83, 0x25, 0x44, 0x13, 0x1, 0x45, 0x81, 0x4d, 0xf1, 0x99, 0x85, 0x5, 0x23, 0x2a, 0xb4, 0x12, 0x89, 0x4c, 0x83, 0xa5, 0xb, 0x42, 0x8e, 0x5, 0xfd, 0x81, 0xb3, 0x69, 0xb5, 0x0, 0x63, 0x98, 0x9, 0x0, 0x3, 0xa5, 0xb, 0x42, 0x33, 0x65, 0x85, 0x1, 0x23, 0xa0, 0xab, 0x42, 0x93, 0x86, 0xb, 0x40, 0x88, 0x52, 0xb7, 0x5, 0x0, 0x10, 0x4d, 0x8d, 0x88, 0xd2, 0x13, 0x87, 0xb, 0x8, 0x48, 0x57, 0x37, 0xc, 0x0, 0x10, 0x4d, 0x8d, 0x48, 0xd7, 0x48, 0x57, 0x37, 0x6, 0x0, 0x20, 0x51, 0x8d, 0x48, 0xd7, 0x3, 0xa0, 0xcb, 0xa, 0x3, 0xa0, 0xb, 0x42, 0x48, 0x57, 0x8c, 0x52, 0x33, 0x7b, 0xc5, 0x0, 0x37, 0x5, 0x0, 0x40, 0xb3, 0xfa, 0xa5, 0x0, 0x63, 0x89, 0xd, 0x2, 0x63, 0x1e, 0xb, 0x0, 0x3, 0xa5, 0xcb, 0xa, 0x33, 0x65, 0x45, 0x1, 0x23, 0xa6, 0xab, 0xa, 0x13, 0x5, 0xc0, 0x12, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0x33, 0x63, 0x99, 0xa, 0x0, 0x3, 0xa5, 0xb, 0x42, 0xb7, 0x5, 0x0, 0x40, 0x4d, 0x8d, 0x23, 0xa0, 0xab, 0x42, 0xa8, 0x54, 0x4e, 0x5, 0x63, 0x52, 0x5, 0x2, 0x3, 0xa5, 0x4, 0x8, 0x13, 0x75, 0xf5, 0x7, 0x13, 0x5, 0x5, 0x8, 0x23, 0xa0, 0xa4, 0x8, 0xa8, 0x54, 0x42, 0x5, 0x63, 0x46, 0x5, 0x0, 0x3, 0xa5, 0x4, 0x8, 0x5, 0x89, 0x6d, 0xd9, 0xa8, 0x54, 0xf6, 0x55, 0x6d, 0x8d, 0x93, 0x95, 0xdc, 0x0, 0x4d, 0x8d, 0xa8, 0xd4, 0xa8, 0x54, 0xe6, 0x55, 0x6d, 0x8d, 0xa8, 0xd4, 0xa8, 0x54, 0xd6, 0x55, 0x6d, 0x8d, 0xb7, 0x5, 0x0, 0x4, 0x4d, 0x8d, 0xa8, 0xd4, 0x3, 0xa5, 0x4, 0x8, 0xb7, 0x5, 0x0, 0x8, 0x63, 0x84, 0xc, 0x0, 0xb7, 0x5, 0x0, 0x20, 0x13, 0x75, 0xf5, 0x7, 0x4d, 0x8d, 0x23, 0xa0, 0xa4, 0x8, 0x46, 0x55, 0x63, 0x83, 0xc, 0x0, 0x36, 0x55, 0xac, 0x54, 0x1a, 0x46, 0xf1, 0x8d, 0xac, 0xd4, 0xac, 0x54, 0x37, 0x6, 0x0, 0x80, 0xd1, 0x8d, 0xac, 0xd4, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0xa0, 0x29, 0xa8, 0x54, 0x42, 0x5, 0x63, 0x48, 0x5, 0x0, 0x3, 0xa5, 0x4, 0x8, 0x5, 0x89, 0x6d, 0xd9, 0x1, 0x44, 0x39, 0xa0, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0xcd, 0xe0, 0x54, 0x1d, 0x80, 0xa8, 0x54, 0x9a, 0x45, 0x6d, 0x8d, 0xa8, 0xd4, 0x63, 0x98, 0x9, 0x0, 0x3, 0xa5, 0xb, 0x42, 0x8a, 0x45, 0x6d, 0x8d, 0x23, 0xa0, 0xab, 0x42, 0x63, 0x89, 0xd, 0x2, 0x63, 0xe, 0xb, 0x0, 0x3, 0xa5, 0xcb, 0xa, 0x33, 0x65, 0x45, 0x1, 0x23, 0xa6, 0xab, 0xa, 0x13, 0x5, 0xc0, 0x12, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x20, 0x24, 0x63, 0x89, 0xa, 0x0, 0x3, 0xa5, 0xb, 0x42, 0xb7, 0x5, 0x0, 0x40, 0x4d, 0x8d, 0x23, 0xa0, 0xab, 0x42, 0x63, 0x15, 0xd, 0x0, 0x13, 0x6, 0x80, 0x2, 0x31, 0xa0, 0xa6, 0x55, 0x33, 0x5, 0xb9, 0x2, 0x33, 0x56, 0xb5, 0x2, 0x63, 0x7, 0x6, 0x2a, 0x2a, 0x6, 0x13, 0x55, 0xd4, 0x0, 0x4e, 0x4, 0x93, 0x55, 0x16, 0x0, 0xb3, 0x6, 0xb4, 0x0, 0xb3, 0xb5, 0x86, 0x0, 0x2e, 0x95, 0x93, 0xb5, 0x16, 0x0, 0xb3, 0x5, 0xb5, 0x40, 0x13, 0x85, 0xf6, 0xff, 0x81, 0x46, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x66, 0x37, 0x64, 0x9, 0x60, 0xe3, 0x9, 0x5, 0xda, 0xb7, 0x19, 0xb, 0x60, 0x3, 0xa0, 0x49, 0x0, 0x23, 0xa2, 0xa9, 0x0, 0x37, 0x4, 0xb, 0x60, 0x48, 0x44, 0xa2, 0x45, 0x6d, 0x8d, 0xb7, 0x5, 0x0, 0x80, 0x4d, 0x8d, 0x48, 0xc4, 0x37, 0xa5, 0xa, 0x60, 0x3, 0x26, 0xc5, 0x80, 0x86, 0x56, 0x75, 0x8e, 0xb7, 0x6, 0x0, 0x40, 0x55, 0x8e, 0x23, 0x26, 0xc5, 0x80, 0x37, 0xf5, 0xa, 0x60, 0x10, 0x51, 0xe5, 0x76, 0x22, 0x6, 0x21, 0x82, 0x37, 0x7, 0x0, 0x44, 0x59, 0x8e, 0x10, 0xd1, 0x23, 0x2e, 0xb4, 0xc, 0x37, 0x5, 0x0, 0x10, 0x23, 0x28, 0xa4, 0xc, 0x3, 0x25, 0x84, 0x41, 0x13, 0x89, 0xd6, 0xdf, 0xb7, 0x5, 0x40, 0x0, 0x93, 0x84, 0xf5, 0xff, 0x65, 0x8d, 0xb7, 0x5, 0x0, 0x19, 0x4d, 0x8d, 0x23, 0x2c, 0xa4, 0x40, 0x13, 0x5, 0xd0, 0x6, 0xb9, 0x45, 0x1d, 0x46, 0x13, 0x7, 0x0, 0x8, 0x81, 0x46, 0x97, 0xe0, 0xff, 0xff, 0xe7, 0x80, 0xa0, 0x6a, 0x3, 0x25, 0xc4, 0x41, 0x65, 0x8d, 0xb7, 0x5, 0x0, 0xaf, 0x4d, 0x8d, 0x23, 0x2e, 0xa4, 0x40, 0x13, 0x5, 0xd0, 0x6, 0x95, 0x45, 0x1d, 0x46, 0x9d, 0x46, 0x5, 0x47, 0x97, 0xe0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0x68, 0x13, 0x5, 0xd0, 0x6, 0x9d, 0x45, 0x1d, 0x46, 0x9d, 0x46, 0x5, 0x47, 0x97, 0xe0, 0xff, 0xff, 0xe7, 0x80, 0x20, 0x67, 0x8, 0x54, 0xb7, 0x5, 0x0, 0x8, 0xfd, 0x15, 0x6d, 0x8d, 0x37, 0x6, 0x0, 0xc8, 0x51, 0x8d, 0x8, 0xd4, 0x3, 0x25, 0xc4, 0x9, 0x6d, 0x8d, 0xb7, 0x5, 0x0, 0xd0, 0x4d, 0x8d, 0x23, 0x2e, 0xa4, 0x8, 0x37, 0x65, 0x9, 0x60, 0x83, 0x25, 0x5, 0x13, 0x16, 0x56, 0x13, 0x6, 0x16, 0xf0, 0xd1, 0x8d, 0x23, 0x28, 0xb5, 0x12, 0x3, 0xa5, 0x9, 0x4, 0x3d, 0x81, 0x93, 0x75, 0x15, 0x0, 0x91, 0xcd, 0x4e, 0x86, 0x4c, 0x56, 0xf9, 0x99, 0x4c, 0xd6, 0xc, 0x56, 0xf9, 0x99, 0xc, 0xd6, 0xb7, 0x25, 0xb, 0x60, 0xb0, 0x45, 0x33, 0x76, 0x26, 0x1, 0xb0, 0xc5, 0x93, 0x75, 0x25, 0x0, 0x99, 0xcd, 0xb7, 0x15, 0xb, 0x60, 0xd0, 0x55, 0x75, 0x9a, 0xd0, 0xd5, 0x90, 0x55, 0x75, 0x9a, 0x90, 0xd5, 0xb7, 0x25, 0xb, 0x60, 0xf0, 0x45, 0x33, 0x76, 0x26, 0x1, 0xf0, 0xc5, 0x93, 0x75, 0x45, 0x0, 0x99, 0xcd, 0xb7, 0x15, 0xb, 0x60, 0xd0, 0x55, 0x6d, 0x9a, 0xd0, 0xd5, 0x90, 0x55, 0x6d, 0x9a, 0x90, 0xd5, 0xb7, 0x25, 0xb, 0x60, 0xb0, 0x49, 0x33, 0x76, 0x26, 0x1, 0xb0, 0xc9, 0x93, 0x75, 0x85, 0x0, 0x99, 0xcd, 0xb7, 0x15, 0xb, 0x60, 0xd0, 0x55, 0x5d, 0x9a, 0xd0, 0xd5, 0x90, 0x55, 0x5d, 0x9a, 0x90, 0xd5, 0xb7, 0x25, 0xb, 0x60, 0xf0, 0x49, 0x33, 0x76, 0x26, 0x1, 0xf0, 0xc9, 0x93, 0x75, 0x5, 0x1, 0x99, 0xcd, 0xb7, 0x15, 0xb, 0x60, 0xd0, 0x55, 0x3d, 0x9a, 0xd0, 0xd5, 0x90, 0x55, 0x3d, 0x9a, 0x90, 0xd5, 0xb7, 0x25, 0xb, 0x60, 0xb0, 0x4d, 0x33, 0x76, 0x26, 0x1, 0xb0, 0xcd, 0x93, 0x75, 0x5, 0x2, 0x8d, 0xc1, 0xb7, 0x15, 0xb, 0x60, 0xd0, 0x55, 0x13, 0x76, 0xf6, 0xfd, 0xd0, 0xd5, 0x90, 0x55, 0x13, 0x76, 0xf6, 0xfd, 0x90, 0xd5, 0xb7, 0x25, 0xb, 0x60, 0xf0, 0x4d, 0x33, 0x76, 0x26, 0x1, 0xf0, 0xcd, 0x93, 0x75, 0x5, 0x4, 0x8d, 0xc1, 0xb7, 0x15, 0xb, 0x60, 0xd0, 0x55, 0x13, 0x76, 0xf6, 0xfb, 0xd0, 0xd5, 0x90, 0x55, 0x13, 0x76, 0xf6, 0xfb, 0x90, 0xd5, 0xb7, 0x25, 0xb, 0x60, 0xb0, 0x51, 0x33, 0x76, 0x26, 0x1, 0xb0, 0xd1, 0x62, 0x5, 0x63, 0x52, 0x5, 0x2, 0x37, 0x15, 0xb, 0x60, 0x4c, 0x55, 0x93, 0xf5, 0xf5, 0xf7, 0x4c, 0xd5, 0xc, 0x55, 0x93, 0xf5, 0xf5, 0xf7, 0xc, 0xd5, 0x37, 0x25, 0xb, 0x60, 0x6c, 0x51, 0xb3, 0xf5, 0x25, 0x1, 0x6c, 0xd1, 0x37, 0x45, 0xd8, 0x50, 0x13, 0x5, 0x15, 0xaa, 0xb7, 0x25, 0xb, 0x60, 0x13, 0x87, 0x5, 0xc0, 0x8, 0xd3, 0x37, 0x6, 0xc4, 0x12, 0x50, 0xcf, 0x23, 0xa0, 0x5, 0xc2, 0x8, 0xcf, 0x10, 0x43, 0xb7, 0xf6, 0xff, 0x7f, 0xfd, 0x16, 0x75, 0x8e, 0x10, 0xc3, 0x23, 0xac, 0x5, 0xc0, 0xb7, 0x85, 0x0, 0x60, 0xe8, 0xd1, 0x1, 0x46, 0xb0, 0xc5, 0xf0, 0xd1, 0xb7, 0x95, 0x0, 0x60, 0xe8, 0xd1, 0xb0, 0xc5, 0xf0, 0xd1, 0xbe, 0x50, 0x2e, 0x54, 0x9e, 0x54, 0xe, 0x59, 0xfe, 0x49, 0x6e, 0x4a, 0xde, 0x4a, 0x4e, 0x4b, 0xbe, 0x4b, 0x2e, 0x4c, 0x9e, 0x4c, 0xe, 0x4d, 0xfa, 0x5d, 0x6d, 0x61, 0x82, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1, 0xa0, 0x82, 0x80, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0x5, 0x60, 0x73, 0x10, 0x55, 0x30, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x37, 0x4, 0x0, 0x60, 0x48, 0x4c, 0x13, 0x75, 0xf5, 0xf, 0x9, 0xc9, 0x8, 0x40, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0x1, 0x5, 0x89, 0x75, 0xd5, 0x0, 0x0, 0x37, 0x5, 0x0, 0x60, 0x85, 0x45, 0xc, 0xc9, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0xb7, 0x45, 0x80, 0x40, 0x13, 0x86, 0xc5, 0x1c, 0x91, 0x65, 0xb2, 0x95, 0x83, 0xc5, 0x85, 0x40, 0x8d, 0xe9, 0xc5, 0x46, 0xaa, 0x6, 0x33, 0x7, 0xd6, 0x0, 0x5c, 0x43, 0x3e, 0x96, 0x23, 0x0, 0xa6, 0x0, 0x48, 0x43, 0x5, 0x5, 0xa9, 0x8e, 0x10, 0x43, 0x93, 0xb6, 0x16, 0x0, 0xfd, 0x16, 0x75, 0x8d, 0x48, 0xc3, 0x63, 0x17, 0xa6, 0x0, 0x37, 0x85, 0x80, 0x40, 0x5, 0x46, 0x23, 0xa, 0xc5, 0x5c, 0x33, 0x35, 0xb0, 0x0, 0x82, 0x80, 0x41, 0x11, 0x6, 0xc6, 0x22, 0xc4, 0x37, 0xf4, 0x0, 0x60, 0x48, 0x40, 0x11, 0x89, 0x9, 0xc9, 0x8, 0x40, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xfa, 0x5, 0x89, 0x7d, 0xd5, 0x0, 0x0, 0x37, 0xf5, 0x0, 0x60, 0x91, 0x45, 0x4c, 0xc9, 0xb2, 0x40, 0x22, 0x44, 0x41, 0x1, 0x82, 0x80, 0x37, 0x45, 0x80, 0x40, 0x13, 0x8, 0xc5, 0x1c, 0xc5, 0x47, 0xaa, 0x7, 0x33, 0x7, 0xf8, 0x0, 0x14, 0x43, 0x48, 0x43, 0x83, 0x45, 0x87, 0x0, 0x35, 0x8d, 0x33, 0x66, 0xb5, 0x0, 0x33, 0x35, 0xc0, 0x0, 0x11, 0xce, 0x23, 0x4, 0x7, 0x0, 0x93, 0x85, 0x16, 0x0, 0xad, 0x8f, 0x13, 0xb6, 0x17, 0x0, 0x7d, 0x16, 0xf1, 0x8d, 0xc, 0xc3, 0xc2, 0x96, 0x83, 0xc5, 0x6, 0x0, 0x82, 0x80, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x51, 0x8d, 0x82, 0x82, 0x3, 0x45, 0xd4, 0x0, 0x83, 0x45, 0xc4, 0x0, 0x3, 0x46, 0xe4, 0x0, 0x83, 0x46, 0xf4, 0x0, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x55, 0x8e, 0x82, 0x82, 0x3, 0x45, 0x14, 0x1, 0x83, 0x45, 0x4, 0x1, 0x3, 0x46, 0x24, 0x1, 0x83, 0x46, 0x34, 0x1, 0x22, 0x5, 0x4d, 0x8d, 0x42, 0x6, 0xe2, 0x6, 0x82, 0x82, 0x33, 0x6a, 0xa6, 0x0, 0x3, 0x45, 0x94, 0x0, 0x83, 0x45, 0x84, 0x0, 0x3, 0x46, 0xa4, 0x0, 0x83, 0x46, 0xb4, 0x0, 0x82, 0x82, 0x83, 0x25, 0x85, 0x9, 0x93, 0xe5, 0x15, 0x0, 0x23, 0x2c, 0xb5, 0x8, 0x82, 0x82, 0x29, 0x65, 0x13, 0x5, 0x45, 0x89, 0xa, 0x95, 0xa9, 0x65, 0x93, 0x85, 0xc5, 0x82, 0x8a, 0x95, 0x13, 0x6, 0x80, 0x5, 0x82, 0x82, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x56, 0xd5, 0x0, 0x33, 0x15, 0xc5, 0x0, 0xb3, 0x95, 0xc5, 0x0, 0xd5, 0x8d, 0x82, 0x80, 0xb3, 0x15, 0xc5, 0x0, 0x1, 0x45, 0x82, 0x80, 0x93, 0x76, 0x6, 0x2, 0x81, 0xee, 0x11, 0xca, 0x33, 0x55, 0xc5, 0x0, 0xb3, 0x6, 0xc0, 0x40, 0xb3, 0x96, 0xd5, 0x0, 0x55, 0x8d, 0xb3, 0xd5, 0xc5, 0x0, 0x82, 0x80, 0x33, 0xd5, 0xc5, 0x0, 0x81, 0x45, 0x82, 0x80, 0x1, 0x46, 0xc1, 0x46, 0x33, 0x57, 0xd5, 0x0, 0x63, 0x63, 0xb7, 0x0, 0x3a, 0x85, 0x33, 0x37, 0xb7, 0x0, 0x7d, 0x17, 0x75, 0x8f, 0x85, 0x82, 0x3a, 0x96, 0xed, 0xf6, 0x32, 0x85, 0x82, 0x80, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x82, 0x21, 0x3a, 0x8a, 0xb6, 0x89, 0x32, 0x8b, 0xae, 0x84, 0x2a, 0x89, 0x11, 0xc7, 0x63, 0x2, 0x4b, 0x3, 0x33, 0x35, 0x4b, 0x1, 0x5, 0xa0, 0x63, 0x5, 0xb, 0x8, 0x63, 0x7a, 0x3b, 0x9, 0x4e, 0x85, 0xda, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0xfb, 0x5d, 0xe1, 0xfd, 0x4a, 0x6d, 0xa0, 0x33, 0xb5, 0x34, 0x1, 0x81, 0x46, 0x25, 0xe1, 0x63, 0xf, 0xb, 0x4, 0x5a, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x80, 0xf9, 0xaa, 0x8a, 0x13, 0x76, 0xf5, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x18, 0x81, 0x46, 0x5, 0x46, 0x33, 0x17, 0x56, 0x1, 0x33, 0xb6, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x84, 0xc7, 0x40, 0x63, 0x4d, 0x4, 0x0, 0x89, 0x8c, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x37, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb7, 0x34, 0x1, 0xd9, 0x8e, 0x81, 0xef, 0x22, 0x8b, 0x5, 0x81, 0x13, 0x96, 0xf5, 0x1, 0x51, 0x8d, 0x85, 0x81, 0x5, 0x83, 0xf9, 0xb7, 0x5a, 0x84, 0x36, 0x88, 0x69, 0xa0, 0x1, 0x48, 0x59, 0xa0, 0x1, 0x44, 0x1, 0x48, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xa5, 0xa8, 0x63, 0x16, 0x3b, 0x9, 0x1, 0x44, 0x33, 0xd5, 0x64, 0x3, 0xb3, 0xf4, 0x64, 0x3, 0xb3, 0x35, 0xa0, 0x0, 0x7d, 0x15, 0x93, 0x6, 0x15, 0x0, 0x13, 0xb5, 0x16, 0x0, 0x33, 0x88, 0xa5, 0x0, 0x99, 0xa8, 0x93, 0x5, 0x0, 0x2, 0xb3, 0x8a, 0xa5, 0x40, 0x13, 0xf6, 0xfa, 0x3, 0x4e, 0x85, 0xd2, 0x85, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0xf, 0x81, 0x46, 0x5, 0x46, 0x33, 0x16, 0x56, 0x1, 0x33, 0xb7, 0xa4, 0x0, 0xb3, 0x7, 0xbb, 0x40, 0x33, 0x87, 0xe7, 0x40, 0x63, 0x46, 0x7, 0x0, 0x89, 0x8c, 0xd1, 0x8e, 0x9, 0xcb, 0x3a, 0x8b, 0x5, 0x81, 0x13, 0x97, 0xf5, 0x1, 0x59, 0x8d, 0x85, 0x81, 0x5, 0x82, 0xf1, 0xbf, 0x1, 0x44, 0x1, 0x48, 0x33, 0xd5, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xc9, 0x8e, 0x4a, 0x85, 0x4, 0xc5, 0x14, 0xc1, 0x40, 0xc5, 0x23, 0x22, 0x9, 0x1, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0xc2, 0xc, 0x82, 0x80, 0x93, 0xd5, 0x9, 0x1, 0x33, 0x58, 0x3b, 0x3, 0x33, 0x74, 0x3b, 0x3, 0x95, 0xe9, 0x93, 0xd5, 0x4, 0x1, 0x13, 0x16, 0x4, 0x1, 0xd1, 0x8d, 0x33, 0xd6, 0x35, 0x3, 0xb3, 0xf5, 0x35, 0x3, 0xc2, 0x4, 0xc1, 0x80, 0xc2, 0x5, 0xc5, 0x8d, 0xb3, 0xd6, 0x35, 0x3, 0xb3, 0xf4, 0x35, 0x3, 0x93, 0x15, 0x6, 0x1, 0x41, 0x82, 0x33, 0x68, 0x6, 0x1, 0xcd, 0x8e, 0x1, 0x44, 0x75, 0xb7, 0x63, 0x5, 0x44, 0x1, 0xb3, 0x35, 0x44, 0x1, 0x19, 0xa0, 0xb3, 0xb5, 0x34, 0x1, 0x99, 0xc1, 0x81, 0x46, 0x61, 0xbf, 0x93, 0xd6, 0x19, 0x0, 0x7e, 0xa, 0xb3, 0x66, 0xda, 0x0, 0x93, 0x97, 0xf9, 0x1, 0x37, 0x7, 0x0, 0x80, 0x33, 0xb5, 0xf4, 0x0, 0x33, 0x6, 0xd4, 0x40, 0x9, 0x8e, 0x63, 0x46, 0x6, 0x0, 0x9d, 0x8c, 0xd9, 0x8d, 0x9, 0xca, 0x32, 0x84, 0x85, 0x83, 0x13, 0x95, 0xf6, 0x1, 0xc9, 0x8f, 0x85, 0x82, 0x5, 0x83, 0xf9, 0xbf, 0x1, 0x44, 0xb3, 0xd6, 0x34, 0x3, 0xb3, 0xf4, 0x34, 0x3, 0xcd, 0x8e, 0x91, 0xbf, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xdb, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xdd, 0x97, 0x2, 0x0, 0x0, 0xe7, 0x82, 0x22, 0x4, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xe0, 0xb2, 0x45, 0x22, 0x45, 0xf2, 0x40, 0x5, 0x61, 0x82, 0x80, 0xf2, 0x40, 0x62, 0x44, 0xd2, 0x44, 0x42, 0x49, 0xb2, 0x49, 0x22, 0x4a, 0x92, 0x4a, 0x2, 0x4b, 0x5, 0x61, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x22, 0xcc, 0x26, 0xca, 0x4a, 0xc8, 0x4e, 0xc6, 0x52, 0xc4, 0x56, 0xc2, 0x5a, 0xc0, 0x82, 0x82, 0x1, 0x11, 0x6, 0xce, 0x36, 0x87, 0xb2, 0x86, 0x2e, 0x86, 0xaa, 0x85, 0x28, 0x0, 0x82, 0x82, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x3b, 0x75, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x3f, 0x7d, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7f, 0x45, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7f, 0x49, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7f, 0x51, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7f, 0x9d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7e, 0xa5, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7e, 0xa9, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x7e, 0xb1, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x7e, 0x3d, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7e, 0x5, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7e, 0xd, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x7e, 0x11, 0xaa, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x7e, 0x19, 0xa2, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x7d, 0xe5, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x7d, 0xed, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x7d, 0xf1, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x7d, 0xf9, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x7d, 0xc1, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x7d, 0x4d, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x9c, 0x55, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x9b, 0x59, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x9a, 0x61, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x99, 0xad, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x80, 0x98, 0xb5, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x97, 0xb9, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xc0, 0x96, 0x81, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xe0, 0x95, 0x89, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x0, 0x95, 0x15, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x20, 0x94, 0x1d, 0xa0, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x40, 0x93, 0x21, 0xa8, 0x35, 0x71, 0x6, 0xc0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0x60, 0x92, 0x29, 0xa0, 0x97, 0x0, 0x0, 0x0, 0x93, 0x80, 0xa0, 0x1f, 0x16, 0xc2, 0x1a, 0xc4, 0x1e, 0xc6, 0x72, 0xc8, 0x76, 0xca, 0x7a, 0xcc, 0x7e, 0xce, 0x2a, 0xd0, 0x2e, 0xd2, 0x32, 0xd4, 0x36, 0xd6, 0x3a, 0xd8, 0x3e, 0xda, 0x42, 0xdc, 0x46, 0xde, 0xa2, 0xc0, 0xa6, 0xc2, 0xca, 0xc4, 0xce, 0xc6, 0xd2, 0xc8, 0xd6, 0xca, 0xda, 0xcc, 0xde, 0xce, 0xe2, 0xd0, 0xe6, 0xd2, 0xea, 0xd4, 0xee, 0xd6, 0x8e, 0xd8, 0x92, 0xda, 0x73, 0x23, 0x10, 0x34, 0x9a, 0xde, 0x73, 0x23, 0x0, 0x30, 0x1a, 0xc1, 0x73, 0x23, 0x20, 0x34, 0x1a, 0xc3, 0x73, 0x23, 0x30, 0x34, 0x1a, 0xc5, 0x0, 0x11, 0xa2, 0xdc, 0xa, 0x85, 0x71, 0x11, 0x6, 0xc0, 0xef, 0x0, 0xc0, 0x15, 0x82, 0x40, 0x2a, 0xc0, 0x48, 0x0, 0x82, 0x90, 0x2, 0x45, 0xef, 0x0, 0x80, 0x17, 0x11, 0x1, 0x76, 0x53, 0x73, 0x10, 0x13, 0x34, 0xa, 0x43, 0x73, 0x10, 0x3, 0x30, 0x82, 0x40, 0x92, 0x42, 0x22, 0x43, 0xb2, 0x43, 0x42, 0x4e, 0xd2, 0x4e, 0x62, 0x4f, 0xf2, 0x4f, 0x2, 0x55, 0x92, 0x55, 0x22, 0x56, 0xb2, 0x56, 0x42, 0x57, 0xd2, 0x57, 0x62, 0x58, 0xf2, 0x58, 0x6, 0x44, 0x96, 0x44, 0x26, 0x49, 0xb6, 0x49, 0x46, 0x4a, 0xd6, 0x4a, 0x66, 0x4b, 0xf6, 0x4b, 0x6, 0x5c, 0x96, 0x5c, 0x26, 0x5d, 0xb6, 0x5d, 0xc6, 0x51, 0x56, 0x52, 0x66, 0x51, 0x73, 0x0, 0x20, 0x30, 0x1, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0x6f, 0xf0, 0x1f, 0xd0, 0x6f, 0xf0, 0xbf, 0xd0, 0x6f, 0xf0, 0x5f, 0xd1, 0x6f, 0xf0, 0xff, 0xd1, 0x6f, 0xf0, 0x9f, 0xd2, 0x6f, 0xf0, 0x3f, 0xd3, 0x6f, 0xf0, 0xdf, 0xd3, 0x6f, 0xf0, 0x7f, 0xd4, 0x6f, 0xf0, 0x1f, 0xd5, 0x6f, 0xf0, 0xbf, 0xd5, 0x6f, 0xf0, 0x5f, 0xd6, 0x6f, 0xf0, 0xff, 0xd6, 0x6f, 0xf0, 0x9f, 0xd7, 0x6f, 0xf0, 0x3f, 0xd8, 0x6f, 0xf0, 0xdf, 0xd8, 0x6f, 0xf0, 0x7f, 0xd9, 0x6f, 0xf0, 0x1f, 0xda, 0x6f, 0xf0, 0xbf, 0xda, 0x6f, 0xf0, 0x5f, 0xdb, 0x6f, 0xf0, 0xff, 0xdb, 0x6f, 0xf0, 0x9f, 0xdc, 0x6f, 0xf0, 0x3f, 0xdd, 0x6f, 0xf0, 0xdf, 0xdd, 0x6f, 0xf0, 0x7f, 0xde, 0x6f, 0xf0, 0x1f, 0xdf, 0x6f, 0xf0, 0xbf, 0xdf, 0x6f, 0xf0, 0x5f, 0xe0, 0x6f, 0xf0, 0xff, 0xe0, 0x6f, 0xf0, 0x9f, 0xe1, 0x6f, 0xf0, 0x3f, 0xe2, 0x6f, 0xf0, 0xdf, 0xe2, 0x6f, 0xf0, 0x7f, 0xe3, 0x73, 0x25, 0x20, 0x34, 0xa, 0x5, 0xb7, 0x15, 0x0, 0x20, 0x2e, 0x95, 0x10, 0x49, 0x3, 0xa5, 0x5, 0x9, 0xbd, 0x46, 0x63, 0x78, 0xd6, 0x0, 0x5, 0x6, 0x23, 0xa8, 0xc5, 0x8, 0xa1, 0x45, 0x73, 0xa0, 0x5, 0x30, 0x13, 0x75, 0xf5, 0xf, 0x82, 0x80, 0xa1, 0x45, 0x73, 0xb0, 0x5, 0x30, 0xb7, 0x15, 0x0, 0x20, 0x23, 0xa8, 0xa5, 0x8, 0x82, 0x80, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0xc3, 0x71, 0x0, 0x0, 0xf3, 0x25, 0x20, 0x34, 0x63, 0xc6, 0x5, 0x0, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0xa3, 0x70, 0x13, 0x95, 0x15, 0x0, 0x5, 0x81, 0xb1, 0x45, 0x63, 0x7b, 0xb5, 0x0, 0xa, 0x5, 0xb7, 0x45, 0x80, 0x40, 0x93, 0x85, 0x45, 0x17, 0x2e, 0x95, 0x1c, 0x41, 0x91, 0xc3, 0x82, 0x87, 0x17, 0xf3, 0xff, 0xff, 0x67, 0x0, 0x23, 0x6e, 0x0, 0x0, 0xaa, 0x85, 0x5, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x83, 0x0, 0xd, 0x71, 0x10, 0x2, 0x23, 0x2e, 0x16, 0x4, 0x20, 0xce, 0x64, 0xca, 0x23, 0x28, 0x26, 0x5, 0x23, 0x26, 0x36, 0x5, 0x23, 0x24, 0x46, 0x5, 0x23, 0x22, 0x56, 0x5, 0x23, 0x20, 0x66, 0x5, 0x23, 0x2e, 0x76, 0x3, 0x23, 0x2c, 0x86, 0x3, 0x23, 0x2a, 0x96, 0x3, 0x23, 0x28, 0xa6, 0x3, 0x23, 0x26, 0xb6, 0x3, 0x73, 0x26, 0x40, 0xf1, 0x2e, 0xd0, 0x63, 0x13, 0x6, 0x3a, 0xb7, 0x5, 0x1, 0x60, 0x83, 0xab, 0x45, 0x13, 0x3, 0xa9, 0x85, 0x13, 0x3, 0xad, 0xc5, 0x13, 0xf3, 0x25, 0x40, 0xf1, 0x63, 0x97, 0x5, 0x38, 0x85, 0x45, 0xb3, 0x95, 0xa5, 0x0, 0x37, 0x16, 0x0, 0x20, 0xc, 0xc6, 0xf3, 0x25, 0x40, 0xf1, 0x63, 0x9d, 0x5, 0x36, 0x7d, 0x15, 0x2a, 0xcc, 0x28, 0x10, 0x13, 0x6, 0x0, 0x10, 0x97, 0xd0, 0x7f, 0xff, 0xe7, 0x80, 0x40, 0xa2, 0x1, 0x4c, 0x37, 0xb5, 0x7c, 0x7, 0x13, 0xb, 0x15, 0x53, 0x37, 0x45, 0x80, 0x40, 0x13, 0x6, 0x45, 0xc, 0x5e, 0xc8, 0x4a, 0xc6, 0x6a, 0xca, 0x5a, 0xce, 0x32, 0xd2, 0x33, 0xe5, 0xab, 0x1, 0xb3, 0x65, 0x89, 0x1, 0x4d, 0x8d, 0x63, 0xd, 0x5, 0x18, 0x63, 0x1b, 0xd, 0x2, 0x33, 0x5, 0x80, 0x41, 0x33, 0x75, 0xac, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x89, 0xb, 0x2, 0xb3, 0x5, 0x70, 0x41, 0xb3, 0xf5, 0xbb, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0xa0, 0x41, 0x33, 0x75, 0xad, 0x0, 0x33, 0x5, 0x65, 0x3, 0x6d, 0x81, 0x32, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x9b, 0xb, 0xfc, 0xb3, 0x5, 0x20, 0x41, 0xb3, 0x75, 0xb9, 0x0, 0xb3, 0x85, 0x65, 0x3, 0xed, 0x81, 0xb2, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0xe5, 0x2b, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x13, 0x95, 0x24, 0x0, 0xb7, 0x5, 0x1, 0x60, 0x4d, 0x8d, 0x8, 0x41, 0x93, 0xbc, 0x4, 0x4, 0x13, 0x84, 0x4, 0xfc, 0x93, 0x5, 0x0, 0x4, 0xb3, 0x8a, 0x95, 0x40, 0x93, 0xbd, 0x14, 0x0, 0x41, 0xc5, 0xa, 0x5, 0xb7, 0x15, 0x0, 0x20, 0x2e, 0x95, 0x3, 0x2a, 0x5, 0x1, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x0, 0x95, 0x2a, 0x84, 0xae, 0x89, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x94, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0x22, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0xce, 0x85, 0x13, 0x7a, 0xfa, 0x0, 0x13, 0x84, 0xfd, 0xff, 0xb3, 0x79, 0xa4, 0x0, 0x6d, 0x8c, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x20, 0x91, 0xb3, 0x6, 0x90, 0x41, 0x33, 0xf6, 0xa6, 0x0, 0xed, 0x8e, 0x12, 0xa, 0x28, 0x10, 0x2a, 0x9a, 0xd2, 0x84, 0xc8, 0x40, 0x8c, 0x40, 0xd8, 0x44, 0x9c, 0x44, 0x55, 0x8d, 0xd1, 0x8d, 0x41, 0x8f, 0xb3, 0xe7, 0x37, 0x1, 0x9c, 0xc4, 0xd8, 0xc4, 0x8c, 0xc0, 0xc8, 0xc0, 0xb1, 0xa8, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x60, 0x8d, 0xaa, 0x89, 0x2e, 0x8a, 0x5, 0x45, 0x81, 0x45, 0x22, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0x40, 0x8c, 0x2a, 0x8b, 0x2e, 0x84, 0x5, 0x45, 0x81, 0x45, 0x56, 0x86, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xa0, 0x8b, 0x13, 0x6, 0x0, 0x4, 0x63, 0xe3, 0xc4, 0x0, 0xa2, 0x85, 0x63, 0xe3, 0xc4, 0x0, 0x5a, 0x85, 0x33, 0x6, 0x90, 0x41, 0xb3, 0x76, 0x46, 0x1, 0x33, 0x76, 0x36, 0x1, 0xfd, 0x1d, 0x33, 0xf4, 0xbd, 0x0, 0xb3, 0xf9, 0xad, 0x0, 0x72, 0x4b, 0x13, 0x45, 0xf4, 0xff, 0x93, 0xc5, 0xf9, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0x13, 0x46, 0xf6, 0xff, 0xb3, 0xfb, 0xcb, 0x0, 0x33, 0x79, 0xd9, 0x0, 0x33, 0x7d, 0xbd, 0x0, 0x33, 0x7c, 0xac, 0x0, 0x12, 0x56, 0xb9, 0xbd, 0x49, 0x45, 0xe2, 0x45, 0x63, 0x60, 0xb5, 0x1a, 0x13, 0x95, 0x25, 0x0, 0xb7, 0x45, 0x80, 0x40, 0x93, 0x85, 0xc5, 0xe, 0x2e, 0x95, 0x8, 0x41, 0xc1, 0x45, 0xd2, 0x46, 0x63, 0x74, 0xb5, 0x18, 0x12, 0x5, 0x2c, 0x10, 0x2e, 0x95, 0xc, 0x45, 0x50, 0x41, 0x8, 0x41, 0x1, 0x49, 0x33, 0xfb, 0xd5, 0x0, 0xb2, 0x45, 0xb3, 0x7b, 0xb6, 0x0, 0xc2, 0x45, 0x33, 0x7c, 0xb5, 0x0, 0x37, 0xb5, 0x7c, 0x7, 0x93, 0xc, 0x15, 0x53, 0x37, 0x45, 0x80, 0x40, 0x13, 0xd, 0x45, 0xc, 0x93, 0xd, 0x0, 0x4, 0x33, 0x65, 0x6c, 0x1, 0xb3, 0xe5, 0x2b, 0x1, 0x4d, 0x8d, 0x63, 0x9, 0x5, 0x10, 0x63, 0x1b, 0xb, 0x2, 0x33, 0x5, 0x20, 0x41, 0x33, 0x75, 0xa9, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0x13, 0x5, 0x5, 0x2, 0x63, 0x9, 0xc, 0x2, 0xb3, 0x5, 0x80, 0x41, 0xb3, 0x75, 0xbc, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc4, 0x5, 0x0, 0xd, 0xa8, 0x33, 0x5, 0x60, 0x41, 0x33, 0x75, 0xab, 0x0, 0x33, 0x5, 0x95, 0x3, 0x6d, 0x81, 0x6a, 0x95, 0x3, 0x45, 0x5, 0x0, 0xe3, 0x1b, 0xc, 0xfc, 0xb3, 0x5, 0x70, 0x41, 0xb3, 0xf5, 0xbb, 0x0, 0xb3, 0x85, 0x95, 0x3, 0xed, 0x81, 0xea, 0x95, 0x83, 0xc5, 0x5, 0x0, 0x93, 0x84, 0x5, 0x2, 0xb3, 0x65, 0x7c, 0x1, 0x99, 0xe1, 0x93, 0x4, 0x5, 0x4, 0x26, 0x85, 0x97, 0xe0, 0xff, 0xff, 0xe7, 0x80, 0x60, 0xb7, 0x93, 0x15, 0x5, 0x1, 0xc1, 0x81, 0x93, 0x85, 0x35, 0xfb, 0x91, 0xc5, 0x82, 0x55, 0x97, 0x0, 0x0, 0x0, 0xe7, 0x80, 0xe0, 0xb, 0x5, 0x45, 0x81, 0x45, 0x26, 0x86, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x76, 0xaa, 0x89, 0xae, 0x8a, 0x13, 0x86, 0x4, 0xfc, 0x5, 0x45, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x40, 0x75, 0x2a, 0x8a, 0x2e, 0x84, 0x33, 0x86, 0x9d, 0x40, 0x5, 0x45, 0x81, 0x45, 0x97, 0xf0, 0xff, 0xff, 0xe7, 0x80, 0x80, 0x74, 0x63, 0xe3, 0xb4, 0x1, 0xa2, 0x85, 0x63, 0xe3, 0xb4, 0x1, 0x52, 0x85, 0x13, 0xb6, 0x4, 0x4, 0x33, 0x6, 0xc0, 0x40, 0xb3, 0x76, 0x56, 0x1, 0x33, 0x76, 0x36, 0x1, 0x13, 0xb7, 0x14, 0x0, 0x7d, 0x17, 0xf9, 0x8d, 0x79, 0x8d, 0x13, 0x45, 0xf5, 0xff, 0x93, 0xc5, 0xf5, 0xff, 0x13, 0x46, 0xf6, 0xff, 0x93, 0xc6, 0xf6, 0xff, 0xb3, 0xfb, 0xdb, 0x0, 0x33, 0x7c, 0xcc, 0x0, 0x33, 0x79, 0xb9, 0x0, 0x33, 0x7b, 0xab, 0x0, 0xdd, 0xb5, 0x8, 0x2, 0x83, 0x20, 0xc5, 0x5, 0x20, 0x4d, 0x64, 0x49, 0x3, 0x29, 0x5, 0x5, 0x83, 0x29, 0xc5, 0x4, 0x3, 0x2a, 0x85, 0x4, 0x83, 0x2a, 0x45, 0x4, 0x3, 0x2b, 0x5, 0x4, 0x83, 0x2b, 0xc5, 0x3, 0x3, 0x2c, 0x85, 0x3, 0x83, 0x2c, 0x45, 0x3, 0x3, 0x2d, 0x5, 0x3, 0x83, 0x2d, 0xc5, 0x2, 0x35, 0x61, 0x82, 0x80, 0x0, 0x0, 0x42, 0x5, 0x41, 0x81, 0x37, 0x46, 0x80, 0x40, 0x13, 0x6, 0x6, 0xef, 0xa, 0x5, 0x32, 0x95, 0x1c, 0x41, 0x37, 0x35, 0x80, 0x40, 0x13, 0x5, 0xc5, 0xd, 0x63, 0x84, 0xa7, 0x0, 0x2e, 0x85, 0x82, 0x87, 0x0, 0x0, 0xaa, 0x85, 0x9, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xbf, 0xaa, 0x85, 0xd, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xbe, 0xaa, 0x85, 0x11, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xbd, 0xaa, 0x85, 0x15, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xbd, 0xaa, 0x85, 0x19, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xbc, 0xaa, 0x85, 0x1d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xbb, 0xaa, 0x85, 0x21, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xba, 0xaa, 0x85, 0x25, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xba, 0xaa, 0x85, 0x29, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb9, 0xaa, 0x85, 0x2d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xb8, 0xaa, 0x85, 0x31, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xb7, 0xaa, 0x85, 0x35, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xb7, 0xaa, 0x85, 0x39, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb6, 0xaa, 0x85, 0x3d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xb5, 0xaa, 0x85, 0x41, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xe3, 0xb4, 0xaa, 0x85, 0x45, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x23, 0xb4, 0xaa, 0x85, 0x49, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0x63, 0xb3, 0xaa, 0x85, 0x4d, 0x45, 0x17, 0x3, 0x0, 0x0, 0x67, 0x0, 0xa3, 0xb2, 0x0, 0x0, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40}, + }, + { + .addr = 1082146852, + .size = 384, + .data = (uint8_t[]){0xe0, 0xb, 0x80, 0x40, 0xb6, 0xc, 0x80, 0x40, 0xf2, 0xc, 0x80, 0x40, 0xe0, 0xb, 0x80, 0x40, 0x9c, 0xe, 0x80, 0x40, 0xb6, 0xc, 0x80, 0x40, 0x5e, 0xd, 0x80, 0x40, 0xc6, 0xd, 0x80, 0x40, 0xfa, 0xe, 0x80, 0x40, 0x26, 0xf, 0x80, 0x40, 0xf6, 0x14, 0x80, 0x40, 0x44, 0xd, 0x80, 0x40, 0xf6, 0x14, 0x80, 0x40, 0xfa, 0xd, 0x80, 0x40, 0xe0, 0xb, 0x80, 0x40, 0xb6, 0xc, 0x80, 0x40, 0xf2, 0xc, 0x80, 0x40, 0x70, 0xf, 0x80, 0x40, 0x92, 0xd, 0x80, 0x40, 0xa2, 0xc, 0x80, 0x40, 0xa, 0x12, 0x80, 0x40, 0x76, 0x10, 0x80, 0x40, 0x3a, 0xd, 0x80, 0x40, 0xb6, 0xc, 0x80, 0x40, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x20, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x1c, 0x2, 0x1d, 0xe, 0x18, 0x3, 0x1e, 0x16, 0x14, 0xf, 0x19, 0x11, 0x4, 0x8, 0x1f, 0x1b, 0xd, 0x17, 0x15, 0x13, 0x10, 0x7, 0x1a, 0xc, 0x12, 0x6, 0xb, 0x5, 0xa, 0x9, 0xc0, 0xdb, 0xdc, 0xdb, 0xdd, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x7, 0x0, 0x0, 0x0, 0x8, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x5, 0x0, 0x0, 0x0, 0x6, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0xa, 0x0, 0x0, 0x0, 0xb, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0xd, 0x0, 0x0, 0x0, 0xe, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x11, 0x0, 0x0, 0x0, 0x12, 0x0, 0x0, 0x0, 0x13, 0x0, 0x0, 0x0, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0xdc, 0x30, 0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0xdc, 0x30, 0x80, 0x40}, + }, + }, + }, + + // placeholder + {}, + +}; + +#endif diff --git a/esp_flasher/lib/esp-serial-flasher/src/esp_targets.c b/esp_flasher/lib/esp-serial-flasher/src/esp_targets.c index b073979012..d1355353c1 100644 --- a/esp_flasher/lib/esp-serial-flasher/src/esp_targets.c +++ b/esp_flasher/lib/esp-serial-flasher/src/esp_targets.c @@ -16,14 +16,15 @@ #include "esp_targets.h" #include -#define MAX_MAGIC_VALUES 2 - typedef esp_loader_error_t (*read_spi_config_t)(uint32_t efuse_base, uint32_t *spi_config); typedef struct { target_registers_t regs; uint32_t efuse_base; - uint32_t chip_magic_value[MAX_MAGIC_VALUES]; + const uint32_t *chip_magic_value; // Pointer to array of magic values + uint8_t magic_values_count; // Number of valid magic values for this chip + uint32_t mac_efuse_offset; + uint32_t chip_id; read_spi_config_t read_spi_config; bool encryption_in_begin_flash_cmd; } esp_target_t; @@ -33,10 +34,20 @@ typedef struct { #define ESP8266_SPI_REG_BASE 0x60000200 #define ESP32S2_SPI_REG_BASE 0x3f402000 +#define ESP32H2_SPI_REG_BASE 0x60003000 +#define ESP32C5_SPI_REG_BASE 0x60003000 #define ESP32C6_SPI_REG_BASE 0x60003000 +#define ESP32P4_SPI_REG_BASE 0x5008d000 #define ESP32xx_SPI_REG_BASE 0x60002000 #define ESP32_SPI_REG_BASE 0x3ff42000 +#define CHIP_ID_NONE 0xFF + +// Used for ESP32P4 chip detection, other chips uses ROM magic value +#define ESP32P4_SPI_DATE_REG 0x500d0000 +#define ESP32P4_SPI_DATE_REG_MASK 0x7FFFFFF +#define ESP32P4_SPI_DATE_REG_VALUE 0x2207202 + static esp_loader_error_t spi_config_esp32(uint32_t efuse_base, uint32_t *spi_config); static esp_loader_error_t spi_config_esp32xx(uint32_t efuse_base, uint32_t *spi_config); static esp_loader_error_t spi_config_unsupported(uint32_t efuse_base, uint32_t *spi_config); @@ -55,9 +66,12 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = { .miso_dlen = 0, }, .efuse_base = 0, // Not used - .chip_magic_value = { 0xfff0c101, 0 }, + .chip_magic_value = (const uint32_t[]){ 0xfff0c101 }, + .magic_values_count = 1, .read_spi_config = NULL, // Not used + .mac_efuse_offset = 0, // Not used .encryption_in_begin_flash_cmd = false, + .chip_id = CHIP_ID_NONE, }, // ESP32 @@ -72,9 +86,12 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = { .miso_dlen = ESP32_SPI_REG_BASE + 0x2c, }, .efuse_base = 0x3ff5A000, - .chip_magic_value = { 0x00f01d83, 0 }, + .chip_magic_value = (const uint32_t[]){ 0x00f01d83 }, + .magic_values_count = 1, .read_spi_config = spi_config_esp32, + .mac_efuse_offset = 0x04, .encryption_in_begin_flash_cmd = false, + .chip_id = 0, }, // ESP32S2 @@ -89,9 +106,12 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = { .miso_dlen = ESP32S2_SPI_REG_BASE + 0x28, }, .efuse_base = 0x3f41A000, - .chip_magic_value = { 0x000007c6, 0 }, + .chip_magic_value = (const uint32_t[]){ 0x000007c6 }, + .magic_values_count = 1, .read_spi_config = spi_config_esp32xx, + .mac_efuse_offset = 0x44, .encryption_in_begin_flash_cmd = true, + .chip_id = 2, }, // ESP32C3 @@ -106,9 +126,12 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = { .miso_dlen = ESP32xx_SPI_REG_BASE + 0x28, }, .efuse_base = 0x60008800, - .chip_magic_value = { 0x6921506f, 0x1b31506f }, + .chip_magic_value = (const uint32_t[]){ 0x6921506f, 0x1b31506f, 0x4881606F, 0x4361606F }, + .magic_values_count = 4, .read_spi_config = spi_config_esp32xx, + .mac_efuse_offset = 0x44, .encryption_in_begin_flash_cmd = true, + .chip_id = 5, }, // ESP32S3 @@ -123,9 +146,12 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = { .miso_dlen = ESP32xx_SPI_REG_BASE + 0x28, }, .efuse_base = 0x60007000, - .chip_magic_value = { 0x00000009, 0 }, + .chip_magic_value = (const uint32_t[]){ 0x00000009 }, + .magic_values_count = 1, .read_spi_config = spi_config_esp32xx, + .mac_efuse_offset = 0x44, .encryption_in_begin_flash_cmd = true, + .chip_id = 9, }, // ESP32C2 @@ -140,42 +166,54 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = { .miso_dlen = ESP32xx_SPI_REG_BASE + 0x28, }, .efuse_base = 0x60008800, - .chip_magic_value = { 0x6f51306f, 0x7c41a06f }, - .read_spi_config = spi_config_esp32xx, + .chip_magic_value = (const uint32_t[]){ 0x6f51306f, 0x7c41a06f }, + .magic_values_count = 2, + .read_spi_config = spi_config_unsupported, + .mac_efuse_offset = 0x40, .encryption_in_begin_flash_cmd = true, + .chip_id = 12, }, - // ESP32H4 + + // ESP32C5 { .regs = { - .cmd = ESP32xx_SPI_REG_BASE + 0x00, - .usr = ESP32xx_SPI_REG_BASE + 0x18, - .usr1 = ESP32xx_SPI_REG_BASE + 0x1c, - .usr2 = ESP32xx_SPI_REG_BASE + 0x20, - .w0 = ESP32xx_SPI_REG_BASE + 0x58, - .mosi_dlen = ESP32xx_SPI_REG_BASE + 0x24, - .miso_dlen = ESP32xx_SPI_REG_BASE + 0x28, + .cmd = ESP32C5_SPI_REG_BASE + 0x00, + .usr = ESP32C5_SPI_REG_BASE + 0x18, + .usr1 = ESP32C5_SPI_REG_BASE + 0x1c, + .usr2 = ESP32C5_SPI_REG_BASE + 0x20, + .w0 = ESP32C5_SPI_REG_BASE + 0x58, + .mosi_dlen = ESP32C5_SPI_REG_BASE + 0x24, + .miso_dlen = ESP32C5_SPI_REG_BASE + 0x28, }, - .efuse_base = 0x6001A000, - .chip_magic_value = {0xca26cc22, 0x6881b06f}, // ESP32H4-BETA1, ESP32H4-BETA2 - .read_spi_config = spi_config_esp32xx, + .efuse_base = 0x600B4800, + .chip_magic_value = (const uint32_t[]){ 0x1101406F }, + .magic_values_count = 1, + .read_spi_config = spi_config_unsupported, + .mac_efuse_offset = 0x44, .encryption_in_begin_flash_cmd = true, + .chip_id = 23, }, + // ESP32H2 { .regs = { - .cmd = ESP32xx_SPI_REG_BASE + 0x00, - .usr = ESP32xx_SPI_REG_BASE + 0x18, - .usr1 = ESP32xx_SPI_REG_BASE + 0x1c, - .usr2 = ESP32xx_SPI_REG_BASE + 0x20, - .w0 = ESP32xx_SPI_REG_BASE + 0x58, - .mosi_dlen = ESP32xx_SPI_REG_BASE + 0x24, - .miso_dlen = ESP32xx_SPI_REG_BASE + 0x28, + .cmd = ESP32H2_SPI_REG_BASE + 0x00, + .usr = ESP32H2_SPI_REG_BASE + 0x18, + .usr1 = ESP32H2_SPI_REG_BASE + 0x1c, + .usr2 = ESP32H2_SPI_REG_BASE + 0x20, + .w0 = ESP32H2_SPI_REG_BASE + 0x58, + .mosi_dlen = ESP32H2_SPI_REG_BASE + 0x24, + .miso_dlen = ESP32H2_SPI_REG_BASE + 0x28, }, - .efuse_base = 0x6001A000, - .chip_magic_value = {0xd7b73e80, 0}, - .read_spi_config = spi_config_esp32xx, + .efuse_base = 0x600B0800, + .chip_magic_value = (const uint32_t[]){ 0xd7b73e80 }, + .magic_values_count = 1, + .read_spi_config = spi_config_unsupported, + .mac_efuse_offset = 0x44, .encryption_in_begin_flash_cmd = true, + .chip_id = 16, }, + // ESP32C6 { .regs = { @@ -188,10 +226,34 @@ static const esp_target_t esp_target[ESP_MAX_CHIP] = { .miso_dlen = ESP32C6_SPI_REG_BASE + 0x28, }, .efuse_base = 0x600B0800, - .chip_magic_value = { 0x2CE0806F, 0 }, + .chip_magic_value = (const uint32_t[]){ 0x2CE0806F }, + .magic_values_count = 1, .read_spi_config = spi_config_unsupported, + .mac_efuse_offset = 0x44, .encryption_in_begin_flash_cmd = true, + .chip_id = 13, }, + + // ESP32P4 + { + .regs = { + .cmd = ESP32P4_SPI_REG_BASE + 0x00, + .usr = ESP32P4_SPI_REG_BASE + 0x18, + .usr1 = ESP32P4_SPI_REG_BASE + 0x1c, + .usr2 = ESP32P4_SPI_REG_BASE + 0x20, + .w0 = ESP32P4_SPI_REG_BASE + 0x58, + .mosi_dlen = ESP32P4_SPI_REG_BASE + 0x24, + .miso_dlen = ESP32P4_SPI_REG_BASE + 0x28, + }, + .efuse_base = 0x5012d000, + .chip_magic_value = NULL, + .magic_values_count = 0, + .read_spi_config = spi_config_esp32xx, + .mac_efuse_offset = 0x44, + .encryption_in_begin_flash_cmd = true, + .chip_id = 18, + }, + }; const target_registers_t *get_esp_target_data(target_chip_t chip) @@ -201,11 +263,23 @@ const target_registers_t *get_esp_target_data(target_chip_t chip) esp_loader_error_t loader_detect_chip(target_chip_t *target_chip, const target_registers_t **target_data) { +#if (defined SERIAL_FLASHER_INTERFACE_UART) || (defined SERIAL_FLASHER_INTERFACE_USB) + /* First, attempt to get the target info using GET_SECURITY_INFO command. + This won't work if the target does not support the command. */ + esp_loader_target_security_info_t security_info; + + if (esp_loader_get_security_info(&security_info) == ESP_LOADER_SUCCESS) { + *target_chip = security_info.target_chip; + *target_data = (target_registers_t *)&esp_target[security_info.target_chip]; + return ESP_LOADER_SUCCESS; + } +#endif /* SERIAL_FLASHER_INTERFACE_UART || SERIAL_FLASHER_INTERFACE_USB */ + uint32_t magic_value; RETURN_ON_ERROR( esp_loader_read_register(CHIP_DETECT_MAGIC_REG_ADDR, &magic_value) ); for (int chip = 0; chip < ESP_MAX_CHIP; chip++) { - for(int index = 0; index < MAX_MAGIC_VALUES; index++) { + for (int index = 0; index < esp_target[chip].magic_values_count; index++) { if (magic_value == esp_target[chip].chip_magic_value[index]) { *target_chip = (target_chip_t)chip; *target_data = (target_registers_t *)&esp_target[chip]; @@ -214,6 +288,16 @@ esp_loader_error_t loader_detect_chip(target_chip_t *target_chip, const target_r } } + // ESP32-P4 has different memory map, so the same register as for other chips cannot be used + // to detect the chip. Date register of SPI peripheral is used instead. There is low probability + // that the date register will have same value as for other chips and it will also be at different + // address. + RETURN_ON_ERROR(esp_loader_read_register(ESP32P4_SPI_DATE_REG, &magic_value)); + if ((magic_value & ESP32P4_SPI_DATE_REG_MASK) == ESP32P4_SPI_DATE_REG_VALUE) { + *target_chip = ESP32P4_CHIP; + *target_data = (target_registers_t *)&esp_target[ESP32P4_CHIP]; + return ESP_LOADER_SUCCESS; + } return ESP_LOADER_ERROR_INVALID_TARGET; } @@ -223,6 +307,26 @@ esp_loader_error_t loader_read_spi_config(target_chip_t target_chip, uint32_t *s return target->read_spi_config(target->efuse_base, spi_config); } +esp_loader_error_t loader_read_mac(const target_chip_t target_code, uint8_t *mac) +{ + const esp_target_t *target = &esp_target[target_code]; + + uint32_t part1 = 0; + uint32_t part2 = 0; + + RETURN_ON_ERROR(esp_loader_read_register(target->efuse_base + target->mac_efuse_offset, &part1)); + RETURN_ON_ERROR(esp_loader_read_register(target->efuse_base + target->mac_efuse_offset + sizeof(uint32_t), &part2)); + + mac[0] = (part2 >> 8) & 0xff; + mac[1] = (part2 >> 0) & 0xff; + mac[2] = (part1 >> 24) & 0xff; + mac[3] = (part1 >> 16) & 0xff; + mac[4] = (part1 >> 8) & 0xff; + mac[5] = (part1 >> 0) & 0xff; + + return ESP_LOADER_SUCCESS; +} + static inline uint32_t efuse_word_addr(uint32_t efuse_base, uint32_t n) { return efuse_base + (n * 4); @@ -286,7 +390,8 @@ static esp_loader_error_t spi_config_esp32xx(uint32_t efuse_base, uint32_t *spi_ // Some newer chips like the esp32c6 do not support configurable SPI static esp_loader_error_t spi_config_unsupported(uint32_t efuse_base, uint32_t *spi_config) { - (void)(efuse_base); // UNUSED param + (void)(efuse_base); + *spi_config = 0; return ESP_LOADER_SUCCESS; } @@ -295,3 +400,14 @@ bool encryption_in_begin_flash_cmd(const target_chip_t target) { return esp_target[target].encryption_in_begin_flash_cmd; } + +target_chip_t target_from_chip_id(const uint32_t chip_id) +{ + for (size_t chip = 0; chip < ESP_MAX_CHIP; chip++) { + if (chip_id == esp_target[chip].chip_id) { + return (target_chip_t)chip; + } + } + + return ESP_UNKNOWN_CHIP; +} diff --git a/esp_flasher/lib/esp-serial-flasher/src/protocol_common.c b/esp_flasher/lib/esp-serial-flasher/src/protocol_common.c deleted file mode 100644 index dc2f7a0130..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/src/protocol_common.c +++ /dev/null @@ -1,301 +0,0 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "protocol.h" -#include "protocol_prv.h" -#include "esp_loader_io.h" -#include -#include - -#define CMD_SIZE(cmd) ( sizeof(cmd) - sizeof(command_common_t) ) - -static uint32_t s_sequence_number = 0; - -static uint8_t compute_checksum(const uint8_t *data, uint32_t size) -{ - uint8_t checksum = 0xEF; - - while (size--) { - checksum ^= *data++; - } - - return checksum; -} - -void log_loader_internal_error(error_code_t error) -{ - loader_port_debug_print("Error: "); - - switch (error) { - case INVALID_CRC: loader_port_debug_print("INVALID_CRC"); break; - case INVALID_COMMAND: loader_port_debug_print("INVALID_COMMAND"); break; - case COMMAND_FAILED: loader_port_debug_print("COMMAND_FAILED"); break; - case FLASH_WRITE_ERR: loader_port_debug_print("FLASH_WRITE_ERR"); break; - case FLASH_READ_ERR: loader_port_debug_print("FLASH_READ_ERR"); break; - case READ_LENGTH_ERR: loader_port_debug_print("READ_LENGTH_ERR"); break; - case DEFLATE_ERROR: loader_port_debug_print("DEFLATE_ERROR"); break; - default: loader_port_debug_print("UNKNOWN ERROR"); break; - } - - loader_port_debug_print("\n"); -} - - -esp_loader_error_t loader_flash_begin_cmd(uint32_t offset, - uint32_t erase_size, - uint32_t block_size, - uint32_t blocks_to_write, - bool encryption) -{ - flash_begin_command_t flash_begin_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = FLASH_BEGIN, - .size = CMD_SIZE(flash_begin_cmd) - (encryption ? 0 : sizeof(uint32_t)), - .checksum = 0 - }, - .erase_size = erase_size, - .packet_count = blocks_to_write, - .packet_size = block_size, - .offset = offset, - .encrypted = 0 - }; - - s_sequence_number = 0; - - return send_cmd(&flash_begin_cmd, - sizeof(flash_begin_cmd) - (encryption ? 0 : sizeof(uint32_t)), - NULL); -} - - -esp_loader_error_t loader_flash_data_cmd(const uint8_t *data, uint32_t size) -{ - data_command_t data_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = FLASH_DATA, - .size = CMD_SIZE(data_cmd) + size, - .checksum = compute_checksum(data, size) - }, - .data_size = size, - .sequence_number = s_sequence_number++, - }; - - return send_cmd_with_data(&data_cmd, sizeof(data_cmd), data, size); -} - - -esp_loader_error_t loader_flash_end_cmd(bool stay_in_loader) -{ - flash_end_command_t end_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = FLASH_END, - .size = CMD_SIZE(end_cmd), - .checksum = 0 - }, - .stay_in_loader = stay_in_loader - }; - - return send_cmd(&end_cmd, sizeof(end_cmd), NULL); -} - - -esp_loader_error_t loader_mem_begin_cmd(uint32_t offset, uint32_t size, uint32_t blocks_to_write, uint32_t block_size) -{ - - mem_begin_command_t mem_begin_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = MEM_BEGIN, - .size = CMD_SIZE(mem_begin_cmd), - .checksum = 0 - }, - .total_size = size, - .blocks = blocks_to_write, - .block_size = block_size, - .offset = offset - }; - - s_sequence_number = 0; - - return send_cmd(&mem_begin_cmd, sizeof(mem_begin_cmd), NULL); -} - - -esp_loader_error_t loader_mem_data_cmd(const uint8_t *data, uint32_t size) -{ - data_command_t data_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = MEM_DATA, - .size = CMD_SIZE(data_cmd) + size, - .checksum = compute_checksum(data, size) - }, - .data_size = size, - .sequence_number = s_sequence_number++, - }; - return send_cmd_with_data(&data_cmd, sizeof(data_cmd), data, size); -} - -esp_loader_error_t loader_mem_end_cmd(uint32_t entrypoint) -{ - mem_end_command_t end_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = MEM_END, - .size = CMD_SIZE(end_cmd), - }, - .stay_in_loader = (entrypoint == 0), - .entry_point_address = entrypoint - }; - - return send_cmd(&end_cmd, sizeof(end_cmd), NULL); -} - - -esp_loader_error_t loader_sync_cmd(void) -{ - sync_command_t sync_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = SYNC, - .size = CMD_SIZE(sync_cmd), - .checksum = 0 - }, - .sync_sequence = { - 0x07, 0x07, 0x12, 0x20, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - } - }; - - return send_cmd(&sync_cmd, sizeof(sync_cmd), NULL); -} - - -esp_loader_error_t loader_write_reg_cmd(uint32_t address, uint32_t value, - uint32_t mask, uint32_t delay_us) -{ - write_reg_command_t write_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = WRITE_REG, - .size = CMD_SIZE(write_cmd), - .checksum = 0 - }, - .address = address, - .value = value, - .mask = mask, - .delay_us = delay_us - }; - - return send_cmd(&write_cmd, sizeof(write_cmd), NULL); -} - - -esp_loader_error_t loader_read_reg_cmd(uint32_t address, uint32_t *reg) -{ - read_reg_command_t read_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = READ_REG, - .size = CMD_SIZE(read_cmd), - .checksum = 0 - }, - .address = address, - }; - - return send_cmd(&read_cmd, sizeof(read_cmd), reg); -} - - -esp_loader_error_t loader_spi_attach_cmd(uint32_t config) -{ - spi_attach_command_t attach_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = SPI_ATTACH, - .size = CMD_SIZE(attach_cmd), - .checksum = 0 - }, - .configuration = config, - .zero = 0 - }; - - return send_cmd(&attach_cmd, sizeof(attach_cmd), NULL); -} - -esp_loader_error_t loader_change_baudrate_cmd(uint32_t baudrate) -{ - change_baudrate_command_t baudrate_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = CHANGE_BAUDRATE, - .size = CMD_SIZE(baudrate_cmd), - .checksum = 0 - }, - .new_baudrate = baudrate, - .old_baudrate = 0 // ESP32 ROM only - }; - - return send_cmd(&baudrate_cmd, sizeof(baudrate_cmd), NULL); -} - -esp_loader_error_t loader_md5_cmd(uint32_t address, uint32_t size, uint8_t *md5_out) -{ - spi_flash_md5_command_t md5_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = SPI_FLASH_MD5, - .size = CMD_SIZE(md5_cmd), - .checksum = 0 - }, - .address = address, - .size = size, - .reserved_0 = 0, - .reserved_1 = 0 - }; - - return send_cmd_md5(&md5_cmd, sizeof(md5_cmd), md5_out); -} - -esp_loader_error_t loader_spi_parameters(uint32_t total_size) -{ - write_spi_command_t spi_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = SPI_SET_PARAMS, - .size = 24, - .checksum = 0 - }, - .id = 0, - .total_size = total_size, - .block_size = 64 * 1024, - .sector_size = 4 * 1024, - .page_size = 0x100, - .status_mask = 0xFFFF, - }; - - return send_cmd(&spi_cmd, sizeof(spi_cmd), NULL); -} - -__attribute__ ((weak)) void loader_port_debug_print(const char *str) -{ - (void) str; -} diff --git a/esp_flasher/lib/esp-serial-flasher/src/protocol_sdio.c b/esp_flasher/lib/esp-serial-flasher/src/protocol_sdio.c new file mode 100644 index 0000000000..12efbc837f --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/src/protocol_sdio.c @@ -0,0 +1,582 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "protocol.h" +#include "protocol_prv.h" +#include "esp_loader_io.h" +#include "esp_loader.h" +#include "esp_targets.h" +#include "sip.h" +#include "esp_stubs.h" +#include +#include +#include +#include + +/* SDIO CCR registers - common to all SDIO devices */ +#define SD_IO_CCCR_FN_ENABLE 0x02 +#define SD_IO_CCR_FN_ENABLE_FUNC1_EN (1 << 1) +#define SD_IO_CCCR_FN_READY 0x03 +#define SD_BLOCK_SIZE 512 + +/* Stub defines */ +#define STUB_CMD_REG 0x006C +#define STUB_INT_ST_REG 0x0058 +#define STUB_INT_CLR_REG 0x00D4 +#define STUB_PKT_LEN_REG 0x0060 +#define STUB_INT_BIT0 (1 << 0) +#define STUB_INT_NEW_PKT (1 << 23) +#define STUB_MAX_TRANSACTION_SIZE 4096 +#define RX_BYTE_MASK 0xFFFFF +#define STUB_BOOT_TIMEOUT 500 +#define STUB_DEFAULT_TIMEOUT 100 + +typedef enum { + STUB_BUSY = 0, + STUB_READY = 1, +} stub_status_t; + +typedef struct { + bool sdio_supported; + /* SLC Host Registers. Some of these are reserved for host/slave communication without + on-target concurrency issues */ + /* The host writes into CONF registers to send data to the slave, and reads back from STATE registers */ + /* Uses a different target base address from SLC slave registers, read or write with regular transactions */ + uint32_t slchost_date_addr; + uint32_t slchost_date_expected_val; + uint32_t slchost_state_w0_addr; + uint32_t slchost_conf_w5_addr; + uint32_t slchost_win_cmd_addr; + uint32_t slchost_packet_space_end; + + /* SLC Registers */ + /* Use host registers for writing/reading to these using slave_read/write_register() */ + uint32_t slc_conf1_addr; + uint32_t slc_len_conf_addr; + uint32_t slc_conf1_tx_stitch_en; + uint32_t slc_conf1_rx_stitch_en; + uint32_t slc_len_conf_tx_packet_load_en; +} esp_target_t; + +typedef struct { + esp_loader_bin_header_t header; + esp_loader_bin_segment_t segments[3]; +} esp_stub_t; + +extern const esp_stub_t esp_stub[ESP_MAX_CHIP]; + +static const esp_target_t esp_target[ESP_MAX_CHIP] = { + + // ESP8266 + {}, + + // ESP32 + { + .sdio_supported = true, + .slchost_date_addr = 0x178, + .slchost_date_expected_val = 0x16022500, + .slchost_state_w0_addr = 0x64, + .slchost_conf_w5_addr = 0x80, + .slchost_win_cmd_addr = 0x84, + .slchost_packet_space_end = 0x1f800, + .slc_conf1_addr = 0x60, + .slc_len_conf_addr = 0xE4, + .slc_conf1_tx_stitch_en = (1 << 5), + .slc_conf1_rx_stitch_en = (1 << 6), + .slc_len_conf_tx_packet_load_en = (1 << 24), + }, + + // ESP32S2 + {}, + + // ESP32C3 + {}, + + // ESP32S3 + {}, + + // ESP32C2 + {}, + + // ESP32C5 + {}, + + // ESP32H2 + {}, + + // ESP32C6 + { + .sdio_supported = true, + .slchost_date_addr = 0x178, + .slchost_date_expected_val = 0x21060700, + .slchost_state_w0_addr = 0x64, + .slchost_conf_w5_addr = 0x80, + .slchost_win_cmd_addr = 0x84, + .slchost_packet_space_end = 0x1f800, + .slc_conf1_addr = 0x70, + .slc_len_conf_addr = 0xF4, + .slc_conf1_tx_stitch_en = (1 << 5), + .slc_conf1_rx_stitch_en = (1 << 6), + .slc_len_conf_tx_packet_load_en = (1 << 24), + }, + + // ESP32P4 + {}, +}; + +static uint8_t s_block_buf[SD_BLOCK_SIZE] __attribute__((aligned(4))); +static uint32_t s_sip_seq_tx; +static target_chip_t s_target_chip = ESP_UNKNOWN_CHIP; + +static esp_loader_error_t slave_read_register(const uint32_t addr, uint32_t *reg) +{ + assert(addr >> 2 <= 0x7F); + + uint8_t buf[4] __attribute__((aligned(4))) = {0}; + buf[0] = (addr >> 2) & 0x7F; + buf[1] = 0x80; + + RETURN_ON_ERROR(loader_port_write(1, + esp_target[s_target_chip].slchost_win_cmd_addr, + buf, + sizeof(buf), + loader_port_remaining_time())); + + return loader_port_read(1, + esp_target[s_target_chip].slchost_state_w0_addr, + (uint8_t *)reg, + sizeof(uint32_t), + loader_port_remaining_time()); +} + +static esp_loader_error_t slave_write_register(const uint32_t addr, uint32_t reg_val) +{ + assert(addr >> 2 <= 0x7F); + + uint8_t buf[8] __attribute__((aligned(4))) = {0}; + memcpy(buf, ®_val, 4); + buf[4] = (addr >> 2) & 0x7F; + buf[5] = 0xC0; + + return loader_port_write(1, + esp_target[s_target_chip].slchost_conf_w5_addr, + buf, + sizeof(buf), + loader_port_remaining_time()); +} + +static esp_loader_error_t slave_wait_ready(const uint32_t timeout) +{ + uint8_t reg __attribute__((aligned(4))) = 0; + + loader_port_start_timer(timeout); + while ((reg & SD_IO_CCR_FN_ENABLE_FUNC1_EN) == 0) { + if (loader_port_remaining_time() == 0) { + return ESP_LOADER_ERROR_TIMEOUT; + } + + RETURN_ON_ERROR(loader_port_read(0, SD_IO_CCCR_FN_READY, + ®, sizeof(reg), + loader_port_remaining_time())); + } + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t slave_init_card(uint32_t trials) +{ + for (uint8_t trial = 0; trial < trials; trial++) { + + if (loader_port_sdio_card_init() != ESP_LOADER_SUCCESS) { + loader_port_debug_print("Retrying card connection..."); + loader_port_delay_ms(100); + } else { + return ESP_LOADER_SUCCESS; + } + } + + return ESP_LOADER_ERROR_FAIL; +} + +static esp_loader_error_t slave_init_io(void) +{ + RETURN_ON_ERROR(slave_wait_ready(100)); + + // Enable function 1, we will use it for upload + // The alignment requirement comes from the esp port DMA requirements + uint8_t reg __attribute__((aligned(4))); + RETURN_ON_ERROR(loader_port_read(0, SD_IO_CCCR_FN_ENABLE, + ®, sizeof(reg), + loader_port_remaining_time())); + + reg |= SD_IO_CCR_FN_ENABLE_FUNC1_EN; + uint8_t expected_val = reg; + RETURN_ON_ERROR(loader_port_write(0, SD_IO_CCCR_FN_ENABLE, + ®, sizeof(reg), + loader_port_remaining_time())); + + // Read back to verify + RETURN_ON_ERROR(loader_port_read(0, SD_IO_CCCR_FN_ENABLE, + ®, sizeof(reg), + loader_port_remaining_time())); + + if (reg != expected_val) { + return ESP_LOADER_ERROR_FAIL; + } + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t slave_detect_chip(void) +{ + RETURN_ON_ERROR(slave_wait_ready(100)); + + for (int chip = 0; chip < ESP_MAX_CHIP; chip++) { + if (!esp_target[chip].sdio_supported) { + continue; + } + + uint32_t reg; + RETURN_ON_ERROR(loader_port_read(1, + esp_target[chip].slchost_date_addr, + (uint8_t *)®, + sizeof(uint32_t), + loader_port_remaining_time())); + + if (reg == esp_target[chip].slchost_date_expected_val) { + s_target_chip = (target_chip_t)chip; + return ESP_LOADER_SUCCESS; + } + } + + return ESP_LOADER_ERROR_INVALID_TARGET; +} + +static esp_loader_error_t slave_init_link(void) +{ + RETURN_ON_ERROR(slave_wait_ready(100)); + + uint32_t reg = 0; + + // Configure stitching + RETURN_ON_ERROR(slave_read_register(esp_target[s_target_chip].slc_conf1_addr, ®)); + reg |= esp_target[s_target_chip].slc_conf1_tx_stitch_en | + esp_target[s_target_chip].slc_conf1_rx_stitch_en; + uint32_t expected_val = reg; + RETURN_ON_ERROR(slave_write_register(esp_target[s_target_chip].slc_conf1_addr, reg)); + + RETURN_ON_ERROR(slave_read_register(esp_target[s_target_chip].slc_conf1_addr, ®)); + if (reg != expected_val) { + return ESP_LOADER_ERROR_FAIL; + } + + RETURN_ON_ERROR(slave_wait_ready(100)); + + // Configure the tx packet load enable + // This bit does not stay set, so reading it back to check for success is pointless + RETURN_ON_ERROR(slave_read_register(esp_target[s_target_chip].slc_len_conf_addr, ®)); + reg |= esp_target[s_target_chip].slc_len_conf_tx_packet_load_en; + expected_val = reg; + RETURN_ON_ERROR(slave_write_register(esp_target[s_target_chip].slc_len_conf_addr, reg)); + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t sip_upload_ram_segment(const uint32_t addr, const uint8_t *data, + const uint32_t size) +{ + RETURN_ON_ERROR(slave_wait_ready(100)); + + int32_t remaining = size; + while (remaining > 0) { + const uint32_t nondata_size = sizeof(sip_header_t) + sizeof(sip_cmd_write_memory); + const uint32_t data_size = ROUNDUP(MIN(remaining, SIP_PACKET_SIZE - nondata_size), 4); + + const sip_header_t header = { + .fc[0] = SIP_PACKET_TYPE_CTRL & SIP_TYPE_MASK, + .fc[1] = 0x00, + .len = data_size + nondata_size, + .sequence_num = s_sip_seq_tx, + .u.tx_info.u.cmdid = SIP_CMD_ID_WRITE_MEMORY, + }; + + const sip_cmd_write_memory cmd = { + .addr = addr + size - remaining, + .len = data_size, + }; + + memcpy(&s_block_buf[0], &header, sizeof(header)); + memcpy(&s_block_buf[sizeof(header)], &cmd, sizeof(cmd)); + memcpy( + &s_block_buf[sizeof(header) + sizeof(cmd)], + &data[size - remaining], + data_size + ); + + RETURN_ON_ERROR(loader_port_write(1, + esp_target[s_target_chip].slchost_packet_space_end - header.len, + s_block_buf, + header.len, + loader_port_remaining_time())); + + remaining -= data_size; + s_sip_seq_tx++; + } + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t sip_run_ram_code(const uint32_t entrypoint) +{ + RETURN_ON_ERROR(slave_wait_ready(100)); + + const sip_header_t header = { + .fc[0] = SIP_PACKET_TYPE_CTRL & SIP_TYPE_MASK, + .fc[1] = SIP_HDR_F_SYNC, + .len = sizeof(sip_header_t) + sizeof(sip_cmd_write_memory), + .sequence_num = 0, + .u.tx_info.u.cmdid = SIP_CMD_ID_BOOTUP, + }; + + const sip_cmd_bootup cmd = { .boot_addr = entrypoint, .discard_link = 1}; + + memcpy(&s_block_buf[0], &header, sizeof(header)); + memcpy(&s_block_buf[sizeof(header)], &cmd, sizeof(cmd)); + + return loader_port_write(1, + esp_target[s_target_chip].slchost_packet_space_end - header.len, + s_block_buf, + header.len, + loader_port_remaining_time() + ); + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t slave_upload_stub(void) +{ + RETURN_ON_ERROR(slave_wait_ready(100)); + + const esp_stub_t *stub = &esp_stub[s_target_chip]; + + for (uint32_t seg = 0; seg < sizeof(stub->segments) / sizeof(stub->segments[0]); seg++) { + RETURN_ON_ERROR(sip_upload_ram_segment(stub->segments[seg].addr, + stub->segments[seg].data, + stub->segments[seg].size)); + } + + return sip_run_ram_code(stub->header.entrypoint); +} + +static esp_loader_error_t stub_wait_ready(int32_t timeout, bool clear_flag) +{ + uint8_t reg __attribute__((aligned(4))) = 0; + loader_port_start_timer(timeout); + do { + RETURN_ON_ERROR(loader_port_read(1, STUB_INT_ST_REG, ®, sizeof(reg), loader_port_remaining_time())); + } while ((reg & STUB_INT_BIT0) == 0); + + if (clear_flag) { + reg = STUB_INT_BIT0; + RETURN_ON_ERROR(loader_port_write(1, STUB_INT_CLR_REG, ®, sizeof(reg), loader_port_remaining_time())); + } + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t initialize_connection(esp_loader_connect_args_t *connect_args) +{ + RETURN_ON_ERROR(slave_init_card(connect_args->trials)); + + RETURN_ON_ERROR(slave_init_io()); + + RETURN_ON_ERROR(slave_detect_chip()); + + RETURN_ON_ERROR(slave_init_link()); + + return ESP_LOADER_SUCCESS; +} + +esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_args) +{ + s_sip_seq_tx = 0; + + RETURN_ON_ERROR(initialize_connection(connect_args)); + + RETURN_ON_ERROR(slave_upload_stub()); + + loader_port_delay_ms(STUB_BOOT_TIMEOUT); + + RETURN_ON_ERROR(initialize_connection(connect_args)); + + RETURN_ON_ERROR(stub_wait_ready(STUB_DEFAULT_TIMEOUT, false)); + + esp_stub_set_running(true); + + s_sip_seq_tx = 0; + + return ESP_LOADER_SUCCESS; +} + +static esp_loader_error_t check_response(const send_cmd_config *config) +{ + uint32_t reg __attribute__((aligned(4))) = 0; + do { + RETURN_ON_ERROR(loader_port_read(1, STUB_INT_ST_REG, (uint8_t *)®, sizeof(reg), loader_port_remaining_time())); + } while ((reg & STUB_INT_NEW_PKT) == 0); + + // The STUB_PKT_LEN_REG contains all the bytes received, so we need to subtract the bytes we already got + static uint32_t s_got_bytes_latest = 0; + uint32_t packet_recv __attribute__((aligned(4))) = 0; + while (packet_recv == 0 || packet_recv == s_got_bytes_latest) { + RETURN_ON_ERROR(loader_port_read(1, STUB_PKT_LEN_REG, (uint8_t *)&packet_recv, sizeof(packet_recv), loader_port_remaining_time())); + // The packet_recv is 24 bits, so we need to mask it + packet_recv &= RX_BYTE_MASK; + } + + packet_recv -= s_got_bytes_latest; + s_got_bytes_latest += packet_recv; + + if (packet_recv > sizeof(s_block_buf)) { + return ESP_LOADER_ERROR_INVALID_RESPONSE; + } + + RETURN_ON_ERROR(loader_port_read(1, esp_target[s_target_chip].slchost_packet_space_end - packet_recv, s_block_buf, packet_recv, loader_port_remaining_time())); + + if (packet_recv < (sizeof(common_response_t) + sizeof(response_status_t))) { + return ESP_LOADER_ERROR_INVALID_RESPONSE; + } + + common_response_t *response = (common_response_t *)&s_block_buf[0]; + command_t command = ((const command_common_t *)config->cmd)->command; + + // Check if response matches request + if (response->direction != READ_DIRECTION || response->command != command) { + return ESP_LOADER_ERROR_INVALID_RESPONSE; + } + + // Check status + response_status_t *status = (response_status_t *)&s_block_buf[packet_recv - sizeof(response_status_t)]; + + if (status->failed) { + log_loader_internal_error(status->error); + return ESP_LOADER_ERROR_INVALID_RESPONSE; + } + + // Extract register value if requested + if (config->reg_value != NULL) { + *config->reg_value = response->value; + } + + // Extract response data if requested + if (config->resp_data != NULL) { + const size_t resp_data_size = packet_recv - sizeof(common_response_t) - sizeof(response_status_t); + + if (resp_data_size > 0) { + memcpy(config->resp_data, &s_block_buf[sizeof(common_response_t)], resp_data_size); + + if (config->resp_data_recv_size != NULL) { + *config->resp_data_recv_size = resp_data_size; + } + } + } + + return ESP_LOADER_SUCCESS; +} + +esp_loader_error_t send_cmd(const send_cmd_config *config) +{ + if (config->cmd_size + config->data_size > STUB_MAX_TRANSACTION_SIZE) { // TODO: check it + return ESP_LOADER_ERROR_INVALID_PARAM; + } + RETURN_ON_ERROR(stub_wait_ready(STUB_DEFAULT_TIMEOUT, true)); + + memcpy(s_block_buf, config->cmd, config->cmd_size); + + // If there's data and it can fit in the first block with the command, include it + uint32_t first_block_data_bytes = 0; + if (config->data != NULL && config->data_size > 0) { + first_block_data_bytes = MIN(SD_BLOCK_SIZE - config->cmd_size, config->data_size); + memcpy(s_block_buf + config->cmd_size, config->data, first_block_data_bytes); + } + + // Send first chunk (containing command and possibly some data) + uint32_t first_chunk_size = config->cmd_size + first_block_data_bytes; + RETURN_ON_ERROR(loader_port_write(1, + esp_target[s_target_chip].slchost_packet_space_end - (config->cmd_size + config->data_size), + s_block_buf, + first_chunk_size, + loader_port_remaining_time())); + + // If we have more data to send + if (config->data != NULL && first_block_data_bytes < config->data_size) { + uint32_t bytes_sent = first_block_data_bytes; + uint32_t total_data = config->data_size; + + // Simple loop for remaining data chunks - no conditionals needed + while (bytes_sent < total_data) { + uint32_t chunk_size = MIN(SD_BLOCK_SIZE, total_data - bytes_sent); + memcpy(s_block_buf, config->data + bytes_sent, chunk_size); + + RETURN_ON_ERROR(loader_port_write(1, + esp_target[s_target_chip].slchost_packet_space_end - + (config->cmd_size + config->data_size) + + config->cmd_size + bytes_sent, + s_block_buf, + chunk_size, + loader_port_remaining_time())); + + bytes_sent += chunk_size; + } + } + + return check_response(config); +} + + +// Temporary functions until the new stub is ready and placed at the end of RAM (ESPTOOL-1058). +static uint32_t s_mem_offset = 0; +esp_loader_error_t loader_mem_begin_cmd(uint32_t offset, uint32_t size, uint32_t blocks_to_write, uint32_t block_size) +{ + (void)blocks_to_write; + (void)block_size; + (void)size; + + // Necessary as the stub is always uploaded during initialization, but is placed at the beginning of RAM. + // Loaded RAM app would have to be created with the stub in mind, so we just enter bootloader and reinitialize. + // This will be fixed when the stub is placed at the end of RAM (ESPTOOL-1058). + if (esp_stub_get_running()) { + esp_loader_connect_args_t connect_config = ESP_LOADER_CONNECT_DEFAULT(); + loader_port_enter_bootloader(); + RETURN_ON_ERROR(initialize_connection(&connect_config)); + esp_stub_set_running(false); + } + s_mem_offset = offset; + return ESP_LOADER_SUCCESS; +} + +esp_loader_error_t loader_mem_data_cmd(const uint8_t *data, uint32_t size) +{ + RETURN_ON_ERROR(sip_upload_ram_segment(s_mem_offset, data, size)); + s_mem_offset += size; + return ESP_LOADER_SUCCESS; +} + +esp_loader_error_t loader_mem_end_cmd(uint32_t entrypoint) +{ + RETURN_ON_ERROR(sip_run_ram_code(entrypoint)); + s_sip_seq_tx = 0; + return ESP_LOADER_SUCCESS; +} diff --git a/esp_flasher/lib/esp-serial-flasher/src/protocol_serial.c b/esp_flasher/lib/esp-serial-flasher/src/protocol_serial.c new file mode 100644 index 0000000000..9c0eba313a --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/src/protocol_serial.c @@ -0,0 +1,501 @@ +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "protocol.h" +#include "protocol_prv.h" +#include "esp_loader_io.h" +#include "esp_stubs.h" +#include +#include + +#define CMD_SIZE(cmd) ( sizeof(cmd) - sizeof(command_common_t) ) + +static uint32_t s_sequence_number = 0; + +static uint8_t compute_checksum(const uint8_t *data, uint32_t size) +{ + uint8_t checksum = 0xEF; + + while (size--) { + checksum ^= *data++; + } + + return checksum; +} + +void log_loader_internal_error(error_code_t error) +{ + switch (error) { + case INVALID_CRC: loader_port_debug_print("Error: INVALID_CRC"); break; + case INVALID_COMMAND: loader_port_debug_print("Error: INVALID_COMMAND"); break; + case COMMAND_FAILED: loader_port_debug_print("Error: COMMAND_FAILED"); break; + case FLASH_WRITE_ERR: loader_port_debug_print("Error: FLASH_WRITE_ERR"); break; + case FLASH_READ_ERR: loader_port_debug_print("Error: FLASH_READ_ERR"); break; + case READ_LENGTH_ERR: loader_port_debug_print("Error: READ_LENGTH_ERR"); break; + case DEFLATE_ERROR: loader_port_debug_print("Error: DEFLATE_ERROR"); break; + + case STUB_BAD_DATA_LEN: loader_port_debug_print("Error: BAD_DATA_LEN"); break; + case STUB_BAD_DATA_CHECKSUM: loader_port_debug_print("Error: BAD_DATA_CHECKSUM"); break; + case STUB_BAD_BLOCKSIZE: loader_port_debug_print("Error: BAD_BLOCKSIZE"); break; + case STUB_INVALID_COMMAND: loader_port_debug_print("Error: INVALID_COMMAND"); break; + case STUB_FAILED_SPI_OP: loader_port_debug_print("Error: FAILED_SPI_OP"); break; + case STUB_FAILED_SPI_UNLOCK: loader_port_debug_print("Error: FAILED_SPI_UNLOCK"); break; + case STUB_NOT_IN_FLASH_MODE: loader_port_debug_print("Error: NOT_IN_FLASH_MODE"); break; + case STUB_INFLATE_ERROR: loader_port_debug_print("Error: INFLATE_ERROR"); break; + case STUB_NOT_ENOUGH_DATA: loader_port_debug_print("Error: NOT_ENOUGH_DATA"); break; + case STUB_TOO_MUCH_DATA: loader_port_debug_print("Error: TOO_MUCH_DATA"); break; + case STUB_CMD_NOT_IMPLEMENTED: loader_port_debug_print("Error: CMD_NOT_IMPLEMENTED"); break; + + default: loader_port_debug_print("Error: UNKNOWN ERROR"); break; + } +} + +esp_loader_error_t loader_flash_begin_cmd(uint32_t offset, + uint32_t erase_size, + uint32_t block_size, + uint32_t blocks_to_write, + bool encryption) +{ + flash_begin_command_t flash_begin_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = FLASH_BEGIN, + .size = CMD_SIZE(flash_begin_cmd) - (encryption ? 0 : sizeof(uint32_t)), + .checksum = 0 + }, + .erase_size = erase_size, + .packet_count = blocks_to_write, + .packet_size = block_size, + .offset = offset, + .encrypted = 0 + }; + + s_sequence_number = 0; + + const send_cmd_config cmd_config = { + .cmd = &flash_begin_cmd, + .cmd_size = sizeof(flash_begin_cmd) - (encryption ? 0 : sizeof(uint32_t)), + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_flash_data_cmd(const uint8_t *data, uint32_t size) +{ + data_command_t data_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = FLASH_DATA, + .size = CMD_SIZE(data_cmd) + size, + .checksum = compute_checksum(data, size) + }, + .data_size = size, + .sequence_number = s_sequence_number++, + }; + + const send_cmd_config cmd_config = { + .cmd = &data_cmd, + .cmd_size = sizeof(data_cmd), + .data = data, + .data_size = size, + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_flash_end_cmd(bool stay_in_loader) +{ + flash_end_command_t end_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = FLASH_END, + .size = CMD_SIZE(end_cmd), + .checksum = 0 + }, + .stay_in_loader = stay_in_loader + }; + + const send_cmd_config cmd_config = { + .cmd = &end_cmd, + .cmd_size = sizeof(end_cmd) + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_flash_read_rom_cmd(const uint32_t address, uint8_t *data) +{ + const flash_read_rom_cmd flash_read_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = READ_FLASH_ROM, + .size = CMD_SIZE(flash_read_cmd), + .checksum = 0 + }, + .address = address, + .size = READ_FLASH_ROM_DATA_SIZE, + }; + + const send_cmd_config cmd_config = { + .cmd = &flash_read_cmd, + .cmd_size = sizeof(flash_read_cmd), + .resp_data = data, + .resp_data_size = READ_FLASH_ROM_DATA_SIZE, + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_flash_read_stub_cmd(const uint32_t address, const uint32_t size, + const uint32_t size_per_packet) +{ + const flash_read_stub_cmd flash_read_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = READ_FLASH_STUB, + .size = CMD_SIZE(flash_read_cmd), + .checksum = 0 + }, + .address = address, + .total_size = size, + .packet_data_size = size_per_packet, + .max_inflight_packets = 1, + }; + + const send_cmd_config cmd_config = { + .cmd = &flash_read_cmd, + .cmd_size = sizeof(flash_read_cmd), + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_flash_erase_cmd(void) +{ + const flash_erase_chip_cmd erase_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = ERASE_FLASH, + .size = CMD_SIZE(erase_cmd), + .checksum = 0 + }, + }; + + const send_cmd_config cmd_config = { + .cmd = &erase_cmd, + .cmd_size = sizeof(erase_cmd), + }; + + return send_cmd(&cmd_config); +} + +esp_loader_error_t loader_flash_erase_region_cmd(uint32_t offset, uint32_t size) +{ + const flash_erase_region_cmd erase_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = ERASE_REGION, + .size = CMD_SIZE(erase_cmd), + .checksum = 0 + }, + .offset = offset, + .size = size, + }; + + const send_cmd_config cmd_config = { + .cmd = &erase_cmd, + .cmd_size = sizeof(erase_cmd), + }; + + return send_cmd(&cmd_config); +} + +esp_loader_error_t loader_sync_cmd(void) +{ + sync_command_t sync_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = SYNC, + .size = CMD_SIZE(sync_cmd), + .checksum = 0 + }, + .sync_sequence = { + 0x07, 0x07, 0x12, 0x20, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, + } + }; + + const send_cmd_config cmd_config = { + .cmd = &sync_cmd, + .cmd_size = sizeof(sync_cmd) + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_spi_attach_cmd(uint32_t config) +{ + spi_attach_command_t attach_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = SPI_ATTACH, + .size = CMD_SIZE(attach_cmd), + .checksum = 0 + }, + .configuration = config, + .zero = 0 + }; + + const send_cmd_config cmd_config = { + .cmd = &attach_cmd, + .cmd_size = esp_stub_get_running() ? sizeof(attach_cmd) - sizeof(attach_cmd.zero) : sizeof(attach_cmd), + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_md5_cmd(uint32_t address, uint32_t size, uint8_t *md5_out) +{ + spi_flash_md5_command_t md5_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = SPI_FLASH_MD5, + .size = CMD_SIZE(md5_cmd), + .checksum = 0 + }, + .address = address, + .size = size, + .reserved_0 = 0, + .reserved_1 = 0 + }; + + const send_cmd_config cmd_config = { + .cmd = &md5_cmd, + .cmd_size = sizeof(md5_cmd), + .resp_data = md5_out, + .resp_data_size = esp_stub_get_running() ? MD5_SIZE_STUB : MD5_SIZE_ROM, + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_spi_parameters(uint32_t total_size) +{ + write_spi_command_t spi_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = SPI_SET_PARAMS, + .size = 24, + .checksum = 0 + }, + .id = 0, + .total_size = total_size, + .block_size = 64 * 1024, + .sector_size = 4 * 1024, + .page_size = 0x100, + .status_mask = 0xFFFF, + }; + + const send_cmd_config cmd_config = { + .cmd = &spi_cmd, + .cmd_size = sizeof(spi_cmd), + }; + + return send_cmd(&cmd_config); +} + + +#ifndef SERIAL_FLASHER_INTERFACE_SDIO +esp_loader_error_t loader_mem_begin_cmd(uint32_t offset, uint32_t size, uint32_t blocks_to_write, uint32_t block_size) +{ + + mem_begin_command_t mem_begin_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = MEM_BEGIN, + .size = CMD_SIZE(mem_begin_cmd), + .checksum = 0 + }, + .total_size = size, + .blocks = blocks_to_write, + .block_size = block_size, + .offset = offset + }; + + s_sequence_number = 0; + + const send_cmd_config cmd_config = { + .cmd = &mem_begin_cmd, + .cmd_size = sizeof(mem_begin_cmd), + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_mem_data_cmd(const uint8_t *data, uint32_t size) +{ + data_command_t data_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = MEM_DATA, + .size = CMD_SIZE(data_cmd) + size, + .checksum = compute_checksum(data, size) + }, + .data_size = size, + .sequence_number = s_sequence_number++, + }; + + const send_cmd_config cmd_config = { + .cmd = &data_cmd, + .cmd_size = sizeof(data_cmd), + .data = data, + .data_size = size, + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_mem_end_cmd(uint32_t entrypoint) +{ + mem_end_command_t end_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = MEM_END, + .size = CMD_SIZE(end_cmd), + }, + .stay_in_loader = (entrypoint == 0), + .entry_point_address = entrypoint + }; + + const send_cmd_config cmd_config = { + .cmd = &end_cmd, + .cmd_size = sizeof(end_cmd), + }; + + return send_cmd(&cmd_config); +} +#endif /* SERIAL_FLASHER_INTERFACE_SDIO */ + + +esp_loader_error_t loader_write_reg_cmd(uint32_t address, uint32_t value, + uint32_t mask, uint32_t delay_us) +{ + write_reg_command_t write_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = WRITE_REG, + .size = CMD_SIZE(write_cmd), + .checksum = 0 + }, + .address = address, + .value = value, + .mask = mask, + .delay_us = delay_us + }; + + const send_cmd_config cmd_config = { + .cmd = &write_cmd, + .cmd_size = sizeof(write_cmd), + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_read_reg_cmd(uint32_t address, uint32_t *reg) +{ + read_reg_command_t read_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = READ_REG, + .size = CMD_SIZE(read_cmd), + .checksum = 0 + }, + .address = address, + }; + + const send_cmd_config cmd_config = { + .cmd = &read_cmd, + .cmd_size = sizeof(read_cmd), + .reg_value = reg, + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_change_baudrate_cmd(uint32_t new_baudrate, uint32_t old_baudrate) +{ + change_baudrate_command_t baudrate_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = CHANGE_BAUDRATE, + .size = CMD_SIZE(baudrate_cmd), + .checksum = 0 + }, + .new_baudrate = new_baudrate, + .old_baudrate = old_baudrate + }; + + const send_cmd_config cmd_config = { + .cmd = &baudrate_cmd, + .cmd_size = sizeof(baudrate_cmd), + }; + + return send_cmd(&cmd_config); +} + + +esp_loader_error_t loader_get_security_info_cmd(get_security_info_response_data_t *response, + uint32_t *response_recv_size) +{ + const get_security_info_command_t get_security_info_cmd = { + .common = { + .direction = WRITE_DIRECTION, + .command = GET_SECURITY_INFO, + .size = CMD_SIZE(get_security_info_cmd), + .checksum = 0 + }, + }; + + const send_cmd_config cmd_config = { + .cmd = &get_security_info_cmd, + .cmd_size = sizeof(get_security_info_cmd), + .resp_data = response, + .resp_data_size = sizeof(get_security_info_response_data_t), + .resp_data_recv_size = response_recv_size, + }; + + return send_cmd(&cmd_config); +} + + +__attribute__ ((weak)) void loader_port_debug_print(const char *str) +{ + (void) str; +} diff --git a/esp_flasher/lib/esp-serial-flasher/src/protocol_spi.c b/esp_flasher/lib/esp-serial-flasher/src/protocol_spi.c index bd04fe79f2..5074056ab1 100644 --- a/esp_flasher/lib/esp-serial-flasher/src/protocol_spi.c +++ b/esp_flasher/lib/esp-serial-flasher/src/protocol_spi.c @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,8 @@ #include #include -typedef struct __attribute__((packed)) { +typedef struct __attribute__((packed)) +{ uint8_t cmd; uint8_t addr; uint8_t dummy; @@ -70,22 +71,23 @@ static uint8_t s_slave_seq_tx; static uint8_t s_slave_seq_rx; static esp_loader_error_t write_slave_reg(const uint8_t *data, const uint32_t addr, - const uint8_t size); + const uint8_t size); static esp_loader_error_t read_slave_reg(uint8_t *out_data, const uint32_t addr, - const uint8_t size); + const uint8_t size); static esp_loader_error_t handle_slave_state(const uint32_t status_reg_addr, uint8_t *seq_state, - bool *slave_ready, uint32_t *buf_size); + bool *slave_ready, uint32_t *buf_size); static esp_loader_error_t check_response(command_t cmd, uint32_t *reg_value); esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_args) { for (uint8_t trial = 0; trial < connect_args->trials; trial++) { - uint8_t slave_ready_flag; + /* The alignment requirement comes from the esp port DMA requirements */ + uint8_t slave_ready_flag __attribute__((aligned(4))); RETURN_ON_ERROR(read_slave_reg(&slave_ready_flag, SLAVE_REGISTER_CMD, - sizeof(slave_ready_flag))); + sizeof(slave_ready_flag))); if (slave_ready_flag != SLAVE_CMD_IDLE) { - loader_port_debug_print("Waiting for Slave to be idle...\n"); + loader_port_debug_print("Waiting for Slave to be idle..."); loader_port_delay_ms(100); } else { break; @@ -96,12 +98,12 @@ esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_arg RETURN_ON_ERROR(write_slave_reg(®_val, SLAVE_REGISTER_CMD, sizeof(reg_val))); for (uint8_t trial = 0; trial < connect_args->trials; trial++) { - uint8_t slave_ready_flag; + uint8_t slave_ready_flag __attribute__((aligned(4))); RETURN_ON_ERROR(read_slave_reg(&slave_ready_flag, SLAVE_REGISTER_CMD, - sizeof(slave_ready_flag))); + sizeof(slave_ready_flag))); if (slave_ready_flag != SLAVE_CMD_READY) { - loader_port_debug_print("Waiting for Slave to be ready...\n"); + loader_port_debug_print("Waiting for Slave to be ready..."); loader_port_delay_ms(100); } else { break; @@ -112,18 +114,21 @@ esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_arg } -esp_loader_error_t send_cmd(const void *cmd_data, uint32_t size, uint32_t *reg_value) +esp_loader_error_t send_cmd(const send_cmd_config *config) { - command_t command = ((const command_common_t *)cmd_data)->command; + // Commands with response data are not supported by the ROM for the SPI interface + if (config->resp_data != NULL) { + return ESP_LOADER_ERROR_INVALID_PARAM; + } - uint32_t buf_size; + uint32_t target_buf_size; bool slave_ready = false; while (!slave_ready) { RETURN_ON_ERROR(handle_slave_state(SLAVE_REGISTER_RXSTA, &s_slave_seq_rx, &slave_ready, - &buf_size)); + &target_buf_size)); } - if (size > buf_size) { + if (config->cmd_size + config->data_size > target_buf_size) { return ESP_LOADER_ERROR_INVALID_PARAM; } @@ -133,45 +138,13 @@ esp_loader_error_t send_cmd(const void *cmd_data, uint32_t size, uint32_t *reg_v loader_port_spi_set_cs(0); RETURN_ON_ERROR(loader_port_write((const uint8_t *)&preamble, sizeof(preamble), loader_port_remaining_time())); - RETURN_ON_ERROR(loader_port_write((const uint8_t *)cmd_data, size, + RETURN_ON_ERROR(loader_port_write((const uint8_t *)config->cmd, config->cmd_size, loader_port_remaining_time())); - loader_port_spi_set_cs(1); - - /* Terminate the write */ - loader_port_spi_set_cs(0); - preamble.cmd = TRANS_CMD_WR_DONE; - RETURN_ON_ERROR(loader_port_write((const uint8_t *)&preamble, sizeof(preamble), - loader_port_remaining_time())); - loader_port_spi_set_cs(1); - - return check_response(command, reg_value); -} - - -esp_loader_error_t send_cmd_with_data(const void *cmd_data, size_t cmd_size, - const void *data, size_t data_size) -{ - uint32_t buf_size; - bool slave_ready = false; - while (!slave_ready) { - RETURN_ON_ERROR(handle_slave_state(SLAVE_REGISTER_RXSTA, &s_slave_seq_rx, &slave_ready, - &buf_size)); - } - - if (cmd_size + data_size > buf_size) { - return ESP_LOADER_ERROR_INVALID_PARAM; + if (config->data != NULL && config->data_size != 0) { + RETURN_ON_ERROR(loader_port_write((const uint8_t *)config->data, config->data_size, + loader_port_remaining_time())); } - /* Start and write the command and the data */ - transaction_preamble_t preamble = {.cmd = TRANS_CMD_WRDMA}; - - loader_port_spi_set_cs(0); - RETURN_ON_ERROR(loader_port_write((const uint8_t *)&preamble, sizeof(preamble), - loader_port_remaining_time())); - RETURN_ON_ERROR(loader_port_write((const uint8_t *)cmd_data, cmd_size, - loader_port_remaining_time())); - RETURN_ON_ERROR(loader_port_write((const uint8_t *)data, data_size, - loader_port_remaining_time())); loader_port_spi_set_cs(1); /* Terminate the write */ @@ -181,13 +154,13 @@ esp_loader_error_t send_cmd_with_data(const void *cmd_data, size_t cmd_size, loader_port_remaining_time())); loader_port_spi_set_cs(1); - command_t command = ((const command_common_t *)cmd_data)->command; - return check_response(command, NULL); + command_t command = ((const command_common_t *)config->cmd)->command; + return check_response(command, config->reg_value); } static esp_loader_error_t read_slave_reg(uint8_t *out_data, const uint32_t addr, - const uint8_t size) + const uint8_t size) { transaction_preamble_t preamble = { .cmd = TRANS_CMD_RDBUF, @@ -205,7 +178,7 @@ static esp_loader_error_t read_slave_reg(uint8_t *out_data, const uint32_t addr, static esp_loader_error_t write_slave_reg(const uint8_t *data, const uint32_t addr, - const uint8_t size) + const uint8_t size) { transaction_preamble_t preamble = { .cmd = TRANS_CMD_WRBUF, @@ -223,55 +196,55 @@ static esp_loader_error_t write_slave_reg(const uint8_t *data, const uint32_t ad static esp_loader_error_t handle_slave_state(const uint32_t status_reg_addr, uint8_t *seq_state, - bool *slave_ready, uint32_t *buf_size) + bool *slave_ready, uint32_t *buf_size) { uint32_t status_reg; RETURN_ON_ERROR(read_slave_reg((uint8_t *)&status_reg, status_reg_addr, sizeof(status_reg))); const slave_state_t state = status_reg & (SLAVE_STA_TOGGLE_BIT | SLAVE_STA_INIT_BIT); - switch(state) { - case SLAVE_STATE_INIT: { - const uint32_t initial = 0U; - RETURN_ON_ERROR(write_slave_reg((uint8_t *)&initial, status_reg_addr, sizeof(initial))); - break; - } + switch (state) { + case SLAVE_STATE_INIT: { + const uint32_t initial = 0U; + RETURN_ON_ERROR(write_slave_reg((uint8_t *)&initial, status_reg_addr, sizeof(initial))); + break; + } - case SLAVE_STATE_FIRST_PACKET: { - *seq_state = state & SLAVE_STA_TOGGLE_BIT; + case SLAVE_STATE_FIRST_PACKET: { + *seq_state = state & SLAVE_STA_TOGGLE_BIT; + *buf_size = status_reg >> SLAVE_STA_BUF_LENGTH_POS; + *slave_ready = true; + break; + } + + default: { + const uint8_t new_seq = state & SLAVE_STA_TOGGLE_BIT; + if (new_seq != *seq_state) { + *seq_state = new_seq; *buf_size = status_reg >> SLAVE_STA_BUF_LENGTH_POS; *slave_ready = true; - break; - } - - default: { - const uint8_t new_seq = state & SLAVE_STA_TOGGLE_BIT; - if (new_seq != *seq_state) { - *seq_state = new_seq; - *buf_size = status_reg >> SLAVE_STA_BUF_LENGTH_POS; - *slave_ready = true; - } - break; } + break; + } } return ESP_LOADER_SUCCESS; } -static esp_loader_error_t check_response(command_t cmd, uint32_t *reg_value) +static esp_loader_error_t check_response(const command_t cmd, uint32_t *reg_value) { - response_t resp; + uint8_t buf[sizeof(common_response_t) + sizeof(response_status_t)] __attribute__((aligned(4))); - uint32_t buf_size; + uint32_t target_buf_size; bool slave_ready = false; while (!slave_ready) { RETURN_ON_ERROR(handle_slave_state(SLAVE_REGISTER_TXSTA, &s_slave_seq_tx, &slave_ready, - &buf_size)); + &target_buf_size)); } - if (sizeof(resp) > buf_size) { - return ESP_LOADER_ERROR_INVALID_PARAM; + if (sizeof(buf) > target_buf_size) { + return ESP_LOADER_ERROR_INVALID_RESPONSE; } transaction_preamble_t preamble = { @@ -281,8 +254,9 @@ static esp_loader_error_t check_response(command_t cmd, uint32_t *reg_value) loader_port_spi_set_cs(0); RETURN_ON_ERROR(loader_port_write((const uint8_t *)&preamble, sizeof(preamble), loader_port_remaining_time())); - RETURN_ON_ERROR(loader_port_read((uint8_t *)&resp, sizeof(resp), + RETURN_ON_ERROR(loader_port_read(buf, sizeof(buf), loader_port_remaining_time())); + loader_port_spi_set_cs(1); /* Terminate the read */ @@ -292,13 +266,12 @@ static esp_loader_error_t check_response(command_t cmd, uint32_t *reg_value) loader_port_remaining_time())); loader_port_spi_set_cs(1); - common_response_t *common = (common_response_t *)&resp; + common_response_t *common = (common_response_t *)&buf[0]; if ((common->direction != READ_DIRECTION) || (common->command != cmd)) { return ESP_LOADER_ERROR_INVALID_RESPONSE; } - response_status_t *status = - (response_status_t *)((uint8_t *)&resp + sizeof(resp) - sizeof(response_status_t)); + response_status_t *status = (response_status_t *)&buf[sizeof(buf) - sizeof(response_status_t)]; if (status->failed) { log_loader_internal_error(status->error); return ESP_LOADER_ERROR_INVALID_RESPONSE; diff --git a/esp_flasher/lib/esp-serial-flasher/src/protocol_uart.c b/esp_flasher/lib/esp-serial-flasher/src/protocol_uart.c index 153ef32a51..33869e9ea6 100644 --- a/esp_flasher/lib/esp-serial-flasher/src/protocol_uart.c +++ b/esp_flasher/lib/esp-serial-flasher/src/protocol_uart.c @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,15 @@ #include "protocol.h" #include "protocol_prv.h" #include "esp_loader_io.h" +#include "esp_stubs.h" #include "slip.h" #include #include -static esp_loader_error_t check_response(command_t cmd, uint32_t *reg_value, void* resp, uint32_t resp_size); +static esp_loader_error_t check_response(const send_cmd_config *config); -esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_args) { +esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_args) +{ esp_loader_error_t err; int32_t trials = connect_args->trials; @@ -42,78 +44,113 @@ esp_loader_error_t loader_initialize_conn(esp_loader_connect_args_t *connect_arg return err; } -esp_loader_error_t send_cmd(const void *cmd_data, uint32_t size, uint32_t *reg_value) +esp_loader_error_t loader_run_stub(target_chip_t target) { - response_t response; - command_t command = ((const command_common_t *)cmd_data)->command; + esp_loader_error_t err; + const esp_stub_t *stub = &esp_stub[target]; - RETURN_ON_ERROR( SLIP_send_delimiter() ); - RETURN_ON_ERROR( SLIP_send((const uint8_t *)cmd_data, size) ); - RETURN_ON_ERROR( SLIP_send_delimiter() ); + // Download segments + for (uint32_t seg = 0; seg < sizeof(stub->segments) / sizeof(stub->segments[0]); seg++) { + err = esp_loader_mem_start(stub->segments[seg].addr, stub->segments[seg].size, ESP_RAM_BLOCK); + if (err != ESP_LOADER_SUCCESS) { + return err; + } - const uint8_t response_cnt = command == SYNC ? 8 : 1; - - for (uint8_t recv_cnt = 0; recv_cnt < response_cnt; recv_cnt++) { - RETURN_ON_ERROR(check_response(command, reg_value, &response, sizeof(response))); + size_t remain_size = stub->segments[seg].size; + uint8_t *data_pos = stub->segments[seg].data; + while (remain_size > 0) { + size_t data_size = MIN(ESP_RAM_BLOCK, remain_size); + err = esp_loader_mem_write(data_pos, data_size); + if (err != ESP_LOADER_SUCCESS) { + return err; + } + data_pos += data_size; + remain_size -= data_size; + } } - return ESP_LOADER_SUCCESS; -} - + err = esp_loader_mem_finish(stub->header.entrypoint); + if (err != ESP_LOADER_SUCCESS) { + return err; + } -esp_loader_error_t send_cmd_with_data(const void *cmd_data, size_t cmd_size, - const void *data, size_t data_size) -{ - response_t response; - command_t command = ((const command_common_t *)cmd_data)->command; + // stub loader sends a custom SLIP packet of the sequence OHAI + uint8_t buff[4]; + size_t recv_size = 0; + err = SLIP_receive_packet(buff, sizeof(buff) / sizeof(buff[0]), &recv_size); + if (err != ESP_LOADER_SUCCESS) { + return err; + } else if (recv_size != sizeof(buff) || memcmp(buff, "OHAI", sizeof(buff) / sizeof(buff[0]))) { + return ESP_LOADER_ERROR_INVALID_RESPONSE; + } - RETURN_ON_ERROR( SLIP_send_delimiter() ); - RETURN_ON_ERROR( SLIP_send((const uint8_t *)cmd_data, cmd_size) ); - RETURN_ON_ERROR( SLIP_send(data, data_size) ); - RETURN_ON_ERROR( SLIP_send_delimiter() ); + esp_stub_set_running(true); - return check_response(command, NULL, &response, sizeof(response)); + return ESP_LOADER_SUCCESS; } - -esp_loader_error_t send_cmd_md5(const void *cmd_data, size_t cmd_size, uint8_t md5_out[MD5_SIZE]) +esp_loader_error_t send_cmd(const send_cmd_config *config) { - rom_md5_response_t response; - command_t command = ((const command_common_t *)cmd_data)->command; + RETURN_ON_ERROR(SLIP_send_delimiter()); - RETURN_ON_ERROR( SLIP_send_delimiter() ); - RETURN_ON_ERROR( SLIP_send((const uint8_t *)cmd_data, cmd_size) ); - RETURN_ON_ERROR( SLIP_send_delimiter() ); + RETURN_ON_ERROR(SLIP_send((const uint8_t *)config->cmd, config->cmd_size)); - RETURN_ON_ERROR( check_response(command, NULL, &response, sizeof(response)) ); + if (config->data != NULL && config->data_size != 0) { + RETURN_ON_ERROR(SLIP_send((const uint8_t *)config->data, config->data_size)); + } - memcpy(md5_out, response.md5, MD5_SIZE); + RETURN_ON_ERROR(SLIP_send_delimiter()); + + command_t command = ((const command_common_t *)config->cmd)->command; + const uint8_t response_cnt = command == SYNC ? 8 : 1; + + for (uint8_t recv_cnt = 0; recv_cnt < response_cnt; recv_cnt++) { + RETURN_ON_ERROR(check_response(config)); + } return ESP_LOADER_SUCCESS; } - -static esp_loader_error_t check_response(command_t cmd, uint32_t *reg_value, void* resp, uint32_t resp_size) +static esp_loader_error_t check_response(const send_cmd_config *config) { - esp_loader_error_t err; - common_response_t *response = (common_response_t *)resp; + uint8_t buf[sizeof(common_response_t) + sizeof(response_status_t) + MAX_RESP_DATA_SIZE]; + + common_response_t *response = (common_response_t *)&buf[0]; + command_t command = ((const command_common_t *)config->cmd)->command; + + // If the command has fixed response data size, require all of it to be received + uint32_t minimum_packet_recv = sizeof(common_response_t) + sizeof(response_status_t); + if (config->resp_data_recv_size == NULL) { + minimum_packet_recv += config->resp_data_size; + } + size_t packet_recv = 0; do { - err = SLIP_receive_packet(resp, resp_size); - if (err != ESP_LOADER_SUCCESS) { - return err; - } - } while ((response->direction != READ_DIRECTION) || (response->command != cmd)); + RETURN_ON_ERROR(SLIP_receive_packet(buf, + sizeof(common_response_t) + sizeof(response_status_t) + config->resp_data_size, + &packet_recv)); + } while ((response->direction != READ_DIRECTION) || (response->command != command) || + packet_recv < minimum_packet_recv); - response_status_t *status = (response_status_t *)((uint8_t *)resp + resp_size - sizeof(response_status_t)); + response_status_t *status = (response_status_t *)&buf[packet_recv - sizeof(response_status_t)]; if (status->failed) { log_loader_internal_error(status->error); return ESP_LOADER_ERROR_INVALID_RESPONSE; } - if (reg_value != NULL) { - *reg_value = response->value; + if (config->reg_value != NULL) { + *config->reg_value = response->value; + } + + if (config->resp_data != NULL) { + const size_t resp_data_size = packet_recv - sizeof(common_response_t) - sizeof(response_status_t); + + memcpy(config->resp_data, &buf[sizeof(common_response_t)], resp_data_size); + + if (config->resp_data_recv_size != NULL) { + *config->resp_data_recv_size = resp_data_size; + } } return ESP_LOADER_SUCCESS; diff --git a/esp_flasher/lib/esp-serial-flasher/src/slip.c b/esp_flasher/lib/esp-serial-flasher/src/slip.c index ba926169c7..0eeab69905 100644 --- a/esp_flasher/lib/esp-serial-flasher/src/slip.c +++ b/esp_flasher/lib/esp-serial-flasher/src/slip.c @@ -1,4 +1,4 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2020-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,11 +30,25 @@ static inline esp_loader_error_t peripheral_write(const uint8_t *buff, const siz return loader_port_write(buff, size, loader_port_remaining_time()); } -esp_loader_error_t SLIP_receive_data(uint8_t *buff, const size_t size) + +esp_loader_error_t SLIP_receive_packet(uint8_t *buff, const size_t max_size, size_t *recv_size) { uint8_t ch; - for (uint32_t i = 0; i < size; i++) { + // Wait for delimiter + do { + RETURN_ON_ERROR( peripheral_read(&ch, 1) ); + } while (ch != DELIMITER); + + // Workaround: bootloader sends two dummy(0xC0) bytes after response when baud rate is changed. + do { + RETURN_ON_ERROR( peripheral_read(&ch, 1) ); + } while (ch == DELIMITER); + + buff[0] = ch; + + // Receive either until either delimiter or maximum receive size + for (size_t i = 1; i < max_size; i++) { RETURN_ON_ERROR( peripheral_read(&ch, 1) ); if (ch == 0xDB) { @@ -46,37 +60,21 @@ esp_loader_error_t SLIP_receive_data(uint8_t *buff, const size_t size) } else { return ESP_LOADER_ERROR_INVALID_RESPONSE; } + } else if (ch == DELIMITER) { + *recv_size = i; + return ESP_LOADER_SUCCESS; } else { buff[i] = ch; } } - return ESP_LOADER_SUCCESS; -} - - -esp_loader_error_t SLIP_receive_packet(uint8_t *buff, const size_t size) -{ - uint8_t ch; - - // Wait for delimiter + // Wait for delimiter if we already reached max receive size + // This enables us to ignore unsupported or unecessary packet data instead of failing do { RETURN_ON_ERROR( peripheral_read(&ch, 1) ); } while (ch != DELIMITER); - // Workaround: bootloader sends two dummy(0xC0) bytes after response when baud rate is changed. - do { - RETURN_ON_ERROR( peripheral_read(&ch, 1) ); - } while (ch == DELIMITER); - - buff[0] = ch; - - RETURN_ON_ERROR( SLIP_receive_data(&buff[1], size - 1) ); - - // Wait for delimiter - do { - RETURN_ON_ERROR( peripheral_read(&ch, 1) ); - } while (ch != DELIMITER); + *recv_size = max_size; return ESP_LOADER_SUCCESS; } diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/bug-report.md b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/bug-report.md deleted file mode 100644 index e474567d2a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/bug-report.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**Sources to reproduce** -Please provide link to repository showing the problem. - - Fork this repository - - Modify an existing example to show the abnormal behavior - - Share the link to the commit in your fork showing the problem - -**Steps to reproduce** -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Environment (please complete the following information):** - - OS: [e.g. iOS] - - Compiler: [e.g. arm-none-eabi-gcc +version] - - stm32-cmake: [v2.0 or 86d1dd2 or ...] - - cmake: [e.g 3.21.0] - - HAL/cube/CMSIS: [stm32cubeL4 v1.2.3] - -**Additional context** -Add any other context about the problem here. diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/feature_request.md b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index bbcbbe7d61..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/cmake.yml b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/cmake.yml deleted file mode 100644 index dabda153ab..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/cmake.yml +++ /dev/null @@ -1,66 +0,0 @@ -name: Tests - -on: [push, pull_request] - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - RetrieveTargetsMatrix: - uses: ./.github/workflows/create-matrix.yml - - test-ubuntu: - runs-on: ubuntu-20.04 - needs: RetrieveTargetsMatrix - strategy: - matrix: ${{ fromJSON(needs.RetrieveTargetsMatrix.outputs.matrix) }} - fail-fast: false - - steps: - - uses: actions/checkout@v4 - - - name: Install ARM toolchain - run: sudo apt-get install gcc-arm-none-eabi binutils-arm-none-eabi - - - name: Create build directory for tests/fetch - run: cmake -E make_directory ${{runner.workspace}}/tests/fetch/build - - - name: Configure tests/fetch - shell: bash - working-directory: ${{runner.workspace}}/tests/fetch/build - run: cmake -DTEST_FAMILIES=${{ matrix.family }} $GITHUB_WORKSPACE/tests/fetch/ - - - name: Build tests/fetch - working-directory: ${{runner.workspace}}/tests/fetch/build - shell: bash - run: cmake --build . --config $BUILD_TYPE - - - name: Create build directory for tests/cmsis - run: cmake -E make_directory ${{runner.workspace}}/tests/cmsis/build - if: ${{ matrix.family != 'MP1' }} - - - name: Configure tests/cmsis - shell: bash - working-directory: ${{runner.workspace}}/tests/cmsis/build - run: cmake -DTEST_FAMILIES=${{ matrix.family }} -DFETCH_ST_SOURCES=TRUE $GITHUB_WORKSPACE/tests/cmsis/ - if: ${{ matrix.family != 'MP1' }} - - - name: Build tests/cmsis - working-directory: ${{runner.workspace}}/tests/cmsis/build - shell: bash - run: cmake --build . --config $BUILD_TYPE - if: ${{ matrix.family != 'MP1' }} - - - name: Create build directory for tests/hal - run: cmake -E make_directory ${{runner.workspace}}/tests/hal/build - - - name: Configure tests/hal - shell: bash - working-directory: ${{runner.workspace}}/tests/hal/build - run: cmake -DTEST_FAMILIES=${{ matrix.family }} -DFETCH_ST_SOURCES=TRUE $GITHUB_WORKSPACE/tests/hal/ - - - name: Build tests/hal - working-directory: ${{runner.workspace}}/tests/hal/build - shell: bash - run: cmake --build . --config $BUILD_TYPE diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/create-matrix.yml b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/create-matrix.yml deleted file mode 100644 index 41c66270fb..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.github/workflows/create-matrix.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: MatrixCreator - -run-name: "Creates supported family matrix for other jobs" - -on: - workflow_call: - outputs: - matrix: - description: "Supported family for job matrixing" - value: ${{ jobs.CreateMatrix.outputs.matrix }} - -jobs: - CreateMatrix: - runs-on: ubuntu-latest - outputs: - matrix: ${{ steps.create-matrix.outputs.matrix }} - steps: - - name: Checkout repo - id: checkout - uses: actions/checkout@v4 - - - name: Create matrix - id: create-matrix - run: | - files=$(find cmake/stm32/ -name '*.cmake' -exec sh -c "basename {} | cut -f1 -d '.' | tr '[:lower:]' '[:upper:]'" \; | sort) - deletes="COMMON DEVICES LINKER_LD" - for del in $deletes; do - files=(${files[@]/$del}) - done - echo "matrix={\"family\":$(jq --compact-output --null-input '$ARGS.positional' --args -- ${files[@]})}" >> $GITHUB_OUTPUT diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitignore b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitignore deleted file mode 100644 index 567609b123..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitignore +++ /dev/null @@ -1 +0,0 @@ -build/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitsubtree b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitsubtree deleted file mode 100644 index 962fd5b7d4..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/.gitsubtree +++ /dev/null @@ -1 +0,0 @@ -https://github.com/ObKo/stm32-cmake 274dc90e1350459386d6ce24ed93bb954b90fafd / diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/CHANGELOG.md b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/CHANGELOG.md deleted file mode 100644 index 84d736303f..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/CHANGELOG.md +++ /dev/null @@ -1,41 +0,0 @@ -# Change log -All notable changes to this project will be documented in this file. -This project adheres to [Semantic Versioning](http://semver.org/). - -## v2.1.0 (2021/08/09) - -#### Enhancements: - -- Add support for U5 family ([PR #249](https://github.com/ObKo/stm32-cmake/pull/249)) -- Add support for WB and WL families ([PR #235](https://github.com/ObKo/stm32-cmake/pull/235)) -- Add support for L5 family ([PR #172](https://github.com/ObKo/stm32-cmake/pull/172)) -- Add support for new devices ([PR #165](https://github.com/ObKo/stm32-cmake/pull/165)) -- Add support for CMSIS RTOS ([PR #253](https://github.com/ObKo/stm32-cmake/pull/253)) -- Add support for Newlib-Nano ([Issue #179](https://github.com/ObKo/stm32-cmake/issues/179) and [Issue #208](https://github.com/ObKo/stm32-cmake/issues/208) and [Issue #213](https://github.com/ObKo/stm32-cmake/issues/213)) -- Allow setting toolchain PATH through env vars ([PR #233](https://github.com/ObKo/stm32-cmake/pull/233)) -- Allow setting ST repositories PATH through env vars ([PR #226](https://github.com/ObKo/stm32-cmake/pull/226) and [PR #244](https://github.com/ObKo/stm32-cmake/pull/244)) -- Add function `stm32_print_devices_by_family` ([PR #205](https://github.com/ObKo/stm32-cmake/pull/205)) -- Generate binary files with `.elf` extension ([PR #163](https://github.com/ObKo/stm32-cmake/pull/163) and [PR #174](https://github.com/ObKo/stm32-cmake/pull/174)) -- Add functions to generate `hex` and `bin`files ([PR #221](https://github.com/ObKo/stm32-cmake/pull/221)) -- Handle package version on find_package, for HAL and CMSIS ([Issue #177](https://github.com/ObKo/stm32-cmake/issues/177)) -- Update ST repositories versions for fetch ([Issue #217](https://github.com/ObKo/stm32-cmake/issues/217) and [PR #255](https://github.com/ObKo/stm32-cmake/pull/255)) -- Enhance continuous integration by running GitHub Actions on each PR ([PR #220](https://github.com/ObKo/stm32-cmake/pull/220)) -- Add issue template to repository ([Issue #196](https://github.com/ObKo/stm32-cmake/issues/196)) -- Clarify documentation for H7 and dual-core MCUs usage ([Issue #155](https://github.com/ObKo/stm32-cmake/issues/155)) -- Code refactoring ([PR #161](https://github.com/ObKo/stm32-cmake/pull/161) and [PR #225](https://github.com/ObKo/stm32-cmake/pull/225)) - -#### Bug Fixes: - -- Add dependency on liker script in `stm32_add_linker_script` ([PR #192](https://github.com/ObKo/stm32-cmake/pull/192)) -- Fix `find_package(BSP)` ([Issue #198](https://github.com/ObKo/stm32-cmake/issues/198)) -- Fix `find_package(FreeRTOS)` ([Issue #150](https://github.com/ObKo/stm32-cmake/issues/150) and [Issue #153](https://github.com/ObKo/stm32-cmake/issues/153) and [PR #202](https://github.com/ObKo/stm32-cmake/pull/202) and [PR #260](https://github.com/ObKo/stm32-cmake/pull/260)) -- Check and correct RAM and CCRAM management for all families ([Issue #164](https://github.com/ObKo/stm32-cmake/issues/164)) -- Correct minimum CMake version to be 3.16 ([PR #245](https://github.com/ObKo/stm32-cmake/pull/245)) -- Correct build flags ([Issue #228](https://github.com/ObKo/stm32-cmake/issues/228)) -- Restore function to print binary size at build ([Issue #166](https://github.com/ObKo/stm32-cmake/issues/166) and [PR #207](https://github.com/ObKo/stm32-cmake/pull/207)) -- Correct errors in README.md file ([PR #167](https://github.com/ObKo/stm32-cmake/pull/167) and [PR #175](https://github.com/ObKo/stm32-cmake/pull/175) and [PR #210](https://github.com/ObKo/stm32-cmake/pull/210)) - ---- - -## v2.0 (2020/11/01) -*Initial realease using moden cmake approach* diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/LICENSE b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/LICENSE deleted file mode 100644 index 4dbe89263f..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2012-2017 Konstantin Oblaukhov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/README.md b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/README.md deleted file mode 100644 index 0315b65ccd..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/README.md +++ /dev/null @@ -1,319 +0,0 @@ -# About - -![Tests](https://github.com/ObKo/stm32-cmake/workflows/Tests/badge.svg) - -This project is used to develop applications for the STM32 - ST's ARM Cortex-Mx MCUs. -It uses cmake and GCC, along with newlib (libc), STM32Cube. Supports C0 F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 U0 U5 WB WL device families. - -## Requirements - -* cmake >= 3.16 -* GCC toolchain with newlib (optional). -* STM32Cube package for appropriate STM32 family. - -## Project contains - -* CMake toolchain file, that configures cmake to use the arm toolchain: [cmake/stm32_gcc.cmake](cmake/stm32_gcc.cmake). -* CMake module that contains useful functions: [cmake/stm32/common.cmake](cmake/stm32/common.cmake) -* CMake modules that contains information about each family - RAM/flash sizes, CPU types, device types and device naming (e.g. it can tell that STM32F407VG is F4 family with 1MB flash, 128KB RAM with CMSIS type F407xx) -* CMake toolchain file that can generate a tunable linker script [cmake/stm32/linker_ld.cmake](cmake/stm32/linker_ld.cmake) -* CMake module to find and configure CMSIS library [cmake/FindCMSIS.cmake](cmake/FindCMSIS.cmake) -* CMake module to find and configure STM32 HAL library [cmake/FindHAL.cmake](cmake/FindHAL.cmake) -* CMake modules for various libraries/RTOSes -* CMake project template and [examples](examples) -* Some testing project to check cmake scripts working properly [tests](tests) - -## Examples - -* `template` ([examples/template](examples/template)) - project template, empty source linked compiled with CMSIS. -* `custom-linker-script` ([examples/custom-linker-script](examples/custom-linker-script)) - similar to `template` but using custom linker script. -* `fetch-cube` ([examples/fetch-cube](examples/fetch-cube)) - example of using FetchContent for fetching STM32Cube from ST's git. -* `fetch-cmsis-hal` ([examples/fetch-cmsis-hal](examples/fetch-cmsis-hal)) - example of using FetchContent for fetching STM32 CMSIS and HAL from ST's git. -* `blinky` ([examples/blinky](examples/blinky)) - blink led using STM32 HAL library and SysTick. - It will compile a project for the `F4` family by default, but you can also compile for the - `L0` and `F1` family by passing `BLINKY_L0_EXAMPLE=ON` or `BLINKY_F1_EXAMPLE=ON` to the CMake - generation call. Using C++ instead of C is possible using `USE_CPP_FILE=ON`. -* `freertos` ([examples/freertos](examples/freertos)) - blink led using STM32 HAL library and FreeRTOS. - You need to specify at least one board by passing `FREERTOS__EXAMPLE=ON` to CMake. - Currently, the example can be built for the `H743ZI` and `F407VG` board targets. - You can opt to use the FreeRTOS CMSIS implementation provided by the Cube repository by supplying - `USE_CMSIS_RTOS=ON` or `USE_CMSIS_RTOS_V2` to CMake. - -# Usage - -First of all you need to configure toolchain and library paths using CMake variables. There are -generally three ways to do this: - -1. Pass the variables through command line during cmake run with passed to CMake with - `-D=...` -2. Set the variables inside your `CMakeLists.txt` -3. Pass these variables to CMake by setting them as environmental variables. - -The most important set of variables which needs to be set can be found in the following section. - -## Configuration - -These configuration options need to be set for the build process to work properly: - -* `STM32_CUBE__PATH` - path to STM32Cube directory, where `` is one - of `C0 F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 U0 U5 WB WL` **default**: `/opt/STM32Cube` - -These configuration variables are optional: - -* `STM32_TOOLCHAIN_PATH` - where toolchain is located, **default**: `/usr`. Alternatively - you can add the folder containing the toolchain binaries to the system path. If both are given, - the `STM32_TOOLCHAIN_PATH` setting takes precedence -* `STM32_TARGET_TRIPLET` - toolchain target triplet, **default**: `arm-none-eabi` -* `FREERTOS_PATH` - Path to the FreeRTOS kernel when compiling with a RTOS. Does not need to be - specified when using CMSIS - -### Helper script on Unix shells - -If you have access to a Unix shell, which is the default terminal on Linux, or tools like -`MinGW64` or `git bash` on Windows, you can write a small `path_helper.sh` script like this: - -```sh -export STM32_TOOLCHAIN_PATH="" -export STM32_TARGET_TRIPLET=arm-none-eabi -export STM32_CUBE__PATH="" -``` - -and then use `. path_helper.sh` to set up the environment for the local terminal instance in one go. - -### Helper script in Powershell - -On Windows, you can use a Powershell script `path_helper.ps1`to set up the environment: - -```sh -$env:STM32_TOOLCHAIN_PATH = "" -$env:STM32_TARGET_TRIPLET = arm-none-eabi -$env:STM32_CUBE__PATH="" -``` - -## Common usage - -First thing that you need to do after toolchain configuration in your `CMakeLists.txt` script is to find CMSIS package: -```cmake -find_package(CMSIS [CMSIS_version] COMPONENTS STM32F4 REQUIRED) -``` -You can specify STM32 family or even specific device (`STM32F407VG`) in `COMPONENTS` or omit `COMPONENTS` totally - in that case stm32-cmake will find ALL sources for ALL families and ALL chips (you'll need ALL STM32Cube packages somewhere). - -[CMSIS_version] is an optional version requirement. See [find_package documentation](https://cmake.org/cmake/help/v3.13/command/find_package.html?highlight=find%20package#id4). This parameter does not make sense if multiple STM32 families are requested. - -Each STM32 device can be categorized into family and device type groups, for example STM32F407VG is device from `F4` family, with type `F407xx`. - -***Note**: Some devices have two different cores (e.g. STM32H7 has Cortex-M7 and Cortex-M4). -For those devices the name used must include the core name e.g STM32H7_M7 and STM32H7_M4. -STM32WB is a multi-cores device even if the second core is not accessible by end user. - -CMSIS consists of three main components: - -* Family-specific headers, e.g. `stm32f4xx.h` -* Peripheral access layer header and source, e.g. `system_stm32f4xx.[c|h]` -* Device type-specific startup sources (e.g. `startup_stm32f407xx.s`) (if ASM language is enabled) -* Device-specific linker scripts which requires information about memory sizes (if ASM language is enabled) - -stm32-cmake uses modern CMake features notably imported targets and target properties. -Every CMSIS component is CMake's target (aka library), which defines compiler definitions, compiler flags, include dirs, sources, etc. to build and propagate them as dependencies. So in a simple use-case all you need is to link your executable with library `CMSIS::STM32::`: -```cmake -add_executable(stm32-template main.c) -target_link_libraries(stm32-template CMSIS::STM32::F407VG) -``` -That will add include directories, peripheral layer files, startup source, linker script and compiler flags to your executable. - -CMSIS creates the following targets: - -* `CMSIS::STM32::` (e.g. `CMSIS::STM32::F4`) - common includes, compiler flags and defines for family -* `CMSIS::STM32::` (e.g. `CMSIS::STM32::F407xx`) - common startup source for device type and peripheral access layer files, depends on `CMSIS::STM32::` -* `CMSIS::STM32::` (e.g. `CMSIS::STM32::F407VG`) - linker script for device, depends on `CMSIS::STM32::` - -So, if you don't need linker script, you can link only `CMSIS::STM32::` library and provide your own script using `stm32_add_linker_script` function - -***Note**: Because of some families multi-cores architecture, all targets also have a suffix (e.g. STM32H7 has ::M7 or ::M4). -For example, targets created for STM32H747BI will look like `CMSIS::STM32::H7::M7`, -`CMSIS::STM32::H7::M4`, `CMSIS::STM32::H747BI::M7`, `CMSIS::STM32::H747BI::M4`, etc.* - -The GCC C/C++ standard libraries are added by linking the library `STM32::NoSys`. This will add -the `--specs=nosys.specs` to compiler and linker flags. -If you want to use C++ on MCUs with little flash, you might instead want to link the newlib-nano to -reduce the code size. You can do so by linking `STM32::Nano`, which will add the -`--specs=nano.specs` flags to both compiler and linker. -Keep in mind that when using `STM32::Nano`, by default you cannot use floats in printf/scanf calls, -and you have to provide implementations for several OS interfacing -functions (`_sbrk`, `_close`, `_fstat`, and others). You can enable printf/scanf floating point support with -newlib-nano by linking against `STM32::Nano::FloatPrint` and/or `STM32::Nano::FloatScan`. -It is also possible to combine `STM32::Nano` and `STM32::NoSys` -to have the benefits of reduced code size while not being forced to implement system calls. - -## HAL - -STM32 HAL can be used similar to CMSIS. -```cmake -find_package(HAL [HAL_version] COMPONENTS STM32F4 REQUIRED) -set(CMAKE_INCLUDE_CURRENT_DIR TRUE) -``` -*`CMAKE_INCLUDE_CURRENT_DIR` here because HAL requires `stm32xx_hal_conf.h` file being in include headers path.* - -[HAL_version] is an optional version requirement. See [find_package documentation](https://cmake.org/cmake/help/v3.13/command/find_package.html?highlight=find%20package#id4). This parameter does not make sense if multiple STM32 families are requested. - -HAL module will search all drivers supported by family and create the following targets: - -* `HAL::STM32::` (e.g. `HAL::STM32::F4`) - common HAL source, depends on `CMSIS::STM32::` -* `HAL::STM32::::` (e.g. `HAL::STM32::F4::GPIO`) - HAL driver , depends on `HAL::STM32::` -* `HAL::STM32::::Ex` (e.g. `HAL::STM32::F4::ADCEx`) - HAL Extension driver , depends on `HAL::STM32::::` -* `HAL::STM32::::LL_` (e.g. `HAL::STM32::F4::LL_ADC`) - HAL LL (Low-Level) driver , depends on `HAL::STM32::` - -***Note**: Targets for multi-cores devices will look like `HAL::STM32::::`, `HAL::STM32::::::`, etc.* - -Here is typical usage: - -```cmake -add_executable(stm32-blinky-f4 blinky.c stm32f4xx_hal_conf.h) -target_link_libraries(stm32-blinky-f4 - HAL::STM32::F4::RCC - HAL::STM32::F4::GPIO - HAL::STM32::F4::CORTEX - CMSIS::STM32::F407VG - STM32::NoSys -) -``` - -### Building - -``` - $ cmake -DCMAKE_TOOLCHAIN_FILE= -DCMAKE_BUILD_TYPE=Debug - $ make -``` - -## Linker script & variables - -CMSIS package will generate linker script for your device automatically (target `CMSIS::STM32::`). To specify a custom linker script, use `stm32_add_linker_script` function. - -## Useful CMake functions - -* `stm32_get_chip_info( [FAMILY ] [TYPE ] [DEVICE ])` - classify device using name, will return device family (into `` variable), type (``) and canonical name (``, uppercase without any package codes) -* `stm32_get_memory_info((CHIP )|(DEVICE TYPE ) [FLASH|RAM|CCRAM|STACK|HEAP] [SIZE ] [ORIGIN ])` - get information about device memories (into `` and ``). Linker script generator uses values from this function -* `stm32_print_size_of_target()` - Print the application sizes for all formats -* `stm32_generate_binary_file()` - Generate the binary file for the given target -* `stm32_generate_srec_file()` - Generate the srec file for the given target -* `stm32_generate_hex_file()` - Generate the hex file for the given target - - -In the following functions, you can also specify mutiple families. - -* `stm32_get_devices_by_family(STM_DEVICES [FAMILY families...])` - return into `STM_DEVICES` all - supported devices by family (or all devices if `FAMILY` is omitted) -* `stm32_print_devices_by_family([FAMILY families...])` - Print all supported devices by family - (or all devices if `FAMILY` is omitted) - -# Additional CMake modules - -stm32-cmake contains additional CMake modules for finding and configuring various libraries and RTOSes used in the embedded world. - -## FreeRTOS - -[cmake/FindFreeRTOS](cmake/FindFreeRTOS.cmake) - finds FreeRTOS sources in location specified by -`FREERTOS_PATH` (*default*: `/opt/FreeRTOS`) variable and format them as `IMPORTED` targets. -`FREERTOS_PATH` can be either the path to the whole -[FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS) github repo, or the path to -FreeRTOS-Kernel (usually located in the subfolder `FreeRTOS` on a downloaded release). -`FREERTOS_PATH` can be supplied as an environmental variable as well. - -It is possible to either use the FreeRTOS kernel provided in the Cube repositories, or a separate -FreeRTOS kernel. The Cube repository also provides the CMSIS RTOS and CMSIS RTOS V2 implementations. -If the CMSIS implementations is used, it is recommended to also use the FreeRTOS sources -provided in the Cube repository because the CMSIS port might be incompatible to newer kernel -versions. The FreeRTOS port to use is specified as a `FreeRTOS` component. A list of available -ports can be found below. If the FreeRTOS sources provided in the Cube repository are used, the -device family also has to be specified as a component for the `FreeRTOS` package. - -CMSIS RTOS can be used by specifying a `CMSIS` target and by finding the CMSIS `RTOS` package. -The following section will show a few example configurations for the H7 and F4 family. -You can also find example code for several devices in the [examples](https://github.com/ObKo/stm32-cmake/tree/master/examples/freertos) -folder. - -Typical usage for a H7 device when using the M7 core, using an external kernel without CMSIS -support. The FreeRTOS namespace is set to `FreeRTOS` and the `ARM_CM7` port is used: - -```cmake -find_package(CMSIS COMPONENTS STM32H743ZI STM32H7_M7 REQUIRED) -find_package(FreeRTOS ARM_CM7 REQUIRED) -target_link_libraries(${TARGET_NAME} PRIVATE - ... - FreeRTOS::ARM_CM7 -) -``` - -Typical usage for a F4 device, using an external kernel without CMSIS support. -The FreeRTOS namespace is set to `FreeRTOS` and the `ARM_CM4F` port is used: - -```cmake -find_package(FreeRTOS COMPONENTS ARM_CM4F REQUIRED) -target_link_libraries(${TARGET_NAME} PRIVATE - ... - FreeRTOS::ARM_CM4F -) -``` - -For ARMv8-M architecture (CM23 and CM33) you can choose "No Trust Zone" port: - -```cmake -find_package(FreeRTOS COMPONENTS ARM_CM33_NTZ REQUIRED) -target_link_libraries(${TARGET_NAME} PRIVATE - ... - FreeRTOS::ARM_CM33_NTZ -) -``` - -Or you can use the trust zone with: - -```cmake -find_package(FreeRTOS COMPONENTS ARM_CM33 REQUIRED) -target_link_libraries(${SECURE_TARGET_NAME} PRIVATE - ... - FreeRTOS::ARM_CM33::SECURE -) -target_link_libraries(${NON_SECURE_TARGET_NAME} PRIVATE - ... - FreeRTOS::ARM_CM33::NON_SECURE -) -``` - -Another typical usage using the FreeRTOS provided in the Cube repository and the CMSIS support. -The FreeRTOS namespace is set to `FreeRTOS::STM32::`, the `ARM_CM7` port is used and -the device family is specified as a `FreeRTOS` component with `STM32H7`: - -```cmake -find_package(CMSIS COMPONENTS STM32H743ZI STM32H7_M7 RTOS REQUIRED) -find_package(FreeRTOS COMPONENTS ARM_CM7 STM32H7 REQUIRED) -target_link_libraries(${TARGET_NAME} PRIVATE - ... - FreeRTOS::STM32::H7::M7::ARM_CM7 - CMSIS::STM32::H7::M7::RTOS -) -``` - -The following CMSIS targets are available in general: - -* `CMSIS::STM32::::RTOS` -* `CMSIS::STM32::::RTOS_V2` - -The following additional FreeRTOS targets are available in general to use the FreeRTOS provided -in the Cube repository - -* `FreeRTOS::STM32::` - -For the multi-core architectures, both family and core need to be specified like shown in the -example above. - -The following FreeRTOS ports are supported in general: `ARM_CM0`, `ARM_CM3`, -`ARM_CM3_MPU`, `ARM_CM4F`, `ARM_CM4_MPU`, `ARM_CM7`, `ARM_CM7_MPU`, -`ARM_CM23`, `ARM_CM23_NTZ`, `ARM_CM33`, `ARM_CM33_NTZ`. - -Other FreeRTOS libraries, with `FREERTOS_NAMESPACE` being set as specified in the examples above: - -* `${FREERTOS_NAMESPACE}::Coroutine` - co-routines (`croutines.c`) -* `${FREERTOS_NAMESPACE}::EventGroups` - event groups (`event_groups.c`) -* `${FREERTOS_NAMESPACE}::StreamBuffer` - stream buffer (`stream_buffer.c`) -* `${FREERTOS_NAMESPACE}::Timers` - timers (`timers.c`) -* `${FREERTOS_NAMESPACE}::Heap::` - heap implementation (`heap_.c`), ``: [1-5] diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindBSP.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindBSP.cmake deleted file mode 100644 index 27437fa28b..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindBSP.cmake +++ /dev/null @@ -1,415 +0,0 @@ -# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html - -### F0 ### -set(BSP_F0_BOARDS - STM32F0xx_Nucleo_32 STM32F0xx-Nucleo STM32F072B-Discovery - STM32F0308-Discovery STM32072B_EVAL STM32091C_EVAL -) -set(BSP_F0_COMPONENTS - hx8347d l3gd20 spfd5408 st7735 stlm75 -) -set(BSP_F0_SOURCES_STM32F072B_Discovery eeprom gyroscope) -set(BSP_F0_SOURCES_STM32072B_EVAL eeprom lcd sd tsensor) -set(BSP_F0_SOURCES_STM32091C_EVAL eeprom lcd sd tsensor) -set(BSP_F0_DEVICE_STM32F072B_Discovery F072RB) -set(BSP_F0_DEVICE_STM32F0308_Discovery F030R8) -set(BSP_F0_DEVICE_STM32072B_EVAL F072VB) -set(BSP_F0_DEVICE_STM32091C_EVAL F091VC) - -### F1 ### -set(BSP_F1_BOARDS - STM32F1xx_Nucleo STM32VL-Discovery STM3210C_EVAL STM3210E_EVAL -) -set(BSP_F1_COMPONENTS - ak4343 cs43l22 hx8347d ili9320 ili9325 lis302dl spfd5408 st7735 stlm75 - stmpe811 -) -set(BSP_F1_SOURCES_STM3210C_EVAL accelerometer audio eeprom io lcd sd ts) -set(BSP_F1_SOURCES_STM3210E_EVAL audio lcd nand nor sd serialflash sram tsensor) -set(BSP_F1_DEVICE_STM32VL_Discovery F100RB) -set(BSP_F1_DEVICE_STM3210C_EVAL F107VC) -set(BSP_F1_DEVICE_STM3210E_EVAL F103ZE) - -### F2 ### -set(BSP_F2_BOARDS - STM32F2xx_Nucleo_144 STM322xG_EVAL -) -set(BSP_F2_COMPONENTS - cs43l22 ili9320 ili9325 ili9341 ov2640 st7735 stmpe811 -) -set(BSP_F2_SOURCES_STM322xG_EVAL audio camera eeprom io lcd sd sram ts) -set(BSP_F2_DEVICE_STM322xG_EVAL F207IG) - -### F3 ### -set(BSP_F3_BOARDS - STM32F3-Discovery STM32F3xx_Nucleo_32 STM32F3xx_Nucleo_144 STM32F3xx-Nucleo - STM32F3348-Discovery STM32303C_EVAL STM32303E_EVAL STM32373C_EVAL -) -set(BSP_F3_COMPONENTS - cs42l52 cs43l22 hx8347d hx8347g hx8347i ili9320 ili9325 ili9328 l3gd20 - lsm303dlhc spfd5408 st7735 stts751 -) -set(BSP_F3_SOURCES_STM32F3_Discovery accelerometer gyroscope) -set(BSP_F3_SOURCES_STM32303C_EVAL audio eeprom lcd sd tsensor) -set(BSP_F3_SOURCES_STM32303E_EVAL audio eeprom lcd sd tsensor) -set(BSP_F3_SOURCES_STM32373C_EVAL audio eeprom lcd sd tsensor) -set(BSP_F3_DEVICE_STM32F3_Discovery F303VC) -set(BSP_F3_DEVICE_STM32F3348_Discovery F334C8) -set(BSP_F3_DEVICE_STM32303C_EVAL F303VC) -set(BSP_F3_DEVICE_STM32303E_EVAL F303VE) -set(BSP_F3_DEVICE_STM32373C_EVAL F373VC) - -### F4 ### -set(BSP_F4_BOARDS - STM32F4-Discovery STM32F4xx_Nucleo_144 STM32F4xx-Nucleo STM32F401-Discovery - STM32F411E-Discovery STM32F413H-Discovery STM32F429I-Discovery - STM324x9I_EVAL STM324xG_EVAL STM32412G-Discovery STM32446E_EVAL - STM32469I_EVAL STM32469I-Discovery -) -set(BSP_F4_COMPONENTS - ampire480272 ampire640480 cs43l22 exc7200 ft6x06 ili9325 ili9341 l3gd20 - lis3dsh lis302dl ls016b8uy lsm303dlhc mfxstm32l152 n25q128a n25q256a - n25q512a otm8009a ov2640 s5k5cag s25fl512s st7735 st7789h2 stmpe811 - stmpe1600 ts3510 wm8994 -) -set(BSP_F4_SOURCES_STM32F4_Discovery accelerometer audio) -set(BSP_F4_SOURCES_STM32F401_Discovery accelerometer audio gyroscope) -set(BSP_F4_SOURCES_STM32F411E_Discovery accelerometer audio gyroscope) -set(BSP_F4_SOURCES_STM32F413H_Discovery audio lcd psram qspi sd ts) -set(BSP_F4_SOURCES_STM32F429I_Discovery eeprom gyroscope io lcd sdram ts) -set(BSP_F4_SOURCES_STM324x9I_EVAL audio camera eeprom io lcd nor sd sdram sram ts) -set(BSP_F4_SOURCES_STM324xG_EVAL audio camera eeprom io lcd sd sram ts) -set(BSP_F4_SOURCES_STM32412G_Discovery audio eeprom lcd qspi sd ts) -set(BSP_F4_SOURCES_STM3232446E_EVAL audio camera eeprom io lcd qspi sd sdram ts) -set(BSP_F4_SOURCES_STM32469I_EVAL audio camera eeprom io lcd nor qspi sd sdram sram ts) -set(BSP_F4_SOURCES_STM32469I_Discovery audio eeprom lcd qspi sd sdram ts) -set(BSP_F4_DEVICE_STM32F4_Discovery F407VG) -set(BSP_F4_DEVICE_STM32F401_Discovery F401VC) -set(BSP_F4_DEVICE_STM32F411E_Discovery F411VE) -set(BSP_F4_DEVICE_STM32F413H_Discovery F413ZH) -set(BSP_F4_DEVICE_STM32F429I_Discovery F429ZI) -set(BSP_F4_DEVICE_STM324x9I_EVAL F429NI) -set(BSP_F4_DEVICE_STM324xG_EVAL F407IG) -set(BSP_F4_DEVICE_STM32412G_Discovery F412ZG) -set(BSP_F4_DEVICE_STM32446E_EVAL F446ZE) -set(BSP_F4_DEVICE_STM32469I_EVAL F469NI) -set(BSP_F4_DEVICE_STM32469I_Discovery F469NI) - -### F7 ### -set(BSP_F7_BOARDS - STM32F7xx_Nucleo_144 STM32F723E-Discovery STM32F769I_EVAL - STM32F769I-Discovery STM32F7308-Discovery STM32F7508-Discovery - STM32746G-Discovery STM32756G_EVAL -) -set(BSP_F7_COMPONENTS - adv7533 ampire480272 ampire640480 exc7200 ft6x06 ft5336 mfxstm32l152 - mx25l512 n25q128a n25q512a otm8009a ov5640 ov9655 rk043fn48h s5k5cag st7735 - st7789h2 stmpe811 ts3510 wm8994 -) -set(BSP_F7_SOURCES_STM32F723E_Discovery audio lcd psram qspi ts) -set(BSP_F7_SOURCES_STM32F769I_EVAL audio camera eeprom io lcd nor qspi sd sdram sram ts) -set(BSP_F7_SOURCES_STM32F769I_Discovery audio eeprom lcd qspi sd sdram ts) -set(BSP_F7_SOURCES_STM32F7308_Discovery audio lcd psram qspi ts) -set(BSP_F7_SOURCES_STM32F7508_Discovery audio camera eeprom lcd qspi sd sdram ts) -set(BSP_F7_SOURCES_STM32746G_Discovery audio camera eeprom lcd qspi sd sdram ts) -set(BSP_F7_SOURCES_STM32756G_EVAL audio camera eeprom io lcd nor qspi sd sdram sram ts) -set(BSP_F7_DEVICE_STM32F723E_Discovery F723IE) -set(BSP_F7_DEVICE_STM32F769I_EVAL F769NI) -set(BSP_F7_DEVICE_STM32F769I_Discovery F769NI) -set(BSP_F7_DEVICE_STM32F7308_Discovery F730I8) -set(BSP_F7_DEVICE_STM32F7508_Discovery F750N8) -set(BSP_F7_DEVICE_STM32746G_Discovery F746NG) -set(BSP_F7_DEVICE_STM32756G_EVAL F756NG) - -### G0 ### -set(BSP_G0_BOARDS - STM32G0xx_Nucleo STM32G0xx_Nucleo_32 STM32G071B-Discovery STM32G081B_EVAL - STM32G0316-Discovery -) -set(BSP_G0_COMPONENTS - hx8347d ina230 sn65dp141 ssd1315 st7735 stlm75 tusb546 -) -set(BSP_G0_DIR_STM32G0316_Discovery STM32G0316-DISCO) -set(BSP_G0_SOURCES_STM32G071B_Discovery lcd pwr pwrmon) -set(BSP_G0_SOURCES_STM32G081B_EVAL lcd mux pwr sd tsensor) -set(BSP_G0_DEVICE_STM32G071B_Discovery G071RB) -set(BSP_G0_DEVICE_STM32G081B_EVAL G081RB) -set(BSP_G0_DEVICE_STM32G0316_Discovery G031J6) - -### G4 ### -set(BSP_G4_BOARDS - B-G474E-DPOW1 STM32G4xx_Nucleo STM32G474E-EVAL -) -set(BSP_G4_COMPONENTS - hx8347d mfxstm32l152 mt25ql512abb st7735 stts751 wm8994 -) -set(BSP_G4_SOURCES_B-G474E-DPOW1 usbpd_pwr) -set(BSP_G4_SOURCES_STM32G481B_EVAL audio bus env_sensor idd io lcd qspi sd smartcard sram usbpd_pwr) -set(BSP_G4_DEVICE_B_G474E_DPOW1 G474RE) -set(BSP_G4_DEVICE_STM32G474E_EVAL G474QE) - -### H7 ### -set(BSP_H7_BOARDS - STM32H7B3I-Discovery STM32H7B3I-EVAL STM32H7xx_Nucleo STM32H743I-EVAL - STM32H745I-Discovery STM32H747I-Discovery STM32H747I-EVAL - STM32H750B-Discovery -) -set(BSP_H7_COMPONENTS - adv7533 ampire480272 ampire640480 cs42l51 es_wifi exc7200 ft6x06 ft5336 - is42s16800j is42s32800g is42s32800j lan8742 m24lr64 mfxstm32l152 - mt25tl01g mt48lc4m32b2 mx25lm51245g otm8009a ov5640 ov9655 rk043fn48h - rk070er9427 s5k5cag st7735 stmpe811 ts3510 wm8994 -) -set(BSP_H7_DIR_STM32H7B3I_Discovery STM32H7B3I-DK) -set(BSP_H7_DIR_STM32H745I_Discovery STM32H745I-DISCO) -set(BSP_H7_DIR_STM32H747I_Discovery STM32H747I-DISCO) -set(BSP_H7_DIR_STM32H750B_Discovery STM32H750B-DK) -set(BSP_H7_SOURCES_STM32H7B3I_Discovery audio bus camera eeprom lcd ospi sd sdram ts) -set(BSP_H7_SOURCES_STM32H7B3I_EVAL audio bus camera eeprom io lcd nor ospi sd sdram sram ts) -set(BSP_H7_SOURCES_STM32H743I_EVAL audio bus eeprom io lcd nor qspi sd sdram sram ts) -set(BSP_H7_SOURCES_STM32H745I_Discovery audio bus lcd mmc qspi sdram ts) -set(BSP_H7_SOURCES_STM32H747I_Discovery audio bus camera lcd qspi sd sdram ts) -set(BSP_H7_SOURCES_STM32H747I_EVAL audio bus eeprom io lcd nor qspi sd sdram sram ts) -set(BSP_H7_SOURCES_STM32H750B_Discovery audio bus lcd mmc qspi sdram ts) -set(BSP_H7_DEVICE_STM32H7B3I_Discovery H7B3LI) -set(BSP_H7_DEVICE_STM32H7B3I_EVAL H7B3LI) -set(BSP_H7_DEVICE_STM32H743I_EVAL H743XI) -set(BSP_H7_DEVICE_STM32H745I_Discovery H745XI) -set(BSP_H7_DEVICE_STM32H747I_Discovery H747XI) -set(BSP_H7_DEVICE_STM32H747I_EVAL H743XI) -set(BSP_H7_DEVICE_STM32H750B_Discovery H750XB) - -### L0 ### -set(BSP_L0_BOARDS - STM32L0xx_Nucleo STM32L0xx_Nucleo_32 STM32L073Z_EVAL STM32L0538-Discovery -) -set(BSP_L0_COMPONENTS - gde021a1 hx8347d mfxstm32l152 st7735 stlm75 -) -set(BSP_L0_SOURCES_STM32L073Z_EVAL eeprom glass_lcd idd io lcd sd tsensor) -set(BSP_L0_SOURCES_STM32L0538_Discovery epd) -set(BSP_L0_DEVICE_STM32L073Z_EVAL L073VZ) -set(BSP_L0_DEVICE_STM32L0538_Discovery L053C8) - -### L1 ### -set(BSP_L1_BOARDS - STM32L1xx_Nucleo STM32L100C-Discovery STM32L152C-Discovery STM32L152D_EVAL -) -set(BSP_L1_COMPONENTS - cs43l22 hx8347d ili9320 ili9325 spfd5408 st7735 stlm75 -) -set(BSP_L1_SOURCES_STM32L152C_Discovery glass_lcd) -set(BSP_L1_SOURCES_STM32L152D_EVAL audio eeprom audio glass_lcd lcd nor sd sram tsensor) -set(BSP_L1_DEVICE_STM32L100C_Discovery L100RC) -set(BSP_L1_DEVICE_STM32L152C_Discovery L152RC) -set(BSP_L1_DEVICE_STM32L152D_EVAL L152ZD) - -### L4 ### -set(BSP_L4_BOARDS - STM32L475E-IOT01 STM32L4P5G-Discovery STM32L4R9I_EVAL STM32L4R9I-Discovery - STM32L4xx_Nucleo STM32L4xx_Nucleo_32 STM32L4xx_Nucleo_144 STM32L476G_EVAL - STM32L476G-Discovery STM32L496G-Discovery -) -set(BSP_L4_COMPONENTS - cs42l51 cs43l22 cy8c4014lqi ft3x67 ft6x06 ft5336 hts221 hx8347g hx8347i - iss66wvh8m8 l3gd20 lis3mdl lps22hb ls016b8uy lsm6dsl lsm303c lsm303dlhc - m24sr mfxstm32l152 mx25lm51245g mx25r6435f n25q128a n25q256a ov9655 - rk043fn48h st7735 st7789h2 stmpe811 stmpe1600 wm8994 -) -set(BSP_L4_SOURCES_B_L475E_IOT01 accelerometer gyro hsensor magneto psensor qspi tsensor iot01) -set(BSP_L4_SOURCES_STM32L4P5G_Discovery idd io lcd mmc ospi_nor psram ts) -set(BSP_L4_SOURCES_STM32L4R9I_EVAL audio dsi_lcd dsi_ts eeprom idd io nor ospi_nor ospi_ram rgb_ts sd sram) -set(BSP_L4_SOURCES_STM32L4R9I_Discovery audio camera idd io lcd ospi_nor psram sd ts) -set(BSP_L4_SOURCES_STM32L476G_EVAL audio eeprom glass_lcd idd io lcd nor qspi sd sram ts) -set(BSP_L4_SOURCES_STM32L476G_Discovery audio compass glass_lcd gyroscope qspi) -set(BSP_L4_SOURCES_STM32L496G_Discovery audio camera idd io lcd qspi sd sram ts) -set(BSP_L4_DIR_STM32L475E_IOT01 B-L475E-IOT01) -set(BSP_L4_DEVICE_STM32L475E_IOT01 L475VG) -set(BSP_L4_DEVICE_STM32L4P5G_Discovery L4P5AG) -set(BSP_L4_DEVICE_STM32L4R9I_EVAL L4R9AI) -set(BSP_L4_DEVICE_STM32L4R9I_Discovery L4R9AI) -set(BSP_L4_DEVICE_STM32L476G_EVAL L476ZG) -set(BSP_L4_DEVICE_STM32L476G_Discovery L476VG) -set(BSP_L4_DEVICE_STM32L496G_Discovery L496AG) - -### L5 ### -set(BSP_L5_BOARDS - STM32L552E_EVAL STM32L562E-Discovery STM32L5xx_Nucleo_144 -) -set(BSP_L5_COMPONENTS - cs42l51 ft6x06 hx8347i iss66wvh8m8 lsm6dso mfxstm32l152 mx25lm51245g - st7789h2 stmpe811 -) -set(BSP_L5_SOURCES_STM32L562E_Discovery audio bus idd lcd motion_sensor ospi sd ts usbpd_pwr) -set(BSP_L5_SOURCES_STM32L552E_EVAL audio bus idd io lcd ospi sd sram ts usbpd_pwr) -set(BSP_L5_DEVICE_STM32L562E_Discovery L562QE) -set(BSP_L5_DEVICE_STM32L552E_EVAL L552ZE) - -### MP1 ### -set(BSP_MP1_BOARDS - STM32MP15xx_DISCO STM32MP15xx_EVAL) -set(BSP_MP1_COMPONENTS ) -set(BSP_MP1_SOURCES_STM32MP15xx_DISCO bus stpmic1) -set(BSP_MP1_SOURCES_STM32MP15xx_EVAL bus stpmic1) - -### U0 ### -set(BSP_U0_BOARDS - STM32U0xx_Nucleo STM32U083C_Discovery -) -set(BSP_U0_COMPONENTS - stts22h -) - -set(BSP_U0_SOURCES_STM32U083C_Discovery stts22h) -set(BSP_U0_DEVICE_STM32U083C_Discovery U083CC) - -### WB ### -set(BSP_WB_BOARDS - STM32WB15CC_Nucleo STM32WB55_Nucleo STM32WB55_USBDongle STM32WB5MM_Discovery -) -set(BSP_WB_COMPONENTS - ism330dhcx s25fl128s ssd1315 stts22h -) -set(BSP_WB_DIR_STM32WB5MM_Discovery STM32WB5MM-DK) -set(BSP_WB_SOURCES_STM32WB5MM_Discovery audio bus env_sensors env_sensors_ex lcd motion_sensors motion_sensors_ex qspi) -set(BSP_WB_DEVICE_STM32WB5MM_Discovery WB5MMG) - -### WL ### -set(BSP_WL_BOARDS - STM32WLxx_Nucleo -) - - - -if(NOT BSP_FIND_COMPONENTS) - set(BSP_FIND_COMPONENTS ${STM32_SUPPORTED_FAMILIES_LONG_NAME}) -endif() - -if(STM32H7 IN_LIST BSP_FIND_COMPONENTS) - list(REMOVE_ITEM BSP_FIND_COMPONENTS STM32H7) - list(APPEND BSP_FIND_COMPONENTS STM32H7_M7 STM32H7_M4) -endif() - -if(STM32WB IN_LIST BSP_FIND_COMPONENTS) - list(REMOVE_ITEM BSP_FIND_COMPONENTS STM32WB) - list(APPEND BSP_FIND_COMPONENTS STM32WB_M4) -endif() - -if(STM32WL IN_LIST BSP_FIND_COMPONENTS) - list(REMOVE_ITEM BSP_FIND_COMPONENTS STM32WL) - list(APPEND BSP_FIND_COMPONENTS STM32WL_M4 STM32WL_M0PLUS) -endif() - -if(STM32MP1 IN_LIST BSP_FIND_COMPONENTS) - list(REMOVE_ITEM BSP_FIND_COMPONENTS STM32MP1) - list(APPEND BSP_FIND_COMPONENTS STM32MP1_M4) -endif() - -list(REMOVE_DUPLICATES BSP_FIND_COMPONENTS) - -foreach(COMP ${BSP_FIND_COMPONENTS}) - string(TOLOWER ${COMP} COMP_L) - string(TOUPPER ${COMP} COMP_U) - - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP_U ${COMP_U}) - if(NOT CMAKE_MATCH_1) - message(FATAL_ERROR "Unknown BSP component: ${COMP}") - endif() - - if(CMAKE_MATCH_3) - set(CORE ${CMAKE_MATCH_3}) - set(CORE_C "::${CORE}") - set(CORE_U "_${CORE}") - else() - unset(CORE) - unset(CORE_C) - unset(CORE_U) - endif() - - set(FAMILY ${CMAKE_MATCH_1}) - string(TOLOWER ${FAMILY} FAMILY_L) - - if((NOT STM32_CUBE_${FAMILY}_PATH) AND (DEFINED ENV{STM32_CUBE_${FAMILY}_PATH)) - set(STM32_CUBE_${FAMILY}_PATH $ENV{STM32_CUBE_${FAMILY}_PATH} CACHE PATH "Path to STM32Cube${FAMILY}") - message(STATUS "ENV STM32_CUBE_${FAMILY}_PATH specified, using STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}") - endif() - - if(NOT STM32_CUBE_${FAMILY}_PATH) - set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}") - message(STATUS "No STM32_CUBE_${FAMILY}_PATH specified using default: ${STM32_CUBE_${FAMILY}_PATH}") - endif() - - set(BSP_${FAMILY}_PATH "${STM32_CUBE_${FAMILY}_PATH}/Drivers/BSP") - if(NOT EXISTS ${BSP_${FAMILY}_PATH}) - continue() - endif() - - set(BSP_${FAMILY}_INCLUDE "${BSP_${FAMILY}_PATH}/Components/Common") - - add_library(BSP::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED) - target_link_libraries(BSP::STM32::${FAMILY}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C}) - target_include_directories(BSP::STM32::${FAMILY}${CORE_C} INTERFACE "${BSP_${FAMILY}_PATH}/Components/Common") - - foreach(BOARD ${BSP_${FAMILY}_BOARDS}) - string(REPLACE "-" "_" BOARD_CANONICAL ${BOARD}) - string(TOLOWER ${BOARD_CANONICAL} BOARD_CANONICAL_L) - set(BOARD_DEVICE ${BSP_${FAMILY}_DEVICE_${BOARD_CANONICAL}}) - - stm32_get_cores(DEV_CORES FAMILY ${FAMILY} DEVICE ${BOARD_DEVICE}) - if(CORE AND (NOT ${CORE} IN_LIST DEV_CORES)) - continue() - endif() - - find_path(BSP_${BOARD_CANONICAL}_PATH - NAMES ${BOARD_CANONICAL_L}.h - PATHS "${BSP_${FAMILY}_PATH}/${BOARD}" "${BSP_${FAMILY}_PATH}/${BSP_${FAMILY}_DIR_${BOARD_CANONICAL}}" - NO_DEFAULT_PATH - ) - if (NOT EXISTS ${BSP_${BOARD_CANONICAL}_PATH}) - continue() - endif() - - add_library(BSP::STM32::${BOARD_CANONICAL}${CORE_C} INTERFACE IMPORTED) - target_link_libraries(BSP::STM32::${BOARD_CANONICAL}${CORE_C} INTERFACE BSP::STM32::${FAMILY}${CORE_C} CMSIS::STM32::${FAMILY}${CORE_C}) - target_include_directories(BSP::STM32::${BOARD_CANONICAL}${CORE_C} INTERFACE "${BSP_${BOARD_CANONICAL}_PATH}") - target_sources(BSP::STM32::${BOARD_CANONICAL}${CORE_C} INTERFACE "${BSP_${BOARD_CANONICAL}_PATH}/${BOARD_CANONICAL_L}.c") - - foreach(SRC ${BSP_${FAMILY}_SOURCES_${BOARD_CANONICAL}}) - target_sources(BSP::STM32::${BOARD_CANONICAL}${CORE_C} INTERFACE "${BSP_${BOARD_CANONICAL}_PATH}/${BOARD_CANONICAL_L}_${SRC}.c") - endforeach() - if(BSP_${FAMILY}_DEVICE_${BOARD_CANONICAL}) - target_link_libraries(BSP::STM32::${BOARD_CANONICAL}${CORE_C} INTERFACE CMSIS::STM32::${BSP_${FAMILY}_DEVICE_${BOARD_CANONICAL}}${CORE_C}) - endif() - endforeach() - - foreach(BCOMP ${BSP_${FAMILY}_COMPONENTS}) - string(TOLOWER ${BCOMP} BCOMP_L) - string(TOUPPER ${BCOMP} BCOMP_U) - - add_library(BSP::STM32::${FAMILY}${CORE_C}::${BCOMP_U} INTERFACE IMPORTED) - target_link_libraries(BSP::STM32::${FAMILY}${CORE_C}::${BCOMP_U} INTERFACE BSP::STM32::${FAMILY}${CORE_C} CMSIS::STM32::${FAMILY}${CORE_C}) - target_include_directories(BSP::STM32::${FAMILY}${CORE_C}::${BCOMP_U} INTERFACE "${BSP_${FAMILY}_PATH}/Components/${BCOMP}") - - find_file(BSP_${BOARD_CANONICAL}_${BCOMP}_SOURCE - NAMES ${BCOMP}.c - PATHS "${BSP_${FAMILY}_PATH}/Components/${BCOMP}" - NO_DEFAULT_PATH - ) - if (BSP_${BOARD_CANONICAL}_${BCOMP}_SOURCE) - target_sources(BSP::STM32::${FAMILY}${CORE_C}::${BCOMP_U} INTERFACE "${BSP_${BOARD_CANONICAL}_${BCOMP}_SOURCE}") - endif() - endforeach() - - set(BSP_${COMP}_FOUND TRUE) - - if(BSP_${COMP}_FOUND) - list(APPEND BSP_INCLUDE_DIRS "${BSP_${FAMILY}_INCLUDE}") - endif() -endforeach() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(BSP - REQUIRED_VARS BSP_INCLUDE_DIRS - FOUND_VAR BSP_FOUND - HANDLE_COMPONENTS -) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindCMSIS.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindCMSIS.cmake deleted file mode 100644 index d6a1a7c265..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindCMSIS.cmake +++ /dev/null @@ -1,326 +0,0 @@ -# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html - - - - -set(CMSIS_RTOS RTOS RTOS_V2) - -if(NOT CMSIS_FIND_COMPONENTS) - set(CMSIS_FIND_COMPONENTS ${STM32_SUPPORTED_FAMILIES_LONG_NAME}) -endif() - -if(STM32H7 IN_LIST CMSIS_FIND_COMPONENTS) - list(REMOVE_ITEM CMSIS_FIND_COMPONENTS STM32H7) - list(APPEND CMSIS_FIND_COMPONENTS STM32H7_M7 STM32H7_M4) -endif() - -if(STM32WB IN_LIST CMSIS_FIND_COMPONENTS) - list(REMOVE_ITEM CMSIS_FIND_COMPONENTS STM32WB) - list(APPEND CMSIS_FIND_COMPONENTS STM32WB_M4) -endif() - -if(STM32WL IN_LIST CMSIS_FIND_COMPONENTS) - list(REMOVE_ITEM CMSIS_FIND_COMPONENTS STM32WL) - list(APPEND CMSIS_FIND_COMPONENTS STM32WL_M4 STM32WL_M0PLUS) -endif() - -if(STM32MP1 IN_LIST CMSIS_FIND_COMPONENTS) - list(REMOVE_ITEM CMSIS_FIND_COMPONENTS STM32MP1) - list(APPEND CMSIS_FIND_COMPONENTS STM32MP1_M4) -endif() - -list(REMOVE_DUPLICATES CMSIS_FIND_COMPONENTS) - -# This section fills the RTOS or family components list -foreach(COMP ${CMSIS_FIND_COMPONENTS}) - string(TOLOWER ${COMP} COMP_L) - string(TOUPPER ${COMP} COMP) - - # Component is RTOS component - if(${COMP} IN_LIST CMSIS_RTOS) - list(APPEND CMSIS_FIND_COMPONENTS_RTOS ${COMP}) - continue() - endif() - - # Component is not RTOS component, so check whether it is a family component - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP ${COMP}) - if(CMAKE_MATCH_1) - list(APPEND CMSIS_FIND_COMPONENTS_FAMILIES ${COMP}) - endif() -endforeach() - -if(NOT CMSIS_FIND_COMPONENTS_FAMILIES) - set(CMSIS_FIND_COMPONENTS_FAMILIES ${STM32_SUPPORTED_FAMILIES_LONG_NAME}) -endif() - -if(NOT CMSIS_FIND_COMPONENTS_RTOS) - set(CMSIS_FIND_COMPONENTS_RTOS ${CMSIS_RTOS}) -endif() - -message(STATUS "Search for CMSIS families: ${CMSIS_FIND_COMPONENTS_FAMILIES}") -message(STATUS "Search for CMSIS RTOS: ${CMSIS_FIND_COMPONENTS_RTOS}") - -include(stm32/devices) - -function(cmsis_generate_default_linker_script FAMILY DEVICE CORE) - if(CORE) - set(CORE_C "::${CORE}") - set(CORE_U "_${CORE}") - endif() - - set(OUTPUT_LD_FILE "${CMAKE_CURRENT_BINARY_DIR}/${DEVICE}${CORE_U}.ld") - - if(${FAMILY} STREQUAL MP1) - string(TOLOWER ${FAMILY} FAMILY_L) - find_file(CMSIS_${FAMILY}${CORE_U}_LD_SCRIPT - NAMES stm32mp15xx_m4.ld - PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates/gcc/linker" - NO_DEFAULT_PATH - ) - add_custom_command(OUTPUT "${OUTPUT_LD_FILE}" - COMMAND ${CMAKE_COMMAND} - -E copy ${CMSIS_${FAMILY}${CORE_U}_LD_SCRIPT} ${OUTPUT_LD_FILE}) - else() - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} FLASH SIZE FLASH_SIZE ORIGIN FLASH_ORIGIN) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} RAM SIZE RAM_SIZE ORIGIN RAM_ORIGIN) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} CCRAM SIZE CCRAM_SIZE ORIGIN CCRAM_ORIGIN) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} RAM_SHARE SIZE RAM_SHARE_SIZE ORIGIN RAM_SHARE_ORIGIN) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} HEAP SIZE HEAP_SIZE) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} STACK SIZE STACK_SIZE) - - add_custom_command(OUTPUT "${OUTPUT_LD_FILE}" - COMMAND ${CMAKE_COMMAND} - -DFLASH_ORIGIN="${FLASH_ORIGIN}" - -DRAM_ORIGIN="${RAM_ORIGIN}" - -DCCRAM_ORIGIN="${CCRAM_ORIGIN}" - -DRAM_SHARE_ORIGIN="${RAM_SHARE_ORIGIN}" - -DFLASH_SIZE="${FLASH_SIZE}" - -DRAM_SIZE="${RAM_SIZE}" - -DCCRAM_SIZE="${CCRAM_SIZE}" - -DRAM_SHARE_SIZE="${RAM_SHARE_SIZE}" - -DSTACK_SIZE="${STACK_SIZE}" - -DHEAP_SIZE="${HEAP_SIZE}" - -DLINKER_SCRIPT="${OUTPUT_LD_FILE}" - -P "${STM32_CMAKE_DIR}/stm32/linker_ld.cmake" - ) - endif() - add_custom_target(CMSIS_LD_${DEVICE}${CORE_U} DEPENDS "${OUTPUT_LD_FILE}") - add_dependencies(CMSIS::STM32::${DEVICE}${CORE_C} CMSIS_LD_${DEVICE}${CORE_U}) - stm32_add_linker_script(CMSIS::STM32::${DEVICE}${CORE_C} INTERFACE "${OUTPUT_LD_FILE}") -endfunction() - -foreach(COMP ${CMSIS_FIND_COMPONENTS_FAMILIES}) - string(TOLOWER ${COMP} COMP_L) - string(TOUPPER ${COMP} COMP) - - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP ${COMP}) - # CMAKE_MATCH_ contains n'th subexpression - # CMAKE_MATCH_0 contains full match - - if((NOT CMAKE_MATCH_1) AND (NOT CMAKE_MATCH_2)) - message(FATAL_ERROR "Unknown CMSIS component: ${COMP}") - endif() - - if(CMAKE_MATCH_2) - set(FAMILY ${CMAKE_MATCH_1}) - set(STM_DEVICES "${CMAKE_MATCH_1}${CMAKE_MATCH_2}") - message(TRACE "FindCMSIS: full device name match for COMP ${COMP}, STM_DEVICES is ${STM_DEVICES}") - else() - set(FAMILY ${CMAKE_MATCH_1}) - stm32_get_devices_by_family(STM_DEVICES FAMILY ${FAMILY}) - message(TRACE "FindCMSIS: family only match for COMP ${COMP}, STM_DEVICES is ${STM_DEVICES}") - endif() - - if(CMAKE_MATCH_3) - set(CORE ${CMAKE_MATCH_3}) - set(CORE_C "::${CORE}") - set(CORE_U "_${CORE}") - set(CORE_Ucm "_c${CORE}") - string(TOLOWER ${CORE_Ucm} CORE_Ucm) - message(TRACE "FindCMSIS: core match in component name for COMP ${COMP}. CORE is ${CORE}") - else() - unset(CORE) - unset(CORE_C) - unset(CORE_U) - unset(CORE_Ucm) - endif() - - string(TOLOWER ${FAMILY} FAMILY_L) - - if((NOT STM32_CMSIS_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH) AND (DEFINED ENV{STM32_CUBE_${FAMILY}_PATH})) - # try to set path from environment variable. Note it could be ...-NOT-FOUND and it's fine - set(STM32_CUBE_${FAMILY}_PATH $ENV{STM32_CUBE_${FAMILY}_PATH} CACHE PATH "Path to STM32Cube${FAMILY}") - message(STATUS "ENV STM32_CUBE_${FAMILY}_PATH specified, using STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}") - endif() - - if((NOT STM32_CMSIS_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH)) - set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}") - message(STATUS "Neither STM32_CUBE_${FAMILY}_PATH nor STM32_CMSIS_${FAMILY}_PATH specified using default STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}") - endif() - - # search for Include/cmsis_gcc.h - find_path(CMSIS_${FAMILY}${CORE_U}_CORE_PATH - NAMES Include/cmsis_gcc.h - PATHS "${STM32_CMSIS_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS" - NO_DEFAULT_PATH - ) - if (NOT CMSIS_${FAMILY}${CORE_U}_CORE_PATH) - message(VERBOSE "FindCMSIS: cmsis_gcc.h for ${FAMILY}${CORE_U} has not been found") - continue() - endif() - - # search for Include/stm32[XX]xx.h - find_path(CMSIS_${FAMILY}${CORE_U}_PATH - NAMES Include/stm32${FAMILY_L}xx.h - PATHS "${STM32_CMSIS_${FAMILY}_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS/Device/ST/STM32${FAMILY}xx" - NO_DEFAULT_PATH - ) - if (NOT CMSIS_${FAMILY}${CORE_U}_PATH) - message(VERBOSE "FindCMSIS: stm32${FAMILY_L}xx.h for ${FAMILY}${CORE_U} has not been found") - continue() - endif() - list(APPEND CMSIS_INCLUDE_DIRS "${CMSIS_${FAMILY}${CORE_U}_CORE_PATH}/Include" "${CMSIS_${FAMILY}${CORE_U}_PATH}/Include") - - if(NOT CMSIS_${FAMILY}${CORE_U}_VERSION) - find_file(CMSIS_${FAMILY}${CORE_U}_PDSC - NAMES ARM.CMSIS.pdsc - PATHS "${CMSIS_${FAMILY}${CORE_U}_CORE_PATH}" - NO_DEFAULT_PATH - ) - if (NOT CMSIS_${FAMILY}${CORE_U}_PDSC) - set(CMSIS_${FAMILY}${CORE_U}_VERSION "0.0.0") - else() - file(STRINGS "${CMSIS_${FAMILY}${CORE_U}_PDSC}" VERSION_STRINGS REGEX "") - list(GET VERSION_STRINGS 0 STR) - string(REGEX MATCH "" MATCHED ${STR}) - set(CMSIS_${FAMILY}${CORE_U}_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}" CACHE INTERNAL "CMSIS STM32${FAMILY}${CORE_U} version") - endif() - endif() - - set(CMSIS_${COMP}_VERSION ${CMSIS_${FAMILY}${CORE_U}_VERSION}) - set(CMSIS_VERSION ${CMSIS_${COMP}_VERSION}) - - if(NOT (TARGET CMSIS::STM32::${FAMILY}${CORE_C})) - message(TRACE "FindCMSIS: creating library CMSIS::STM32::${FAMILY}${CORE_C}") - add_library(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED) - #STM32::${FAMILY}${CORE_C} contains compile options and is define in .cmake - target_link_libraries(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C}) - target_include_directories(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_CORE_PATH}/Include") - target_include_directories(CMSIS::STM32::${FAMILY}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_PATH}/Include") - endif() - - # search for system_stm32[XX]xx.c - find_file(CMSIS_${FAMILY}${CORE_U}_SYSTEM - NAMES system_stm32${FAMILY_L}xx.c - PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates" - NO_DEFAULT_PATH - ) - list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}${CORE_U}_SYSTEM}") - - if(NOT CMSIS_${FAMILY}${CORE_U}_SYSTEM) - message(VERBOSE "FindCMSIS: system_stm32${FAMILY_L}xx.c for ${FAMILY}${CORE_U} has not been found") - continue() - endif() - - set(STM_DEVICES_FOUND TRUE) - foreach(DEVICE ${STM_DEVICES}) - message(TRACE "FindCMSIS: Iterating DEVICE ${DEVICE}") - - stm32_get_cores(DEV_CORES FAMILY ${FAMILY} DEVICE ${DEVICE}) - if(CORE AND (NOT ${CORE} IN_LIST DEV_CORES)) - message(TRACE "FindCMSIS: skip device because CORE ${CORE} provided doesn't correspond to FAMILY ${FAMILY} DEVICE ${DEVICE}") - continue() - endif() - - stm32_get_chip_type(${FAMILY} ${DEVICE} TYPE) - string(TOLOWER ${DEVICE} DEVICE_L) - string(TOLOWER ${TYPE} TYPE_L) - - get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES) - if(NOT "ASM" IN_LIST languages) - message(STATUS "FindCMSIS: Not generating target for startup file and linker script because ASM language is not enabled") - continue() - endif() - - find_file(CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP - NAMES startup_stm32${TYPE_L}.s - startup_stm32${TYPE_L}${CORE_Ucm}.s - PATHS "${CMSIS_${FAMILY}${CORE_U}_PATH}/Source/Templates/gcc" - NO_DEFAULT_PATH - ) - list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP}") - if(NOT CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP) - set(STM_DEVICES_FOUND FALSE) - message(VERBOSE "FindCMSIS: did not find file: startup_stm32${TYPE_L}.s or startup_stm32${TYPE_L}${CORE_Ucm}.s") - break() - endif() - - if(NOT (TARGET CMSIS::STM32::${TYPE}${CORE_C})) - message(TRACE "FindCMSIS: creating library CMSIS::STM32::${TYPE}${CORE_C}") - add_library(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE IMPORTED) - target_link_libraries(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE CMSIS::STM32::${FAMILY}${CORE_C} STM32::${TYPE}${CORE_C}) - target_sources(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_${TYPE}_STARTUP}") - target_sources(CMSIS::STM32::${TYPE}${CORE_C} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_SYSTEM}") - endif() - - add_library(CMSIS::STM32::${DEVICE}${CORE_C} INTERFACE IMPORTED) - target_link_libraries(CMSIS::STM32::${DEVICE}${CORE_C} INTERFACE CMSIS::STM32::${TYPE}${CORE_C}) - cmsis_generate_default_linker_script(${FAMILY} ${DEVICE} "${CORE}") - endforeach() - - if(STM_DEVICES_FOUND) - set(CMSIS_${COMP}_FOUND TRUE) - message(DEBUG "CMSIS_${COMP}_FOUND TRUE") - else() - set(CMSIS_${COMP}_FOUND FALSE) - message(DEBUG "CMSIS_${COMP}_FOUND FALSE") - endif() - - foreach(RTOS_COMP ${CMSIS_FIND_COMPONENTS_RTOS}) - if (${RTOS_COMP} STREQUAL "RTOS_V2") - set(RTOS_COMP_VERSION "2") - else() - unset(RTOS_COMP_VERSION) - endif() - - find_path(CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_PATH - NAMES "cmsis_os${RTOS_COMP_VERSION}.h" - PATHS "${STM32_CUBE_${FAMILY}_PATH}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_${RTOS_COMP}" - NO_DEFAULT_PATH - ) - if (NOT CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_PATH) - continue() - endif() - - find_file(CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_SOURCE - NAMES "cmsis_os${RTOS_COMP_VERSION}.c" - PATHS "${STM32_CUBE_${FAMILY}_PATH}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_${RTOS_COMP}" - NO_DEFAULT_PATH - ) - if (NOT CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_SOURCE) - continue() - endif() - - if(NOT (TARGET CMSIS::STM32::${FAMILY}${CORE_C}::${RTOS_COMP})) - add_library(CMSIS::STM32::${FAMILY}${CORE_C}::${RTOS_COMP} INTERFACE IMPORTED) - target_link_libraries(CMSIS::STM32::${FAMILY}${CORE_C}::${RTOS_COMP} INTERFACE CMSIS::STM32::${FAMILY}${CORE_C}) - target_include_directories(CMSIS::STM32::${FAMILY}${CORE_C}::${RTOS_COMP} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_PATH}") - target_sources(CMSIS::STM32::${FAMILY}${CORE_C}::${RTOS_COMP} INTERFACE "${CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_SOURCE}") - endif() - - list(APPEND CMSIS_SOURCES "${CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_SOURCE}") - list(APPEND CMSIS_INCLUDE_DIRS "${CMSIS_${FAMILY}${CORE_U}_${RTOS_COMP}_PATH}") - set(CMSIS_${RTOS_COMP}_FOUND TRUE) - endforeach() - - list(REMOVE_DUPLICATES CMSIS_INCLUDE_DIRS) - list(REMOVE_DUPLICATES CMSIS_SOURCES) -endforeach() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(CMSIS - REQUIRED_VARS CMSIS_INCLUDE_DIRS CMSIS_SOURCES - FOUND_VAR CMSIS_FOUND - VERSION_VAR CMSIS_VERSION - HANDLE_COMPONENTS -) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindFreeRTOS.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindFreeRTOS.cmake deleted file mode 100644 index 0e7fd12187..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindFreeRTOS.cmake +++ /dev/null @@ -1,259 +0,0 @@ -# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html -set(FreeRTOS_PORTS ARM_CM0 ARM_CM3 ARM_CM3_MPU ARM_CM4_MPU ARM_CM4F ARM_CM7 ARM_CM7_MPU ARM_CM23 ARM_CM23_NTZ ARM_CM33 ARM_CM33_NTZ) -set(FreeRTOS_armv8_PORTS ARM_CM23_NTZ ARM_CM33_NTZ ARM_CM23 ARM_CM33) -set(FreeRTOS_armv8_trustZone_PORTS ARM_CM23 ARM_CM33) - -if(NOT FreeRTOS_FIND_COMPONENTS) - set(FreeRTOS_FIND_COMPONENTS ${FreeRTOS_PORTS}) -endif() -list(REMOVE_DUPLICATES FreeRTOS_FIND_COMPONENTS) - -if((NOT FREERTOS_PATH) AND (DEFINED ENV{FREERTOS_PATH})) - set(FREERTOS_PATH $ENV{FREERTOS_PATH} CACHE PATH "Path to FreeRTOS") - message(STATUS "ENV FREERTOS_PATH specified, using FREERTOS_PATH: ${FREERTOS_PATH}") -endif() - -if(NOT FREERTOS_PATH) - set(DEFAULT_FREERTOS_PATH "/opt/FreeRTOS") - if(EXISTS ${DEFAULT_FREERTOS_PATH}) - set(FREERTOS_PATH ${DEFAULT_FREERTOS_PATH} CACHE PATH "Path to FreeRTOS") - message(STATUS "No FREERTOS_PATH specified using default: ${DEFAULT_FREERTOS_PATH}") - else() - message(STATUS - "No FreeRTOS folder found at default location ${DEFAULT_FREERTOS_PATH}. " - "Leaving empty.." - ) - endif() -endif() - -if(STM32H7 IN_LIST FreeRTOS_FIND_COMPONENTS) - list(REMOVE_ITEM FreeRTOS_FIND_COMPONENTS STM32H7) - list(APPEND FreeRTOS_FIND_COMPONENTS STM32H7_M7 STM32H7_M4) -endif() - -if(STM32WB IN_LIST BSP_FIND_COMPONENTS) - list(REMOVE_ITEM FreeRTOS_FIND_COMPONENTS STM32WB) - list(APPEND FreeRTOS_FIND_COMPONENTS STM32WB_M4) -endif() - -if(STM32WL IN_LIST BSP_FIND_COMPONENTS) - list(REMOVE_ITEM FreeRTOS_FIND_COMPONENTS STM32WL) - list(APPEND FreeRTOS_FIND_COMPONENTS STM32WL_M4 STM32WL_M0PLUS) -endif() - -# This section fills the family and ports components list -foreach(COMP ${FreeRTOS_FIND_COMPONENTS}) - string(TOUPPER ${COMP} COMP) - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" FAMILY_COMP ${COMP}) - # Valid family component, so add it (e.g. STM32H7) - if(CMAKE_MATCH_1) - list(APPEND FreeRTOS_FIND_COMPONENTS_FAMILIES ${FAMILY_COMP}) - continue() - endif() - # Was not a family component, so add it to the port list - list(APPEND FreeRTOS_FIND_COMPONENTS_PORTS ${COMP}) -endforeach() - -if(NOT FreeRTOS_FIND_COMPONENTS_PORTS) - set(FreeRTOS_FIND_COMPONENTS_PORTS ${FreeRTOS_PORTS}) -endif() - -list(REMOVE_DUPLICATES FreeRTOS_FIND_COMPONENTS) -list(REMOVE_DUPLICATES FreeRTOS_FIND_COMPONENTS_PORTS) -list(REMOVE_DUPLICATES FreeRTOS_FIND_COMPONENTS_FAMILIES) - -set(FreeRTOS_HEAPS 1 2 3 4 5) - -macro(stm32_find_freertos FreeRTOS_NAMESPACE FREERTOS_PATH) - find_path(FreeRTOS_COMMON_INCLUDE - NAMES FreeRTOS.h - PATHS "${FREERTOS_PATH}" "${FREERTOS_PATH}/FreeRTOS" - PATH_SUFFIXES "Source/include" "include" - NO_DEFAULT_PATH - ) - - if(NOT FreeRTOS_COMMON_INCLUDE) - message(WARNING "FreeRTOS common include path not found, build might fail") - endif() - - list(APPEND FreeRTOS_INCLUDE_DIRS "${FreeRTOS_COMMON_INCLUDE}") - - find_path(FreeRTOS_SOURCE_DIR - NAMES tasks.c - PATHS "${FREERTOS_PATH}" "${FREERTOS_PATH}/FreeRTOS" - PATH_SUFFIXES "Source" - NO_DEFAULT_PATH - ) - if(NOT (TARGET FreeRTOS)) - add_library(FreeRTOS INTERFACE IMPORTED) - target_sources(FreeRTOS INTERFACE - "${FreeRTOS_SOURCE_DIR}/tasks.c" - "${FreeRTOS_SOURCE_DIR}/list.c" - "${FreeRTOS_SOURCE_DIR}/queue.c" - ) - target_include_directories(FreeRTOS INTERFACE "${FreeRTOS_COMMON_INCLUDE}") - endif() - - if(NOT (TARGET ${FreeRTOS_NAMESPACE}::Coroutine)) - add_library(${FreeRTOS_NAMESPACE}::Coroutine INTERFACE IMPORTED) - target_sources(${FreeRTOS_NAMESPACE}::Coroutine INTERFACE "${FreeRTOS_SOURCE_DIR}/croutine.c") - target_link_libraries(${FreeRTOS_NAMESPACE}::Coroutine INTERFACE FreeRTOS) - endif() - - if(NOT (TARGET ${FreeRTOS_NAMESPACE}::EventGroups)) - add_library(${FreeRTOS_NAMESPACE}::EventGroups INTERFACE IMPORTED) - target_sources(${FreeRTOS_NAMESPACE}::EventGroups INTERFACE "${FreeRTOS_SOURCE_DIR}/event_groups.c") - target_link_libraries(${FreeRTOS_NAMESPACE}::EventGroups INTERFACE FreeRTOS) - endif() - - if(NOT (TARGET ${FreeRTOS_NAMESPACE}::StreamBuffer)) - add_library(${FreeRTOS_NAMESPACE}::StreamBuffer INTERFACE IMPORTED) - target_sources(${FreeRTOS_NAMESPACE}::StreamBuffer INTERFACE "${FreeRTOS_SOURCE_DIR}/stream_buffer.c") - target_link_libraries(${FreeRTOS_NAMESPACE}::StreamBuffer INTERFACE FreeRTOS) - endif() - - if(NOT (TARGET ${FreeRTOS_NAMESPACE}::Timers)) - add_library(${FreeRTOS_NAMESPACE}::Timers INTERFACE IMPORTED) - target_sources(${FreeRTOS_NAMESPACE}::Timers INTERFACE "${FreeRTOS_SOURCE_DIR}/timers.c") - target_link_libraries(${FreeRTOS_NAMESPACE}::Timers INTERFACE FreeRTOS) - endif() - - foreach(HEAP ${FreeRTOS_HEAPS}) - if(NOT (TARGET ${FreeRTOS_NAMESPACE}::Heap::${HEAP})) - add_library(${FreeRTOS_NAMESPACE}::Heap::${HEAP} INTERFACE IMPORTED) - target_sources(${FreeRTOS_NAMESPACE}::Heap::${HEAP} INTERFACE "${FreeRTOS_SOURCE_DIR}/portable/MemMang/heap_${HEAP}.c") - target_link_libraries(${FreeRTOS_NAMESPACE}::Heap::${HEAP} INTERFACE FreeRTOS) - endif() - endforeach() - - foreach(PORT ${FreeRTOS_FIND_COMPONENTS_PORTS}) - if(${PORT} IN_LIST FreeRTOS_armv8_trustZone_PORTS) - set(ARMv8_NON_SECURE "::NON_SECURE") - endif() - - find_path(FreeRTOS_${PORT}_PATH - NAMES portmacro.h - PATHS "${FREERTOS_PATH}" "${FREERTOS_PATH}/FreeRTOS" - PATH_SUFFIXES - "portable/GCC/${PORT}" - "portable/GCC/${PORT}/r0p1" - "portable/GCC/${PORT}/non_secure" - "Source/portable/GCC/${PORT}" - "Source/portable/GCC/${PORT}/r0p1" - "Source/portable/GCC/${PORT}/non_secure" - NO_DEFAULT_PATH - ) - - if(NOT FreeRTOS_${PORT}_PATH) - message(WARNING "FreeRTOS port path not found, build might fail") - endif() - - list(APPEND FreeRTOS_INCLUDE_DIRS "${FreeRTOS_${PORT}_PATH}") - - find_file(FreeRTOS_${PORT}_SOURCE - NAMES port.c - PATHS "${FreeRTOS_${PORT}_PATH}" - NO_DEFAULT_PATH - ) - if(NOT (TARGET ${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE})) - add_library(${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE} INTERFACE IMPORTED) - target_link_libraries(${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE} INTERFACE FreeRTOS) - target_sources(${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE} INTERFACE "${FreeRTOS_${PORT}_SOURCE}") - target_include_directories(${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE} INTERFACE "${FreeRTOS_${PORT}_PATH}") - message(trace "FindFreeRTOS: creating target ${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE}") - - # armv8-m needs additional file even if using "No Trust Zone" port - if(${PORT} IN_LIST FreeRTOS_armv8_PORTS) - target_sources(${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE} INTERFACE "${FreeRTOS_${PORT}_PATH}/portasm.c") - endif() - - if(${PORT} IN_LIST FreeRTOS_armv8_trustZone_PORTS) - # create the secure target - add_library(${FreeRTOS_NAMESPACE}::${PORT}::SECURE INTERFACE IMPORTED) - # ::SECURE doesn't link FreeRTOS like ::NON_SECURE does - target_sources(${FreeRTOS_NAMESPACE}::${PORT}::SECURE INTERFACE "${FreeRTOS_${PORT}_PATH}/../secure/secure_context.c" - "${FreeRTOS_${PORT}_PATH}/../secure/secure_context_port.c" - "${FreeRTOS_${PORT}_PATH}/../secure/secure_heap.c" - "${FreeRTOS_${PORT}_PATH}/../secure/secure_init.c") - message(trace "FindFreeRTOS: creating target ${FreeRTOS_NAMESPACE}::${PORT}::SECURE") - - # non-secure part needs declaratation from secure includes - target_include_directories(${FreeRTOS_NAMESPACE}::${PORT}${ARMv8_NON_SECURE} INTERFACE "${FreeRTOS_${PORT}_PATH}/../secure") - # secure part needs declaratation from non-secure includes and common freeRTOS includes - target_include_directories(${FreeRTOS_NAMESPACE}::${PORT}::SECURE INTERFACE "${FreeRTOS_${PORT}_PATH}" - "${FreeRTOS_COMMON_INCLUDE}") - endif() - endif() - - if(FreeRTOS_${PORT}_PATH AND - FreeRTOS_${PORT}_SOURCE AND - FreeRTOS_COMMON_INCLUDE AND - FreeRTOS_SOURCE_DIR) - set(FreeRTOS_${PORT}_FOUND TRUE) - else() - set(FreeRTOS_${PORT}_FOUND FALSE) - endif() - endforeach() -endmacro() - -message(STATUS "Search for FreeRTOS ports: ${FreeRTOS_FIND_COMPONENTS_PORTS}") - -if(NOT FreeRTOS_FIND_COMPONENTS_FAMILIES) - stm32_find_freertos(FreeRTOS ${FREERTOS_PATH}) -else() - message(STATUS "Search for FreeRTOS families: ${FreeRTOS_FIND_COMPONENTS_FAMILIES}") - - foreach(COMP ${FreeRTOS_FIND_COMPONENTS_FAMILIES}) - string(TOLOWER ${COMP} COMP_L) - string(TOUPPER ${COMP} COMP) - - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP ${COMP}) - - if((NOT CMAKE_MATCH_1) AND (NOT CMAKE_MATCH_2)) - message(FATAL_ERROR "Unknown FreeRTOS component: ${COMP}") - endif() - - if(CMAKE_MATCH_2) - set(FAMILY ${CMAKE_MATCH_1}) - set(STM_DEVICES "${CMAKE_MATCH_1}${CMAKE_MATCH_2}") - else() - set(FAMILY ${CMAKE_MATCH_1}) - stm32_get_devices_by_family(STM_DEVICES FAMILY ${FAMILY}) - endif() - - if(CMAKE_MATCH_3) - set(CORE ${CMAKE_MATCH_3}) - set(CORE_C "::${CORE}") - set(CORE_U "_${CORE}") - else() - unset(CORE) - unset(CORE_C) - unset(CORE_U) - endif() - - string(TOLOWER ${FAMILY} FAMILY_L) - if(NOT STM32_CUBE_${FAMILY}_PATH) - set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}") - message(STATUS "Did not specify STM32_CMSIS_${FAMILY}_PATH, using default STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}") - endif() - - stm32_find_freertos(FreeRTOS::STM32::${FAMILY}${CORE_C} ${STM32_CUBE_${FAMILY}_PATH}/Middlewares/Third_Party/FreeRTOS) - foreach(PORT_COMP ${FreeRTOS_FIND_COMPONENTS_PORTS}) - if(FreeRTOS_${PORT_COMP}_PATH AND - FreeRTOS_${PORT_COMP}_SOURCE AND - FreeRTOS_COMMON_INCLUDE AND - FreeRTOS_SOURCE_DIR) - set(FreeRTOS_${COMP}_FOUND TRUE) - else() - set(FreeRTOS_${COMP}_FOUND FALSE) - endif() - endforeach() - endforeach() -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(FreeRTOS - REQUIRED_VARS FreeRTOS_INCLUDE_DIRS - FOUND_VAR FreeRTOS_FOUND - HANDLE_COMPONENTS -) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindHAL.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindHAL.cmake deleted file mode 100644 index d275b4e61e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/FindHAL.cmake +++ /dev/null @@ -1,316 +0,0 @@ -# For information about why and how of this file: https://cmake.org/cmake/help/latest/command/find_package.html - -# This function gets a list of hal_driver using a given prefix and suffix -# -# out_list_hal_drivers list of hal_drivers found -# hal_drivers_path path to the hal's drivers -# hal_driver_type hal_driver type to find (hal/ll/ex) -function(get_list_hal_drivers out_list_hal_drivers hal_drivers_path hal_driver_type) - #The pattern to retrieve a driver from a file name depends on the hal_driver_type field - if(${hal_driver_type} STREQUAL "hal" OR ${hal_driver_type} STREQUAL "ll") - #This regex match and capture a driver type (stm32xx_hal_(rcc).c or stm32xx_ll_(rcc).c => catches rcc) - set(file_pattern ".+_${hal_driver_type}_([a-z0-9]+)\\.c$") - elseif(${hal_driver_type} STREQUAL "ex") - #This regex match and capture a driver type (stm32xx_hal_(rcc)_ex.c => catches rcc) - set(file_pattern ".+_hal_([a-z0-9]+)_ex\\.c$") - else() - message(FATAL_ERROR "the inputed hal_driver_type(${hal_driver_type}) is not valid.") - endif() - - #Retrieving all the .c files from hal_drivers_path - file(GLOB filtered_files - RELATIVE "${hal_drivers_path}/Src" - "${hal_drivers_path}/Src/*.c") - # For all matched .c files keep only those with a driver name pattern (e.g. stm32xx_hal_rcc.c) - list(FILTER filtered_files INCLUDE REGEX ${file_pattern}) - # From the files names keep only the driver type part using the regex (stm32xx_hal_(rcc).c or stm32xx_ll_(rcc).c => catches rcc) - list(TRANSFORM filtered_files REPLACE ${file_pattern} "\\1") - #Making a return by reference by seting the output variable to PARENT_SCOPE - set(${out_list_hal_drivers} ${filtered_files} PARENT_SCOPE) -endfunction() - -################################################################################ -# Checking the parameters provided to the find_package(HAL ...) call -# The expected parameters are families and or drivers in *any orders* -# Families are valid if on the list of known families. -# Drivers are valid if on the list of valid driver of any family. For this -# reason the requested families must be processed in two steps -# - Step 1 : Checking all the requested families -# - Step 2 : Generating all the valid drivers from requested families -# - Step 3 : Checking the other requested components (Expected to be drivers) -################################################################################ -# Step 1 : Checking all the requested families -foreach(COMP ${HAL_FIND_COMPONENTS}) - string(TOUPPER ${COMP} COMP_U) - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP_U ${COMP_U}) - if(CMAKE_MATCH_1) #Matches the family part of the provided STM32[..] component - list(APPEND HAL_FIND_COMPONENTS_FAMILIES ${COMP}) - message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_FAMILIES") - else() - list(APPEND HAL_FIND_COMPONENTS_UNHANDLED ${COMP}) - endif() -endforeach() - -# If no family requested look for all families -if(NOT HAL_FIND_COMPONENTS_FAMILIES) - set(HAL_FIND_COMPONENTS_FAMILIES ${STM32_SUPPORTED_FAMILIES_LONG_NAME}) -endif() - -# Step 2 : Generating all the valid drivers from requested families -foreach(family_comp ${HAL_FIND_COMPONENTS_FAMILIES}) - string(TOUPPER ${family_comp} family_comp) - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" family_comp ${family_comp}) - if(CMAKE_MATCH_1) #Matches the family part of the provided STM32[..] component - set(FAMILY ${CMAKE_MATCH_1}) - string(TOLOWER ${FAMILY} FAMILY_L) - endif() - find_path(HAL_${FAMILY}_PATH - NAMES Inc/stm32${FAMILY_L}xx_hal.h - PATHS "${STM32_HAL_${FAMILY}_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/STM32${FAMILY}xx_HAL_Driver" - NO_DEFAULT_PATH - ) - if(NOT HAL_${FAMILY}_PATH) - message(FATAL_ERROR "could not find HAL for family ${FAMILY}") - else() - set(HAL_${family_comp}_FOUND TRUE) - endif() - if(CMAKE_MATCH_1) #Matches the family part of the provided STM32[..] component - get_list_hal_drivers(HAL_DRIVERS_${FAMILY} ${HAL_${FAMILY}_PATH} "hal") - get_list_hal_drivers(HAL_EX_DRIVERS_${FAMILY} ${HAL_${FAMILY}_PATH} "ex") - get_list_hal_drivers(HAL_LL_DRIVERS_${FAMILY} ${HAL_${FAMILY}_PATH} "ll") - list(APPEND HAL_DRIVERS ${HAL_DRIVERS_${FAMILY}}) - list(APPEND HAL_LL_DRIVERS ${HAL_LL_DRIVERS_${FAMILY}}) - else() - endif() -endforeach() -list(REMOVE_DUPLICATES HAL_DRIVERS) -list(REMOVE_DUPLICATES HAL_LL_DRIVERS) - -# Step 3 : Checking the other requested components (Expected to be drivers) -foreach(COMP ${HAL_FIND_COMPONENTS_UNHANDLED}) - string(TOLOWER ${COMP} COMP_L) - - if(${COMP_L} IN_LIST HAL_DRIVERS) - list(APPEND HAL_FIND_COMPONENTS_DRIVERS ${COMP}) - message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_DRIVERS") - continue() - endif() - string(REGEX REPLACE "^ll_" "" COMP_L ${COMP_L}) - if(${COMP_L} IN_LIST HAL_LL_DRIVERS) - list(APPEND HAL_FIND_COMPONENTS_DRIVERS_LL ${COMP}) - message(TRACE "FindHAL: append COMP ${COMP} to HAL_FIND_COMPONENTS_DRIVERS_LL") - continue() - endif() - message(FATAL_ERROR "FindHAL: unknown HAL component: ${COMP}") -endforeach() - - -if(STM32H7 IN_LIST HAL_FIND_COMPONENTS_FAMILIES) - list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32H7) - list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32H7_M7 STM32H7_M4) -endif() - -if(STM32WB IN_LIST HAL_FIND_COMPONENTS_FAMILIES) - list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32WB) - list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32WB_M4) -endif() - -if(STM32WL IN_LIST HAL_FIND_COMPONENTS_FAMILIES) - list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32WL) - list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32WL_M4 STM32WL_M0PLUS) -endif() - -if(STM32MP1 IN_LIST HAL_FIND_COMPONENTS_FAMILIES) - list(REMOVE_ITEM HAL_FIND_COMPONENTS_FAMILIES STM32MP1) - list(APPEND HAL_FIND_COMPONENTS_FAMILIES STM32MP1_M4) -endif() - -list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_FAMILIES) - -# when no explicit driver and driver_ll is given to find_component(HAL ) -# then search for all supported driver and driver_ll -if((NOT HAL_FIND_COMPONENTS_DRIVERS) AND (NOT HAL_FIND_COMPONENTS_DRIVERS_LL)) - set(HAL_FIND_COMPONENTS_DRIVERS ${HAL_DRIVERS}) - set(HAL_FIND_COMPONENTS_DRIVERS_LL ${HAL_LL_DRIVERS}) -endif() -list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_DRIVERS) -list(REMOVE_DUPLICATES HAL_FIND_COMPONENTS_DRIVERS_LL) - -message(STATUS "Search for HAL families: ${HAL_FIND_COMPONENTS_FAMILIES}") -message(STATUS "Search for HAL drivers: ${HAL_FIND_COMPONENTS_DRIVERS}") -message(STATUS "Search for HAL LL drivers: ${HAL_FIND_COMPONENTS_DRIVERS_LL}") - -foreach(COMP ${HAL_FIND_COMPONENTS_FAMILIES}) - string(TOUPPER ${COMP} COMP_U) - - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z])?_?(M0PLUS|M4|M7)?.*$" COMP_U ${COMP_U}) - if(CMAKE_MATCH_3) - set(CORE ${CMAKE_MATCH_3}) - set(CORE_C "::${CORE}") - set(CORE_U "_${CORE}") - else() - unset(CORE) - unset(CORE_C) - unset(CORE_U) - endif() - - set(FAMILY ${CMAKE_MATCH_1}) - string(TOLOWER ${FAMILY} FAMILY_L) - - if((NOT STM32_HAL_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH) AND (DEFINED ENV{STM32_CUBE_${FAMILY}_PATH})) - set(STM32_CUBE_${FAMILY}_PATH $ENV{STM32_CUBE_${FAMILY}_PATH} CACHE PATH "Path to STM32Cube${FAMILY}") - message(STATUS "ENV STM32_CUBE_${FAMILY}_PATH specified, using STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}") - endif() - - if((NOT STM32_HAL_${FAMILY}_PATH) AND (NOT STM32_CUBE_${FAMILY}_PATH)) - set(STM32_CUBE_${FAMILY}_PATH /opt/STM32Cube${FAMILY} CACHE PATH "Path to STM32Cube${FAMILY}") - message(STATUS "Neither STM32_CUBE_${FAMILY}_PATH nor STM32_HAL_${FAMILY}_PATH specified using default STM32_CUBE_${FAMILY}_PATH: ${STM32_CUBE_${FAMILY}_PATH}") - endif() - - #Checking HAL patch or release version - unset(VERSION_INFO) - find_file(PACKAGE_FILE NAMES package.xml PATHS ${STM32_CUBE_${FAMILY}_PATH}) - if(PACKAGE_FILE) - file(READ ${PACKAGE_FILE} PACKAGE_FILE_CONTENT) - string(REGEX MATCH "PackDescription Release=\"FW.${FAMILY}.([0-9.]+)\"( Patch=\"FW.${FAMILY}.([0-9.]+)\")?" VERSION_INFO ${PACKAGE_FILE_CONTENT}) - if(CMAKE_MATCH_3) # This is the "Patch" revision - set(HAL_${COMP}_VERSION ${CMAKE_MATCH_3}) - set(HAL_VERSION ${CMAKE_MATCH_3}) - else(CMAKE_MATCH_1) #This is the "Release" version - set(HAL_${COMP}_VERSION ${CMAKE_MATCH_1}) - set(HAL_VERSION ${CMAKE_MATCH_1}) - endif() - endif() - if(NOT VERSION_INFO) - message(STATUS "Could not read the HAL version from package.xml for ${COMP}") - endif() - - find_path(HAL_${FAMILY}_PATH - NAMES Inc/stm32${FAMILY_L}xx_hal.h - PATHS "${STM32_HAL_${FAMILY}_PATH}" "${STM32_CUBE_${FAMILY}_PATH}/Drivers/STM32${FAMILY}xx_HAL_Driver" - NO_DEFAULT_PATH - ) - if (NOT HAL_${FAMILY}_PATH) - message(DEBUG "Missing HAL_${FAMILY}_PATH path") - continue() - endif() - - find_path(HAL_${FAMILY}${CORE_U}_INCLUDE - NAMES stm32${FAMILY_L}xx_hal.h - PATHS "${HAL_${FAMILY}_PATH}/Inc" - NO_DEFAULT_PATH - ) - find_file(HAL_${FAMILY}${CORE_U}_SOURCE - NAMES stm32${FAMILY_L}xx_hal.c - PATHS "${HAL_${FAMILY}_PATH}/Src" - NO_DEFAULT_PATH - ) - - if ((NOT HAL_${FAMILY}${CORE_U}_INCLUDE) OR (NOT HAL_${FAMILY}${CORE_U}_SOURCE)) - set(HAL_${COMP}_FOUND FALSE) - message(DEBUG "FindHAL: did not find path to HAL /src or /inc dir") - continue() - endif() - - if(NOT (TARGET HAL::STM32::${FAMILY}${CORE_C})) - message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}") - add_library(HAL::STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED) - target_link_libraries(HAL::STM32::${FAMILY}${CORE_C} INTERFACE - STM32::${FAMILY}${CORE_C} - CMSIS::STM32::${FAMILY}${CORE_C}) - target_include_directories(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}") - target_sources(HAL::STM32::${FAMILY}${CORE_C} INTERFACE "${HAL_${FAMILY}${CORE_U}_SOURCE}") - endif() - - foreach(DRV_COMP ${HAL_FIND_COMPONENTS_DRIVERS}) - string(TOLOWER ${DRV_COMP} DRV_L) - string(TOUPPER ${DRV_COMP} DRV) - - if(NOT (DRV_L IN_LIST HAL_DRIVERS_${FAMILY})) - continue() - endif() - - find_file(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE - NAMES stm32${FAMILY_L}xx_hal_${DRV_L}.c - PATHS "${HAL_${FAMILY}_PATH}/Src" - NO_DEFAULT_PATH - ) - list(APPEND HAL_${FAMILY}${CORE_U}_SOURCES "${HAL_${FAMILY}_${DRV}_SOURCE}") - if(NOT HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE) - message(WARNING "Cannot find ${DRV} driver for ${FAMILY}${CORE_U}") - set(HAL_${DRV_COMP}_FOUND FALSE) - continue() - endif() - - set(HAL_${DRV_COMP}_FOUND TRUE) - if(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}::${DRV}))) - message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::${DRV}") - add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE IMPORTED) - target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE HAL::STM32::${FAMILY}${CORE_C}) - target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE}") - endif() - - if(HAL_${FAMILY}${CORE_U}_${DRV}_SOURCE AND (${DRV_L} IN_LIST HAL_EX_DRIVERS_${FAMILY})) - find_file(HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE - NAMES stm32${FAMILY_L}xx_hal_${DRV_L}_ex.c - PATHS "${HAL_${FAMILY}_PATH}/Src" - NO_DEFAULT_PATH - ) - list(APPEND HAL_${FAMILY}${CORE_U}_SOURCES "${HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE}") - if(NOT HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE) - message(WARNING "Cannot find ${DRV}Ex driver for ${FAMILY}${CORE_U}") - endif() - - if((TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}) AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex))) - message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex") - add_library(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE IMPORTED) - target_link_libraries(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE HAL::STM32::${FAMILY}${CORE_C}::${DRV}) - target_sources(HAL::STM32::${FAMILY}${CORE_C}::${DRV}Ex INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_EX_SOURCE}") - endif() - endif() - endforeach() - - foreach(DRV_COMP ${HAL_FIND_COMPONENTS_DRIVERS_LL}) - string(TOLOWER ${DRV_COMP} DRV_L) - string(REGEX REPLACE "^ll_" "" DRV_L ${DRV_L}) - string(TOUPPER ${DRV_L} DRV) - - if(NOT (DRV_L IN_LIST HAL_LL_DRIVERS_${FAMILY})) - continue() - endif() - - find_file(HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE - NAMES stm32${FAMILY_L}xx_ll_${DRV_L}.c - PATHS "${HAL_${FAMILY}_PATH}/Src" - NO_DEFAULT_PATH - ) - list(APPEND HAL_${FAMILY}${CORE_U}_SOURCES "${HAL_${FAMILY}_${DRV}_LL_SOURCE}") - if(NOT HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE) - message(WARNING "Cannot find LL_${DRV} driver for ${FAMILY}${CORE_U}") - set(HAL_${DRV_COMP}_FOUND FALSE) - continue() - endif() - - set(HAL_${DRV_COMP}_FOUND TRUE) - if(HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE AND (NOT (TARGET HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV}))) - message(TRACE "FindHAL: creating library HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV}") - add_library(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE IMPORTED) - target_include_directories(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_INCLUDE}") - target_sources(HAL::STM32::${FAMILY}${CORE_C}::LL_${DRV} INTERFACE "${HAL_${FAMILY}${CORE_U}_${DRV}_LL_SOURCE}") - endif() - endforeach() - - set(HAL_${COMP}_FOUND TRUE) - list(APPEND HAL_INCLUDE_DIRS "${HAL_${FAMILY}${CORE_U}_INCLUDE}") - list(APPEND HAL_SOURCES "${HAL_${FAMILY}${CORE_U}_SOURCES}") -endforeach() - -list(REMOVE_DUPLICATES HAL_INCLUDE_DIRS) -list(REMOVE_DUPLICATES HAL_SOURCES) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(HAL - REQUIRED_VARS HAL_INCLUDE_DIRS HAL_SOURCES - FOUND_VAR HAL_FOUND - HANDLE_COMPONENTS -) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/c0.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/c0.cmake deleted file mode 100644 index 28aa096cfd..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/c0.cmake +++ /dev/null @@ -1,51 +0,0 @@ -set(STM32_C0_TYPES - C011xx - C031xx -) -set(STM32_C0_TYPE_MATCH - "C011.[46]" - "C031.[46]" -) -set(STM32_C0_RAM_SIZES - 6K - 12K -) -set(STM32_C0_CCRAM_SIZES - 0K - 0K -) - -stm32_util_create_family_targets(C0) - -target_compile_options(STM32::C0 INTERFACE - -mcpu=cortex-m0plus -) -target_link_options(STM32::C0 INTERFACE - -mcpu=cortex-m0plus -) - -list(APPEND STM32_ALL_DEVICES - C011D6 - C011F4 - C011F6 - C011J4 - C011J6 - C031C4 - C031C6 - C031F4 - C031F6 - C031G4 - C031G6 - C031K4 - C031K6 -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32C0 -) - -list(APPEND STM32_FETCH_FAMILIES C0) - -set(CUBE_C0_VERSION v1.1.0) -set(CMSIS_C0_VERSION v1.1.0) -set(HAL_C0_VERSION v1.1.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/common.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/common.cmake deleted file mode 100644 index d5b60146dc..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/common.cmake +++ /dev/null @@ -1,373 +0,0 @@ -include(stm32/devices) - -foreach(FAMILY ${STM32_SUPPORTED_FAMILIES_LONG_NAME}) - # append short names (F0, F1, H7_M4, ...) to STM32_SUPPORTED_FAMILIES_SHORT_NAME - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])_?(M0PLUS|M4|M7)?" FAMILY ${FAMILY}) - list(APPEND STM32_SUPPORTED_FAMILIES_SHORT_NAME ${CMAKE_MATCH_1}) -endforeach() -list(REMOVE_DUPLICATES STM32_SUPPORTED_FAMILIES_SHORT_NAME) - -if(NOT STM32_TOOLCHAIN_PATH) - if(DEFINED ENV{STM32_TOOLCHAIN_PATH}) - message(STATUS "Detected toolchain path STM32_TOOLCHAIN_PATH in environmental variables: ") - message(STATUS "$ENV{STM32_TOOLCHAIN_PATH}") - set(STM32_TOOLCHAIN_PATH $ENV{STM32_TOOLCHAIN_PATH}) - else() - if(NOT CMAKE_C_COMPILER) - set(STM32_TOOLCHAIN_PATH "/usr") - message(STATUS "No STM32_TOOLCHAIN_PATH specified, using default: " ${STM32_TOOLCHAIN_PATH}) - else() - # keep only directory of compiler - get_filename_component(STM32_TOOLCHAIN_PATH ${CMAKE_C_COMPILER} DIRECTORY) - # remove the last /bin directory - get_filename_component(STM32_TOOLCHAIN_PATH ${STM32_TOOLCHAIN_PATH} DIRECTORY) - endif() - endif() - file(TO_CMAKE_PATH "${STM32_TOOLCHAIN_PATH}" STM32_TOOLCHAIN_PATH) -endif() - -if(NOT STM32_TARGET_TRIPLET) - if(DEFINED ENV{STM32_TARGET_TRIPLET}) - message(STATUS "Detected target triplet STM32_TARGET_TRIPLET in environmental variables: ") - message(STATUS "$ENV{STM32_TARGET_TRIPLET}") - set(STM32_TARGET_TRIPLET $ENV{STM32_TARGET_TRIPLET}) - else() - set(STM32_TARGET_TRIPLET "arm-none-eabi") - message(STATUS "No STM32_TARGET_TRIPLET specified, using default: " ${STM32_TARGET_TRIPLET}) - endif() -endif() - -set(CMAKE_SYSTEM_NAME Generic) -set(CMAKE_SYSTEM_PROCESSOR arm) - -set(TOOLCHAIN_SYSROOT "${STM32_TOOLCHAIN_PATH}/${STM32_TARGET_TRIPLET}") -set(TOOLCHAIN_BIN_PATH "${STM32_TOOLCHAIN_PATH}/bin") -set(TOOLCHAIN_INC_PATH "${STM32_TOOLCHAIN_PATH}/${STM32_TARGET_TRIPLET}/include") -set(TOOLCHAIN_LIB_PATH "${STM32_TOOLCHAIN_PATH}/${STM32_TARGET_TRIPLET}/lib") - -set(CMAKE_SYSROOT ${TOOLCHAIN_SYSROOT}) - -find_program(CMAKE_OBJCOPY NAMES ${STM32_TARGET_TRIPLET}-objcopy HINTS ${TOOLCHAIN_BIN_PATH}) -find_program(CMAKE_OBJDUMP NAMES ${STM32_TARGET_TRIPLET}-objdump HINTS ${TOOLCHAIN_BIN_PATH}) -find_program(CMAKE_SIZE NAMES ${STM32_TARGET_TRIPLET}-size HINTS ${TOOLCHAIN_BIN_PATH}) -find_program(CMAKE_DEBUGGER NAMES ${STM32_TARGET_TRIPLET}-gdb HINTS ${TOOLCHAIN_BIN_PATH}) -find_program(CMAKE_CPPFILT NAMES ${STM32_TARGET_TRIPLET}-c++filt HINTS ${TOOLCHAIN_BIN_PATH}) - -# This function adds a target with name '${TARGET}_always_display_size'. The new -# target builds a TARGET and then calls the program defined in CMAKE_SIZE to -# display the size of the final ELF. -function(stm32_print_size_of_target TARGET) - add_custom_target(${TARGET}_always_display_size - ALL COMMAND ${CMAKE_SIZE} "$" - COMMENT "Target Sizes: " - DEPENDS ${TARGET} - ) -endfunction() - -# This function calls the objcopy program defined in CMAKE_OBJCOPY to generate -# file with object format specified in OBJCOPY_BFD_OUTPUT. -# The generated file has the name of the target output but with extension -# corresponding to the OUTPUT_EXTENSION argument value. -# The generated file will be placed in the same directory as the target output file. -function(_stm32_generate_file TARGET OUTPUT_EXTENSION OBJCOPY_BFD_OUTPUT) - get_target_property(TARGET_OUTPUT_NAME ${TARGET} OUTPUT_NAME) - if (TARGET_OUTPUT_NAME) - set(OUTPUT_FILE_NAME "${TARGET_OUTPUT_NAME}.${OUTPUT_EXTENSION}") - else() - set(OUTPUT_FILE_NAME "${TARGET}.${OUTPUT_EXTENSION}") - endif() - - get_target_property(RUNTIME_OUTPUT_DIRECTORY ${TARGET} RUNTIME_OUTPUT_DIRECTORY) - if(RUNTIME_OUTPUT_DIRECTORY) - set(OUTPUT_FILE_PATH "${RUNTIME_OUTPUT_DIRECTORY}/${OUTPUT_FILE_NAME}") - else() - set(OUTPUT_FILE_PATH "${OUTPUT_FILE_NAME}") - endif() - - add_custom_command( - TARGET ${TARGET} - POST_BUILD - COMMAND ${CMAKE_OBJCOPY} -O ${OBJCOPY_BFD_OUTPUT} "$" ${OUTPUT_FILE_PATH} - BYPRODUCTS ${OUTPUT_FILE_PATH} - COMMENT "Generating ${OBJCOPY_BFD_OUTPUT} file ${OUTPUT_FILE_NAME}" - ) -endfunction() - -# This function adds post-build generation of the binary file from the target ELF. -# The generated file will be placed in the same directory as the ELF file. -function(stm32_generate_binary_file TARGET) - _stm32_generate_file(${TARGET} "bin" "binary") -endfunction() - -# This function adds post-build generation of the Motorola S-record file from the target ELF. -# The generated file will be placed in the same directory as the ELF file. -function(stm32_generate_srec_file TARGET) - _stm32_generate_file(${TARGET} "srec" "srec") -endfunction() - -# This function adds post-build generation of the Intel hex file from the target ELF. -# The generated file will be placed in the same directory as the ELF file. -function(stm32_generate_hex_file TARGET) - _stm32_generate_file(${TARGET} "hex" "ihex") -endfunction() - -# This function takes FAMILY (e.g. L4) and DEVICE (e.g. L496VG) to output TYPE (e.g. L496xx) -function(stm32_get_chip_type FAMILY DEVICE TYPE) - set(INDEX 0) - foreach(C_TYPE ${STM32_${FAMILY}_TYPES}) - list(GET STM32_${FAMILY}_TYPE_MATCH ${INDEX} REGEXP) - if(${DEVICE} MATCHES ${REGEXP}) - set(RESULT_TYPE ${C_TYPE}) - endif() - math(EXPR INDEX "${INDEX}+1") - endforeach() - if(NOT RESULT_TYPE) - message(FATAL_ERROR "Invalid/unsupported device: ${DEVICE}") - endif() - set(${TYPE} ${RESULT_TYPE} PARENT_SCOPE) -endfunction() - -function(stm32_get_chip_info CHIP) - set(ARG_OPTIONS "") - set(ARG_SINGLE FAMILY DEVICE TYPE) - set(ARG_MULTIPLE "") - cmake_parse_arguments(PARSE_ARGV 1 ARG "${ARG_OPTIONS}" "${ARG_SINGLE}" "${ARG_MULTIPLE}") - - string(TOUPPER ${CHIP} CHIP) - - string(REGEX MATCH "^STM32([CFGHLMUW]P?[0-9BL])([0-9A-Z][0-9M][A-Z][0-9A-Z]).*$" CHIP ${CHIP}) - - if((NOT CMAKE_MATCH_1) OR (NOT CMAKE_MATCH_2)) - message(FATAL_ERROR "Unknown chip ${CHIP}") - endif() - - set(STM32_FAMILY ${CMAKE_MATCH_1}) - set(STM32_DEVICE "${CMAKE_MATCH_1}${CMAKE_MATCH_2}") - - - if(NOT (${STM32_FAMILY} IN_LIST STM32_SUPPORTED_FAMILIES_SHORT_NAME)) - message(FATAL_ERROR "Unsupported family ${STM32_FAMILY} for device ${CHIP}") - endif() - - stm32_get_chip_type(${STM32_FAMILY} ${STM32_DEVICE} STM32_TYPE) - - if(ARG_FAMILY) - set(${ARG_FAMILY} ${STM32_FAMILY} PARENT_SCOPE) - endif() - if(ARG_DEVICE) - set(${ARG_DEVICE} ${STM32_DEVICE} PARENT_SCOPE) - endif() - if(ARG_TYPE) - set(${ARG_TYPE} ${STM32_TYPE} PARENT_SCOPE) - endif() -endfunction() - -function(stm32_get_cores CORES) - set(ARG_OPTIONS "") - set(ARG_SINGLE CHIP FAMILY DEVICE) - set(ARG_MULTIPLE "") - cmake_parse_arguments(PARSE_ARGV 1 ARG "${ARG_OPTIONS}" "${ARG_SINGLE}" "${ARG_MULTIPLE}") - - if(ARG_CHIP) - # TODO: I don't get why stm32_get_chip_info is called in stm32_get_cores - stm32_get_chip_info(${ARG_CHIP} FAMILY ARG_FAMILY TYPE ARG_TYPE DEVICE ARG_DEVICE) - elseif(ARG_FAMILY AND ARG_DEVICE) - # TODO: I don't get why stm32_get_chip_type is called in stm32_get_cores - stm32_get_chip_type(${ARG_FAMILY} ${ARG_DEVICE} ARG_TYPE) - elseif(ARG_FAMILY) - if(${ARG_FAMILY} STREQUAL "H7") - set(${CORES} M7 M4 PARENT_SCOPE) - elseif(${ARG_FAMILY} STREQUAL "WB") - set(${CORES} M4 PARENT_SCOPE) - elseif(${ARG_FAMILY} STREQUAL "WL") - set(${CORES} M4 M0PLUS PARENT_SCOPE) - elseif(${ARG_FAMILY} STREQUAL "MP1") - set(${CORES} M4 PARENT_SCOPE) - else() - set(${CORES} "" PARENT_SCOPE) - endif() - return() - else() - message(FATAL_ERROR "Either CHIP or FAMILY or FAMILY/DEVICE should be specified for stm32_get_cores()") - endif() - - # TODO following is the only part really used by FindCMSIS. Maybe a cleanup is needed - if(${ARG_FAMILY} STREQUAL "H7") - stm32h7_get_device_cores(${ARG_DEVICE} ${ARG_TYPE} CORE_LIST) - elseif(${ARG_FAMILY} STREQUAL "WB") - # note STM32WB have an M0 core but in current state of the art it runs ST stacks and is not needed/allowed to build for customer - set(CORE_LIST M4) - elseif(${ARG_FAMILY} STREQUAL "MP1") - set(CORE_LIST M4) - elseif(${ARG_FAMILY} STREQUAL "WL") - stm32wl_get_device_cores(${ARG_DEVICE} ${ARG_TYPE} CORE_LIST) - endif() - set(${CORES} "${CORE_LIST}" PARENT_SCOPE) -endfunction() - -function(stm32_get_memory_info) - set(ARG_OPTIONS FLASH RAM CCRAM STACK HEAP RAM_SHARE) - set(ARG_SINGLE CHIP FAMILY DEVICE CORE SIZE ORIGIN) - set(ARG_MULTIPLE "") - cmake_parse_arguments(INFO "${ARG_OPTIONS}" "${ARG_SINGLE}" "${ARG_MULTIPLE}" ${ARGN}) - - if((NOT INFO_CHIP) AND ((NOT INFO_FAMILY) OR (NOT INFO_DEVICE))) - message(FATAL_ERROR "Either CHIP or FAMILY/DEVICE is required for stm32_get_memory_info()") - endif() - - if(INFO_CHIP) - stm32_get_chip_info(${INFO_CHIP} FAMILY INFO_FAMILY TYPE INFO_TYPE DEVICE INFO_DEVICE) - else() - stm32_get_chip_type(${INFO_FAMILY} ${INFO_DEVICE} INFO_TYPE) - endif() - - string(REGEX REPLACE "^[CFGHLMUW]P?[0-9BL][0-9A-Z][0-9M].([3468ABCDEFGHIYZ])$" "\\1" SIZE_CODE ${INFO_DEVICE}) - - if(SIZE_CODE STREQUAL "3") - set(FLASH "8K") - elseif(SIZE_CODE STREQUAL "4") - set(FLASH "16K") - elseif(SIZE_CODE STREQUAL "6") - set(FLASH "32K") - elseif(SIZE_CODE STREQUAL "8") - set(FLASH "64K") - elseif(SIZE_CODE STREQUAL "B") - set(FLASH "128K") - elseif(SIZE_CODE STREQUAL "C") - set(FLASH "256K") - elseif(SIZE_CODE STREQUAL "D") - set(FLASH "384K") - elseif(SIZE_CODE STREQUAL "E") - set(FLASH "512K") - elseif(SIZE_CODE STREQUAL "F") - set(FLASH "768K") - elseif(SIZE_CODE STREQUAL "G") - set(FLASH "1024K") - elseif(SIZE_CODE STREQUAL "H") - set(FLASH "1536K") - elseif(SIZE_CODE STREQUAL "I") - set(FLASH "2048K") - elseif(SIZE_CODE STREQUAL "Y") - set(FLASH "640K") - elseif(SIZE_CODE STREQUAL "Z") - set(FLASH "192K") - else() - set(FLASH "16K") - message(WARNING "Unknow flash size for device ${DEVICE}. Set to ${FLASH}") - endif() - - list(FIND STM32_${INFO_FAMILY}_TYPES ${INFO_TYPE} TYPE_INDEX) - list(GET STM32_${INFO_FAMILY}_RAM_SIZES ${TYPE_INDEX} RAM) - list(GET STM32_${INFO_FAMILY}_CCRAM_SIZES ${TYPE_INDEX} CCRAM) - list(GET STM32_${INFO_FAMILY}_RAM_SHARE_SIZES ${TYPE_INDEX} RAM_SHARE) - set(FLASH_ORIGIN 0x8000000) - set(RAM_ORIGIN 0x20000000) - set(CCRAM_ORIGIN 0x10000000) - set(RAM_SHARE_ORIGIN 0x20030000) - - unset(TWO_FLASH_BANKS) - if(INFO_FAMILY STREQUAL "F1") - stm32f1_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} FLASH RAM) - elseif(INFO_FAMILY STREQUAL "L1") - stm32l1_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} FLASH RAM) - elseif(INFO_FAMILY STREQUAL "F2") - stm32f2_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} FLASH RAM) - elseif(INFO_FAMILY STREQUAL "F3") - stm32f3_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} FLASH RAM) - elseif(INFO_FAMILY STREQUAL "H7") - stm32h7_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} "${INFO_CORE}" RAM FLASH_ORIGIN RAM_ORIGIN TWO_FLASH_BANKS) - elseif(INFO_FAMILY STREQUAL "WL") - stm32wl_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} "${INFO_CORE}" RAM FLASH_ORIGIN RAM_ORIGIN TWO_FLASH_BANKS) - elseif(INFO_FAMILY STREQUAL "WB") - stm32wb_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} "${INFO_CORE}" RAM RAM_ORIGIN TWO_FLASH_BANKS) - elseif(INFO_FAMILY STREQUAL "MP1") - stm32mp1_get_memory_info(${INFO_DEVICE} ${INFO_TYPE} FLASH) - endif() - # when a device is dual core, each core uses half of total flash - if(TWO_FLASH_BANKS) - string(REGEX MATCH "([0-9]+)K" FLASH_KB ${FLASH}) - math(EXPR FLASH_KB "${CMAKE_MATCH_1} / 2") - set(FLASH "${FLASH_KB}K") - endif() - - if(INFO_FLASH) - set(SIZE ${FLASH}) - set(ORIGIN ${FLASH_ORIGIN}) - elseif(INFO_RAM) - set(SIZE ${RAM}) - set(ORIGIN ${RAM_ORIGIN}) - elseif(INFO_CCRAM) - set(SIZE ${CCRAM}) - set(ORIGIN ${CCRAM_ORIGIN}) - elseif(INFO_RAM_SHARE) - set(SIZE ${RAM_SHARE}) - set(ORIGIN ${RAM_SHARE_ORIGIN}) - elseif(INFO_STACK) - if (RAM STREQUAL "2K") - set(SIZE 0x200) - else() - set(SIZE 0x400) - endif() - set(ORIGIN ${RAM_ORIGIN}) #TODO: Real stack pointer? - elseif(INFO_HEAP) - if (RAM STREQUAL "2K") - set(SIZE 0x100) - else() - set(SIZE 0x200) - endif() - set(ORIGIN ${RAM_ORIGIN}) #TODO: Real heap pointer? - endif() - - if(INFO_SIZE) - set(${INFO_SIZE} ${SIZE} PARENT_SCOPE) - endif() - if(INFO_ORIGIN) - set(${INFO_ORIGIN} ${ORIGIN} PARENT_SCOPE) - endif() -endfunction() - -function(stm32_add_linker_script TARGET VISIBILITY SCRIPT) - get_filename_component(SCRIPT "${SCRIPT}" ABSOLUTE) - target_link_options(${TARGET} ${VISIBILITY} -T "${SCRIPT}") - - get_target_property(TARGET_TYPE ${TARGET} TYPE) - if(TARGET_TYPE STREQUAL "INTERFACE_LIBRARY") - set(INTERFACE_PREFIX "INTERFACE_") - endif() - - get_target_property(LINK_DEPENDS ${TARGET} ${INTERFACE_PREFIX}LINK_DEPENDS) - if(LINK_DEPENDS) - list(APPEND LINK_DEPENDS "${SCRIPT}") - else() - set(LINK_DEPENDS "${SCRIPT}") - endif() - - - set_target_properties(${TARGET} PROPERTIES ${INTERFACE_PREFIX}LINK_DEPENDS "${LINK_DEPENDS}") -endfunction() - -if(NOT (TARGET STM32::NoSys)) - add_library(STM32::NoSys INTERFACE IMPORTED) - target_compile_options(STM32::NoSys INTERFACE $<$:--specs=nosys.specs>) - target_link_options(STM32::NoSys INTERFACE $<$:--specs=nosys.specs>) -endif() - -if(NOT (TARGET STM32::Nano)) - add_library(STM32::Nano INTERFACE IMPORTED) - target_compile_options(STM32::Nano INTERFACE $<$:--specs=nano.specs>) - target_link_options(STM32::Nano INTERFACE $<$:--specs=nano.specs>) -endif() - -if(NOT (TARGET STM32::Nano::FloatPrint)) - add_library(STM32::Nano::FloatPrint INTERFACE IMPORTED) - target_link_options(STM32::Nano::FloatPrint INTERFACE - $<$:-Wl,--undefined,_printf_float> - ) -endif() - -if(NOT (TARGET STM32::Nano::FloatScan)) - add_library(STM32::Nano::FloatScan INTERFACE IMPORTED) - target_link_options(STM32::Nano::FloatScan INTERFACE - $<$:-Wl,--undefined,_scanf_float> - ) -endif() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/devices.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/devices.cmake deleted file mode 100644 index af29301a8a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/devices.cmake +++ /dev/null @@ -1,269 +0,0 @@ -function(stm32_util_create_family_targets FAMILY) - set(CORES ${ARGN}) - list(LENGTH CORES NUM_CORES) - if(${NUM_CORES} EQUAL 0) - set(CORE "") - set(CORE_C "") - elseif(${NUM_CORES} EQUAL 1) - set(CORE "_${CORES}") - set(CORE_C "::${CORES}") - else() - message(FATAL_ERROR "Expected at most one core for family ${FAMILY}: ${CORES}") - endif() - - if(NOT (TARGET STM32::${FAMILY}${CORE_C})) - add_library(STM32::${FAMILY}${CORE_C} INTERFACE IMPORTED) - # Set compiler flags for target - # -Wall: all warnings activated - # -ffunction-sections -fdata-sections: remove unused code - target_compile_options(STM32::${FAMILY}${CORE_C} INTERFACE - -mthumb -Wall -ffunction-sections -fdata-sections - ) - # Set linker flags - # -mthumb: Generate thumb code - # -Wl,--gc-sections: Remove unused code - target_link_options(STM32::${FAMILY}${CORE_C} INTERFACE - -mthumb -Wl,--gc-sections - ) - target_compile_definitions(STM32::${FAMILY}${CORE_C} INTERFACE - STM32${FAMILY} - ) - endif() - foreach(TYPE ${STM32_${FAMILY}_TYPES}) - if(NOT (TARGET STM32::${TYPE}${CORE_C})) - add_library(STM32::${TYPE}${CORE_C} INTERFACE IMPORTED) - target_link_libraries(STM32::${TYPE}${CORE_C} INTERFACE STM32::${FAMILY}${CORE_C}) - target_compile_definitions(STM32::${TYPE}${CORE_C} INTERFACE - STM32${TYPE} - ) - endif() - endforeach() -endfunction() - -set(STM32_ALL_DEVICES "") -set(STM32_SUPPORTED_FAMILIES_LONG_NAME "") - -include(stm32/c0) -include(stm32/f0) -include(stm32/f1) -include(stm32/f2) -include(stm32/f3) -include(stm32/f4) -include(stm32/f7) -include(stm32/g0) -include(stm32/g4) -include(stm32/h5) -include(stm32/h7) -include(stm32/l0) -include(stm32/l1) -include(stm32/l4) -include(stm32/l5) -include(stm32/u0) -include(stm32/u5) -include(stm32/wb) -include(stm32/wl) -include(stm32/mp1) - - -# Store a list of devices into a given STM_DEVICES list. -# You can also specify multiple device families. Examples: -# Get list of all devices for H7 family: stm32_get_devices_by_family(STM_DEVICES FAMILY H7) -# Get list of all devices: stm32_get_devices_by_family(STM_DEVICES) -function(stm32_get_devices_by_family STM_DEVICES) - # Specify keywords for argument parsing here - set(ARG_OPTIONS "") - set(ARG_SINGLE "") - set(ARG_MULTIPLE FAMILY) - - # Parse arguments. Multiple families can be specified and will be stored in ARG_ - cmake_parse_arguments(PARSE_ARGV 1 ARG "${ARG_OPTIONS}" "${ARG_SINGLE}" "${ARG_MULTIPLE}") - stm32_dev_parser_check() - - # Build a list of families by filtering the whole list with the specified families - if(ARG_FAMILY) - set(RESULTING_DEV_LIST "") - foreach(FAMILY ${ARG_FAMILY}) - set(STM_DEVICE_LIST ${STM32_ALL_DEVICES}) - list(FILTER STM_DEVICE_LIST INCLUDE REGEX "^${FAMILY}") - list(APPEND RESULTING_DEV_LIST ${STM_DEVICE_LIST}) - if(NOT STM_DEVICE_LIST) - message(WARNING "No devices found for given family ${FAMILY}") - endif() - endforeach() - else() - # No family argument, so get list of all devices - set(RESULTING_DEV_LIST ${STM32_ALL_DEVICES}) - endif() - - set(${STM_DEVICES} ${RESULTING_DEV_LIST} PARENT_SCOPE) -endfunction() - -# Print the devices for a given family. You can also specify multiple device families. -# Example usage: -# Print devices for H7 family: stm32_print_devices_by_family(FAMILY H7) -# Print all devices: stm32_print_devices_by_family() -function(stm32_print_devices_by_family) - # Specify keywords for argument parsing here - set(ARG_OPTIONS "") - set(ARG_SINGLE "") - set(ARG_MULTIPLE FAMILY) - - # Parse arguments. Multiple families can be specified and will be stored in ARG_ - cmake_parse_arguments(PARSE_ARGV 0 ARG "${ARG_OPTIONS}" "${ARG_SINGLE}" "${ARG_MULTIPLE}") - stm32_dev_parser_check() - - if(ARG_FAMILY) - # print devices one family per line - foreach(FAMILY ${ARG_FAMILY}) - stm32_get_devices_by_family(STM_DEVICES FAMILY ${FAMILY}) - stm32_pretty_print_dev_list(${FAMILY} "${STM_DEVICES}") - endforeach() - else() - # print all devices - stm32_get_devices_by_family(STM_DEVICES) - stm32_pretty_print_dev_list("all" "${STM_DEVICES}") - endif() - -endfunction() - -# The arguments checked in this macro are filled by cmake_parse_argument -macro(stm32_dev_parser_check) - # contains unexpected arguments (unknown keywords beofre ARG_MULTIPLE) - if(ARG_UNPARSED_ARGUMENTS) - message(WARNING "Unknown keyword(s) ${ARG_UNPARSED_ARGUMENTS} will be ignored") - endif() - # is populated if ARG_SINGLE or ARG_MULTIPLE is used without values - if(ARG_KEYWORDS_MISSING_VALUES) - message(FATAL_ERROR "Keyword ${ARG_KEYWORDS_MISSING_VALUES} expects values") - endif() -endmacro() - -# Pretty printer to limit amount of list entries printed per line -macro(stm32_pretty_print_dev_list FAMILIES STM_DEVICES) - if(${FAMILIES} STREQUAL "all") - message(STATUS "Devices for all families") - else() - message(STATUS "Devices for ${FAMILIES} family") - endif() - set(TMP_LIST "") - foreach(STM_DEVICE ${STM_DEVICES}) - list(APPEND TMP_LIST ${STM_DEVICE}) - list(LENGTH TMP_LIST CURR_LEN) - if(CURR_LEN EQUAL 10) - message(STATUS "${TMP_LIST}") - set(TMP_LIST "") - endif() - endforeach() - if(TMP_LIST) - message(STATUS "${TMP_LIST}") - endif() -endmacro() - - - -include(FetchContent) - -FetchContent_Declare( - STM32-CMSIS - GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_core/ - GIT_TAG v5.6.0 - GIT_PROGRESS TRUE -) - -foreach(FAMILY ${STM32_FETCH_FAMILIES}) - string(TOLOWER ${FAMILY} FAMILY_L) - - FetchContent_Declare( - STM32Cube${FAMILY} - GIT_REPOSITORY https://github.com/STMicroelectronics/STM32Cube${FAMILY}/ - GIT_TAG ${CUBE_${FAMILY}_VERSION} - GIT_PROGRESS TRUE - ) - - if(CMSIS_${FAMILY}_VERSION STREQUAL cube) - set(STM32_USE_CMSIS_FROM_CUBE_${FAMILY} ON) - else() - FetchContent_Declare( - STM32-CMSIS-${FAMILY} - GIT_REPOSITORY https://github.com/STMicroelectronics/cmsis_device_${FAMILY_L}/ - GIT_TAG ${CMSIS_${FAMILY}_VERSION} - GIT_PROGRESS TRUE - ) - endif() - - if(HAL_${FAMILY}_VERSION STREQUAL cube) - set(STM32_USE_HAL_FROM_CUBE_${FAMILY} ON) - else() - FetchContent_Declare( - STM32-HAL-${FAMILY} - GIT_REPOSITORY https://github.com/STMicroelectronics/stm32${FAMILY_L}xx_hal_driver/ - GIT_TAG ${HAL_${FAMILY}_VERSION} - GIT_PROGRESS TRUE - ) - endif() - -endforeach() - -function(stm32_fetch_cube) - foreach(FAMILY ${ARGV}) - set(CUBE_NAME STM32Cube${FAMILY}) - string(TOLOWER ${CUBE_NAME} CUBE_NAME_L) - - if(STM32_CUBE_${FAMILY}_PATH) - message(VERBOSE "STM32_CUBE_${FAMILY}_PATH specified, skipping fetch for ${CUBE_NAME}") - continue() - endif() - - FetchContent_MakeAvailable(${CUBE_NAME}) - set(STM32_CUBE_${FAMILY}_PATH ${${CUBE_NAME_L}_SOURCE_DIR} PARENT_SCOPE) - endforeach() -endfunction() - -function(stm32_fetch_cmsis) - if(NOT STM32_CMSIS_PATH) - FetchContent_MakeAvailable(STM32-CMSIS) - set(STM32_CMSIS_PATH ${stm32-cmsis_SOURCE_DIR} PARENT_SCOPE) - else() - message(INFO "STM32_CMSIS_PATH specified, skipping fetch for STM32-CMSIS") - endif() - - foreach(FAMILY ${ARGV}) - if(STM32_USE_CMSIS_FROM_CUBE_${FAMILY}) - stm32_fetch_cube(${FAMILY}) - message(STATUS "Cube fetched for ${FAMILY} at ${STM32_CUBE_${FAMILY}_PATH}") - set(STM32_CMSIS_${FAMILY}_PATH ${STM32_CUBE_${FAMILY}_PATH}/Drivers/CMSIS/Device/ST/STM32${FAMILY}xx PARENT_SCOPE) - else() - set(CMSIS_NAME STM32-CMSIS-${FAMILY}) - string(TOLOWER ${CMSIS_NAME} CMSIS_NAME_L) - - if(STM32_CMSIS_${FAMILY}_PATH) - message(INFO "STM32_CMSIS_${FAMILY}_PATH specified, skipping fetch for ${CMSIS_NAME}") - continue() - endif() - - FetchContent_MakeAvailable(${CMSIS_NAME}) - set(STM32_CMSIS_${FAMILY}_PATH ${${CMSIS_NAME_L}_SOURCE_DIR} PARENT_SCOPE) - endif() - endforeach() -endfunction() - -function(stm32_fetch_hal) - foreach(FAMILY ${ARGV}) - if(STM32_USE_HAL_FROM_CUBE_${FAMILY}) - stm32_fetch_cube(${FAMILY}) - message(STATUS "Cube fetched for ${FAMILY} at ${STM32_CUBE_${FAMILY}_PATH}") - set(STM32_HAL_${FAMILY}_PATH ${STM32_CUBE_${FAMILY}_PATH}/Drivers/STM32${FAMILY}xx_HAL_Driver PARENT_SCOPE) - else() - set(HAL_NAME STM32-HAL-${FAMILY}) - string(TOLOWER ${HAL_NAME} HAL_NAME_L) - - if(STM32_HAL_${FAMILY}_PATH) - message(INFO "STM32_HAL_${FAMILY}_PATH specified, skipping fetch for ${HAL_NAME}") - continue() - endif() - - FetchContent_MakeAvailable(${HAL_NAME}) - set(STM32_HAL_${FAMILY}_PATH ${${HAL_NAME_L}_SOURCE_DIR} PARENT_SCOPE) - endif() - endforeach() -endfunction() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f0.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f0.cmake deleted file mode 100644 index e52846bdb7..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f0.cmake +++ /dev/null @@ -1,111 +0,0 @@ -set(STM32_F0_TYPES - F030x6 F030x8 F031x6 F038xx F042x6 F048xx F051x8 F058xx - F070x6 F070xB F071xB F072xB F078xx F091xC F098xx F030xC -) -set(STM32_F0_TYPE_MATCH - "F030.[46]" "F030.8" "F031.[46]" "F038.." "F042.[46]" "F048.." "F051.[468]" "F058.." - "F070.6" "F070.B" "F071.[8B]" "F072.[8B]" "F078.." "F091.[BC]" "F098.." "F030.C" -) -set(STM32_F0_RAM_SIZES - 4K 8K 4K 4K 6K 6K 8K 8K - 6K 16K 16K 16K 16K 32K 32K 32K -) -set(STM32_F0_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K 0K 0K -) - -stm32_util_create_family_targets(F0) - -target_compile_options(STM32::F0 INTERFACE - -mcpu=cortex-m0 -) -target_link_options(STM32::F0 INTERFACE - -mcpu=cortex-m0 -) - -list(APPEND STM32_ALL_DEVICES - F030C6 - F030C8 - F030CC - F030F4 - F030K6 - F030R8 - F030RC - F031C4 - F031C6 - F031E6 - F031F4 - F031F6 - F031G4 - F031G6 - F031K4 - F031K6 - F038C6 - F038E6 - F038F6 - F038G6 - F038K6 - F042C4 - F042C6 - F042F4 - F042F6 - F042G4 - F042G6 - F042K4 - F042K6 - F042T6 - F048C6 - F048G6 - F048T6 - F051C4 - F051C6 - F051C8 - F051K4 - F051K6 - F051K8 - F051R4 - F051R6 - F051R8 - F051T8 - F058C8 - F058R8 - F058T8 - F070C6 - F070CB - F070F6 - F070RB - F071C8 - F071CB - F071RB - F071V8 - F071VB - F072C8 - F072CB - F072R8 - F072RB - F072V8 - F072VB - F078CB - F078RB - F078VB - F091CB - F091CC - F091RB - F091RC - F091VB - F091VC - F098CC - F098RC - F098VC -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32F0 -) - -list(APPEND STM32_FETCH_FAMILIES F0) - -set(CUBE_F0_VERSION v1.11.2) -set(CMSIS_F0_VERSION v2.3.5) -set(HAL_F0_VERSION v1.7.5) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f1.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f1.cmake deleted file mode 100644 index 08d6889248..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f1.cmake +++ /dev/null @@ -1,186 +0,0 @@ -set(STM32_F1_TYPES - F100xB F100xE F101x6 F101xB F101xE F101xG F102x6 F102xB - F103x6 F103xB F103xE F103xG F105xC F107xC -) -set(STM32_F1_TYPE_MATCH - "F100.[468B]" "F100.[CDE]" "F101.[46]" "F101.[8B]" "F101.[CDE]" "F101.[FG]" "F102.[46]" "F102.[8B]" - "F103.[46]" "F103.[8B]" "F103.[CDE]" "F103.[FG]" "F105.[8BC]" "F107.[BC]" -) -set(STM32_F1_RAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K -) -set(STM32_F1_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K -) - -stm32_util_create_family_targets(F1) - -target_compile_options(STM32::F1 INTERFACE - -mcpu=cortex-m3 -) -target_link_options(STM32::F1 INTERFACE - -mcpu=cortex-m3 -) - -function(stm32f1_get_memory_info DEVICE TYPE FLASH_SIZE RAM_SIZE) - string(REGEX REPLACE "F1[0-9][0-9].([468BCDEFGHI])" "\\1" SIZE_CODE ${DEVICE}) - - if((TYPE STREQUAL "F100xB") OR (TYPE STREQUAL "F100xE")) - if((SIZE_CODE STREQUAL "4") OR (SIZE_CODE STREQUAL "6")) - set(RAM "4K") - elseif((SIZE_CODE STREQUAL "8") OR (SIZE_CODE STREQUAL "B")) - set(RAM "8K") - elseif(SIZE_CODE STREQUAL "C") - set(RAM "24K") - elseif((SIZE_CODE STREQUAL "D") OR (SIZE_CODE STREQUAL "E")) - set(RAM "32K") - endif() - elseif((TYPE STREQUAL "F101x6") OR (TYPE STREQUAL "F101xB") OR - (TYPE STREQUAL "F101xE") OR (TYPE STREQUAL "F101xG") OR - (TYPE STREQUAL "F102x6") OR (TYPE STREQUAL "F102xB")) - if(SIZE_CODE STREQUAL "4") - set(RAM "4K") - elseif(SIZE_CODE STREQUAL "6") - set(RAM "6K") - elseif(SIZE_CODE STREQUAL "8") - set(RAM "10K") - elseif(SIZE_CODE STREQUAL "B") - set(RAM "16K") - elseif(SIZE_CODE STREQUAL "C") - set(RAM "32K") - elseif((SIZE_CODE STREQUAL "D") OR (SIZE_CODE STREQUAL "E")) - set(RAM "48K") - elseif((SIZE_CODE STREQUAL "F") OR (SIZE_CODE STREQUAL "G")) - set(RAM "80K") - endif() - elseif((TYPE STREQUAL "F103x6") OR (TYPE STREQUAL "F103xB") OR - (TYPE STREQUAL "F103xE") OR (TYPE STREQUAL "F103xG")) - if(SIZE_CODE STREQUAL "4") - set(RAM "6K") - elseif(SIZE_CODE STREQUAL "6") - set(RAM "10K") - elseif((SIZE_CODE STREQUAL "8") OR (SIZE_CODE STREQUAL "B")) - set(RAM "20K") - elseif(SIZE_CODE STREQUAL "C") - set(RAM "48K") - elseif((SIZE_CODE STREQUAL "D") OR (SIZE_CODE STREQUAL "E")) - set(RAM "64K") - elseif((SIZE_CODE STREQUAL "F") OR (SIZE_CODE STREQUAL "G")) - set(RAM "96K") - endif() - elseif((TYPE STREQUAL "F105xC") OR (TYPE STREQUAL "F107xC")) - set(RAM "64K") - endif() - - set(${RAM_SIZE} ${RAM} PARENT_SCOPE) -endfunction() - -list(APPEND STM32_ALL_DEVICES - F100C4 - F100C6 - F100C8 - F100CB - F100R4 - F100R6 - F100R8 - F100RB - F100RC - F100RD - F100RE - F100V8 - F100VB - F100VC - F100VD - F100VE - F100ZC - F100ZD - F100ZE - F101C4 - F101C6 - F101C8 - F101CB - F101R4 - F101R6 - F101R8 - F101RB - F101RC - F101RD - F101RE - F101RF - F101RG - F101T4 - F101T6 - F101T8 - F101TB - F101V8 - F101VB - F101VC - F101VD - F101VE - F101VF - F101VG - F101ZC - F101ZD - F101ZE - F101ZF - F101ZG - F102C4 - F102C6 - F102C8 - F102CB - F102R4 - F102R6 - F102R8 - F102RB - F103C4 - F103C6 - F103C8 - F103CB - F103R4 - F103R6 - F103R8 - F103RB - F103RC - F103RD - F103RE - F103RF - F103RG - F103T4 - F103T6 - F103T8 - F103TB - F103V8 - F103VB - F103VC - F103VD - F103VE - F103VF - F103VG - F103ZC - F103ZD - F103ZE - F103ZF - F103ZG - F105R8 - F105RB - F105RC - F105V8 - F105VB - F105VC - F107RB - F107RC - F107VB - F107VC -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32F1 -) - -list(APPEND STM32_FETCH_FAMILIES F1) - -set(CUBE_F1_VERSION v1.8.4) -set(CMSIS_F1_VERSION v4.3.3) -set(HAL_F1_VERSION v1.1.8) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f2.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f2.cmake deleted file mode 100644 index 2f266c7035..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f2.cmake +++ /dev/null @@ -1,90 +0,0 @@ -set(STM32_F2_TYPES - F205xx F215xx F207xx F217xx -) -set(STM32_F2_TYPE_MATCH - "F205.." "F215.." "F207.." "F217.." -) -set(STM32_F2_RAM_SIZES - 0K 128K 128K 128K -) -set(STM32_F2_CCRAM_SIZES - 0K 0K 0K 0K -) - -stm32_util_create_family_targets(F2) - -target_compile_options(STM32::F2 INTERFACE - -mcpu=cortex-m3 -) -target_link_options(STM32::F2 INTERFACE - -mcpu=cortex-m3 -) - -function(stm32f2_get_memory_info DEVICE TYPE FLASH_SIZE RAM_SIZE) - string(REGEX REPLACE "F2[0-9][0-9].([468BCDEFGHI])" "\\1" SIZE_CODE ${DEVICE}) - - if(TYPE STREQUAL "F205xx") - if(SIZE_CODE STREQUAL "B") - set(RAM "64K") - elseif(SIZE_CODE STREQUAL "C") - set(RAM "96K") - else() - set(RAM "128K") - endif() - endif() - - if(RAM) - set(${RAM_SIZE} ${RAM} PARENT_SCOPE) - endif() -endfunction() - -list(APPEND STM32_ALL_DEVICES - F205RB - F205RC - F205RE - F205RF - F205RG - F205VB - F205VC - F205VE - F205VF - F205VG - F205ZC - F205ZE - F205ZF - F205ZG - F207IC - F207IE - F207IF - F207IG - F207VC - F207VE - F207VF - F207VG - F207ZC - F207ZE - F207ZF - F207ZG - F215RE - F215RG - F215VE - F215VG - F215ZE - F215ZG - F217IE - F217IG - F217VE - F217VG - F217ZE - F217ZG -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32F2 -) - -list(APPEND STM32_FETCH_FAMILIES F2) - -set(CUBE_F2_VERSION v1.9.3) -set(CMSIS_F2_VERSION v2.2.5) -set(HAL_F2_VERSION v1.2.7) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f3.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f3.cmake deleted file mode 100644 index 49a2a5517b..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f3.cmake +++ /dev/null @@ -1,141 +0,0 @@ -set(STM32_F3_TYPES - F301x8 F302x8 F302xC F302xE F303x8 F303xC - F303xE F318xx F328xx F334x8 F358xx F373xC - F378xx F398xx -) -set(STM32_F3_TYPE_MATCH - "301.[68]" "302.[68]" "302.[BC]" "302.[DE]" "303.[68]" "303.[BC]" - "303.[DE]" "318.." "328.." "334.[468]" "358.." "373.[8BC]" - "378.." "398.." -) -set(STM32_F3_RAM_SIZES - 16K 16K 0K 64K 12K 0K - 64K 16K 12K 12K 40K 0K - 32K 64K -) -set(STM32_F3_CCRAM_SIZES - 0K 0K 0K 0K 4K 8K - 16K 0K 4K 4K 8K 0K - 0K 16K -) - -stm32_util_create_family_targets(F3) - -target_compile_options(STM32::F3 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::F3 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) - -function(stm32f3_get_memory_info DEVICE TYPE FLASH_SIZE RAM_SIZE) - string(REGEX REPLACE "F3[0-9][0-9].([468BCDEFGHI])" "\\1" SIZE_CODE ${DEVICE}) - - if(TYPE STREQUAL "F302xC") - if(SIZE_CODE STREQUAL "C") - set(RAM "40K") - else() - set(RAM "32K") - endif() - elseif(TYPE STREQUAL "F303xC") - if(SIZE_CODE STREQUAL "C") - set(RAM "40K") - else() - set(RAM "32K") - endif() - elseif(TYPE STREQUAL "F373xC") - if(SIZE_CODE STREQUAL "B") - set(RAM "24K") - elseif(SIZE_CODE STREQUAL "C") - set(RAM "32K") - else() - set(RAM "16K") - endif() - endif() - - if(RAM) - set(${RAM_SIZE} ${RAM} PARENT_SCOPE) - endif() -endfunction() - -list(APPEND STM32_ALL_DEVICES - F301C6 - F301C8 - F301K6 - F301K8 - F301R6 - F301R8 - F302C6 - F302C8 - F302CB - F302CC - F302K6 - F302K8 - F302R6 - F302R8 - F302RB - F302RC - F302RD - F302RE - F302VB - F302VC - F302VD - F302VE - F302ZD - F302ZE - F303C6 - F303C8 - F303CB - F303CC - F303K6 - F303K8 - F303R6 - F303R8 - F303RB - F303RC - F303RD - F303RE - F303VB - F303VC - F303VD - F303VE - F303ZD - F303ZE - F318C8 - F318K8 - F328C8 - F334C4 - F334C6 - F334C8 - F334K4 - F334K6 - F334K8 - F334R6 - F334R8 - F358CC - F358RC - F358VC - F373C8 - F373CB - F373CC - F373R8 - F373RB - F373RC - F373V8 - F373VB - F373VC - F378CC - F378RC - F378VC - F398VE -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32F3 -) - -list(APPEND STM32_FETCH_FAMILIES F3) - -set(CUBE_F3_VERSION v1.11.2) -set(CMSIS_F3_VERSION v2.3.5) -set(HAL_F3_VERSION v1.5.5) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f4.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f4.cmake deleted file mode 100644 index a98cfba6f6..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f4.cmake +++ /dev/null @@ -1,191 +0,0 @@ -set(STM32_F4_TYPES - F401xC F401xE F405xx F407xx F410Cx F410Rx F410Tx F411xE - F412Cx F412Rx F412Vx F412Zx F413xx F415xx F417xx F423xx - F427xx F429xx F437xx F439xx F446xx F469xx F479xx -) -set(STM32_F4_TYPE_MATCH - "F401.[CB]" "F401.[ED]" "F405.." "F407.." "F410C." "F410R." "F410T." "F411.[CE]" - "F412C." "F412R." "F412V." "F412Z." "F413.." "F415.." "F417.." "F423.." - "F427.." "F429.." "F437.." "F439.." "F446.." "F469.." "F479.." -) -set(STM32_F4_RAM_SIZES - 64K 96K 128K 128K 32K 32K 32K 128K - 256K 256K 256K 256K 320K 128K 128K 320K - 192K 192K 192K 192K 128K 320K 320K -) -set(STM32_F4_CCRAM_SIZES - 0K 0K 64K 64K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 64K 64K 0K - 64K 64K 64K 64K 0K 64K 64K -) - -stm32_util_create_family_targets(F4) - -target_compile_options(STM32::F4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::F4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) - -list(APPEND STM32_ALL_DEVICES - F401CB - F401CC - F401CD - F401CE - F401RB - F401RC - F401RD - F401RE - F401VB - F401VC - F401VD - F401VE - F405OE - F405OG - F405RG - F405VG - F405ZG - F407IE - F407IG - F407VE - F407VG - F407ZE - F407ZG - F410C8 - F410CB - F410R8 - F410RB - F410T8 - F410TB - F411CC - F411CE - F411RC - F411RE - F411VC - F411VE - F412CE - F412CG - F412RE - F412RG - F412VE - F412VG - F412ZE - F412ZG - F413CG - F413CH - F413MG - F413MH - F413RG - F413RH - F413VG - F413VH - F413ZG - F413ZH - F415OG - F415RG - F415VG - F415ZG - F417IE - F417IG - F417VE - F417VG - F417ZE - F417ZG - F423CH - F423MH - F423RH - F423VH - F423ZH - F427AG - F427AI - F427IG - F427II - F427VG - F427VI - F427ZG - F427ZI - F429AG - F429AI - F429BE - F429BG - F429BI - F429IE - F429IG - F429II - F429NE - F429NG - F429NI - F429VE - F429VG - F429VI - F429ZE - F429ZG - F429ZI - F437AI - F437IG - F437II - F437VG - F437VI - F437ZG - F437ZI - F439AI - F439BG - F439BI - F439IG - F439II - F439NG - F439NI - F439VG - F439VI - F439ZG - F439ZI - F446MC - F446ME - F446RC - F446RE - F446VC - F446VE - F446ZC - F446ZE - F469AE - F469AG - F469AI - F469BE - F469BG - F469BI - F469IE - F469IG - F469II - F469NE - F469NG - F469NI - F469VE - F469VG - F469VI - F469ZE - F469ZG - F469ZI - F479AG - F479AI - F479BG - F479BI - F479IG - F479II - F479NG - F479NI - F479VG - F479VI - F479ZG - F479ZI -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32F4 -) - -list(APPEND STM32_FETCH_FAMILIES F4) - -set(CUBE_F4_VERSION v1.28.0) -set(CMSIS_F4_VERSION v2.6.9) -set(HAL_F4_VERSION v1.8.2) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f7.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f7.cmake deleted file mode 100644 index 68c5acefa7..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/f7.cmake +++ /dev/null @@ -1,123 +0,0 @@ -set(STM32_F7_TYPES - F756xx F746xx F745xx F765xx F767xx F769xx F777xx F779xx - F722xx F723xx F732xx F733xx F730xx F750xx -) -set(STM32_F7_TYPE_MATCH - "F756.." "F746.." "F745.." "F765.." "F767.." "F769.." "F777.." "F77[89].." - "F722.." "F723.." "F732.." "F733.." "F730.." "F750.." -) -set(STM32_F7_RAM_SIZES - 320K 320K 320K 512K 512K 512K 512K 512K - 256K 256K 256K 256K 256K 320K -) -set(STM32_F7_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K -) - -stm32_util_create_family_targets(F7) - -target_compile_options(STM32::F7 INTERFACE - -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::F7 INTERFACE - -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) - -list(APPEND STM32_ALL_DEVICES - F722IC - F722IE - F722RC - F722RE - F722VC - F722VE - F722ZC - F722ZE - F723IC - F723IE - F723VE - F723ZC - F723ZE - F730I8 - F730R8 - F730V8 - F730Z8 - F732IE - F732RE - F732VE - F732ZE - F733IE - F733VE - F733ZE - F745IE - F745IG - F745VE - F745VG - F745ZE - F745ZG - F746BE - F746BG - F746IE - F746IG - F746NE - F746NG - F746VE - F746VG - F746ZE - F746ZG - F750N8 - F750V8 - F750Z8 - F756BG - F756IG - F756NG - F756VG - F756ZG - F765BG - F765BI - F765IG - F765II - F765NG - F765NI - F765VG - F765VI - F765ZG - F765ZI - F767BG - F767BI - F767IG - F767II - F767NG - F767NI - F767VG - F767VI - F767ZG - F767ZI - F769AI - F769BG - F769BI - F769IG - F769II - F769NG - F769NI - F777BI - F777II - F777NI - F777VI - F777ZI - F778AI - F779AI - F779BI - F779II - F779NI -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32F7 -) - -list(APPEND STM32_FETCH_FAMILIES F7) - -set(CUBE_F7_VERSION v1.16.1) -set(CMSIS_F7_VERSION v1.2.6) -set(HAL_F7_VERSION v1.2.9) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g0.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g0.cmake deleted file mode 100644 index f3c20a5501..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g0.cmake +++ /dev/null @@ -1,141 +0,0 @@ -set(STM32_G0_TYPES - G030xx G031xx G041xx G050xx G051xx G061xx - G070xx G071xx G081xx G0B0xx G0B1xx G0C1xx -) -set(STM32_G0_TYPE_MATCH - "G030.." "G031.." "G041.." "G050.." "G051.." "G061.." - "G070.." "G071.." "G081.." "G0B0.." "G0B1.." "G0C1.." -) -set(STM32_G0_RAM_SIZES - 8K 8K 8K 18K 18K 18K - 36K 36K 36K 144K 144K 144K -) -set(STM32_G0_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K -) - -stm32_util_create_family_targets(G0) - -target_compile_options(STM32::G0 INTERFACE - -mcpu=cortex-m0plus -) -target_link_options(STM32::G0 INTERFACE - -mcpu=cortex-m0plus -) - -list(APPEND STM32_ALL_DEVICES - G030C6 - G030C8 - G030F6 - G030J6 - G030K6 - G030K8 - G031C4 - G031C6 - G031C8 - G031F4 - G031F6 - G031F8 - G031G4 - G031G6 - G031G8 - G031J4 - G031J6 - G031K4 - G031K6 - G031K8 - G031Y8 - G041C6 - G041C8 - G041F6 - G041F8 - G041G6 - G041G8 - G041J6 - G041K6 - G041K8 - G041Y8 - G050C6 - G050C8 - G050F6 - G050K6 - G050K8 - G051C6 - G051C8 - G051F6 - G051F8 - G051G6 - G051G8 - G051K6 - G051K8 - G061C6 - G061C8 - G061F6 - G061F8 - G061G6 - G061G8 - G061K6 - G061K8 - G070CB - G070KB - G070RB - G071C6 - G071C8 - G071CB - G071EB - G071G6 - G071G8 - G071GB - G071K6 - G071K8 - G071KB - G071R6 - G071R8 - G071RB - G081CB - G081EB - G081GB - G081KB - G081RB - G0B0CE - G0B0KE - G0B0RE - G0B0VE - G0B1CB - G0B1CC - G0B1CE - G0B1KB - G0B1KC - G0B1KE - G0B1MB - G0B1MC - G0B1ME - G0B1NE - G0B1RB - G0B1RC - G0B1RE - G0B1VB - G0B1VC - G0B1VE - G0C1CC - G0C1CE - G0C1KC - G0C1KE - G0C1MC - G0C1ME - G0C1RC - G0C1RE - G0C1VC - G0C1VE -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32G0 -) - -list(APPEND STM32_FETCH_FAMILIES G0) - -set(CUBE_G0_VERSION v1.4.1) -set(CMSIS_G0_VERSION v1.4.0) -set(HAL_G0_VERSION v1.4.1) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g4.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g4.cmake deleted file mode 100644 index 380f1a9b41..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/g4.cmake +++ /dev/null @@ -1,132 +0,0 @@ -set(STM32_G4_TYPES - G431xx G441xx G471xx G473xx G483xx G474xx G484xx - G491xx G4A1xx -) -set(STM32_G4_TYPE_MATCH - "G431.." "G441.." "G471.." "G473.." "G483.." "G474.." "G484.." - "G491.." "G4A1.." -) -set(STM32_G4_RAM_SIZES - 32K 32K 128K 128K 128K 128K 128K - 112K 112K -) -set(STM32_G4_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K - 0K 0K -) - -stm32_util_create_family_targets(G4) - -target_compile_options(STM32::G4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::G4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) - -list(APPEND STM32_ALL_DEVICES - G431C6 - G431C8 - G431CB - G431K6 - G431K8 - G431KB - G431M6 - G431M8 - G431MB - G431R6 - G431R8 - G431RB - G431V6 - G431V8 - G431VB - G441CB - G441KB - G441MB - G441RB - G441VB - G471CC - G471CE - G471MC - G471ME - G471QC - G471QE - G471RC - G471RE - G471VC - G471VE - G473CB - G473CC - G473CE - G473MB - G473MC - G473ME - G473PB - G473PC - G473PE - G473QB - G473QC - G473QE - G473RB - G473RC - G473RE - G473VB - G473VC - G473VE - G474CB - G474CC - G474CE - G474MB - G474MC - G474ME - G474PB - G474PC - G474PE - G474QB - G474QC - G474QE - G474RB - G474RC - G474RE - G474VB - G474VC - G474VE - G483CE - G483ME - G483PE - G483QE - G483RE - G483VE - G484CE - G484ME - G484PE - G484QE - G484RE - G484VE - G491CC - G491KC - G491MC - G491RC - G491VC - G491CE - G491KE - G491ME - G491RE - G491VE - G4A1CE - G4A1KE - G4A1ME - G4A1RE - G4A1VE - GBK1CB -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32G4 -) - -list(APPEND STM32_FETCH_FAMILIES G4) - -set(CUBE_G4_VERSION v1.4.0) -set(CMSIS_G4_VERSION v1.2.1) -set(HAL_G4_VERSION v1.2.1) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h5.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h5.cmake deleted file mode 100644 index ec3e9003ac..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h5.cmake +++ /dev/null @@ -1,67 +0,0 @@ -set(STM32_H5_TYPES - H503xx H562xx H563xx H573xx -) - -set(STM32_H5_TYPE_MATCH - "H503.." "H562.." "H563.." "H573.." -) -set(STM32_H5_RAM_SIZES - 32K 640K 640K 640K -) -set(STM32_H5_CCRAM_SIZES - 0K 0K 0K 0K -) - -stm32_util_create_family_targets(H5) - -target_compile_options(STM32::H5 INTERFACE - -mcpu=cortex-m33 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -mthumb -) - -target_link_options(STM32::H5 INTERFACE - -mcpu=cortex-m33 -mfloat-abi=hard -mfpu=fpv5-sp-d16 -mthumb -) - -list(APPEND STM32_ALL_DEVICES - H503CB - H503EB - H503KB - H503RB - H562AG - H562AI - H562IG - H562II - H562RG - H562RI - H562VG - H562VI - H562ZG - H562ZI - H563AG - H563AI - H563IG - H563II - H563MI - H563RG - H563RI - H563VG - H563VI - H563ZG - H563ZI - H573AI - H573II - H573MI - H573RI - H573VI - H573ZI -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32H5 -) - -list(APPEND STM32_FETCH_FAMILIES H5) - -set(CUBE_H5_VERSION v1.1.0) -set(CMSIS_H5_VERSION v1.1.0) -set(HAL_H5_VERSION v1.1.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h7.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h7.cmake deleted file mode 100644 index ac5d5d76a3..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/h7.cmake +++ /dev/null @@ -1,214 +0,0 @@ -set(STM32_H7_TYPES - H723xx H725xx H730xx H730xxQ H733xx H735xx - H743xx H753xx H750xx H742xx H745xx H755xx H747xx H757xx - H7A3xx H7A3xxQ H7B3xx H7B3xxQ H7B0xx H7B0xxQ -) -set(STM32_H7_TYPE_MATCH - "H723.." "H725.." "H730.." "H730..Q" "H733.." "H735.." - "H743.." "H753.." "H750.." "H742.." "H745.." "H755.." "H747.." "H757.." - "H7A3.." "H7A3..Q" "H7B3.." "H7B3..Q" "H7B0.." "H7B0..Q" -) -set(STM32_H7_RAM_SIZES - 128K 128K 128K 128K 128K 128K - 128K 128K 128K 128K 128K 128K 128K 128K - 128K 128K 128K 128K 128K 128K -) -set(STM32_H7_M4_RAM_SIZES - 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 288K 288K 288K 288K - 0K 0K 0K 0K 0K 0K -) - -set(STM32_H7_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K -) - -set(STM32_H7_DUAL_CORE - H745xx H755xx H747xx H757xx -) - -stm32_util_create_family_targets(H7 M7) - -target_compile_options(STM32::H7::M7 INTERFACE - -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::H7::M7 INTERFACE - -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) -target_compile_definitions(STM32::H7::M7 INTERFACE - -DCORE_CM7 -) - -stm32_util_create_family_targets(H7 M4) - -target_compile_options(STM32::H7::M4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::H7::M4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) -target_compile_definitions(STM32::H7::M4 INTERFACE - -DCORE_CM4 -) - -function(stm32h7_get_memory_info DEVICE TYPE CORE RAM FLASH_ORIGIN RAM_ORIGIN TWO_FLASH_BANKS) - if(${TYPE} IN_LIST STM32_H7_DUAL_CORE) - set(${TWO_FLASH_BANKS} TRUE PARENT_SCOPE) - else() - set(${TWO_FLASH_BANKS} FALSE PARENT_SCOPE) - endif() - if(NOT CORE) - set(CORE "M7") - endif() - list(FIND STM32_H7_TYPES ${TYPE} TYPE_INDEX) - if(CORE STREQUAL "M7") - list(GET STM32_H7_RAM_SIZES ${TYPE_INDEX} RAM_VALUE) - set(${RAM} ${RAM_VALUE} PARENT_SCOPE) - set(${FLASH_ORIGIN} 0x8000000 PARENT_SCOPE) - set(${RAM_ORIGIN} 0x20000000 PARENT_SCOPE) - elseif((${TYPE} IN_LIST STM32_H7_DUAL_CORE) AND (CORE STREQUAL "M4")) - list(GET STM32_H7_M4_RAM_SIZES ${TYPE_INDEX} RAM_VALUE) - set(${RAM} ${RAM_VALUE} PARENT_SCOPE) - set(${FLASH_ORIGIN} 0x8100000 PARENT_SCOPE) - set(${RAM_ORIGIN} 0x10000000 PARENT_SCOPE) - else() - message(FATAL_ERROR "Unknown core ${CORE}") - endif() -endfunction() - -function(stm32h7_get_device_cores DEVICE TYPE CORES) - if(${TYPE} IN_LIST STM32_H7_DUAL_CORE) - set(${CORES} M7 M4 PARENT_SCOPE) - else() - set(${CORES} M7 PARENT_SCOPE) - endif() -endfunction() - -list(APPEND STM32_ALL_DEVICES - H723VE - H723VG - H723ZE - H723ZG - H725AE - H725AG - H725IE - H725IG - H725RE - H725RG - H725VE - H725VG - H725ZE - H725ZG - H730AB - H730IB - H730VB - H730ZB - H733VG - H733ZG - H735AG - H735IG - H735RG - H735VG - H735ZG - H742AG - H742AI - H742BG - H742BI - H742IG - H742II - H742VG - H742VI - H742XG - H742XI - H742ZG - H742ZI - H743AG - H743AI - H743BG - H743BI - H743IG - H743II - H743VG - H743VI - H743XG - H743XI - H743ZG - H743ZI - H745BG - H745BI - H745IG - H745II - H745XG - H745XI - H745ZG - H745ZI - H747AG - H747AI - H747BG - H747BI - H747IG - H747II - H747XG - H747XI - H747ZI - H750IB - H750VB - H750XB - H750ZB - H753AI - H753BI - H753II - H753VI - H753XI - H753ZI - H755BI - H755II - H755XI - H755ZI - H757AI - H757BI - H757II - H757XI - H757ZI - H7A3AG - H7A3AI - H7A3IG - H7A3II - H7A3LG - H7A3LI - H7A3NG - H7A3NI - H7A3QI - H7A3RG - H7A3RI - H7A3VG - H7A3VI - H7A3ZG - H7A3ZI - H7B0AB - H7B0IB - H7B0RB - H7B0VB - H7B0ZB - H7B3AI - H7B3II - H7B3LI - H7B3NI - H7B3QI - H7B3RI - H7B3VI - H7B3ZI -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32H7_M4 - STM32H7_M7 -) - -list(APPEND STM32_FETCH_FAMILIES H7) - -set(CUBE_H7_VERSION v1.9.0) -set(CMSIS_H7_VERSION v1.10.0) -set(HAL_H7_VERSION v1.10.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l0.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l0.cmake deleted file mode 100644 index 01d6053cbe..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l0.cmake +++ /dev/null @@ -1,140 +0,0 @@ -set(STM32_L0_TYPES - L010x4 L010x6 L010x8 L010xB L011xx L021xx L031xx L041xx - L051xx L052xx L053xx L061xx L062xx L063xx L071xx L072xx - L073xx L081xx L082xx L083xx -) -set(STM32_L0_TYPE_MATCH - "L010.4" "L010.6" "L010.8" "L010.B" "L011.." "L021.." "L031.." "L041.." - "L051.." "L052.." "L053.." "L061.." "L062.." "L063.." "L071.." "L072.." - "L073.." "L081.." "L082.." "L083.." -) -set(STM32_L0_RAM_SIZES - 2K 8K 8K 20K 2K 2K 8K 8K - 8K 8K 8K 8K 8K 8K 20K 20K - 20K 20K 20K 20K -) -set(STM32_L0_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K -) - -stm32_util_create_family_targets(L0) - -target_compile_options(STM32::L0 INTERFACE - -mcpu=cortex-m0plus -) -target_link_options(STM32::L0 INTERFACE - -mcpu=cortex-m0plus -) - -list(APPEND STM32_ALL_DEVICES - L010C6 - L010F4 - L010K4 - L010K8 - L010R8 - L010RB - L011D3 - L011D4 - L011E3 - L011E4 - L011F3 - L011F4 - L011G3 - L011G4 - L011K3 - L011K4 - L021D4 - L021F4 - L021G4 - L021K4 - L031C4 - L031C6 - L031E4 - L031E6 - L031F4 - L031F6 - L031G4 - L031G6 - L031K4 - L031K6 - L041C6 - L041E6 - L041F6 - L041G6 - L041K6 - L051C6 - L051C8 - L051K6 - L051K8 - L051R6 - L051R8 - L051T6 - L051T8 - L052C6 - L052C8 - L052K6 - L052K8 - L052R6 - L052R8 - L052T6 - L052T8 - L053C6 - L053C8 - L053R6 - L053R8 - L062C8 - L062K8 - L063C8 - L063R8 - L071C8 - L071CB - L071CZ - L071K8 - L071KB - L071KZ - L071RB - L071RZ - L071V8 - L071VB - L071VZ - L072CB - L072CZ - L072KB - L072KZ - L072RB - L072RZ - L072V8 - L072VB - L072VZ - L073CB - L073CZ - L073RB - L073RZ - L073V8 - L073VB - L073VZ - L081CB - L081CZ - L081KZ - L082CZ - L082KZ - L083CB - L083CZ - L083RB - L083RZ - L083V8 - L083VB - L083VZ -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32L0 -) - -list(APPEND STM32_FETCH_FAMILIES L0) - -set(CUBE_L0_VERSION v1.12.0) -set(CMSIS_L0_VERSION v1.9.1) -set(HAL_L0_VERSION v1.10.4) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l1.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l1.cmake deleted file mode 100644 index 3d5a6a90dc..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l1.cmake +++ /dev/null @@ -1,145 +0,0 @@ -set(STM32_L1_TYPES - L100xB L100xBA L100xC L151xB L151xBA L151xC L151xCA L151xD - L151xDX L151xE L152xB L152xBA L152xC L152xCA L152xD L152xDX - L152xE L162xC L162xCA L162xD L162xDX L162xE -) -set(STM32_L1_TYPE_MATCH - "L100.[68B]" "L100.[68B]A" "L100.C" "L151.[68B]" "L151.[68B]A" "L151.C" "L151.CA" "L151.D" - "L151.DX" "L151.E" "L152.[68B]" "L152.[68B]A" "L152.C" "L152.CA" "L152.D" "L152.DX" - "L152.E" "L162.C" "L162.CA" "L162.D" "L162.DX" "L162.E" -) -set(STM32_L1_RAM_SIZES - 0K 0K 16K 0K 0K 32K 32K 48K - 80K 80K 0K 0K 32K 32K 48K 80K - 80K 32K 32K 48K 80K 80K -) -set(STM32_L1_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 0K 0K -) - -stm32_util_create_family_targets(L1) - -target_compile_options(STM32::L1 INTERFACE - -mcpu=cortex-m3 -) -target_link_options(STM32::L1 INTERFACE - -mcpu=cortex-m3 -) - -function(stm32l1_get_memory_info DEVICE TYPE FLASH_SIZE RAM_SIZE) - string(REGEX REPLACE "L1[0-9][0-9].([68BCDE])" "\\1" SIZE_CODE ${DEVICE}) - - unset(RAM) - - if((TYPE STREQUAL "L100xB")) - if(SIZE_CODE STREQUAL "6") - set(RAM "4K") - elseif(SIZE_CODE STREQUAL "8") - set(RAM "8K") - elseif(SIZE_CODE STREQUAL "B") - set(RAM "10K") - endif() - elseif((TYPE STREQUAL "L100xBA")) - if(SIZE_CODE STREQUAL "6") - set(RAM "4K") - elseif(SIZE_CODE STREQUAL "8") - set(RAM "8K") - elseif(SIZE_CODE STREQUAL "B") - set(RAM "16K") - endif() - elseif((TYPE STREQUAL "L151xB") OR (TYPE STREQUAL "L152xB")) - if(SIZE_CODE STREQUAL "6") - set(RAM "10K") - elseif(SIZE_CODE STREQUAL "8") - set(RAM "10K") - elseif(SIZE_CODE STREQUAL "B") - set(RAM "16K") - endif() - elseif((TYPE STREQUAL "L151xBA") OR (TYPE STREQUAL "L152xBA")) - if(SIZE_CODE STREQUAL "6") - set(RAM "16K") - elseif(SIZE_CODE STREQUAL "8") - set(RAM "32K") - elseif(SIZE_CODE STREQUAL "B") - set(RAM "32K") - endif() - endif() - - if(RAM) - set(${RAM_SIZE} ${RAM} PARENT_SCOPE) - endif() -endfunction() - -list(APPEND STM32_ALL_DEVICES - L100C6 - L100R8 - L100RB - L100RC - L151C6 - L151C8 - L151CB - L151CC - L151QC - L151QD - L151QE - L151R6 - L151R8 - L151RB - L151RC - L151RD - L151RE - L151UC - L151V8 - L151VB - L151VC - L151VD - L151VE - L151ZC - L151ZD - L151ZE - L152C6 - L152C8 - L152CB - L152CC - L152QC - L152QD - L152QE - L152R6 - L152R8 - L152RB - L152RC - L152RD - L152RE - L152UC - L152V8 - L152VB - L152VC - L152VD - L152VE - L152ZC - L152ZD - L152ZE - L162QC - L162QD - L162RC - L162RD - L162RE - L162VC - L162VD - L162VE - L162ZC - L162ZD - L162ZE -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32L1 -) - -list(APPEND STM32_FETCH_FAMILIES L1) - -set(CUBE_L1_VERSION v1.10.3) -set(CMSIS_L1_VERSION v2.3.2) -set(HAL_L1_VERSION v1.4.4) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l4.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l4.cmake deleted file mode 100644 index ecd5e0305a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l4.cmake +++ /dev/null @@ -1,191 +0,0 @@ -set(STM32_L4_TYPES - L412xx L422xx L431xx L432xx L433xx L442xx - L443xx L451xx L452xx L462xx L471xx L475xx - L476xx L485xx L486xx L496xx L4A6xx L4P5xx - L4Q5xx L4R5xx L4R7xx L4R9xx L4S5xx L4S7xx - L4S9xx -) -set(STM32_L4_TYPE_MATCH - "L412.." "L422.." "L431.." "L432.." "L433.." "L442.." - "L443.." "L451.." "L452.." "L462.." "L471.." "L475.." - "L476.." "L485.." "L486.." "L496.." "L4A6.." "L4P5.." - "L4Q5.." "L4R5.." "L4R7.." "L4R9.." "L4S5.." "L4S7.." - "L4S9.." -) - -set(STM32_L4_RAM_SIZES - 40K 40K 64K 64K 64K 64K - 64K 160K 160K 160K 96K 96K - 96K 96K 96K 320K 320K 320K - 320K 640K 640K 640K 640K 640K - 640K -) -# on devices where CCRAM is remapped to be contiguous with RAM it is included into RAM section -# If you want to have dedicated section then you will need to use custom linker script -set(STM32_L4_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K - 0K 0K 0K 0K 32K 32K - 32K 32K 32K 0K 0K 0K - 0K 0K 0K 0K 0K 0K - 0K -) - -stm32_util_create_family_targets(L4) - -target_compile_options(STM32::L4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::L4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -) - -list(APPEND STM32_ALL_DEVICES - L412C8 - L412CB - L412K8 - L412KB - L412R8 - L412RB - L412T8 - L412TB - L422CB - L422KB - L422RB - L422TB - L431CB - L431CC - L431KB - L431KC - L431RB - L431RC - L431VC - L432KB - L432KC - L433CB - L433CC - L433RB - L433RC - L433VC - L442KC - L443CC - L443RC - L443VC - L451CC - L451CE - L451RC - L451RE - L451VC - L451VE - L452CC - L452CE - L452RC - L452RE - L452VC - L452VE - L462CE - L462RE - L462VE - L471QE - L471QG - L471RE - L471RG - L471VE - L471VG - L471ZE - L471ZG - L475RC - L475RE - L475RG - L475VC - L475VE - L475VG - L476JE - L476JG - L476ME - L476MG - L476QE - L476QG - L476RC - L476RE - L476RG - L476VC - L476VE - L476VG - L476ZE - L476ZG - L486JG - L486QG - L486RG - L486VG - L486ZG - L496AE - L496AG - L496QE - L496QG - L496RE - L496RG - L496VE - L496VG - L496ZE - L496ZG - L4A6AG - L4A6QG - L4A6RG - L4A6VG - L4A6ZG - L4P5AE - L4P5AG - L4P5CE - L4P5CG - L4P5QE - L4P5QG - L4P5RE - L4P5RG - L4P5VE - L4P5VG - L4P5ZE - L4P5ZG - L4Q5AG - L4Q5CG - L4Q5QG - L4Q5RG - L4Q5VG - L4Q5ZG - L4R5AG - L4R5AI - L4R5QG - L4R5QI - L4R5VG - L4R5VI - L4R5ZG - L4R5ZI - L4R7AI - L4R7VI - L4R7ZI - L4R9AG - L4R9AI - L4R9VG - L4R9VI - L4R9ZG - L4R9ZI - L4S5AI - L4S5QI - L4S5VI - L4S5ZI - L4S7AI - L4S7VI - L4S7ZI - L4S9AI - L4S9VI - L4S9ZI -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32L4 -) - -list(APPEND STM32_FETCH_FAMILIES L4) - -set(CUBE_L4_VERSION v1.17.0) -set(CMSIS_L4_VERSION v1.7.1) -set(HAL_L4_VERSION v1.13.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l5.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l5.cmake deleted file mode 100644 index d74025b07d..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/l5.cmake +++ /dev/null @@ -1,52 +0,0 @@ -set(STM32_L5_TYPES - L552xx L562xx -) -set(STM32_L5_TYPE_MATCH - "L552.." "L562.." -) - -set(STM32_L5_RAM_SIZES - 256K 256K -) -set(STM32_L5_CCRAM_SIZES - 0K 0K -) - -stm32_util_create_family_targets(L5) - -target_compile_options(STM32::L5 INTERFACE - -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::L5 INTERFACE - -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) - -list(APPEND STM32_ALL_DEVICES - L552CC - L552CE - L552ME - L552QC - L552QE - L552RC - L552RE - L552VC - L552VE - L552ZC - L552ZE - L562CE - L562ME - L562QE - L562RE - L562VE - L562ZE -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32L5 -) - -list(APPEND STM32_FETCH_FAMILIES L5) - -set(CUBE_L5_VERSION v1.4.0) -set(CMSIS_L5_VERSION v1.0.4) -set(HAL_L5_VERSION v1.0.4) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/linker_ld.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/linker_ld.cmake deleted file mode 100644 index 6b15cbb3df..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/linker_ld.cmake +++ /dev/null @@ -1,158 +0,0 @@ -if((NOT CCRAM_SIZE) OR (CCRAM_SIZE STREQUAL "0K")) - set(CCRAM_DEFINITION "") - set(CCRAM_SECTION "") -else() - set(CCRAM_DEFINITION " CCMRAM (rw) : ORIGIN = ${CCRAM_ORIGIN}, LENGTH = ${CCRAM_SIZE}\n") - set(CCRAM_SECTION " -_siccmram = LOADADDR(.ccmram);\n\ -.ccmram :\n\ -{\n\ -. = ALIGN(4);\n\ -_sccmram = .;\n\ -*(.ccmram)\n\ -*(.ccmram*)\n\ -. = ALIGN(4);\n\ -_eccmram = .;\n\ -} >CCMRAM AT> FLASH\n\ - ") -endif() - -if((NOT RAM_SHARE_SIZE) OR (RAM_SHARE_SIZE STREQUAL "0K")) - set(RAM_SHARE_DEFINITION "") - set(RAM_SHARE_SECTION "") -else() - set(RAM_SHARE_DEFINITION " RAM_SHARED (rw) : ORIGIN = ${RAM_SHARE_ORIGIN}, LENGTH = ${RAM_SHARE_SIZE}\n") - set(RAM_SHARE_SECTION " -MAPPING_TABLE (NOLOAD) : { *(MAPPING_TABLE) } >RAM_SHARED\n\ -MB_MEM1 (NOLOAD) : { *(MB_MEM1) } >RAM_SHARED\n\ -MB_MEM2 (NOLOAD) : { _sMB_MEM2 = . ; *(MB_MEM2) ; _eMB_MEM2 = . ; } >RAM_SHARED\n\ - ") -endif() - -set(SCRIPT_TEXT -"ENTRY(Reset_Handler)\n\ -\n\ -_estack = ${RAM_ORIGIN} + ${RAM_SIZE};\n\ -_Min_Heap_Size = ${HEAP_SIZE};\n\ -_Min_Stack_Size = ${STACK_SIZE};\n\ -\n\ -MEMORY\n\ -{\n\ - FLASH (rx) : ORIGIN = ${FLASH_ORIGIN}, LENGTH = ${FLASH_SIZE}\n\ - RAM (xrw) : ORIGIN = ${RAM_ORIGIN}, LENGTH = ${RAM_SIZE}\n\ -${CCRAM_DEFINITION}\n\ -${RAM_SHARE_DEFINITION}\n\ -}\n\ -\n\ -SECTIONS\n\ -{\n\ - .isr_vector :\n\ - {\n\ - . = ALIGN(4);\n\ - KEEP(*(.isr_vector))\n\ - . = ALIGN(4);\n\ - } >FLASH\n\ -\n\ - .text :\n\ - {\n\ - . = ALIGN(4);\n\ - *(.text)\n\ - *(.text*)\n\ - *(.glue_7)\n\ - *(.glue_7t)\n\ - *(.eh_frame)\n\ -\n\ - KEEP (*(.init))\n\ - KEEP (*(.fini))\n\ -\n\ - . = ALIGN(4);\n\ - _etext = .;\n\ - } >FLASH\n\ -\n\ - .rodata :\n\ - {\n\ - . = ALIGN(4);\n\ - *(.rodata)\n\ - *(.rodata*)\n\ - . = ALIGN(4);\n\ - } >FLASH\n\ -\n\ - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH\n\ - .ARM : {\n\ - __exidx_start = .;\n\ - *(.ARM.exidx*)\n\ - __exidx_end = .;\n\ - } >FLASH\n\ -\n\ - .preinit_array :\n\ - {\n\ - PROVIDE_HIDDEN (__preinit_array_start = .);\n\ - KEEP (*(.preinit_array*))\n\ - PROVIDE_HIDDEN (__preinit_array_end = .);\n\ - } >FLASH\n\ - .init_array :\n\ - {\n\ - PROVIDE_HIDDEN (__init_array_start = .);\n\ - KEEP (*(SORT(.init_array.*)))\n\ - KEEP (*(.init_array*))\n\ - PROVIDE_HIDDEN (__init_array_end = .);\n\ - } >FLASH\n\ - .fini_array :\n\ - {\n\ - PROVIDE_HIDDEN (__fini_array_start = .);\n\ - KEEP (*(SORT(.fini_array.*)))\n\ - KEEP (*(.fini_array*))\n\ - PROVIDE_HIDDEN (__fini_array_end = .);\n\ - } >FLASH\n\ -\n\ - _sidata = LOADADDR(.data);\n\ -\n\ - .data : \n\ - {\n\ - . = ALIGN(4);\n\ - _sdata = .; \n\ - *(.data)\n\ - *(.data*)\n\ -\n\ - . = ALIGN(4);\n\ - _edata = .;\n\ - } >RAM AT> FLASH\n\ -${CCRAM_SECTION}\n\ - . = ALIGN(4);\n\ - .bss :\n\ - {\n\ - _sbss = .;\n\ - __bss_start__ = _sbss;\n\ - *(.bss)\n\ - *(.bss*)\n\ - *(COMMON)\n\ -\n\ - . = ALIGN(4);\n\ - _ebss = .;\n\ - __bss_end__ = _ebss;\n\ - } >RAM\n\ -\n\ - ._user_heap_stack :\n\ - {\n\ - . = ALIGN(8);\n\ - PROVIDE ( end = . );\n\ - PROVIDE ( _end = . );\n\ - . = . + _Min_Heap_Size;\n\ - . = . + _Min_Stack_Size;\n\ - . = ALIGN(8);\n\ - } >RAM\n\ -\n\ - /DISCARD/ :\n\ - {\n\ - libc.a ( * )\n\ - libm.a ( * )\n\ - libgcc.a ( * )\n\ - }\n\ -\n\ - .ARM.attributes 0 : { *(.ARM.attributes) }\n\ -${RAM_SHARE_SECTION}\n\ -}" -) -file(WRITE "${LINKER_SCRIPT}" "${SCRIPT_TEXT}") - - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/mp1.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/mp1.cmake deleted file mode 100644 index 14a2f75e8a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/mp1.cmake +++ /dev/null @@ -1,56 +0,0 @@ -set(STM32_MP1_TYPES - MP151Axx MP151Cxx - MP153Axx MP153Cxx - MP157Axx MP157Cxx) - -set(STM32_MP1_TYPE_MATCH - "MP151[AD](A.?)?" "MP151[CF](A.?)?" - "MP153[AD](A.?)?" "MP153[CF](A.?)?" - "MP157[AD](A.?)?" "MP157[CF](A.?)?") - -set(STM32_MP1_RAM_SIZES - 384K 384K - 384K 384K - 384K 384K) - -set(STM32_MP1_CCRAM_SIZES - 0K 0K - 0K 0K - 0K 0K) - -stm32_util_create_family_targets(MP1 M4) - -target_compile_options(STM32::MP1::M4 INTERFACE -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard) -target_link_options(STM32::MP1::M4 INTERFACE -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard) -target_compile_definitions(STM32::MP1::M4 INTERFACE CORE_CM4) - -function(stm32mp1_get_memory_info DEVICE TYPE FLASH_SIZE) - if(FLASH_SIZE) - set(${FLASH_SIZE} "0KB" PARENT_SCOPE) - endif() -endfunction() - -list(APPEND STM32_ALL_DEVICES - MP151A - MP151C - MP151D - MP151F - MP153A - MP153C - MP153D - MP153F - MP157A - MP157C - MP157D - MP157F -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32MP1_M4 -) - -list(APPEND STM32_FETCH_FAMILIES MP1) - -set(CUBE_MP1_VERSION 1.5.0) -set(CMSIS_MP1_VERSION cube) -set(HAL_MP1_VERSION cube) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u0.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u0.cmake deleted file mode 100644 index 561f60fea1..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u0.cmake +++ /dev/null @@ -1,63 +0,0 @@ -set(STM32_U0_TYPES - U031xx - U073xx - U083xx -) -set(STM32_U0_TYPE_MATCH - "U031.[468]" - "U073.C" - "U083.C" -) -set(STM32_U0_RAM_SIZES - 12K - 40K - 40K -) -set(STM32_U0_CCRAM_SIZES - 0K - 0K - 0K -) - -stm32_util_create_family_targets(U0) - -target_compile_options(STM32::U0 INTERFACE - -mcpu=cortex-m0plus -) -target_link_options(STM32::U0 INTERFACE - -mcpu=cortex-m0plus -) - -list(APPEND STM32_ALL_DEVICES - U031C6 - U031C8 - U031F4 - U031F6 - U031F8 - U031G6 - U031G8 - U031K4 - U031K8 - U031R6 - U031R8 - U073CC - U073HC - U073KC - U073MC - U073RC - U083CC - U083HC - U083KC - U083MC - U083RC -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32U0 -) - -list(APPEND STM32_FETCH_FAMILIES U0) - -set(CUBE_U0_VERSION v1.0.0) -set(CMSIS_U0_VERSION v1.0.0) -set(HAL_U0_VERSION v1.0.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u5.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u5.cmake deleted file mode 100644 index 7199aea0c7..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/u5.cmake +++ /dev/null @@ -1,53 +0,0 @@ -set(STM32_U5_TYPES - U575xx U585xx -) -set(STM32_U5_TYPE_MATCH - "U575.." "U585.." -) - -set(STM32_U5_RAM_SIZES - 768K 768K -) - -stm32_util_create_family_targets(U5) - -target_compile_options(STM32::U5 INTERFACE - -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::U5 INTERFACE - -mcpu=cortex-m33 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) - -list(APPEND STM32_ALL_DEVICES - U575CG - U575CI - U585CI - U575RG - U575RI - U585RI - U5750G - U5750I - U5850I - U575VG - U575VI - U585VI - U575QG - U575QI - U585QI - U575ZG - U575ZI - U585ZI - U575AG - U575AI - U585AI -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32U5 -) - -list(APPEND STM32_FETCH_FAMILIES U5) - -set(CUBE_U5_VERSION v1.4.0) -set(CMSIS_U5_VERSION v1.3.1) -set(HAL_U5_VERSION v1.4.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wb.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wb.cmake deleted file mode 100644 index 1e88432de4..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wb.cmake +++ /dev/null @@ -1,67 +0,0 @@ -set(STM32_WB_TYPES - WB55xx WB55xx WB35xx WB15xx WB50xx WB30xx WB10xx WB5Mxx -) -set(STM32_WB_TYPE_MATCH - "WB55.C" "WB55.[EGY]" "WB35.." "WB15.." "WB50.." "WB30.." "WB10.." "WB5M.." -) - -# this is not full RAM of the chip but only the part allocated to M4 core (SRAM1 in datasheet) -set(STM32_WB_RAM_SIZES - 64K 192K 32K 12K 64K 32K 12K 192K -) - -# WB series need special area for SRAM2 shared with core M0PLUS -set(STM32_WB_RAM_SHARE_SIZES - 10K 10K 10K 10K 10K 10K 10K 10K -) - -set(STM32_WB_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K -) - -stm32_util_create_family_targets(WB M4) - -target_compile_options(STM32::WB::M4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) -target_link_options(STM32::WB::M4 INTERFACE - -mcpu=cortex-m4 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -) - -function(stm32wb_get_memory_info DEVICE TYPE CORE RAM RAM_ORIGIN TWO_FLASH_BANKS) - set(${TWO_FLASH_BANKS} TRUE PARENT_SCOPE) - list(FIND STM32_WB_TYPES ${TYPE} TYPE_INDEX) - list(GET STM32_WB_RAM_SIZES ${TYPE_INDEX} RAM_VALUE) - set(${RAM} "${RAM_VALUE}-4" PARENT_SCOPE) - set(${RAM_ORIGIN} 0x20000004 PARENT_SCOPE) -endfunction() - -list(APPEND STM32_ALL_DEVICES - WB5MMG - WB50CG - WB30CE - WB10CC - WB55CC - WB55CE - WB55CG - WB55RC - WB55RE - WB55RG - WB55VC - WB55VE - WB55VG - WB55VY - WB15CC - WB35CC - WB35CE -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32WB_M4 -) - -list(APPEND STM32_FETCH_FAMILIES WB) - -set(CUBE_WB_VERSION v1.12.0) -set(CMSIS_WB_VERSION v1.9.0) -set(HAL_WB_VERSION v1.9.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wl.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wl.cmake deleted file mode 100644 index 9649a60afa..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32/wl.cmake +++ /dev/null @@ -1,105 +0,0 @@ -set(STM32_WL_TYPES - WL54xx WL55xx WLE4xx WLE5xx WLE4xx WLE5xx WLE4xx WLE5xx -) -set(STM32_WL_TYPE_MATCH - "WL54.." "WL55.." "WLE4.8" "WLE5.8" "WLE4.B" "WLE5.B" "WLE4.C" "WLE5.C" -) - -# this is RAM size allocated to M4 core -# Note devices with 20 and 48K RAM can use only half of available RAM because -# there are 2 split sections of RAM and our default linker script only manages -# one section. -set(STM32_WL_RAM_SIZES - 32K 32K 10K 10K 24K 24K 64K 64K -) - -# this is RAM size allocated to M0PLUS core -set(STM32_WL_M0PLUS_RAM_SIZES - 32K 32K 0K 0K 0K 0K 0K 0K -) - -set(STM32_WL_CCRAM_SIZES - 0K 0K 0K 0K 0K 0K 0K 0K -) - -set(STM32_WL_DUAL_CORE - WL54xx WL55xx -) - -stm32_util_create_family_targets(WL M4) - -target_compile_options(STM32::WL::M4 INTERFACE - -mcpu=cortex-m4 -mfloat-abi=soft -) -target_link_options(STM32::WL::M4 INTERFACE - -mcpu=cortex-m4 -mfloat-abi=soft -) - -stm32_util_create_family_targets(WL M0PLUS) - -target_compile_options(STM32::WL::M0PLUS INTERFACE - -mcpu=cortex-m0plus -mfloat-abi=soft -) -target_link_options(STM32::WL::M0PLUS INTERFACE - -mcpu=cortex-m0plus -mfloat-abi=soft -) - -function(stm32wl_get_memory_info DEVICE TYPE CORE RAM FLASH_ORIGIN RAM_ORIGIN TWO_FLASH_BANKS) - if(${TYPE} IN_LIST STM32_WL_DUAL_CORE) - set(${TWO_FLASH_BANKS} TRUE PARENT_SCOPE) - else() - set(${TWO_FLASH_BANKS} FALSE PARENT_SCOPE) - endif() - list(FIND STM32_WL_TYPES ${TYPE} TYPE_INDEX) - if(CORE STREQUAL "M4") - list(GET STM32_WL_RAM_SIZES ${TYPE_INDEX} RAM_VALUE) - set(${RAM} ${RAM_VALUE} PARENT_SCOPE) - set(${FLASH_ORIGIN} 0x8000000 PARENT_SCOPE) - set(${RAM_ORIGIN} 0x20000000 PARENT_SCOPE) - elseif((${TYPE} IN_LIST STM32_WL_DUAL_CORE) AND (CORE STREQUAL "M0PLUS")) - list(GET STM32_WL_M0PLUS_RAM_SIZES ${TYPE_INDEX} RAM_VALUE) - set(${RAM} ${RAM_VALUE} PARENT_SCOPE) - set(${FLASH_ORIGIN} 0x8020000 PARENT_SCOPE) - set(${RAM_ORIGIN} 0x20008000 PARENT_SCOPE) - else() - message(FATAL_ERROR "Unknown core ${CORE}") - endif() -endfunction() - -function(stm32wl_get_device_cores DEVICE TYPE CORES) - if(${TYPE} IN_LIST STM32_WL_DUAL_CORE) - set(${CORES} M4 M0PLUS PARENT_SCOPE) - else() - set(${CORES} M4 PARENT_SCOPE) - endif() -endfunction() - -list(APPEND STM32_ALL_DEVICES - WL55CC - WL54CC - WL55JC - WL54JC - WLE5J8 - WLE5JB - WLE5JC - WLE5C8 - WLE5CB - WLE5CC - WLE4J8 - WLE4JB - WLE4JC - WLE4C8 - WLE4CB - WLE4CC -) - -list(APPEND STM32_SUPPORTED_FAMILIES_LONG_NAME - STM32WL_M0PLUS - STM32WL_M4 -) - -list(APPEND STM32_FETCH_FAMILIES WL) - -set(CUBE_WL_VERSION v1.1.0) -set(CMSIS_WL_VERSION v1.1.0) -set(HAL_WL_VERSION v1.1.0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32_gcc.cmake b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32_gcc.cmake deleted file mode 100644 index 6e63c4fdbe..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/cmake/stm32_gcc.cmake +++ /dev/null @@ -1,23 +0,0 @@ -if(${CMAKE_VERSION} VERSION_LESS "3.16.0") - message(WARNING "Current CMake version is ${CMAKE_VERSION}. stm32-cmake requires CMake 3.16 or greater") - -endif() - -get_filename_component(STM32_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} DIRECTORY) -list(APPEND CMAKE_MODULE_PATH ${STM32_CMAKE_DIR}) - -include(stm32/common) -include(stm32/devices) - -set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) - -find_program(CMAKE_C_COMPILER NAMES ${STM32_TARGET_TRIPLET}-gcc HINTS ${TOOLCHAIN_BIN_PATH}) -find_program(CMAKE_CXX_COMPILER NAMES ${STM32_TARGET_TRIPLET}-g++ HINTS ${TOOLCHAIN_BIN_PATH}) -find_program(CMAKE_ASM_COMPILER NAMES ${STM32_TARGET_TRIPLET}-gcc HINTS ${TOOLCHAIN_BIN_PATH}) - -set(CMAKE_EXECUTABLE_SUFFIX_C .elf) -set(CMAKE_EXECUTABLE_SUFFIX_CXX .elf) -set(CMAKE_EXECUTABLE_SUFFIX_ASM .elf) - -# This should be safe to set for a bare-metal cross-compiler -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/docs/MAINTAIN.md b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/docs/MAINTAIN.md deleted file mode 100644 index 67926b51c7..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/docs/MAINTAIN.md +++ /dev/null @@ -1,27 +0,0 @@ -# Supporting new families - -## Write device file - -a file .cmake must be added to the folder cmake/stm32 -This file containes the differents devices and the regex used to parse them. -It also give information on the RAM and CCRAM available - -## Add family to list of know families - -Update the list `STM32_SUPPORTED_FAMILIES_LONG_NAME` located in the cmake/stm32/common.cmake file - -## Add devices to list of devices in devices.cmake - -Add all known devices to the list of all devices - -## Update cube, cmsis and hal version in utilities.cmake - -The versions to use can be found as follow: - - Cube version : a valid tag from the repo https://github.com/STMicroelectronics/STM32Cube${FAMILY} - - Cmsis version : a valid tag from the repo https://github.com/STMicroelectronics/cmsis_device_${FAMILY_L} - - Hal version : a valid tag from the repo https://github.com/STMicroelectronics/stm32${FAMILY_L}xx_hal_driver - -## Add family to CI - -Add the file stm32${FAMILY_L}xx_hal_conf.h file to the root folder of each test. (A template is provided in the corresponding HAL) -Update the cmake.yml workflow file to include the new family diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/CMakeLists.txt deleted file mode 100644 index c2e5161beb..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -project(stm32-blinky-ll C ASM) -set(CMAKE_INCLUDE_CURRENT_DIR TRUE) - -find_package(CMSIS COMPONENTS STM32L0 STM32F1 STM32F4 REQUIRED) -find_package(HAL COMPONENTS STM32L0 STM32F1 STM32F4 LL_RCC LL_GPIO REQUIRED) - -# STM32F4-Discovery -add_executable(stm32-blinky-f4 blinky.c) -target_link_libraries(stm32-blinky-f4 - HAL::STM32::F4::LL_RCC - HAL::STM32::F4::LL_GPIO - CMSIS::STM32::F407VG - STM32::NoSys -) -stm32_print_size_of_target(stm32-blinky-f4) - -# STM32VL-Discovery -add_executable(stm32-blinky-f1 blinky.c) -target_link_libraries(stm32-blinky-f1 - HAL::STM32::F1::LL_RCC - HAL::STM32::F1::LL_GPIO - CMSIS::STM32::F100RB - STM32::NoSys -) -stm32_print_size_of_target(stm32-blinky-f1) - -# STM32L0538-Discovery -add_executable(stm32-blinky-l0 blinky.c) -target_link_libraries(stm32-blinky-l0 - HAL::STM32::L0::LL_RCC - HAL::STM32::L0::LL_GPIO - CMSIS::STM32::L053C8 - STM32::NoSys -) -stm32_print_size_of_target(stm32-blinky-l0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/blinky.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/blinky.c deleted file mode 100644 index 8a314b8b71..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky-ll/blinky.c +++ /dev/null @@ -1,59 +0,0 @@ -#if defined STM32L0 - #include - #include - #include - - // STM32L0538-Discovery green led - PB4 - #define LED_PORT GPIOB - #define LED_PIN LL_GPIO_PIN_4 - #define LED_PORT_CLK_ENABLE() { RCC->IOPENR |= RCC_IOPENR_GPIOBEN; } -#elif defined STM32F1 - #include - #include - #include - - // STM32VL-Discovery green led - PC9 - #define LED_PORT GPIOC - #define LED_PIN LL_GPIO_PIN_9 - #define LED_PORT_CLK_ENABLE() { RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; } -#elif defined STM32F4 - #include - #include - #include - - // STM32F4-Discovery green led - PD12 - #define LED_PORT GPIOD - #define LED_PIN LL_GPIO_PIN_12 - #define LED_PORT_CLK_ENABLE() { RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; } -#endif - -void SysTick_Handler(void) -{ - static int counter = 0; - counter++; - - // 1 Hz blinking - if ((counter % 500) == 0) - LL_GPIO_TogglePin(LED_PORT, LED_PIN); -} - -void initGPIO() -{ - LED_PORT_CLK_ENABLE(); - - LL_GPIO_SetPinMode(LED_PORT, LED_PIN, LL_GPIO_MODE_OUTPUT); - LL_GPIO_SetPinOutputType(LED_PORT, LED_PIN, LL_GPIO_OUTPUT_PUSHPULL); -} - -int main(void) -{ - initGPIO(); - - // 1kHz ticks - SystemCoreClockUpdate(); - SysTick_Config(SystemCoreClock / 1000); - - while(1); - - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/CMakeLists.txt deleted file mode 100644 index 2924c91a26..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/CMakeLists.txt +++ /dev/null @@ -1,89 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -# Configure here which STM32 target(s) to build -option(BLINKY_F4_EXAMPLE "Compile F4 example" ON) -option(BLINKY_F1_EXAMPLE "Compile F1 example" OFF) -option(BLINKY_L0_EXAMPLE "Compile L0 example" OFF) - -option(USE_CPP_FILE "Use the .cpp example file instead of the .c one" OFF) - -if(USE_CPP_FILE) - project(stm32-blinky C CXX ASM) - set(MAIN_SOURCE_FILE blinky.cpp) -else() - project(stm32-blinky C ASM) - set(MAIN_SOURCE_FILE blinky.c) -endif() - -set(CMAKE_INCLUDE_CURRENT_DIR TRUE) - - -set(HAL_COMP_LIST RCC GPIO CORTEX) -set(CMSIS_COMP_LIST "") - -if(BLINKY_F4_EXAMPLE) - list(APPEND CMSIS_COMP_LIST STM32F4) - list(APPEND HAL_COMP_LIST STM32F4) -endif() - -if(BLINKY_F1_EXAMPLE) - list(APPEND CMSIS_COMP_LIST STM32F1) - list(APPEND HAL_COMP_LIST STM32F1) -endif() - -if(BLINKY_L0_EXAMPLE) - list(APPEND CMSIS_COMP_LIST STM32L0) - list(APPEND HAL_COMP_LIST STM32L0) -endif() - -find_package(CMSIS COMPONENTS "${CMSIS_COMP_LIST}" REQUIRED) -find_package(HAL COMPONENTS "${HAL_COMP_LIST}" REQUIRED) - -# Find all device specific drivers: -#find_package(HAL COMPONENTS STM32L0 STM32F1 STM32F4 REQUIRED) -# Find drivers for all families: -#find_package(HAL COMPONENTS RCC GPIO CORTEX REQUIRED) -# Find LL driver: -#find_package(HAL COMPONENTS LL_GPIO REQUIRED) -# Find everything: -#find_package(HAL REQUIRED) - -# STM32F4-Discovery -if(BLINKY_F4_EXAMPLE) - add_executable(stm32-blinky-f4 ${MAIN_SOURCE_FILE} stm32f4xx_hal_conf.h) - target_link_libraries(stm32-blinky-f4 - HAL::STM32::F4::RCC - HAL::STM32::F4::GPIO - HAL::STM32::F4::CORTEX - CMSIS::STM32::F407VG - STM32::NoSys - ) - stm32_print_size_of_target(stm32-blinky-f4) -endif() - -# STM32VL-Discovery -if(BLINKY_F1_EXAMPLE) - add_executable(stm32-blinky-f1 ${MAIN_SOURCE_FILE} stm32f1xx_hal_conf.h) - target_link_libraries(stm32-blinky-f1 - HAL::STM32::F1::RCC - HAL::STM32::F1::GPIO - HAL::STM32::F1::CORTEX - CMSIS::STM32::F100RB - STM32::NoSys - ) - stm32_print_size_of_target(stm32-blinky-f1) -endif() - -# STM32L0538-Discovery -if(BLINKY_L0_EXAMPLE) - add_executable(stm32-blinky-l0 ${MAIN_SOURCE_FILE} stm32l0xx_hal_conf.h) - target_link_libraries(stm32-blinky-l0 - HAL::STM32::L0::RCC - HAL::STM32::L0::GPIO - HAL::STM32::L0::CORTEX - CMSIS::STM32::L053C8 - STM32::NoSys - ) - stm32_print_size_of_target(stm32-blinky-l0) -endif() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.c deleted file mode 100644 index 7627b30336..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.c +++ /dev/null @@ -1,59 +0,0 @@ -#if defined STM32L0 - #include - - // STM32L0538-Discovery green led - PB4 - #define LED_PORT GPIOB - #define LED_PIN GPIO_PIN_4 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE -#elif defined STM32F1 - #include - - // STM32VL-Discovery green led - PC9 - #define LED_PORT GPIOC - #define LED_PIN GPIO_PIN_9 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE -#elif defined STM32F4 - #include - - // STM32F4-Discovery green led - PD12 - #define LED_PORT GPIOD - #define LED_PIN GPIO_PIN_12 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE -#endif - -void SysTick_Handler(void) -{ - HAL_IncTick(); - - // 1 Hz blinking - if ((HAL_GetTick() % 500) == 0) - { - HAL_GPIO_TogglePin(LED_PORT, LED_PIN); - } -} - -void initGPIO() -{ - GPIO_InitTypeDef GPIO_Config; - - GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_Config.Pull = GPIO_NOPULL; - GPIO_Config.Speed = GPIO_SPEED_FREQ_HIGH; - - GPIO_Config.Pin = LED_PIN; - - LED_PORT_CLK_ENABLE(); - HAL_GPIO_Init(LED_PORT, &GPIO_Config); -} - -int main(void) -{ - HAL_Init(); - initGPIO(); - // 1kHz ticks - HAL_SYSTICK_Config(SystemCoreClock / 1000); - - while(1); - - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.cpp b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.cpp deleted file mode 100644 index 63000cd6c7..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/blinky.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#if defined STM32L0 - #include - - // STM32L0538-Discovery green led - PB4 - #define LED_PORT GPIOB - #define LED_PIN GPIO_PIN_4 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE -#elif defined STM32F1 - #include - - // STM32VL-Discovery green led - PC9 - #define LED_PORT GPIOC - #define LED_PIN GPIO_PIN_9 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE -#elif defined STM32F4 - #include - - // STM32F4-Discovery green led - PD12 - #define LED_PORT GPIOD - #define LED_PIN GPIO_PIN_12 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE -#endif - -//This prevent name mangling for functions used in C/assembly files. -extern "C" -{ - void SysTick_Handler(void) - { - HAL_IncTick(); - - // 1 Hz blinking - if ((HAL_GetTick() % 500) == 0) - { - HAL_GPIO_TogglePin(LED_PORT, LED_PIN); - } - } -} - -void initGPIO() -{ - GPIO_InitTypeDef GPIO_Config; - - GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_Config.Pull = GPIO_NOPULL; - GPIO_Config.Speed = GPIO_SPEED_FREQ_HIGH; - - GPIO_Config.Pin = LED_PIN; - - LED_PORT_CLK_ENABLE(); - HAL_GPIO_Init(LED_PORT, &GPIO_Config); -} - -int main(void) -{ - HAL_Init(); - initGPIO(); - // 1kHz ticks - HAL_SYSTICK_Config(SystemCoreClock / 1000); - - while(1); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f1xx_hal_conf.h deleted file mode 100755 index 1d0488c3b1..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f1xx_hal_conf.h +++ /dev/null @@ -1,399 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_CONF_H -#define __STM32F1xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -// #define HAL_ADC_MODULE_ENABLED -// #define HAL_CAN_MODULE_ENABLED -// #define HAL_CAN_LEGACY_MODULE_ENABLED -// #define HAL_CEC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -// #define HAL_CRC_MODULE_ENABLED -// #define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -// #define HAL_ETH_MODULE_ENABLED -// #define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -// #define HAL_HCD_MODULE_ENABLED -// #define HAL_I2C_MODULE_ENABLED -// #define HAL_I2S_MODULE_ENABLED -// #define HAL_IRDA_MODULE_ENABLED -// #define HAL_IWDG_MODULE_ENABLED -// #define HAL_NAND_MODULE_ENABLED -// #define HAL_NOR_MODULE_ENABLED -// #define HAL_PCCARD_MODULE_ENABLED -// #define HAL_PCD_MODULE_ENABLED -// #define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -// #define HAL_RTC_MODULE_ENABLED -// #define HAL_SD_MODULE_ENABLED -// #define HAL_SMARTCARD_MODULE_ENABLED -// #define HAL_SPI_MODULE_ENABLED -// #define HAL_SRAM_MODULE_ENABLED -// #define HAL_TIM_MODULE_ENABLED -// #define HAL_UART_MODULE_ENABLED -// #define HAL_USART_MODULE_ENABLED -// #define HAL_WWDG_MODULE_ENABLED -// #define HAL_MMC_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#if defined(USE_STM3210C_EVAL) -#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#else -#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 8U /* 8 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32f1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32f1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32f1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32f1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32f1xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED -#include "stm32f1xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32f1xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32f1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32f1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32f1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32f1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32f1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32f1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32f1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32f1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32f1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32f1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32f1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32f1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32f1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED -#include "stm32f1xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32f1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32f1xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32f1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32f1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32f1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32f1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32f1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32f1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32f1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32f1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32f1xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32f1xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t* file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f4xx_hal_conf.h deleted file mode 100755 index a934b1cc8d..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32f4xx_hal_conf.h +++ /dev/null @@ -1,501 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_CONF_H -#define __STM32F4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -// #define HAL_ADC_MODULE_ENABLED -// #define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -// #define HAL_CRC_MODULE_ENABLED -// #define HAL_CEC_MODULE_ENABLED -// #define HAL_CRYP_MODULE_ENABLED -// #define HAL_DAC_MODULE_ENABLED -// #define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -// #define HAL_DMA2D_MODULE_ENABLED -// #define HAL_ETH_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -// #define HAL_NAND_MODULE_ENABLED -// #define HAL_NOR_MODULE_ENABLED -// #define HAL_PCCARD_MODULE_ENABLED -// #define HAL_SRAM_MODULE_ENABLED -// #define HAL_SDRAM_MODULE_ENABLED -// #define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -// #define HAL_EXTI_MODULE_ENABLED -// #define HAL_I2C_MODULE_ENABLED -// #define HAL_SMBUS_MODULE_ENABLED -// #define HAL_I2S_MODULE_ENABLED -// #define HAL_IWDG_MODULE_ENABLED -// #define HAL_LTDC_MODULE_ENABLED -// #define HAL_DSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -// #define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -// #define HAL_RNG_MODULE_ENABLED -// #define HAL_RTC_MODULE_ENABLED -// #define HAL_SAI_MODULE_ENABLED -// #define HAL_SD_MODULE_ENABLED -// #define HAL_SPI_MODULE_ENABLED -// #define HAL_TIM_MODULE_ENABLED -// #define HAL_UART_MODULE_ENABLED -// #define HAL_USART_MODULE_ENABLED -// #define HAL_IRDA_MODULE_ENABLED -// #define HAL_SMARTCARD_MODULE_ENABLED -// #define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -// #define HAL_PCD_MODULE_ENABLED -// #define HAL_HCD_MODULE_ENABLED -// #define HAL_FMPI2C_MODULE_ENABLED -// #define HAL_FMPSMBUS_MODULE_ENABLED -// #define HAL_SPDIFRX_MODULE_ENABLED -// #define HAL_DFSDM_MODULE_ENABLED -// #define HAL_LPTIM_MODULE_ENABLED -// #define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ -#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f4xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f4xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f4xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMPI2C_MODULE_ENABLED - #include "stm32f4xx_hal_fmpi2c.h" -#endif /* HAL_FMPI2C_MODULE_ENABLED */ - -#ifdef HAL_FMPSMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_fmpsmbus.h" -#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f4xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32l0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32l0xx_hal_conf.h deleted file mode 100755 index f835cc0681..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/blinky/stm32l0xx_hal_conf.h +++ /dev/null @@ -1,342 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L0xx_HAL_CONF_H -#define __STM32L0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -// #define HAL_ADC_MODULE_ENABLED -// #define HAL_COMP_MODULE_ENABLED -// #define HAL_CRC_MODULE_ENABLED -// #define HAL_CRYP_MODULE_ENABLED -// #define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -// #define HAL_EXTI_MODULE_ENABLED -// #define HAL_FIREWALL_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -// #define HAL_I2C_MODULE_ENABLED -// #define HAL_I2S_MODULE_ENABLED -// #define HAL_IWDG_MODULE_ENABLED -// #define HAL_LCD_MODULE_ENABLED -// #define HAL_LPTIM_MODULE_ENABLED -// #define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -// #define HAL_RNG_MODULE_ENABLED -// #define HAL_RTC_MODULE_ENABLED -// #define HAL_SPI_MODULE_ENABLED -// #define HAL_TIM_MODULE_ENABLED -// #define HAL_TSC_MODULE_ENABLED -// #define HAL_UART_MODULE_ENABLED -// #define HAL_USART_MODULE_ENABLED -// #define HAL_IRDA_MODULE_ENABLED -// #define HAL_SMARTCARD_MODULE_ENABLED -// #define HAL_SMBUS_MODULE_ENABLED -// #define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -// #define HAL_PCD_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (2097152U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE (48000000U) /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define PREREAD_ENABLE 0U -#define BUFFER_CACHE_DISABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FIREWALL_MODULE_ENABLED - #include "stm32l0xx_hal_firewall.h" -#endif /* HAL_FIREWALL_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32l0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l0xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32l0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/CMakeLists.txt deleted file mode 100644 index 499cbfd067..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -project(stm32-custom-linker-script C ASM) - -find_package(CMSIS COMPONENTS STM32F407VG REQUIRED) - -set(PROJECT_SOURCES - main.c -) - -add_executable(stm32-custom-linker-script ${PROJECT_SOURCES}) -target_link_libraries(stm32-custom-linker-script CMSIS::STM32::F407xx STM32::NoSys) -stm32_add_linker_script(stm32-custom-linker-script PRIVATE F407VG.ld) -stm32_print_size_of_target(stm32-custom-linker-script) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/F407VG.ld b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/F407VG.ld deleted file mode 100644 index 7718483383..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/F407VG.ld +++ /dev/null @@ -1,132 +0,0 @@ -ENTRY(Reset_Handler) - -_estack = 0x20000000 + 128K; -_Min_Heap_Size = 0x200; -_Min_Stack_Size = 0x400; - -MEMORY -{ - FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K - CCMRAM (rw) : ORIGIN = 0x10000000, LENGTH = 64K - -} - -SECTIONS -{ - .isr_vector : - { - . = ALIGN(4); - KEEP(*(.isr_vector)) - . = ALIGN(4); - } >FLASH - - .text : - { - . = ALIGN(4); - *(.text) - *(.text*) - *(.glue_7) - *(.glue_7t) - *(.eh_frame) - - KEEP (*(.init)) - KEEP (*(.fini)) - - . = ALIGN(4); - _etext = .; - } >FLASH - - .rodata : - { - . = ALIGN(4); - *(.rodata) - *(.rodata*) - . = ALIGN(4); - } >FLASH - - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH - .ARM : { - __exidx_start = .; - *(.ARM.exidx*) - __exidx_end = .; - } >FLASH - - .preinit_array : - { - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP (*(.preinit_array*)) - PROVIDE_HIDDEN (__preinit_array_end = .); - } >FLASH - .init_array : - { - PROVIDE_HIDDEN (__init_array_start = .); - KEEP (*(SORT(.init_array.*))) - KEEP (*(.init_array*)) - PROVIDE_HIDDEN (__init_array_end = .); - } >FLASH - .fini_array : - { - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP (*(SORT(.fini_array.*))) - KEEP (*(.fini_array*)) - PROVIDE_HIDDEN (__fini_array_end = .); - } >FLASH - - _sidata = LOADADDR(.data); - - .data : - { - . = ALIGN(4); - _sdata = .; - *(.data) - *(.data*) - - . = ALIGN(4); - _edata = .; - } >RAM AT> FLASH - -_siccmram = LOADADDR(.ccmram); -.ccmram : -{ -. = ALIGN(4); -_sccmram = .; -*(.ccmram) -*(.ccmram*) -. = ALIGN(4); -_eccmram = .; -} >CCMRAM AT> FLASH - - . = ALIGN(4); - .bss : - { - _sbss = .; - __bss_start__ = _sbss; - *(.bss) - *(.bss*) - *(COMMON) - - . = ALIGN(4); - _ebss = .; - __bss_end__ = _ebss; - } >RAM - - ._user_heap_stack : - { - . = ALIGN(8); - PROVIDE ( end = . ); - PROVIDE ( _end = . ); - . = . + _Min_Heap_Size; - . = . + _Min_Stack_Size; - . = ALIGN(8); - } >RAM - - /DISCARD/ : - { - libc.a ( * ) - libm.a ( * ) - libgcc.a ( * ) - } - - .ARM.attributes 0 : { *(.ARM.attributes) } -} \ No newline at end of file diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/custom-linker-script/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/CMakeLists.txt deleted file mode 100644 index a35fed6a0b..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -project(stm32-fetch-cmsis-hal C ASM) - -stm32_fetch_cmsis(F4 L0) -stm32_fetch_hal(F4 L0) - -find_package(CMSIS COMPONENTS STM32F407VG STM32L053C8 REQUIRED) -find_package(HAL COMPONENTS STM32F4 STM32L0 REQUIRED) - -set(PROJECT_SOURCES - main.c -) - -add_executable(stm32-fetch-f4 ${PROJECT_SOURCES}) -target_link_libraries(stm32-fetch-f4 CMSIS::STM32::F407VG STM32::NoSys) -stm32_print_size_of_target(stm32-fetch-f4) - -add_executable(stm32-fetch-l0 ${PROJECT_SOURCES}) -target_link_libraries(stm32-fetch-l0 CMSIS::STM32::L053C8 STM32::NoSys) -stm32_print_size_of_target(stm32-fetch-l0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cmsis-hal/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/CMakeLists.txt deleted file mode 100644 index 740d869c54..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -project(stm32-fetch-cube C ASM) - -stm32_fetch_cube(F4 L0) - -find_package(CMSIS COMPONENTS STM32F407VG STM32L053C8 REQUIRED) - -set(PROJECT_SOURCES - main.c -) - -add_executable(stm32-fetch-f4 ${PROJECT_SOURCES}) -target_link_libraries(stm32-fetch-f4 CMSIS::STM32::F407VG STM32::NoSys) -stm32_print_size_of_target(stm32-fetch-f4) - -add_executable(stm32-fetch-l0 ${PROJECT_SOURCES}) -target_link_libraries(stm32-fetch-l0 CMSIS::STM32::L053C8 STM32::NoSys) -stm32_print_size_of_target(stm32-fetch-l0) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/fetch-cube/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/CMakeLists.txt deleted file mode 100644 index d571e86322..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/CMakeLists.txt +++ /dev/null @@ -1,280 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(PROJ_NAME stm32-freertos) -set(STM32_CMAKE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../..) - -# Please note: When using CMSIS, it is recommended to use the FreeRTOS version supplied in the -# Cube repository because more recent kernels might be incompatible to the CMSIS -# implementation provided by STM -option(USE_CMSIS_RTOS "Use CMSIS RTOS provided by Cube repository" OFF) -option(USE_CMSIS_RTOS_V2 "Use CMSIS RTOS_V2 provided by Cube repository" OFF) -option(USE_CUBE_FREERTOS "Use the FreeRTOS kernel provided by the Cube repository" ON) - -if(USE_CUBE_FREERTOS) - message(STATUS "Using FreeRTOS provided by Cube repository") -else() - message(STATUS "Using FreeRTOS from kernel repository") -endif() - -if(USE_CMSIS_RTOS AND USE_CMSIS_RTOS_V2) - message(FATAL_ERROR "Can not use USE_CMSIS_RTOS_V2 together with USE_CMSIS_RTOS!") -endif() - -if(USE_CMSIS_RTOS) - message(STATUS "Compiling CMSIS RTOS support") -elseif(USE_CMSIS_RTOS_V2) - message(STATUS "Compiling CMSIS RTOS V2 support") -endif() - -# This must come before the project call! -set(CMAKE_TOOLCHAIN_FILE ${STM32_CMAKE_PATH}/cmake/stm32_gcc.cmake) -project(${PROJ_NAME} CXX C ASM) -set(CMAKE_INCLUDE_CURRENT_DIR TRUE) - -# Can be used to print out all devices for the H7 or/and the F4 family -# stm32_print_devices_by_family(FAMILY H7) -# stm32_print_devices_by_family(FAMILY F4) -set(SUPPORTED_BOARDS F100RB F407VG H743ZI L552ZE) -option(FREERTOS_F100RB_EXAMPLE "Compile FreeRTOS example for the F100RB board" OFF) -option(FREERTOS_F407VG_EXAMPLE "Compile FreeRTOS example for the F407VG board" OFF) -option(FREERTOS_H743ZI_EXAMPLE "Compile FreeRTOS example for the H743ZI board" OFF) -option(FREERTOS_L552ZE_EXAMPLE "Compile FreeRTOS example for the L552ZE board" OFF) - -if(NOT FREERTOS_F100RB_EXAMPLE AND NOT FREERTOS_F407VG_EXAMPLE AND NOT FREERTOS_H743ZI_EXAMPLE AND NOT FREERTOS_L552ZE_EXAMPLE) - message(FATAL_ERROR - "Please select at least one target to compile by passing FREERTOS__EXAMPLE=ON\n" - "Supported boards: ${SUPPORTED_BOARDS}" - ) -endif() - -set(HAL_COMP_LIST RCC GPIO CORTEX) -set(CMSIS_COMP_LIST "") -set(FREERTOS_COMP_LIST "") -set(FREERTOS_NAMESPACE FreeRTOS) - -if(USE_CMSIS_RTOS) - list(APPEND CMSIS_COMP_LIST RTOS) -endif() - -if(USE_CMSIS_RTOS_V2) - list(APPEND CMSIS_COMP_LIST RTOS_V2) -endif() - -if(FREERTOS_F100RB_EXAMPLE) - list(APPEND CMSIS_COMP_LIST STM32F100RB) - list(APPEND HAL_COMP_LIST STM32F100RB) - list(APPEND FREERTOS_COMP_LIST ARM_CM3) - - if(USE_CUBE_FREERTOS) - # The device family needs to be supplied as a component to use the Cube FreeRTOS sources - list(APPEND FREERTOS_COMP_LIST STM32F1) - set(FREERTOS_F1_NAMESPACE ${FREERTOS_NAMESPACE}::STM32::F1) - else() - set(FREERTOS_F1_NAMESPACE ${FREERTOS_NAMESPACE}) - endif() -endif() - -if(FREERTOS_H743ZI_EXAMPLE) - list(APPEND CMSIS_COMP_LIST STM32H743ZI_M7) - list(APPEND HAL_COMP_LIST STM32H7M7) - list(APPEND FREERTOS_COMP_LIST ARM_CM7) - - if(USE_CUBE_FREERTOS) - # The device family needs to be supplied as a component to use the Cube FreeRTOS sources - list(APPEND FREERTOS_COMP_LIST STM32H7) - set(FREERTOS_H7_NAMESPACE ${FREERTOS_NAMESPACE}::STM32::H7::M7) - else() - set(FREERTOS_H7_NAMESPACE ${FREERTOS_NAMESPACE}) - endif() -endif() - -if(FREERTOS_F407VG_EXAMPLE) - list(APPEND CMSIS_COMP_LIST STM32F407VG) - list(APPEND HAL_COMP_LIST STM32F407VG) - list(APPEND FREERTOS_COMP_LIST ARM_CM4F) - - if(USE_CUBE_FREERTOS) - # The device family needs to be supplied as a component to use the Cube FreeRTOS sources - list(APPEND FREERTOS_COMP_LIST STM32F4) - set(FREERTOS_F4_NAMESPACE ${FREERTOS_NAMESPACE}::STM32::F4) - else() - set(FREERTOS_F4_NAMESPACE ${FREERTOS_NAMESPACE}) - endif() -endif() - -if(FREERTOS_L552ZE_EXAMPLE) - list(APPEND CMSIS_COMP_LIST STM32L552ZE) - list(APPEND HAL_COMP_LIST STM32L552ZE) - list(APPEND FREERTOS_COMP_LIST ARM_CM33_NTZ) - - if(USE_CUBE_FREERTOS) - # The device family needs to be supplied as a component to use the Cube FreeRTOS sources - list(APPEND FREERTOS_COMP_LIST STM32L5) - set(FREERTOS_L5_NAMESPACE ${FREERTOS_NAMESPACE}::STM32::L5) - else() - set(FREERTOS_L5_NAMESPACE ${FREERTOS_NAMESPACE}) - endif() -endif() - -find_package(CMSIS COMPONENTS ${CMSIS_COMP_LIST} REQUIRED) -find_package(HAL COMPONENTS ${HAL_COMP_LIST} REQUIRED) -find_package(FreeRTOS COMPONENTS ${FREERTOS_COMP_LIST} REQUIRED) - -set(PROJECT_SOURCES - main.cpp -) - -# This is required because FreeRTOSConfig.h, stm32hxx_hal_conf.h and main.h -# need to be included -set(INCLUDE_DIRS - ${CMAKE_CURRENT_SOURCE_DIR} -) - -if(FREERTOS_F100RB_EXAMPLE) - set(TARGET_NAME ${PROJ_NAME}-f100rb) - add_executable(${TARGET_NAME}) - - target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES}) - target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} PRIVATE - ${FREERTOS_F1_NAMESPACE}::Timers - ${FREERTOS_F1_NAMESPACE}::Heap::4 - ${FREERTOS_F1_NAMESPACE}::ARM_CM3 - HAL::STM32::F1::RCC - HAL::STM32::F1::GPIO - HAL::STM32::F1::CORTEX - CMSIS::STM32::F100RB - STM32::NoSys - ) - if(USE_CMSIS_RTOS) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::F1::RTOS - ) - endif() - if(USE_CMSIS_RTOS_V2) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::F1::RTOS_V2 - ) - target_compile_definitions(${TARGET_NAME} PRIVATE - USE_CMSIS_RTOS_V2 - CMSIS_RTOS_V2_DEVICE_HEADER="stm32f1xx_hal.h" - ) - endif() - - stm32_print_size_of_target(${TARGET_NAME}) - stm32_generate_binary_file(${TARGET_NAME}) - stm32_generate_hex_file(${TARGET_NAME}) -endif() - -if(FREERTOS_H743ZI_EXAMPLE) - set(TARGET_NAME ${PROJ_NAME}-h743zi) - add_executable(${TARGET_NAME}) - - target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES}) - target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} PRIVATE - ${FREERTOS_H7_NAMESPACE}::Timers - ${FREERTOS_H7_NAMESPACE}::Heap::4 - ${FREERTOS_H7_NAMESPACE}::ARM_CM7 - HAL::STM32::H7::M7::RCC - HAL::STM32::H7::M7::GPIO - HAL::STM32::H7::M7::CORTEX - CMSIS::STM32::H743ZI::M7 - STM32::NoSys - ) - - if(USE_CMSIS_RTOS) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::H7::M7::RTOS - ) - endif() - - if(USE_CMSIS_RTOS_V2) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::H7::M7::RTOS_V2 - ) - target_compile_definitions(${TARGET_NAME} PRIVATE - USE_CMSIS_RTOS_V2 - CMSIS_RTOS_V2_DEVICE_HEADER="stm32h7xx_hal.h" - ) - endif() - - stm32_print_size_of_target(${TARGET_NAME}) - stm32_generate_binary_file(${TARGET_NAME}) - stm32_generate_hex_file(${TARGET_NAME}) -endif() - -if(FREERTOS_F407VG_EXAMPLE) - set(TARGET_NAME ${PROJ_NAME}-f407vg) - add_executable(${TARGET_NAME}) - - target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES}) - target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} PRIVATE - ${FREERTOS_F4_NAMESPACE}::Timers - ${FREERTOS_F4_NAMESPACE}::Heap::1 - ${FREERTOS_F4_NAMESPACE}::ARM_CM4F - HAL::STM32::F4::RCC - HAL::STM32::F4::GPIO - HAL::STM32::F4::CORTEX - CMSIS::STM32::F407VG - STM32::NoSys - ) - - if(USE_CMSIS_RTOS) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::F4::RTOS - ) - endif() - - if(USE_CMSIS_RTOS_V2) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::F4::RTOS_V2 - ) - target_compile_definitions(${TARGET_NAME} PRIVATE - USE_CMSIS_RTOS_V2 - CMSIS_RTOS_V2_DEVICE_HEADER="stm32f4xx_hal.h" - ) - endif() - - stm32_print_size_of_target(${TARGET_NAME}) - stm32_generate_binary_file(${TARGET_NAME}) - stm32_generate_hex_file(${TARGET_NAME}) -endif() - -if(FREERTOS_L552ZE_EXAMPLE) - set(TARGET_NAME ${PROJ_NAME}-l552ze) - add_executable(${TARGET_NAME}) - - target_sources(${TARGET_NAME} PRIVATE ${PROJECT_SOURCES}) - target_include_directories(${TARGET_NAME} PRIVATE ${INCLUDE_DIRS}) - target_link_libraries(${TARGET_NAME} PRIVATE - ${FREERTOS_L5_NAMESPACE}::Timers - ${FREERTOS_L5_NAMESPACE}::Heap::1 - ${FREERTOS_L5_NAMESPACE}::ARM_CM33_NTZ - HAL::STM32::L5::RCC - HAL::STM32::L5::GPIO - HAL::STM32::L5::CORTEX - CMSIS::STM32::L552ZE - STM32::NoSys - ) - - if(USE_CMSIS_RTOS) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::L5::RTOS - ) - endif() - - if(USE_CMSIS_RTOS_V2) - target_link_libraries(${TARGET_NAME} PRIVATE - CMSIS::STM32::L5::RTOS_V2 - ) - target_compile_definitions(${TARGET_NAME} PRIVATE - USE_CMSIS_RTOS_V2 - CMSIS_RTOS_V2_DEVICE_HEADER="stm32l5xx_hal.h" - ) - endif() - - stm32_print_size_of_target(${TARGET_NAME}) - stm32_generate_binary_file(${TARGET_NAME}) - stm32_generate_hex_file(${TARGET_NAME}) -endif() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/FreeRTOSConfig.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/FreeRTOSConfig.h deleted file mode 100644 index 9beeaa97a8..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/FreeRTOSConfig.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * FreeRTOS Kernel V10.4.1 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - - -#ifndef FREERTOS_CONFIG_H -#define FREERTOS_CONFIG_H - -/*----------------------------------------------------------- - * Application specific definitions. - * - * These definitions should be adjusted for your particular hardware and - * application requirements. - * - * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE - * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. - * - * See http://www.freertos.org/a00110.html - *----------------------------------------------------------*/ - -#include -extern uint32_t SystemCoreClock; - -#if defined STM32L5 - #define configENABLE_TRUSTZONE 0 - #if configENABLE_TRUSTZONE - #define configMINIMAL_SECURE_STACK_SIZE ((uint16_t)1024) - #endif - #define configRUN_FREERTOS_SECURE_ONLY 0 - #define configENABLE_FPU 1 - #define configENABLE_MPU 0 -#endif - -#define configUSE_PREEMPTION 1 -#define configUSE_IDLE_HOOK 1 -#define configUSE_TICK_HOOK 1 -#define configCPU_CLOCK_HZ ( SystemCoreClock ) -#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) -#if !defined USE_CMSIS_RTOS_V2 -#define configMAX_PRIORITIES ( 5 ) -#endif -#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 50 ) -#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 2 * 1024 ) ) -#define configMAX_TASK_NAME_LEN ( 10 ) -#define configUSE_TRACE_FACILITY 1 -#define configUSE_16_BIT_TICKS 0 -#define configIDLE_SHOULD_YIELD 1 -#define configUSE_MUTEXES 1 -#define configQUEUE_REGISTRY_SIZE 8 -#define configCHECK_FOR_STACK_OVERFLOW 2 -#define configUSE_RECURSIVE_MUTEXES 1 -#define configUSE_MALLOC_FAILED_HOOK 1 -#define configUSE_APPLICATION_TASK_TAG 0 -#define configUSE_COUNTING_SEMAPHORES 1 -#define configGENERATE_RUN_TIME_STATS 0 - -/* Co-routine definitions. */ -#define configUSE_CO_ROUTINES 0 -#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) - -/* Software timer definitions. */ -#define configUSE_TIMERS 1 -#define configTIMER_TASK_PRIORITY ( 2 ) -#define configTIMER_QUEUE_LENGTH 10 -#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 ) - -/* Set the following definitions to 1 to include the API function, or zero -to exclude the API function. */ -#define INCLUDE_vTaskPrioritySet 1 -#define INCLUDE_uxTaskPriorityGet 1 -#define INCLUDE_vTaskDelete 1 -#define INCLUDE_vTaskCleanUpResources 1 -#define INCLUDE_vTaskSuspend 1 -#define INCLUDE_vTaskDelayUntil 1 -#define INCLUDE_vTaskDelay 1 - -#if defined USE_CMSIS_RTOS_V2 - -#ifndef CMSIS_RTOS_V2_DEVICE_HEADER -#error "CMSIS device header needs to be passed by the build system" -#endif -#define CMSIS_device_header CMSIS_RTOS_V2_DEVICE_HEADER - -/* Needed for CMSIS RTOS_V2 */ -#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0 -#define configMAX_PRIORITIES 56 - -#define INCLUDE_xSemaphoreGetMutexHolder 1 -#define INCLUDE_xTaskGetCurrentTaskHandle 1 -#define INCLUDE_xTaskGetSchedulerState 1 -#define INCLUDE_uxTaskGetStackHighWaterMark 1 -#define INCLUDE_eTaskGetState 1 -#define INCLUDE_xTimerPendFunctionCall 1 - -#endif - -/* Cortex-M specific definitions. */ -#ifdef __NVIC_PRIO_BITS - /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ - #define configPRIO_BITS __NVIC_PRIO_BITS -#else - #define configPRIO_BITS 4 /* 15 priority levels */ -#endif - -/* The lowest interrupt priority that can be used in a call to a "set priority" -function. */ -#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf - -/* The highest interrupt priority that can be used by any interrupt service -routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL -INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER -PRIORITY THAN THIS! (higher priorities are lower numeric values. */ -#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 - -/* Interrupt priorities used by the kernel port layer itself. These are generic -to all Cortex-M ports, and do not rely on any particular library functions. */ -#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) -/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!! -See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */ -#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) - -/* Normal assert() semantics without relying on the provision of an assert.h -header file. */ -#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); } - -/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS -standard names. */ -#define vPortSVCHandler SVC_Handler -#define xPortPendSVHandler PendSV_Handler - -/* When using CMSIS RTOS V2, this define causes a multiple definition error */ -#if !defined USE_CMSIS_RTOS_V2 -#define xPortSysTickHandler SysTick_Handler -#endif - -#endif /* FREERTOS_CONFIG_H */ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.cpp b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.cpp deleted file mode 100644 index 0057dc3d02..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.cpp +++ /dev/null @@ -1,95 +0,0 @@ -#include "main.h" -#include -#include -#include - -#if defined STM32F1 - #include - - // STM32VL-Discovery green led - PC9 - #define LED_PORT GPIOC - #define LED_PIN GPIO_PIN_9 - // STM32VL-Discovery blue led - PC8 - //#define LED_PIN GPIO_PIN_8 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOC_CLK_ENABLE -#elif defined STM32H7 - #include - - // STM32H743ZI blue LED - #define LED_PORT GPIOB - #define LED_PIN GPIO_PIN_7 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE -#elif defined STM32F4 - #include - - // STM32F4-Discovery green led - PD12 - #define LED_PORT GPIOD - #define LED_PIN GPIO_PIN_12 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOD_CLK_ENABLE -#elif defined STM32L5 - #include - - // NUCLEO-L552ZE-Q blue led - PB7 - #define LED_PORT GPIOB - #define LED_PIN GPIO_PIN_7 - #define LED_PORT_CLK_ENABLE __HAL_RCC_GPIOB_CLK_ENABLE -#endif - -static void blinky::blinkTask(void *arg) -{ - for(;;) - { - vTaskDelay(500); - HAL_GPIO_TogglePin(LED_PORT, LED_PIN); - } -} - -void blinky::init() -{ - GPIO_InitTypeDef GPIO_Config; - - GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_Config.Pull = GPIO_NOPULL; - GPIO_Config.Speed = GPIO_SPEED_FREQ_HIGH; - - GPIO_Config.Pin = LED_PIN; - - LED_PORT_CLK_ENABLE(); - HAL_GPIO_Init(LED_PORT, &GPIO_Config); -} - -int main(void) -{ - SystemInit(); - blinky::init(); - - xTaskCreate(blinky::blinkTask, "blinky", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); - - vTaskStartScheduler(); - for (;;); - - return 0; -} - -extern "C" void vApplicationTickHook(void) -{ -} - -extern "C" void vApplicationIdleHook(void) -{ -} - -extern "C" void vApplicationMallocFailedHook(void) -{ - taskDISABLE_INTERRUPTS(); - for(;;); -} - -extern "C" void vApplicationStackOverflowHook(TaskHandle_t pxTask, char *pcTaskName) -{ - (void) pcTaskName; - (void) pxTask; - - taskDISABLE_INTERRUPTS(); - for(;;); -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.h deleted file mode 100644 index d3a99f4517..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/main.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef STM32_CMAKE_EXAMPLES_FREERTOS_MAIN_H_ -#define STM32_CMAKE_EXAMPLES_FREERTOS_MAIN_H_ - -namespace blinky { - -void init(); -static void blinkTask(void* args); - -} - -#endif /* STM32_CMAKE_EXAMPLES_FREERTOS_MAIN_H_ */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f1xx_hal_conf.h deleted file mode 100755 index 1d0488c3b1..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f1xx_hal_conf.h +++ /dev/null @@ -1,399 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_CONF_H -#define __STM32F1xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -// #define HAL_ADC_MODULE_ENABLED -// #define HAL_CAN_MODULE_ENABLED -// #define HAL_CAN_LEGACY_MODULE_ENABLED -// #define HAL_CEC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -// #define HAL_CRC_MODULE_ENABLED -// #define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -// #define HAL_ETH_MODULE_ENABLED -// #define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -// #define HAL_HCD_MODULE_ENABLED -// #define HAL_I2C_MODULE_ENABLED -// #define HAL_I2S_MODULE_ENABLED -// #define HAL_IRDA_MODULE_ENABLED -// #define HAL_IWDG_MODULE_ENABLED -// #define HAL_NAND_MODULE_ENABLED -// #define HAL_NOR_MODULE_ENABLED -// #define HAL_PCCARD_MODULE_ENABLED -// #define HAL_PCD_MODULE_ENABLED -// #define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -// #define HAL_RTC_MODULE_ENABLED -// #define HAL_SD_MODULE_ENABLED -// #define HAL_SMARTCARD_MODULE_ENABLED -// #define HAL_SPI_MODULE_ENABLED -// #define HAL_SRAM_MODULE_ENABLED -// #define HAL_TIM_MODULE_ENABLED -// #define HAL_UART_MODULE_ENABLED -// #define HAL_USART_MODULE_ENABLED -// #define HAL_WWDG_MODULE_ENABLED -// #define HAL_MMC_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#if defined(USE_STM3210C_EVAL) -#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#else -#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 8U /* 8 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32f1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32f1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32f1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32f1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32f1xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED -#include "stm32f1xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32f1xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32f1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32f1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32f1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32f1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32f1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32f1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32f1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32f1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32f1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32f1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32f1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32f1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32f1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED -#include "stm32f1xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32f1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32f1xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32f1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32f1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32f1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32f1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32f1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32f1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32f1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32f1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32f1xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32f1xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t* file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f4xx_hal_conf.h deleted file mode 100644 index 8b5b674ebb..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32f4xx_hal_conf.h +++ /dev/null @@ -1,495 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_CONF_H -#define __STM32F4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -// #define HAL_ADC_MODULE_ENABLED -// #define HAL_CAN_MODULE_ENABLED -// #define HAL_CAN_LEGACY_MODULE_ENABLED -// #define HAL_CRC_MODULE_ENABLED -// #define HAL_CEC_MODULE_ENABLED -// #define HAL_CRYP_MODULE_ENABLED -// #define HAL_DAC_MODULE_ENABLED -// #define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -// #define HAL_DMA2D_MODULE_ENABLED -// #define HAL_ETH_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -// #define HAL_NAND_MODULE_ENABLED -// #define HAL_NOR_MODULE_ENABLED -// #define HAL_PCCARD_MODULE_ENABLED -// #define HAL_SRAM_MODULE_ENABLED -// #define HAL_SDRAM_MODULE_ENABLED -// #define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -// #define HAL_EXTI_MODULE_ENABLED -// #define HAL_I2C_MODULE_ENABLED -// #define HAL_SMBUS_MODULE_ENABLED -// #define HAL_I2S_MODULE_ENABLED -// #define HAL_IWDG_MODULE_ENABLED -// #define HAL_LTDC_MODULE_ENABLED -// #define HAL_DSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -// #define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -// #define HAL_RNG_MODULE_ENABLED -// #define HAL_RTC_MODULE_ENABLED -// #define HAL_SAI_MODULE_ENABLED -// #define HAL_SD_MODULE_ENABLED -// #define HAL_SPI_MODULE_ENABLED -// #define HAL_TIM_MODULE_ENABLED -// #define HAL_UART_MODULE_ENABLED -// #define HAL_USART_MODULE_ENABLED -// #define HAL_IRDA_MODULE_ENABLED -// #define HAL_SMARTCARD_MODULE_ENABLED -// #define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -// #define HAL_PCD_MODULE_ENABLED -// #define HAL_HCD_MODULE_ENABLED -// #define HAL_FMPI2C_MODULE_ENABLED -// #define HAL_SPDIFRX_MODULE_ENABLED -// #define HAL_DFSDM_MODULE_ENABLED -// #define HAL_LPTIM_MODULE_ENABLED -// #define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f4xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f4xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f4xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMPI2C_MODULE_ENABLED - #include "stm32f4xx_hal_fmpi2c.h" -#endif /* HAL_FMPI2C_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f4xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32h7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32h7xx_hal_conf.h deleted file mode 100644 index a0244eea3b..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32h7xx_hal_conf.h +++ /dev/null @@ -1,432 +0,0 @@ -/** - ****************************************************************************** - * @file stm32h7xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32H7xx_HAL_CONF_H -#define __STM32H7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ - #define HAL_MODULE_ENABLED - #define HAL_ADC_MODULE_ENABLED -/* #define HAL_CEC_MODULE_ENABLED */ -/* #define HAL_COMP_MODULE_ENABLED */ - #define HAL_CORTEX_MODULE_ENABLED -/* #define HAL_CRC_MODULE_ENABLED */ -/* #define HAL_CRYP_MODULE_ENABLED */ -/* #define HAL_DAC_MODULE_ENABLED */ -/* #define HAL_DCMI_MODULE_ENABLED */ -/* #define HAL_DFSDM_MODULE_ENABLED */ -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -/* #define HAL_FDCAN_MODULE_ENABLED */ -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -/* #define HAL_HASH_MODULE_ENABLED */ -/* #define HAL_HCD_MODULE_ENABLED */ -/* #define HAL_HRTIM_MODULE_ENABLED */ -/* #define HAL_HSEM_MODULE_ENABLED */ -#define HAL_I2C_MODULE_ENABLED -/* #define HAL_I2S_MODULE_ENABLED */ -/* #define HAL_IRDA_MODULE_ENABLED */ -/* #define HAL_IWDG_MODULE_ENABLED */ -/* #define HAL_JPEG_MODULE_ENABLED */ -/* #define HAL_LPTIM_MODULE_ENABLED */ -#define HAL_LTDC_MODULE_ENABLED -/* #define HAL_MDIOS_MODULE_ENABLED */ -#define HAL_MDMA_MODULE_ENABLED -/* #define HAL_MMC_MODULE_ENABLED */ -/* #define HAL_NAND_MODULE_ENABLED */ -/* #define HAL_NOR_MODULE_ENABLED */ -/* #define HAL_OPAMP_MODULE_ENABLED */ -/* #define HAL_PCD_MODULE_ENABLED */ -#define HAL_PWR_MODULE_ENABLED -/* #define HAL_QSPI_MODULE_ENABLED */ -/* #define HAL_RAMECC_MODULE_ENABLED */ -#define HAL_RCC_MODULE_ENABLED -/* #define HAL_RNG_MODULE_ENABLED */ -/* #define HAL_RTC_MODULE_ENABLED */ -/* #define HAL_SAI_MODULE_ENABLED */ -/* #define HAL_SD_MODULE_ENABLED */ -#define HAL_SDRAM_MODULE_ENABLED -/* #define HAL_SMARTCARD_MODULE_ENABLED */ -/* #define HAL_SMBUS_MODULE_ENABLED */ -/* #define HAL_SPDIFRX_MODULE_ENABLED */ -/* #define HAL_SPI_MODULE_ENABLED */ -/* #define HAL_SRAM_MODULE_ENABLED */ -/* #define HAL_SWPMI_MODULE_ENABLED */ -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -/* #define HAL_USART_MODULE_ENABLED */ -/* #define HAL_WWDG_MODULE_ENABLED */ - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal oscillator (CSI) default value. - * This value is the default CSI value after Reset. - */ -#if !defined (CSI_VALUE) - #define CSI_VALUE ((uint32_t)4000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)64000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -#if !defined (LSI_VALUE) - #define LSI_VALUE ((uint32_t)32000) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)0x0F) /*!< tick interrupt priority */ -#define USE_RTOS 0 -#define USE_SD_TRANSCEIVER 1U /*!< use uSD Transceiver */ - -/* ########################### Ethernet Configuration ######################### */ -#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */ -#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */ - -#define ETH_MAC_ADDR0 ((uint8_t)0x02) -#define ETH_MAC_ADDR1 ((uint8_t)0x00) -#define ETH_MAC_ADDR2 ((uint8_t)0x00) -#define ETH_MAC_ADDR3 ((uint8_t)0x00) -#define ETH_MAC_ADDR4 ((uint8_t)0x00) -#define ETH_MAC_ADDR5 ((uint8_t)0x00) - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - - -/* ################## SPI peripheral configuration ########################## */ -/** - * @brief Used to activate CRC feature inside HAL SPI Driver - * Activated (1U): CRC code is compiled within HAL SPI driver - * Deactivated (0U): CRC code excluded from HAL SPI driver - */ - -#define USE_SPI_CRC 1U - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32h7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32h7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32h7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_MDMA_MODULE_ENABLED - #include "stm32h7xx_hal_mdma.h" -#endif /* HAL_MDMA_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32h7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32h7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32h7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32h7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32h7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32h7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32h7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32h7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32h7xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32h7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32h7xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32h7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32h7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32h7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32h7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32h7xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32h7xx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32h7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32h7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32h7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32h7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32h7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32h7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32h7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32h7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED -#include "stm32h7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h7xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32h7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32h7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RAMECC_MODULE_ENABLED - #include "stm32h7xx_hal_ramecc.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32h7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32h7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32h7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32h7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32h7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32h7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32h7xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32h7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32h7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32h7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32h7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32h7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32h7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32h7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32h7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32h7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32H7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32l5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32l5xx_hal_conf.h deleted file mode 100644 index 104ab9d5f0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/freertos/stm32l5xx_hal_conf.h +++ /dev/null @@ -1,439 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l5xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l5xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32L5xx_HAL_CONF_H -#define STM32L5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 16000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) -#define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) -#define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/** - * @brief External clock source for SAI2 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) -#define EXTERNAL_SAI2_CLOCK_VALUE 48000UL /*!< Value of the SAI2 External clock source in Hz*/ -#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - -/* ################## SDMMC peripheral configuration ######################### */ - -#define USE_SD_TRANSCEIVER 0U - - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32l5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32l5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32l5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED -#include "stm32l5xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32l5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32l5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32l5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32l5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32l5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32l5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32l5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32l5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32l5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32l5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32l5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32l5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32l5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32l5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32l5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32l5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32l5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32l5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32l5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32l5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED -#include "stm32l5xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32l5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32l5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32l5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32l5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32l5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32l5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32l5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32l5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32l5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32l5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32l5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32l5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32l5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED -#include "stm32l5xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32l5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32l5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32l5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32L5xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/CMakeLists.txt deleted file mode 100644 index e86496294d..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/CMakeLists.txt +++ /dev/null @@ -1,33 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -project(stm32-template C ASM) - -#Find CMSIS for both cores -find_package(CMSIS COMPONENTS STM32H757VG_M4 STM32H757VG_M7 REQUIRED) -find_package(HAL COMPONENTS STM32H757VG_M4 STM32H757VG_M7 REQUIRED) - -#Creating both binaries -add_executable(m7core main.c) -add_executable(m4core main.c) - -target_include_directories(m7core PRIVATE Inc) -target_include_directories(m4core PRIVATE Inc) - -target_link_libraries(m7core PRIVATE - HAL::STM32::H7::M7::RCC - HAL::STM32::H7::M7::GPIO - HAL::STM32::H7::M7::CORTEX - CMSIS::STM32::H757VG::M7 - STM32::NoSys - ) -stm32_print_size_of_target(m7core) - -target_link_libraries(m4core PRIVATE - HAL::STM32::H7::M4::RCC - HAL::STM32::H7::M4::GPIO - HAL::STM32::H7::M4::CORTEX - CMSIS::STM32::H757VG::M4 - STM32::NoSys - ) -stm32_print_size_of_target(m4core) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32f4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32f4xx_hal_conf.h deleted file mode 100644 index a934b1cc8d..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32f4xx_hal_conf.h +++ /dev/null @@ -1,501 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_CONF_H -#define __STM32F4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -// #define HAL_ADC_MODULE_ENABLED -// #define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -// #define HAL_CRC_MODULE_ENABLED -// #define HAL_CEC_MODULE_ENABLED -// #define HAL_CRYP_MODULE_ENABLED -// #define HAL_DAC_MODULE_ENABLED -// #define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -// #define HAL_DMA2D_MODULE_ENABLED -// #define HAL_ETH_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -// #define HAL_NAND_MODULE_ENABLED -// #define HAL_NOR_MODULE_ENABLED -// #define HAL_PCCARD_MODULE_ENABLED -// #define HAL_SRAM_MODULE_ENABLED -// #define HAL_SDRAM_MODULE_ENABLED -// #define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -// #define HAL_EXTI_MODULE_ENABLED -// #define HAL_I2C_MODULE_ENABLED -// #define HAL_SMBUS_MODULE_ENABLED -// #define HAL_I2S_MODULE_ENABLED -// #define HAL_IWDG_MODULE_ENABLED -// #define HAL_LTDC_MODULE_ENABLED -// #define HAL_DSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -// #define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -// #define HAL_RNG_MODULE_ENABLED -// #define HAL_RTC_MODULE_ENABLED -// #define HAL_SAI_MODULE_ENABLED -// #define HAL_SD_MODULE_ENABLED -// #define HAL_SPI_MODULE_ENABLED -// #define HAL_TIM_MODULE_ENABLED -// #define HAL_UART_MODULE_ENABLED -// #define HAL_USART_MODULE_ENABLED -// #define HAL_IRDA_MODULE_ENABLED -// #define HAL_SMARTCARD_MODULE_ENABLED -// #define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -// #define HAL_PCD_MODULE_ENABLED -// #define HAL_HCD_MODULE_ENABLED -// #define HAL_FMPI2C_MODULE_ENABLED -// #define HAL_FMPSMBUS_MODULE_ENABLED -// #define HAL_SPDIFRX_MODULE_ENABLED -// #define HAL_DFSDM_MODULE_ENABLED -// #define HAL_LPTIM_MODULE_ENABLED -// #define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ -#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f4xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f4xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f4xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMPI2C_MODULE_ENABLED - #include "stm32f4xx_hal_fmpi2c.h" -#endif /* HAL_FMPI2C_MODULE_ENABLED */ - -#ifdef HAL_FMPSMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_fmpsmbus.h" -#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f4xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32h7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32h7xx_hal_conf.h deleted file mode 100644 index de69e29a6b..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/Inc/stm32h7xx_hal_conf.h +++ /dev/null @@ -1,511 +0,0 @@ -/** - ****************************************************************************** - * @file stm32h7xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32H7xx_HAL_CONF_H -#define STM32H7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -//#define HAL_ADC_MODULE_ENABLED -//#define HAL_CEC_MODULE_ENABLED -//#define HAL_COMP_MODULE_ENABLED -//#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -//#define HAL_CRC_MODULE_ENABLED -//#define HAL_CRYP_MODULE_ENABLED -//#define HAL_DAC_MODULE_ENABLED -//#define HAL_DCMI_MODULE_ENABLED -//#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -//#define HAL_DMA2D_MODULE_ENABLED -//#define HAL_DTS_MODULE_ENABLED -//#define HAL_DSI_MODULE_ENABLED -//#define HAL_ETH_MODULE_ENABLED -//#define HAL_EXTI_MODULE_ENABLED -//#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -//#define HAL_GFXMMU_MODULE_ENABLED -//#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -//#define HAL_HASH_MODULE_ENABLED -//#define HAL_HCD_MODULE_ENABLED -//#define HAL_HRTIM_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -//#define HAL_I2S_MODULE_ENABLED -//#define HAL_IRDA_MODULE_ENABLED -//#define HAL_IWDG_MODULE_ENABLED -//#define HAL_JPEG_MODULE_ENABLED -//#define HAL_LPTIM_MODULE_ENABLED -//#define HAL_LTDC_MODULE_ENABLED -//#define HAL_MDIOS_MODULE_ENABLED -#define HAL_MDMA_MODULE_ENABLED -//#define HAL_MMC_MODULE_ENABLED -//#define HAL_NAND_MODULE_ENABLED -//#define HAL_NOR_MODULE_ENABLED -//#define HAL_OPAMP_MODULE_ENABLED -//#define HAL_OSPI_MODULE_ENABLED -//#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -//#define HAL_PSSI_MODULE_ENABLED -//#define HAL_QSPI_MODULE_ENABLED -//#define HAL_RAMECC_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -//#define HAL_RNG_MODULE_ENABLED -//#define HAL_RTC_MODULE_ENABLED -//#define HAL_SAI_MODULE_ENABLED -//#define HAL_SD_MODULE_ENABLED -//#define HAL_SDRAM_MODULE_ENABLED -//#define HAL_SMARTCARD_MODULE_ENABLED -//#define HAL_SMBUS_MODULE_ENABLED -//#define HAL_SPDIFRX_MODULE_ENABLED -//#define HAL_SPI_MODULE_ENABLED -//#define HAL_SRAM_MODULE_ENABLED -//#define HAL_SWPMI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -//#define HAL_USART_MODULE_ENABLED -//#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal oscillator (CSI) default value. - * This value is the default CSI value after Reset. - */ -#if !defined (CSI_VALUE) - #define CSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (64000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -#if !defined (LSI_VALUE) - #define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */ -#define USE_RTOS 0 -#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */ -#define USE_SPI_CRC 1U /*!< use CRC in SPI */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U /* GFXMMU register callback disabled */ -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U /* OSPI register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################### Ethernet Configuration ######################### */ -#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */ -#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */ - -#define ETH_MAC_ADDR0 (0x02UL) -#define ETH_MAC_ADDR1 (0x00UL) -#define ETH_MAC_ADDR2 (0x00UL) -#define ETH_MAC_ADDR3 (0x00UL) -#define ETH_MAC_ADDR4 (0x00UL) -#define ETH_MAC_ADDR5 (0x00UL) - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32h7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32h7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32h7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_MDMA_MODULE_ENABLED - #include "stm32h7xx_hal_mdma.h" -#endif /* HAL_MDMA_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32h7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32h7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32h7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32h7xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32h7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED - #include "stm32h7xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32h7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32h7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32h7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32h7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32h7xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32h7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32h7xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED - #include "stm32h7xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32h7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32h7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32h7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32h7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GFXMMU_MODULE_ENABLED - #include "stm32h7xx_hal_gfxmmu.h" -#endif /* HAL_GFXMMU_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED - #include "stm32h7xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32h7xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32h7xx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32h7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32h7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32h7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32h7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32h7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32h7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32h7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32h7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED -#include "stm32h7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h7xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32h7xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h7xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED - #include "stm32h7xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32h7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32h7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RAMECC_MODULE_ENABLED - #include "stm32h7xx_hal_ramecc.h" -#endif /* HAL_RAMECC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32h7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32h7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32h7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32h7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32h7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32h7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32h7xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32h7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32h7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32h7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32h7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32h7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32h7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32h7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32h7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32h7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/multi-core/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/CMakeLists.txt deleted file mode 100644 index 9f348fbeef..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -project(stm32-template C ASM) - -find_package(CMSIS COMPONENTS STM32F407VG REQUIRED) -# Find CMSIS for all F4 devices: -#find_package(CMSIS COMPONENTS STM32F4 REQUIRED) -# Find CMSIS for all devices: -#find_package(CMSIS REQUIRED) - -set(PROJECT_SOURCES - main.c -) - -add_executable(stm32-template ${PROJECT_SOURCES}) -target_link_libraries(stm32-template CMSIS::STM32::F407VG STM32::NoSys) -stm32_print_size_of_target(stm32-template) diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/examples/template/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/CMakeLists.txt deleted file mode 100644 index 37db1aa016..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/CMakeLists.txt +++ /dev/null @@ -1,83 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -if(NOT TEST_FAMILIES) - set(TEST_FAMILIES C0 F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 MP1 U0 U5 WB WL) -endif() - -# Nucleo boards can have different devices on it -set(DEVICE_STM32C0xx_Nucleo C031C6) -set(DEVICE_STM32F0xx_Nucleo_32 F031K6) -set(DEVICE_STM32F0xx_Nucleo F030R8) -set(DEVICE_STM32F1xx_Nucleo F103RB) -set(DEVICE_STM32F2xx_Nucleo_144 F207ZG) -set(DEVICE_STM32F3xx_Nucleo_32 F303K8) -set(DEVICE_STM32F3xx_Nucleo F334R8) -set(DEVICE_STM32F3xx_Nucleo_144 F303ZE) -set(DEVICE_STM32F4xx_Nucleo_144 F429ZI) -set(DEVICE_STM32F4xx_Nucleo F446RE) -set(DEVICE_STM32F7xx_Nucleo_144 F746ZG) -set(DEVICE_STM32G0xx_Nucleo G070RB) -set(DEVICE_STM32G0xx_Nucleo_32 G031K8) -set(DEVICE_STM32G4xx_Nucleo G474RE) -set(DEVICE_STM32L0xx_Nucleo L053R8) -set(DEVICE_STM32L0xx_Nucleo_32 L011K4) -set(DEVICE_STM32L1xx_Nucleo L152RE) -set(DEVICE_STM32L4xx_Nucleo L412RB) -set(DEVICE_STM32L4xx_Nucleo_32 L412KB) -set(DEVICE_STM32L4xx_Nucleo_144 L496ZG) -set(DEVICE_STM32MP15xx_DISCO MP157CAC) -set(DEVICE_STM32MP15xx_EVAL MP157FAA) -set(DEVICE_STM32U0xx_Nucleo U031R8) -set(DEVICE_STM32U0xx_DISCO U083CC) -set(DEFINES_STM32469I_EVAL USE_IOEXPANDER) -set(DEFINES_STM32F769I_EVAL USE_IOEXPANDER) -set(DEFINES_STM32L476G_EVAL USE_IOEXPANDER) -set(DEFINES_STM32L4R9I_EVAL USE_ROCKTECH_480x272) - -# Ban some boards because their BSP need non-free components -set(BANNED_BOARDS STM32756G_EVAL) - -project(bsp-test C ASM) -set(CMAKE_INCLUDE_CURRENT_DIR TRUE) - -if(FETCH_ST_SOURCES) - stm32_fetch_cube(${TEST_FAMILIES}) -endif() - -find_package(CMSIS REQUIRED) -find_package(HAL REQUIRED) -find_package(BSP REQUIRED) - -set(SOURCES main.c) - -foreach(FAMILY ${TEST_FAMILIES}) - foreach(BOARD ${BSP_${FAMILY}_BOARDS}) - string(REPLACE "-" "_" BOARD ${BOARD}) - - if(BOARD IN_LIST BANNED_BOARDS) - continue() - endif() - - add_executable(bsp-test-${BOARD} ${SOURCES}) - target_link_libraries(bsp-test-${BOARD} - BSP::STM32::${BOARD} - HAL::STM32::${FAMILY} - STM32::NoSys - ) - if(DEVICE_${BOARD}) - target_link_libraries(bsp-test-${BOARD} CMSIS::STM32::${DEVICE_${BOARD}}) - endif() - if(DEFINES_${BOARD}) - target_compile_definitions(bsp-test-${BOARD} PRIVATE ${DEFINES_${BOARD}}) - endif() - foreach(COMP ${BSP_${FAMILY}_COMPONENTS}) - string(TOUPPER ${COMP} COMP) - # Workaround - F3 has both CS43L22 and CS43L52 that conflicts - if((FAMILY STREQUAL F3) AND (COMP STREQUAL CS43L22)) - continue() - endif() - target_link_libraries(bsp-test-${BOARD} BSP::STM32::${FAMILY}::${COMP}) - endforeach() - endforeach() -endforeach() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/b_g474e_dpow1_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/b_g474e_dpow1_conf.h deleted file mode 100755 index 31cd4ef001..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/b_g474e_dpow1_conf.h +++ /dev/null @@ -1,90 +0,0 @@ -/** - ****************************************************************************** - * @file b_g474e_dpow1_conf_template.h - * @author MCD Application Team - * @brief B-G474E-DPOW1 board configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef B_G474E_DPOW1_CONF_H -#define B_G474E_DPOW1_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32g4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup B-G474E-DPOW1 - * @{ - */ - -/** @addtogroup B-G474E-DPOW1_CONFIG - * @{ - */ - -/** @addtogroup B-G474E-DPOW1_CONFIG_Exported_Constants Exported Constants - * @{ - */ - -/* JOYstick define */ -#define USE_BSP_JOY_FEATURE 1U - -/* COM define */ -#define USE_BSP_COM_FEATURE 0U - -/* COM LOG define */ -#define USE_COM_LOG 0U - -/* USBPD BSP PWR TRACE define */ -#define USE_BSP_PWR_TRACE 0U - -#if (USE_BSP_PWR_TRACE > 0u) -#define USBPD_PWR_TRACE(_PORT_,...) UTIL_ADV_TRACE_FSend(__VA_ARGS__) -#else -#define USBPD_PWR_TRACE(_PORT_,...) -#endif /* USE_BSP_PWR_TRACE */ - -/* IRQ priorities */ -#define BSP_JOY_SEL_IT_PRIORITY 15U - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* B_G474E_DPOW1_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32c0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32c0xx_hal_conf.h deleted file mode 100644 index 1a12a99eab..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32c0xx_hal_conf.h +++ /dev/null @@ -1,275 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32c0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32c0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - * Copyright (c) 2022 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. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32C0xx_HAL_CONF_H -#define STM32C0xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32c0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (48000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ -#if !defined (LSI_STARTUP_TIME) -#define LSI_STARTUP_TIME 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIME */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S1 peripheral - * This value is used by the RCC HAL module to compute the I2S1 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) -#define EXTERNAL_I2S1_CLOCK_VALUE (12288000UL) /*!< Value of the I2S1 External clock source in Hz*/ -#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 3U /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include modules header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32c0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32c0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32c0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32c0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32c0xx_hal_adc.h" - #include "stm32c0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32c0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32c0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32c0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32c0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32c0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32c0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32c0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32c0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32c0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32c0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32c0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32c0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32c0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32c0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32c0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32c0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for functions parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32C0xx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f0xx_hal_conf.h deleted file mode 100755 index f1b164814a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f0xx_hal_conf.h +++ /dev/null @@ -1,321 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CONF_H -#define __STM32F0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ######################### Oscillator Values adaptation ################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT 5000U /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator for ADC (HSI14) value. - */ -#if !defined (HSI14_VALUE) - #define HSI14_VALUE 14000000U /*!< Value of the Internal High Speed oscillator for ADC in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI14_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)(1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority (lowest by default) */ - /* Warning: Must be set to higher priority for HAL_Delay() */ - /* and HAL_GetTick() usage under interrupt context */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U -#define USE_SPI_CRC 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1*/ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f0xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f0xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32f0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32f0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f1xx_hal_conf.h deleted file mode 100755 index df420ff4f0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f1xx_hal_conf.h +++ /dev/null @@ -1,399 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_CONF_H -#define __STM32F1xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#if defined(USE_STM3210C_EVAL) -#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#else -#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 8U /* 8 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32f1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32f1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32f1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32f1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32f1xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED -#include "stm32f1xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32f1xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32f1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32f1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32f1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32f1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32f1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32f1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32f1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32f1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32f1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32f1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32f1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32f1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32f1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED -#include "stm32f1xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32f1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32f1xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32f1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32f1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32f1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32f1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32f1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32f1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32f1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32f1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32f1xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32f1xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t* file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f2xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f2xx_hal_conf.h deleted file mode 100755 index c26dc66dc0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f2xx_hal_conf.h +++ /dev/null @@ -1,422 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f2xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f2xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F2xx_HAL_CONF_H -#define __STM32F2xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f2xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f2xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f2xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f2xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f2xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f2xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f2xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f2xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f2xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f2xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f2xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f2xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f2xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f2xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f2xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f2xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f2xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f2xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f2xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f2xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f2xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f2xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f2xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f2xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f2xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f2xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f2xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f2xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f2xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f2xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f2xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f2xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f2xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f2xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f2xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f2xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F2xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f3xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f3xx_hal_conf.h deleted file mode 100755 index a5f7ad3991..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f3xx_hal_conf.h +++ /dev/null @@ -1,357 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f3xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F3xx_HAL_CONF_H -#define __STM32F3xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SDADC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (8000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT (5000U) /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (40000U) -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - * - External clock generated through external PLL component on EVAL 303 (based on MCO or crystal) - * - External clock not generated on EVAL 373 - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE (8000000U) /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)(1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U -#define USE_SPI_CRC 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SDADC_REGISTER_CALLBACKS 0U /* SDADC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1U*/ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f3xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f3xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f3xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f3xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f3xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f3xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f3xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f3xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f3xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32f3xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f3xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f3xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f3xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f3xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f3xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f3xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f3xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32f3xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f3xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f3xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f3xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f3xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32f3xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f3xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f3xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f3xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SDADC_MODULE_ENABLED - #include "stm32f3xx_hal_sdadc.h" -#endif /* HAL_SDADC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f3xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f3xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f3xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f3xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32f3xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f3xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f3xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f3xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F3xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f4xx_hal_conf.h deleted file mode 100755 index 3a0dae6b95..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f4xx_hal_conf.h +++ /dev/null @@ -1,495 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_CONF_H -#define __STM32F4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CRC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_FMPI2C_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f4xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f4xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f4xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMPI2C_MODULE_ENABLED - #include "stm32f4xx_hal_fmpi2c.h" -#endif /* HAL_FMPI2C_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f4xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f7xx_hal_conf.h deleted file mode 100755 index b27f66e49a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32f7xx_hal_conf.h +++ /dev/null @@ -1,495 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f7xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f7xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F7xx_HAL_CONF_H -#define __STM32F7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_JPEG_MODULE_ENABLED -#define HAL_MDIOS_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U /* To enable prefetch */ -#define ART_ACCLERATOR_ENABLE 1U /* To enable ART Accelerator */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIOS register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x11U) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x12U) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001U) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002U) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001U) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020U) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000U) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f7xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f7xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f7xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32f7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32f7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g0xx_hal_conf.h deleted file mode 100755 index 86321b7c22..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g0xx_hal_conf.h +++ /dev/null @@ -1,356 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32g0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2018 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G0xx_HAL_CONF_H -#define STM32G0xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -//#define HAL_HCD_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_CEC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_I2S_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_HCD_REGISTER_CALLBACKS 0u -#define USE_HAL_PCD_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ -#endif - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S1 peripheral - * This value is used by the RCC HAL module to compute the I2S1 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) -#define EXTERNAL_I2S1_CLOCK_VALUE (48000UL) /*!< Value of the I2S1 External clock source in Hz*/ -#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ - -#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) -/** - * @brief External clock source for I2S2 peripheral - * This value is used by the RCC HAL module to compute the I2S2 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S2_CLOCK_VALUE) - #define EXTERNAL_I2S2_CLOCK_VALUE 48000U /*!< Value of the I2S2 External clock source in Hz*/ -#endif /* EXTERNAL_I2S2_CLOCK_VALUE */ -#endif - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include modules header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32g0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32g0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32g0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32g0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32g0xx_hal_adc.h" -#include "stm32g0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32g0xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32g0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32g0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32g0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32g0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32g0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32g0xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32g0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32g0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32g0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32g0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32g0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32g0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32g0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32g0xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32g0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32g0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32g0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32g0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32g0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32g0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32g0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32g0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32g0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32g0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for functions parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g474e_eval_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g474e_eval_conf.h deleted file mode 100755 index d3c4d1dd8b..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g474e_eval_conf.h +++ /dev/null @@ -1,115 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g474e_eval_conf_template.h - * @author MCD Application Team - * @brief STM32G474E-EVAL board configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G474E_EVAL_CONF_H -#define STM32G474E_EVAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32g4xx_hal.h" -#include "stm32g474e_eval_errno.h" -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32G474E-EVAL - * @{ - */ - -/** @defgroup STM32G474E-EVAL_CONFIG STM32G474E-EVAL CONFIG - * @{ - */ - -/** @defgroup STM32G474E-EVAL_CONFIG_Exported_Constants Exported Constants - * @{ - */ - -/* COM define */ -#define USE_BSP_COM_FEATURE 1U - -/* COM LOG define */ -#define USE_COM_LOG 0U - -/* POT define */ -#define USE_BSP_POT_FEATURE 1U - -/* COMP define : - depends on SB8 and SB10 configuration : refer to UM */ -#define USE_BSP_POT_COMP_FEATURE 0U - -/* IO Expander define */ -#define USE_BSP_IO_CLASS 1U - -/* JOY define */ -#define USE_BSP_JOY_FEATURE 1U - -/* USBPD BSP PWR TRACE define */ -#define USE_BSP_PWR_TRACE 0U - -#if (USE_BSP_PWR_TRACE > 0u) -#define USBPD_PWR_TRACE(_PORT_,...) UTIL_ADV_TRACE_FSend(__VA_ARGS__) -#else -#define USBPD_PWR_TRACE(_PORT_,...) -#endif /* USE_BSP_PWR_TRACE */ - -/* IRQ priorities */ -#define BSP_SRAM_IT_PRIORITY 15U -#define BSP_IOEXPANDER_IT_PRIORITY 14U -#define BSP_BUTTON_USER_IT_PRIORITY 15U -#define BSP_AUDIO_OUT_IT_PRIORITY 13U -#define BSP_AUDIO_IN_IT_PRIORITY 12U - -/* Audio codecs defines */ -#define USE_AUDIO_CODEC_WM8994 1U - -/* Default Audio IN internal buffer size */ -#define DEFAULT_AUDIO_IN_BUFFER_SIZE 2048U - -/* I2C3 Frequency in Hz */ -#define BUS_I2C3_FREQUENCY 100000U /* Frequency of I2C3 = 100 kHz*/ - -/* SPI2 Baud rate in bps */ -#define BUS_SPI2_BAUDRATE 12500000U /* baud rate of SPIn = 12.5 Mbps */ -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G474E_EVAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_hal_conf.h deleted file mode 100755 index e518391855..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_hal_conf.h +++ /dev/null @@ -1,382 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g4xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32g4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G4xx_HAL_CONF_H -#define STM32G4xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_EXTI_REGISTER_CALLBACKS 0U -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE (48000000UL) /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -/*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations in voltage and temperature.*/ -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S and SAI peripherals - * This value is used by the I2S and SAI HAL modules to compute the I2S and SAI clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) -#define EXTERNAL_CLOCK_VALUE (48000UL) /*!< Value of the External clock source in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32g4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32g4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32g4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32g4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32g4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32g4xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32g4xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32g4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32g4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32g4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32g4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32g4xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32g4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32g4xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED -#include "stm32g4xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32g4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32g4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32g4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32g4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32g4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32g4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32g4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32g4xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32g4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32g4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED -#include "stm32g4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32g4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32g4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32g4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32g4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32g4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32g4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32g4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32g4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32g4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32g4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32g4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_nucleo_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_nucleo_conf.h deleted file mode 100755 index 8b97fc25be..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32g4xx_nucleo_conf.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g4xx_nucleo_conf_template.h - * @author MCD Application Team - * @brief STM32G4xx_Nucleo board configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G4XX_NUCLEO_CONF_H -#define STM32G4XX_NUCLEO_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32g4xx_hal.h" - -/** @addtogroup BSP - * @{ - */ - -/** @addtogroup STM32G4XX_NUCLEO - * @{ - */ - -/** @defgroup STM32G4XX_NUCLEO_CONFIG Config - * @{ - */ - -/** @defgroup STM32G4XX_NUCLEO_CONFIG_Exported_Constants Exported Constants - * @{ - */ -/* Uncomment one of the board define below */ -/* #define USE_NUCLEO_32 */ -#define USE_NUCLEO_64 - -/* COM usage define */ -#define USE_BSP_COM_FEATURE 0U - -/* COM log define */ -#define USE_COM_LOG 0U - -/* IRQ priorities */ -#define BSP_BUTTON_USER_IT_PRIORITY 15U -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G4XX_NUCLEO_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h5xx_hal_conf.h deleted file mode 100644 index c453c736ee..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h5xx_hal_conf.h +++ /dev/null @@ -1,488 +0,0 @@ -/** - ********************************************************************************************************************** - * @file stm32h5xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32h5xx_hal_conf.h. - ********************************************************************************************************************** - * @attention - * - * Copyright (c) 2023 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 STM32H5xx_HAL_CONF_H -#define STM32H5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ----------------------------------------------------------------------------------------------------*/ -/* Exported constants ------------------------------------------------------------------------------------------------*/ - -/* ########################################### Module Selection ##################################################### */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCACHE_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DTS_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_I3C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RAMCFG_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_XSPI_MODULE_ENABLED - -/* ####################################### Oscillator Values adaptation ##############################################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 25000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Core Speed oscillator (CSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when CSI is used as system clock source, directly or through the PLL). - */ -#if !defined (CSI_VALUE) -#define CSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 64000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ - -#if !defined (LSI_STARTUP_TIME) -#define LSI_STARTUP_TIME 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIME */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/** - * @brief External clock source for SPI/SAI peripheral - * This value is used by the SPI/SAI HAL module to compute the SPI/SAI clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) -#define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ############################################ System Configuration ################################################ */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U /*!< Enable prefetch */ - -/* ############################################ Assert Selection #################################################### */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ############################################ Register callback feature configuration ############################# */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32h5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_I3C_REGISTER_CALLBACKS 0U /* I3C register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ -#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_XSPI_REGISTER_CALLBACKS 0U /* XSPI register callback disabled */ - -/* ############################################ SPI peripheral configuration ######################################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ -#define USE_SPI_CRC 1U - - -/* Includes ----------------------------------------------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32h5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32h5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32h5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_DCACHE_MODULE_ENABLED -#include "stm32h5xx_hal_dcache.h" -#endif /* HAL_DCACHE_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32h5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32h5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED -#include "stm32h5xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32h5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32h5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32h5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32h5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32h5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32h5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32h5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32h5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32h5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32h5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32h5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32h5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32h5xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_I3C_MODULE_ENABLED -#include "stm32h5xx_hal_i3c.h" -#endif /* HAL_I3C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32h5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32h5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_XSPI_MODULE_ENABLED -#include "stm32h5xx_hal_xspi.h" -#endif /* HAL_XSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32h5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32h5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32h5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32h5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32h5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32h5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32h5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32h5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32h5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32h5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32h5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32h5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32h5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32h5xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32h5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32h5xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED -#include "stm32h5xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32h5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32h5xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32h5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32h5xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32h5xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED -#include "stm32h5xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_RAMCFG_MODULE_ENABLED -#include "stm32h5xx_hal_ramcfg.h" -#endif /* HAL_RAMCFG_MODULE_ENABLED */ - -/* Exported macro ----------------------------------------------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ----------------------------------------------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H5xx_HAL_CONF_H */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h7xx_hal_conf.h deleted file mode 100755 index 05bf9c5f6e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32h7xx_hal_conf.h +++ /dev/null @@ -1,513 +0,0 @@ -/** - ****************************************************************************** - * @file stm32h7xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32h7xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32H7xx_HAL_CONF_H -#define STM32H7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_DTS_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GFXMMU_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_JPEG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_MDIOS_MODULE_ENABLED -#define HAL_MDMA_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RAMECC_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SWPMI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (25000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal oscillator (CSI) default value. - * This value is the default CSI value after Reset. - */ -#if !defined (CSI_VALUE) - #define CSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (64000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -#if !defined (LSI_VALUE) - #define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */ -#define USE_RTOS 0 -#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */ -#define USE_SPI_CRC 1U /*!< use CRC in SPI */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U /* GFXMMU register callback disabled */ -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U /* OSPI register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################### Ethernet Configuration ######################### */ -#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */ -#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */ - -#define ETH_MAC_ADDR0 (0x02UL) -#define ETH_MAC_ADDR1 (0x00UL) -#define ETH_MAC_ADDR2 (0x00UL) -#define ETH_MAC_ADDR3 (0x00UL) -#define ETH_MAC_ADDR4 (0x00UL) -#define ETH_MAC_ADDR5 (0x00UL) - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32h7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32h7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32h7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_MDMA_MODULE_ENABLED - #include "stm32h7xx_hal_mdma.h" -#endif /* HAL_MDMA_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32h7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32h7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32h7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32h7xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32h7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED - #include "stm32h7xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32h7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32h7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32h7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32h7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32h7xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32h7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32h7xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED - #include "stm32h7xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32h7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32h7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32h7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32h7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GFXMMU_MODULE_ENABLED - #include "stm32h7xx_hal_gfxmmu.h" -#endif /* HAL_GFXMMU_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED - #include "stm32h7xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32h7xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32h7xx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32h7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32h7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32h7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32h7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32h7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32h7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32h7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32h7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED -#include "stm32h7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h7xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32h7xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h7xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED - #include "stm32h7xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32h7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32h7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RAMECC_MODULE_ENABLED - #include "stm32h7xx_hal_ramecc.h" -#endif /* HAL_RAMECC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32h7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32h7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32h7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32h7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32h7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32h7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32h7xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32h7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32h7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32h7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32h7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32h7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32h7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32h7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32h7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32h7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l0xx_hal_conf.h deleted file mode 100755 index 2f3c4d752e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l0xx_hal_conf.h +++ /dev/null @@ -1,342 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L0xx_HAL_CONF_H -#define __STM32L0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FIREWALL_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (2097152U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE (48000000U) /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define PREREAD_ENABLE 0U -#define BUFFER_CACHE_DISABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FIREWALL_MODULE_ENABLED - #include "stm32l0xx_hal_firewall.h" -#endif /* HAL_FIREWALL_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32l0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l0xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32l0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l1xx_hal_conf.h deleted file mode 100755 index 06fbc29410..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l1xx_hal_conf.h +++ /dev/null @@ -1,324 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L1xx_HAL_CONF_H -#define __STM32L1xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (2097000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External Low Speed oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x000FU) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1U*/ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SDMMC_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l1xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l1xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32l1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l1xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l1xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l4xx_hal_conf.h deleted file mode 100755 index ca41261ffa..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l4xx_hal_conf.h +++ /dev/null @@ -1,480 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l4xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32L4xx_HAL_CONF_H -#define STM32L4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FIREWALL_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GFXMMU_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SWPMI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE 48000U /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/** - * @brief External clock source for SAI2 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) - #define EXTERNAL_SAI2_CLOCK_VALUE 48000U /*!< Value of the SAI2 External clock source in Hz*/ -#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l4xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U -#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32l4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32l4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32l4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l4xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32l4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32l4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32l4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_GFXMMU_MODULE_ENABLED - #include "stm32l4xx_hal_gfxmmu.h" -#endif /* HAL_GFXMMU_MODULE_ENABLED */ - -#ifdef HAL_FIREWALL_MODULE_ENABLED - #include "stm32l4xx_hal_firewall.h" -#endif /* HAL_FIREWALL_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32l4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32l4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l4xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32l4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32l4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32l4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32l4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l4xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32l4xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32l4xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED - #include "stm32l4xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32l4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32l4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32l4xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l4xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32L4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l5xx_hal_conf.h deleted file mode 100644 index cd47676670..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32l5xx_hal_conf.h +++ /dev/null @@ -1,439 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l5xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l5xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32L5xx_HAL_CONF_H -#define STM32L5xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 16000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/** - * @brief External clock source for SAI2 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) - #define EXTERNAL_SAI2_CLOCK_VALUE 48000UL /*!< Value of the SAI2 External clock source in Hz*/ -#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - -/* ################## SDMMC peripheral configuration ######################### */ - -#define USE_SD_TRANSCEIVER 0U - - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32l5xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32l5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED - #include "stm32l5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32l5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED - #include "stm32l5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32l5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32l5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32l5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32l5xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED - #include "stm32l5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32l5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32l5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l5xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32L5xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u0xx_hal_conf.h deleted file mode 100644 index e402e06798..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u0xx_hal_conf.h +++ /dev/null @@ -1,335 +0,0 @@ -/** - ****************************************************************************** - * @file stm32u0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 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 __STM32U0xx_HAL_CONF_H -#define __STM32U0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ - -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRS_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 4000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI32_VALUE) -#define MSI32_VALUE 32000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI32_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ - -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (3U) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ - -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32n6xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LCD_REGISTER_CALLBACKS 0U /* LCD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32u0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32u0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32u0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32u0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32u0xx_hal_adc.h" -#include "stm32u0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32u0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32u0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRS_MODULE_ENABLED -#include "stm32u0xx_ll_crs.h" -#endif /* HAL_CRS_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32u0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32u0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32u0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32u0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32u0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32u0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32u0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED -#include "stm32u0xx_hal_lcd.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32u0xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32u0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32u0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32u0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32u0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32u0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED -#include "stm32u0xx_ll_system.h" -#include "stm32u0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32u0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32u0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32u0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32u0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32u0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED -#include "stm32u0xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32u0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32U0xx_HAL_CONF_H */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u5xx_hal_conf.h deleted file mode 100644 index e62e0a61ab..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32u5xx_hal_conf.h +++ /dev/null @@ -1,474 +0,0 @@ -/** - ****************************************************************************** - * @file stm32u5xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32u5xx_hal_conf.h. - ****************************************************************************** - * @attention - * - * Copyright (c) 2021 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 STM32U5xx_HAL_CONF_H -#define STM32U5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCACHE_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MDF_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RAMCFG_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 16000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) -#define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz. The real value may -vary depending on the variations in voltage and temperature.*/ - -#if !defined (LSI_STARTUP_TIMEOUT) -#define LSI_STARTUP_TIMEOUT 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIMEOUT */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) -#define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U /*!< Enable prefetch */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32u5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDF_REGISTER_CALLBACKS 0U /* MDF register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ -#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ -#define USE_SPI_CRC 1U - -/* ################## SDMMC peripheral configuration ######################### */ - -#define USE_SD_TRANSCEIVER 0U - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32u5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32u5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32u5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_DCACHE_MODULE_ENABLED -#include "stm32u5xx_hal_dcache.h" -#endif /* HAL_DCACHE_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32u5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32u5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED -#include "stm32u5xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32u5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32u5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32u5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32u5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32u5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32u5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32u5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32u5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32u5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32u5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32u5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32u5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32u5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32u5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32u5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32u5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32u5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32u5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED -#include "stm32u5xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32u5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32u5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32u5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32u5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32u5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32u5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32u5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED -#include "stm32u5xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32u5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32u5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32u5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32u5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32u5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32u5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32u5xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32u5xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED -#include "stm32u5xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32u5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32u5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32u5xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32u5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED -#include "stm32u5xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_RAMCFG_MODULE_ENABLED -#include "stm32u5xx_hal_ramcfg.h" -#endif /* HAL_RAMCFG_MODULE_ENABLED */ - -#ifdef HAL_MDF_MODULE_ENABLED -#include "stm32u5xx_hal_mdf.h" -#endif /* HAL_MDF_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32U5xx_HAL_CONF_H */ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wbxx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wbxx_hal_conf.h deleted file mode 100644 index b78c5cb83d..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wbxx_hal_conf.h +++ /dev/null @@ -1,355 +0,0 @@ -/** - ****************************************************************************** - * @file stm32wbxx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32WBxx_HAL_CONF_H -#define STM32WBxx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_PCD_REGISTER_CALLBACKS 0u -#define USE_HAL_PKA_REGISTER_CALLBACKS 0u -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SAI_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_TSC_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -#define USE_HAL_CRYP_SUSPEND_RESUME 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ - -#if !defined (HSE_VALUE) - #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI1) value. - */ -#if !defined (LSI1_VALUE) - #define LSI1_VALUE (32000UL) /*!< LSI1 Typical Value in Hz*/ -#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief Internal Low Speed oscillator (LSI2) value. - */ -#if !defined (LSI2_VALUE) - #define LSI2_VALUE (32000UL) /*!< LSI2 Typical Value in Hz*/ -#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (HSI48) default value. - * This value is the default HSI48 range value after Reset. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE (48000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI48_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE (48000UL) /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32wbxx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32wbxx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32wbxx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32wbxx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32wbxx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32wbxx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32wbxx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32wbxx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32wbxx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32wbxx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32wbxx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32wbxx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32wbxx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32wbxx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32wbxx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32wbxx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32wbxx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32wbxx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32wbxx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32wbxx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32wbxx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32wbxx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32wbxx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32wbxx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32wbxx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32wbxx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32wbxx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32wbxx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32wbxx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32wbxx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32wbxx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32wbxx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32WBxx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wlxx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wlxx_hal_conf.h deleted file mode 100644 index 82170f12fe..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/bsp/stm32wlxx_hal_conf.h +++ /dev/null @@ -1,340 +0,0 @@ -/** - ****************************************************************************** - * @file stm32wlxx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32WLxx_HAL_CONF_H -#define STM32WLxx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SUBGHZ_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_I2S_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_PKA_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_SUBGHZ_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ - -#if !defined (HSE_VALUE) -#define HSE_VALUE 32000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) -#define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (HSI48) default value. - * This value is the default HSI48 range value after Reset. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI48_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1uL <<__NVIC_PRIO_BITS) - 1uL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32wlxx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32wlxx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32wlxx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32wlxx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32wlxx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32wlxx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32wlxx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32wlxx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32wlxx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32wlxx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED - #include "stm32wlxx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32wlxx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32wlxx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32wlxx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32wlxx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32wlxx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32wlxx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32wlxx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32wlxx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32wlxx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32wlxx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32wlxx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32wlxx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32wlxx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32wlxx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32wlxx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SUBGHZ_MODULE_ENABLED - #include "stm32wlxx_hal_subghz.h" -#endif /* HAL_SUBGHZ_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32wlxx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32wlxx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32wlxx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32wlxx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32WLxx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/CMakeLists.txt deleted file mode 100644 index 89e9b1da2a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -if(NOT TEST_FAMILIES) - set(TEST_FAMILIES C0 F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 U0 U5 WB WL) -endif() - -if("MP1" IN_LIST TEST_FAMILIES) - message(WARNING "CMSIS for MP1 devices requires HAL, this test is expected to fail for the MP1 family") -endif() - -project(cmsis-test C ASM) - -if(FETCH_ST_SOURCES) - stm32_fetch_cmsis(${TEST_FAMILIES}) -endif() - -list(TRANSFORM TEST_FAMILIES PREPEND STM32 OUTPUT_VARIABLE TEST_FAMILIES_LONG_NAMES) -find_package(CMSIS COMPONENTS "${TEST_FAMILIES_LONG_NAMES}" REQUIRED) - -set(SOURCES main.c) - -include(stm32/devices) - -foreach(FAMILY ${TEST_FAMILIES}) - stm32_get_devices_by_family(STM_DEVICES FAMILY ${FAMILY}) - stm32_get_cores(CORES FAMILY ${FAMILY}) - foreach(DEVICE ${STM_DEVICES}) - stm32_get_chip_type(${FAMILY} ${DEVICE} TYPE) - - if(NOT CORES) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} FLASH SIZE FLASH_SIZE) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} RAM SIZE RAM_SIZE) - message(STATUS "STM32${DEVICE}: ${FAMILY} family, type ${TYPE}, ${FLASH_SIZE} flash, ${RAM_SIZE} RAM") - add_executable(cmsis-test-${DEVICE} ${SOURCES}) - target_link_libraries(cmsis-test-${DEVICE} CMSIS::STM32::${DEVICE} STM32::NoSys) - else() - stm32_get_cores(DEV_CORES FAMILY ${FAMILY} DEVICE ${DEVICE}) - foreach(CORE ${DEV_CORES}) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} FLASH SIZE FLASH_SIZE) - stm32_get_memory_info(FAMILY ${FAMILY} DEVICE ${DEVICE} CORE ${CORE} RAM SIZE RAM_SIZE) - message(STATUS "STM32${DEVICE}: ${FAMILY} family, type ${TYPE}, core ${CORE}, ${FLASH_SIZE} flash, ${RAM_SIZE} RAM") - add_executable(cmsis-test-${DEVICE}-${CORE} ${SOURCES}) - target_link_libraries(cmsis-test-${DEVICE}-${CORE} CMSIS::STM32::${DEVICE}::${CORE} STM32::NoSys) - endforeach() - endif() - endforeach() -endforeach() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/stm32h5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/stm32h5xx_hal_conf.h deleted file mode 100644 index c453c736ee..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/cmsis/stm32h5xx_hal_conf.h +++ /dev/null @@ -1,488 +0,0 @@ -/** - ********************************************************************************************************************** - * @file stm32h5xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32h5xx_hal_conf.h. - ********************************************************************************************************************** - * @attention - * - * Copyright (c) 2023 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 STM32H5xx_HAL_CONF_H -#define STM32H5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ----------------------------------------------------------------------------------------------------*/ -/* Exported constants ------------------------------------------------------------------------------------------------*/ - -/* ########################################### Module Selection ##################################################### */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCACHE_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DTS_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_I3C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RAMCFG_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_XSPI_MODULE_ENABLED - -/* ####################################### Oscillator Values adaptation ##############################################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 25000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Core Speed oscillator (CSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when CSI is used as system clock source, directly or through the PLL). - */ -#if !defined (CSI_VALUE) -#define CSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 64000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ - -#if !defined (LSI_STARTUP_TIME) -#define LSI_STARTUP_TIME 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIME */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/** - * @brief External clock source for SPI/SAI peripheral - * This value is used by the SPI/SAI HAL module to compute the SPI/SAI clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) -#define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ############################################ System Configuration ################################################ */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U /*!< Enable prefetch */ - -/* ############################################ Assert Selection #################################################### */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ############################################ Register callback feature configuration ############################# */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32h5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_I3C_REGISTER_CALLBACKS 0U /* I3C register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ -#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_XSPI_REGISTER_CALLBACKS 0U /* XSPI register callback disabled */ - -/* ############################################ SPI peripheral configuration ######################################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ -#define USE_SPI_CRC 1U - - -/* Includes ----------------------------------------------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32h5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32h5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32h5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_DCACHE_MODULE_ENABLED -#include "stm32h5xx_hal_dcache.h" -#endif /* HAL_DCACHE_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32h5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32h5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED -#include "stm32h5xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32h5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32h5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32h5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32h5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32h5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32h5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32h5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32h5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32h5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32h5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32h5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32h5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32h5xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_I3C_MODULE_ENABLED -#include "stm32h5xx_hal_i3c.h" -#endif /* HAL_I3C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32h5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32h5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_XSPI_MODULE_ENABLED -#include "stm32h5xx_hal_xspi.h" -#endif /* HAL_XSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32h5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32h5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32h5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32h5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32h5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32h5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32h5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32h5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32h5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32h5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32h5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32h5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32h5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32h5xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32h5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32h5xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED -#include "stm32h5xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32h5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32h5xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32h5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32h5xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32h5xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED -#include "stm32h5xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_RAMCFG_MODULE_ENABLED -#include "stm32h5xx_hal_ramcfg.h" -#endif /* HAL_RAMCFG_MODULE_ENABLED */ - -/* Exported macro ----------------------------------------------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ----------------------------------------------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H5xx_HAL_CONF_H */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/CMakeLists.txt deleted file mode 100644 index 641e477626..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -if(NOT TEST_FAMILIES) - set(TEST_FAMILIES C0 F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 MP1 U0 U5 WB WL) -endif() - -# Generate the family long names list by prepending STM32 to elements in TEST_FAMILIES -list(TRANSFORM TEST_FAMILIES PREPEND STM32 OUTPUT_VARIABLE TEST_FAMILIES_LONG_NAMES) - -project(fetch-test C ASM) -set(CMAKE_INCLUDE_CURRENT_DIR TRUE) - -stm32_fetch_cmsis(${TEST_FAMILIES}) -stm32_fetch_hal(${TEST_FAMILIES}) - -find_package(CMSIS REQUIRED ${TEST_FAMILIES_LONG_NAMES}) -find_package(HAL REQUIRED ${TEST_FAMILIES_LONG_NAMES}) - -set(SOURCES main.c) - -foreach(FAMILY ${TEST_FAMILIES}) - stm32_get_devices_by_family(STM_DEVICES FAMILY ${FAMILY}) - list(GET STM_DEVICES 0 DEVICE) - stm32_get_cores(CORES FAMILY ${FAMILY} DEVICE ${DEVICE}) - - if(CORES) - list(GET CORES 0 CORE) - set(CORE "::${CORE}") - else() - unset(CORE) - endif() - - add_executable(fetch-test-${FAMILY} ${SOURCES}) - target_link_libraries(fetch-test-${FAMILY} STM32::NoSys HAL::STM32::${FAMILY}${CORE}::CORTEX CMSIS::STM32::${DEVICE}${CORE}) -endforeach() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32c0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32c0xx_hal_conf.h deleted file mode 100644 index c8b7208d96..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32c0xx_hal_conf.h +++ /dev/null @@ -1,275 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32c0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32c0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - * Copyright (c) 2022 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. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32C0xx_HAL_CONF_H -#define STM32C0xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -/* #define HAL_ADC_MODULE_ENABLED */ -/* #define HAL_CRC_MODULE_ENABLED */ -/* #define HAL_CRYP_MODULE_ENABLED */ -/* #define HAL_I2C_MODULE_ENABLED */ -/* #define HAL_I2S_MODULE_ENABLED */ -/* #define HAL_IWDG_MODULE_ENABLED */ -/* #define HAL_IRDA_MODULE_ENABLED */ -/* #define HAL_PCD_MODULE_ENABLED */ -/* #define HAL_RNG_MODULE_ENABLED */ -/* #define HAL_RTC_MODULE_ENABLED */ -/* #define HAL_SMARTCARD_MODULE_ENABLED */ -/* #define HAL_SMBUS_MODULE_ENABLED */ -/* #define HAL_SPI_MODULE_ENABLED */ -/* #define HAL_TIM_MODULE_ENABLED */ -/* #define HAL_UART_MODULE_ENABLED */ -/* #define HAL_USART_MODULE_ENABLED */ -/* #define HAL_WWDG_MODULE_ENABLED */ -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32c0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (48000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ -#if !defined (LSI_STARTUP_TIME) -#define LSI_STARTUP_TIME 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIME */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S1 peripheral - * This value is used by the RCC HAL module to compute the I2S1 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) -#define EXTERNAL_I2S1_CLOCK_VALUE (12288000UL) /*!< Value of the I2S1 External clock source in Hz*/ -#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 3U /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include modules header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32c0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32c0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32c0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32c0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32c0xx_hal_adc.h" - #include "stm32c0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32c0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32c0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32c0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32c0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32c0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32c0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32c0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32c0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32c0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32c0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32c0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32c0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32c0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32c0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32c0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32c0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for functions parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32C0xx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f0xx_hal_conf.h deleted file mode 100644 index 0e9a50efac..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f0xx_hal_conf.h +++ /dev/null @@ -1,321 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CONF_H -#define __STM32F0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ######################### Oscillator Values adaptation ################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT 5000U /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator for ADC (HSI14) value. - */ -#if !defined (HSI14_VALUE) - #define HSI14_VALUE 14000000U /*!< Value of the Internal High Speed oscillator for ADC in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI14_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)(1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority (lowest by default) */ - /* Warning: Must be set to higher priority for HAL_Delay() */ - /* and HAL_GetTick() usage under interrupt context */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U -#define USE_SPI_CRC 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1*/ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f0xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f0xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32f0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32f0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f1xx_hal_conf.h deleted file mode 100644 index 097720be76..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f1xx_hal_conf.h +++ /dev/null @@ -1,399 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_CONF_H -#define __STM32F1xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#if defined(USE_STM3210C_EVAL) -#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#else -#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 8U /* 8 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32f1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32f1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32f1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32f1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32f1xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED -#include "stm32f1xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32f1xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32f1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32f1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32f1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32f1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32f1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32f1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32f1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32f1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32f1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32f1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32f1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32f1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32f1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED -#include "stm32f1xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32f1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32f1xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32f1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32f1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32f1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32f1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32f1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32f1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32f1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32f1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32f1xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32f1xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t* file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f2xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f2xx_hal_conf.h deleted file mode 100644 index c26dc66dc0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f2xx_hal_conf.h +++ /dev/null @@ -1,422 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f2xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f2xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F2xx_HAL_CONF_H -#define __STM32F2xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f2xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f2xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f2xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f2xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f2xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f2xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f2xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f2xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f2xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f2xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f2xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f2xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f2xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f2xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f2xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f2xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f2xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f2xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f2xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f2xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f2xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f2xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f2xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f2xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f2xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f2xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f2xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f2xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f2xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f2xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f2xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f2xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f2xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f2xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f2xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f2xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F2xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f3xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f3xx_hal_conf.h deleted file mode 100644 index a5f7ad3991..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f3xx_hal_conf.h +++ /dev/null @@ -1,357 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f3xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F3xx_HAL_CONF_H -#define __STM32F3xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SDADC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (8000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT (5000U) /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (40000U) -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - * - External clock generated through external PLL component on EVAL 303 (based on MCO or crystal) - * - External clock not generated on EVAL 373 - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE (8000000U) /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)(1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U -#define USE_SPI_CRC 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SDADC_REGISTER_CALLBACKS 0U /* SDADC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1U*/ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f3xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f3xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f3xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f3xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f3xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f3xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f3xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f3xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f3xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32f3xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f3xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f3xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f3xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f3xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f3xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f3xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f3xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32f3xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f3xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f3xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f3xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f3xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32f3xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f3xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f3xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f3xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SDADC_MODULE_ENABLED - #include "stm32f3xx_hal_sdadc.h" -#endif /* HAL_SDADC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f3xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f3xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f3xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f3xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32f3xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f3xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f3xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f3xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F3xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f4xx_hal_conf.h deleted file mode 100644 index afa2f56876..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f4xx_hal_conf.h +++ /dev/null @@ -1,501 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_CONF_H -#define __STM32F4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CRC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_FMPI2C_MODULE_ENABLED -#define HAL_FMPSMBUS_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ -#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f4xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f4xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f4xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMPI2C_MODULE_ENABLED - #include "stm32f4xx_hal_fmpi2c.h" -#endif /* HAL_FMPI2C_MODULE_ENABLED */ - -#ifdef HAL_FMPSMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_fmpsmbus.h" -#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f4xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f7xx_hal_conf.h deleted file mode 100644 index b27f66e49a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32f7xx_hal_conf.h +++ /dev/null @@ -1,495 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f7xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f7xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F7xx_HAL_CONF_H -#define __STM32F7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_JPEG_MODULE_ENABLED -#define HAL_MDIOS_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U /* To enable prefetch */ -#define ART_ACCLERATOR_ENABLE 1U /* To enable ART Accelerator */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIOS register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x11U) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x12U) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001U) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002U) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001U) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020U) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000U) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f7xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f7xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f7xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32f7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32f7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g0xx_hal_conf.h deleted file mode 100644 index f0abcb9950..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g0xx_hal_conf.h +++ /dev/null @@ -1,356 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32g0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2018 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G0xx_HAL_CONF_H -#define STM32G0xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -// #define HAL_HCD_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_CEC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_I2S_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_HCD_REGISTER_CALLBACKS 0u -#define USE_HAL_PCD_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ -#endif - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S1 peripheral - * This value is used by the RCC HAL module to compute the I2S1 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) -#define EXTERNAL_I2S1_CLOCK_VALUE (48000UL) /*!< Value of the I2S1 External clock source in Hz*/ -#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ - -#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) -/** - * @brief External clock source for I2S2 peripheral - * This value is used by the RCC HAL module to compute the I2S2 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S2_CLOCK_VALUE) - #define EXTERNAL_I2S2_CLOCK_VALUE 48000U /*!< Value of the I2S2 External clock source in Hz*/ -#endif /* EXTERNAL_I2S2_CLOCK_VALUE */ -#endif - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include modules header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32g0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32g0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32g0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32g0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32g0xx_hal_adc.h" -#include "stm32g0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32g0xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32g0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32g0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32g0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32g0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32g0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32g0xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32g0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32g0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32g0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32g0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32g0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32g0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32g0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32g0xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32g0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32g0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32g0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32g0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32g0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32g0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32g0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32g0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32g0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32g0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for functions parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g4xx_hal_conf.h deleted file mode 100644 index e518391855..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32g4xx_hal_conf.h +++ /dev/null @@ -1,382 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g4xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32g4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G4xx_HAL_CONF_H -#define STM32G4xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_EXTI_REGISTER_CALLBACKS 0U -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE (48000000UL) /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -/*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations in voltage and temperature.*/ -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S and SAI peripherals - * This value is used by the I2S and SAI HAL modules to compute the I2S and SAI clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) -#define EXTERNAL_CLOCK_VALUE (48000UL) /*!< Value of the External clock source in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32g4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32g4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32g4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32g4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32g4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32g4xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32g4xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32g4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32g4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32g4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32g4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32g4xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32g4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32g4xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED -#include "stm32g4xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32g4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32g4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32g4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32g4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32g4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32g4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32g4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32g4xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32g4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32g4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED -#include "stm32g4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32g4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32g4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32g4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32g4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32g4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32g4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32g4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32g4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32g4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32g4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32g4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h5xx_hal_conf.h deleted file mode 100644 index c453c736ee..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h5xx_hal_conf.h +++ /dev/null @@ -1,488 +0,0 @@ -/** - ********************************************************************************************************************** - * @file stm32h5xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32h5xx_hal_conf.h. - ********************************************************************************************************************** - * @attention - * - * Copyright (c) 2023 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 STM32H5xx_HAL_CONF_H -#define STM32H5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ----------------------------------------------------------------------------------------------------*/ -/* Exported constants ------------------------------------------------------------------------------------------------*/ - -/* ########################################### Module Selection ##################################################### */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCACHE_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DTS_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_I3C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RAMCFG_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_XSPI_MODULE_ENABLED - -/* ####################################### Oscillator Values adaptation ##############################################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 25000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Core Speed oscillator (CSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when CSI is used as system clock source, directly or through the PLL). - */ -#if !defined (CSI_VALUE) -#define CSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 64000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ - -#if !defined (LSI_STARTUP_TIME) -#define LSI_STARTUP_TIME 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIME */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/** - * @brief External clock source for SPI/SAI peripheral - * This value is used by the SPI/SAI HAL module to compute the SPI/SAI clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) -#define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ############################################ System Configuration ################################################ */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U /*!< Enable prefetch */ - -/* ############################################ Assert Selection #################################################### */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ############################################ Register callback feature configuration ############################# */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32h5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_I3C_REGISTER_CALLBACKS 0U /* I3C register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ -#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_XSPI_REGISTER_CALLBACKS 0U /* XSPI register callback disabled */ - -/* ############################################ SPI peripheral configuration ######################################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ -#define USE_SPI_CRC 1U - - -/* Includes ----------------------------------------------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32h5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32h5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32h5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_DCACHE_MODULE_ENABLED -#include "stm32h5xx_hal_dcache.h" -#endif /* HAL_DCACHE_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32h5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32h5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED -#include "stm32h5xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32h5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32h5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32h5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32h5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32h5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32h5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32h5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32h5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32h5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32h5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32h5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32h5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32h5xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_I3C_MODULE_ENABLED -#include "stm32h5xx_hal_i3c.h" -#endif /* HAL_I3C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32h5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32h5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_XSPI_MODULE_ENABLED -#include "stm32h5xx_hal_xspi.h" -#endif /* HAL_XSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32h5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32h5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32h5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32h5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32h5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32h5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32h5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32h5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32h5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32h5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32h5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32h5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32h5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32h5xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32h5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32h5xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED -#include "stm32h5xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32h5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32h5xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32h5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32h5xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32h5xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED -#include "stm32h5xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_RAMCFG_MODULE_ENABLED -#include "stm32h5xx_hal_ramcfg.h" -#endif /* HAL_RAMCFG_MODULE_ENABLED */ - -/* Exported macro ----------------------------------------------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ----------------------------------------------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H5xx_HAL_CONF_H */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h7xx_hal_conf.h deleted file mode 100644 index 05bf9c5f6e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32h7xx_hal_conf.h +++ /dev/null @@ -1,513 +0,0 @@ -/** - ****************************************************************************** - * @file stm32h7xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32h7xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32H7xx_HAL_CONF_H -#define STM32H7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_DTS_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GFXMMU_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_JPEG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_MDIOS_MODULE_ENABLED -#define HAL_MDMA_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RAMECC_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SWPMI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (25000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal oscillator (CSI) default value. - * This value is the default CSI value after Reset. - */ -#if !defined (CSI_VALUE) - #define CSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (64000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -#if !defined (LSI_VALUE) - #define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */ -#define USE_RTOS 0 -#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */ -#define USE_SPI_CRC 1U /*!< use CRC in SPI */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U /* GFXMMU register callback disabled */ -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U /* OSPI register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################### Ethernet Configuration ######################### */ -#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */ -#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */ - -#define ETH_MAC_ADDR0 (0x02UL) -#define ETH_MAC_ADDR1 (0x00UL) -#define ETH_MAC_ADDR2 (0x00UL) -#define ETH_MAC_ADDR3 (0x00UL) -#define ETH_MAC_ADDR4 (0x00UL) -#define ETH_MAC_ADDR5 (0x00UL) - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32h7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32h7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32h7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_MDMA_MODULE_ENABLED - #include "stm32h7xx_hal_mdma.h" -#endif /* HAL_MDMA_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32h7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32h7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32h7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32h7xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32h7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED - #include "stm32h7xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32h7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32h7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32h7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32h7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32h7xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32h7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32h7xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED - #include "stm32h7xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32h7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32h7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32h7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32h7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GFXMMU_MODULE_ENABLED - #include "stm32h7xx_hal_gfxmmu.h" -#endif /* HAL_GFXMMU_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED - #include "stm32h7xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32h7xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32h7xx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32h7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32h7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32h7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32h7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32h7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32h7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32h7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32h7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED -#include "stm32h7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h7xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32h7xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h7xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED - #include "stm32h7xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32h7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32h7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RAMECC_MODULE_ENABLED - #include "stm32h7xx_hal_ramecc.h" -#endif /* HAL_RAMECC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32h7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32h7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32h7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32h7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32h7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32h7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32h7xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32h7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32h7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32h7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32h7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32h7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32h7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32h7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32h7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32h7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l0xx_hal_conf.h deleted file mode 100644 index 2f3c4d752e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l0xx_hal_conf.h +++ /dev/null @@ -1,342 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L0xx_HAL_CONF_H -#define __STM32L0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FIREWALL_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (2097152U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE (48000000U) /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define PREREAD_ENABLE 0U -#define BUFFER_CACHE_DISABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FIREWALL_MODULE_ENABLED - #include "stm32l0xx_hal_firewall.h" -#endif /* HAL_FIREWALL_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32l0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l0xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32l0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l1xx_hal_conf.h deleted file mode 100644 index 06fbc29410..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l1xx_hal_conf.h +++ /dev/null @@ -1,324 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L1xx_HAL_CONF_H -#define __STM32L1xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (2097000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External Low Speed oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x000FU) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1U*/ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SDMMC_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l1xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l1xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32l1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l1xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l1xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l4xx_hal_conf.h deleted file mode 100644 index ca41261ffa..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l4xx_hal_conf.h +++ /dev/null @@ -1,480 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l4xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32L4xx_HAL_CONF_H -#define STM32L4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FIREWALL_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GFXMMU_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SWPMI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE 48000U /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/** - * @brief External clock source for SAI2 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) - #define EXTERNAL_SAI2_CLOCK_VALUE 48000U /*!< Value of the SAI2 External clock source in Hz*/ -#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l4xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U -#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32l4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32l4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32l4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l4xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32l4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32l4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32l4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_GFXMMU_MODULE_ENABLED - #include "stm32l4xx_hal_gfxmmu.h" -#endif /* HAL_GFXMMU_MODULE_ENABLED */ - -#ifdef HAL_FIREWALL_MODULE_ENABLED - #include "stm32l4xx_hal_firewall.h" -#endif /* HAL_FIREWALL_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32l4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32l4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l4xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32l4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32l4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32l4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32l4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l4xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32l4xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32l4xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED - #include "stm32l4xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32l4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32l4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32l4xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l4xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32L4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l5xx_hal_conf.h deleted file mode 100644 index cd47676670..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32l5xx_hal_conf.h +++ /dev/null @@ -1,439 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l5xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l5xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32L5xx_HAL_CONF_H -#define STM32L5xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 16000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/** - * @brief External clock source for SAI2 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) - #define EXTERNAL_SAI2_CLOCK_VALUE 48000UL /*!< Value of the SAI2 External clock source in Hz*/ -#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - -/* ################## SDMMC peripheral configuration ######################### */ - -#define USE_SD_TRANSCEIVER 0U - - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32l5xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32l5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED - #include "stm32l5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32l5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED - #include "stm32l5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32l5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32l5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32l5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32l5xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED - #include "stm32l5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32l5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32l5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l5xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32L5xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32mp1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32mp1xx_hal_conf.h deleted file mode 100644 index 228f2a05ab..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32mp1xx_hal_conf.h +++ /dev/null @@ -1,346 +0,0 @@ -/** - ****************************************************************************** - * @file stm32mp1xx_hal_conf.h - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - * Copyright (c) 2019 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 STM32MP1xx_HAL_CONF_H -#define STM32MP1xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_MDMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_CEC_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (24000000U) /*!< Value of the External oscillator in Hz : FPGA case fixed to 60MHZ */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (64000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT 5000U /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE ((uint32_t)32768U) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal oscillator (CSI) default value. - * This value is the default CSI value after Reset. - */ -#if !defined (CSI_VALUE) - #define CSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 1U /*!< tick interrupt priority (lowest by default) */ - /* Warning: Must be set to higher priority for HAL_Delay() */ - /* and HAL_GetTick() usage under interrupt context */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32mp1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32mp1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32mp1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32mp1xx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32mp1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_MDMA_MODULE_ENABLED - #include "stm32mp1xx_hal_mdma.h" -#endif /* HAL_MDMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32mp1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32mp1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32mp1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32mp1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32mp1xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32mp1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32mp1xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32mp1xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32mp1xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32mp1xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32mp1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32mp1xx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32mp1xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32mp1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32mp1xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32mp1xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32mp1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32mp1xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32mp1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32mp1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32mp1xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32mp1xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32mp1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32mp1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32mp1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32mp1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32mp1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32mp1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32MP1xx_HAL_CONF_H */ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u0xx_hal_conf.h deleted file mode 100644 index e402e06798..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u0xx_hal_conf.h +++ /dev/null @@ -1,335 +0,0 @@ -/** - ****************************************************************************** - * @file stm32u0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 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 __STM32U0xx_HAL_CONF_H -#define __STM32U0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ - -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRS_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 4000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI32_VALUE) -#define MSI32_VALUE 32000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI32_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ - -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (3U) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ - -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32n6xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LCD_REGISTER_CALLBACKS 0U /* LCD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32u0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32u0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32u0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32u0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32u0xx_hal_adc.h" -#include "stm32u0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32u0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32u0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRS_MODULE_ENABLED -#include "stm32u0xx_ll_crs.h" -#endif /* HAL_CRS_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32u0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32u0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32u0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32u0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32u0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32u0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32u0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED -#include "stm32u0xx_hal_lcd.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32u0xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32u0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32u0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32u0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32u0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32u0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED -#include "stm32u0xx_ll_system.h" -#include "stm32u0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32u0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32u0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32u0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32u0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32u0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED -#include "stm32u0xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32u0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32U0xx_HAL_CONF_H */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u5xx_hal_conf.h deleted file mode 100644 index e62e0a61ab..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32u5xx_hal_conf.h +++ /dev/null @@ -1,474 +0,0 @@ -/** - ****************************************************************************** - * @file stm32u5xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32u5xx_hal_conf.h. - ****************************************************************************** - * @attention - * - * Copyright (c) 2021 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 STM32U5xx_HAL_CONF_H -#define STM32U5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCACHE_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MDF_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RAMCFG_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 16000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) -#define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz. The real value may -vary depending on the variations in voltage and temperature.*/ - -#if !defined (LSI_STARTUP_TIMEOUT) -#define LSI_STARTUP_TIMEOUT 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIMEOUT */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) -#define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U /*!< Enable prefetch */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32u5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDF_REGISTER_CALLBACKS 0U /* MDF register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ -#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ -#define USE_SPI_CRC 1U - -/* ################## SDMMC peripheral configuration ######################### */ - -#define USE_SD_TRANSCEIVER 0U - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32u5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32u5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32u5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_DCACHE_MODULE_ENABLED -#include "stm32u5xx_hal_dcache.h" -#endif /* HAL_DCACHE_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32u5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32u5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED -#include "stm32u5xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32u5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32u5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32u5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32u5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32u5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32u5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32u5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32u5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32u5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32u5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32u5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32u5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32u5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32u5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32u5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32u5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32u5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32u5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED -#include "stm32u5xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32u5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32u5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32u5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32u5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32u5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32u5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32u5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED -#include "stm32u5xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32u5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32u5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32u5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32u5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32u5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32u5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32u5xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32u5xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED -#include "stm32u5xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32u5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32u5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32u5xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32u5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED -#include "stm32u5xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_RAMCFG_MODULE_ENABLED -#include "stm32u5xx_hal_ramcfg.h" -#endif /* HAL_RAMCFG_MODULE_ENABLED */ - -#ifdef HAL_MDF_MODULE_ENABLED -#include "stm32u5xx_hal_mdf.h" -#endif /* HAL_MDF_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32U5xx_HAL_CONF_H */ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wbxx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wbxx_hal_conf.h deleted file mode 100644 index b78c5cb83d..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wbxx_hal_conf.h +++ /dev/null @@ -1,355 +0,0 @@ -/** - ****************************************************************************** - * @file stm32wbxx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32WBxx_HAL_CONF_H -#define STM32WBxx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_PCD_REGISTER_CALLBACKS 0u -#define USE_HAL_PKA_REGISTER_CALLBACKS 0u -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SAI_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_TSC_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -#define USE_HAL_CRYP_SUSPEND_RESUME 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ - -#if !defined (HSE_VALUE) - #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI1) value. - */ -#if !defined (LSI1_VALUE) - #define LSI1_VALUE (32000UL) /*!< LSI1 Typical Value in Hz*/ -#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief Internal Low Speed oscillator (LSI2) value. - */ -#if !defined (LSI2_VALUE) - #define LSI2_VALUE (32000UL) /*!< LSI2 Typical Value in Hz*/ -#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (HSI48) default value. - * This value is the default HSI48 range value after Reset. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE (48000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI48_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE (48000UL) /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32wbxx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32wbxx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32wbxx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32wbxx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32wbxx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32wbxx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32wbxx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32wbxx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32wbxx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32wbxx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32wbxx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32wbxx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32wbxx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32wbxx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32wbxx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32wbxx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32wbxx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32wbxx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32wbxx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32wbxx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32wbxx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32wbxx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32wbxx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32wbxx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32wbxx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32wbxx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32wbxx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32wbxx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32wbxx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32wbxx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32wbxx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32wbxx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32WBxx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wlxx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wlxx_hal_conf.h deleted file mode 100644 index 82170f12fe..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/fetch/stm32wlxx_hal_conf.h +++ /dev/null @@ -1,340 +0,0 @@ -/** - ****************************************************************************** - * @file stm32wlxx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32WLxx_HAL_CONF_H -#define STM32WLxx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SUBGHZ_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_I2S_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_PKA_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_SUBGHZ_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ - -#if !defined (HSE_VALUE) -#define HSE_VALUE 32000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) -#define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (HSI48) default value. - * This value is the default HSI48 range value after Reset. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI48_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1uL <<__NVIC_PRIO_BITS) - 1uL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32wlxx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32wlxx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32wlxx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32wlxx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32wlxx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32wlxx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32wlxx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32wlxx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32wlxx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32wlxx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED - #include "stm32wlxx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32wlxx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32wlxx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32wlxx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32wlxx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32wlxx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32wlxx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32wlxx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32wlxx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32wlxx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32wlxx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32wlxx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32wlxx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32wlxx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32wlxx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32wlxx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SUBGHZ_MODULE_ENABLED - #include "stm32wlxx_hal_subghz.h" -#endif /* HAL_SUBGHZ_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32wlxx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32wlxx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32wlxx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32wlxx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32WLxx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/CMakeLists.txt deleted file mode 100644 index c1f5da7b8c..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/CMakeLists.txt +++ /dev/null @@ -1,52 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/stm32_gcc.cmake) - -if(NOT TEST_FAMILIES) - set(TEST_FAMILIES C0 F0 F1 F2 F3 F4 F7 G0 G4 H7 L0 L1 L4 L5 MP1 U0 U5 WB WL) -endif() - -# Generate the family long names list by prepending STM32 to elements in TEST_FAMILIES -list(TRANSFORM TEST_FAMILIES PREPEND STM32 OUTPUT_VARIABLE TEST_FAMILIES_LONG_NAMES) - -project(hal-test C ASM) -set(CMAKE_INCLUDE_CURRENT_DIR TRUE) - -if(FETCH_ST_SOURCES) - stm32_fetch_cmsis(${TEST_FAMILIES}) - stm32_fetch_hal(${TEST_FAMILIES}) -endif() - -find_package(CMSIS REQUIRED ${TEST_FAMILIES_LONG_NAMES}) -find_package(HAL REQUIRED ${TEST_FAMILIES_LONG_NAMES}) - -set(SOURCES main.c) - -foreach(FAMILY ${TEST_FAMILIES}) - stm32_get_devices_by_family(STM_DEVICES FAMILY ${FAMILY}) - list(GET STM_DEVICES 0 DEVICE) - stm32_get_cores(CORES FAMILY ${FAMILY} DEVICE ${DEVICE}) - - if(CORES) - list(GET CORES 0 CORE) - set(CORE "::${CORE}") - else() - unset(CORE) - endif() - - add_executable(hal-test-${FAMILY} ${SOURCES}) - target_compile_definitions(hal-test-${FAMILY} PRIVATE USE_FULL_LL_DRIVER) - - foreach(DRIVER ${HAL_DRIVERS_${FAMILY}}) - string(TOUPPER ${DRIVER} DRIVER) - target_link_libraries(hal-test-${FAMILY} HAL::STM32::${FAMILY}${CORE}::${DRIVER}) - endforeach() - foreach(DRIVER ${HAL_EX_DRIVERS_${FAMILY}}) - string(TOUPPER ${DRIVER} DRIVER) - target_link_libraries(hal-test-${FAMILY} HAL::STM32::${FAMILY}${CORE}::${DRIVER}Ex) - endforeach() - foreach(DRIVER ${HAL_LL_DRIVERS_${FAMILY}}) - string(TOUPPER ${DRIVER} DRIVER) - target_link_libraries(hal-test-${FAMILY} HAL::STM32::${FAMILY}${CORE}::LL_${DRIVER}) - endforeach() - target_link_libraries(hal-test-${FAMILY} STM32::NoSys CMSIS::STM32::${DEVICE}${CORE}) -endforeach() diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/main.c b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/main.c deleted file mode 100644 index 5cfc8e892a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/main.c +++ /dev/null @@ -1,5 +0,0 @@ -int main(void) -{ - for (;;); - return 0; -} diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32c0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32c0xx_hal_conf.h deleted file mode 100644 index c8b7208d96..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32c0xx_hal_conf.h +++ /dev/null @@ -1,275 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32c0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32c0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - * Copyright (c) 2022 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. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32C0xx_HAL_CONF_H -#define STM32C0xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -/* #define HAL_ADC_MODULE_ENABLED */ -/* #define HAL_CRC_MODULE_ENABLED */ -/* #define HAL_CRYP_MODULE_ENABLED */ -/* #define HAL_I2C_MODULE_ENABLED */ -/* #define HAL_I2S_MODULE_ENABLED */ -/* #define HAL_IWDG_MODULE_ENABLED */ -/* #define HAL_IRDA_MODULE_ENABLED */ -/* #define HAL_PCD_MODULE_ENABLED */ -/* #define HAL_RNG_MODULE_ENABLED */ -/* #define HAL_RTC_MODULE_ENABLED */ -/* #define HAL_SMARTCARD_MODULE_ENABLED */ -/* #define HAL_SMBUS_MODULE_ENABLED */ -/* #define HAL_SPI_MODULE_ENABLED */ -/* #define HAL_TIM_MODULE_ENABLED */ -/* #define HAL_UART_MODULE_ENABLED */ -/* #define HAL_USART_MODULE_ENABLED */ -/* #define HAL_WWDG_MODULE_ENABLED */ -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32c0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (48000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ -#if !defined (LSI_STARTUP_TIME) -#define LSI_STARTUP_TIME 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIME */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S1 peripheral - * This value is used by the RCC HAL module to compute the I2S1 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) -#define EXTERNAL_I2S1_CLOCK_VALUE (12288000UL) /*!< Value of the I2S1 External clock source in Hz*/ -#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 3U /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include modules header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32c0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32c0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32c0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32c0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32c0xx_hal_adc.h" - #include "stm32c0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32c0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32c0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32c0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32c0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32c0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32c0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32c0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32c0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32c0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32c0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32c0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32c0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32c0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32c0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32c0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32c0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for functions parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32C0xx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f0xx_hal_conf.h deleted file mode 100755 index f1b164814a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f0xx_hal_conf.h +++ /dev/null @@ -1,321 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CONF_H -#define __STM32F0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ######################### Oscillator Values adaptation ################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT 5000U /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator for ADC (HSI14) value. - */ -#if !defined (HSI14_VALUE) - #define HSI14_VALUE 14000000U /*!< Value of the Internal High Speed oscillator for ADC in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI14_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)(1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority (lowest by default) */ - /* Warning: Must be set to higher priority for HAL_Delay() */ - /* and HAL_GetTick() usage under interrupt context */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U -#define USE_SPI_CRC 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1*/ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f0xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f0xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32f0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32f0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f1xx_hal_conf.h deleted file mode 100755 index df420ff4f0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f1xx_hal_conf.h +++ /dev/null @@ -1,399 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F1xx_HAL_CONF_H -#define __STM32F1xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#if defined(USE_STM3210C_EVAL) -#define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#else -#define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 8U /* 8 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32f1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32f1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32f1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32f1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32f1xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED -#include "stm32f1xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32f1xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32f1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32f1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32f1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32f1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32f1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32f1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32f1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32f1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32f1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32f1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32f1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32f1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32f1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED -#include "stm32f1xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32f1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32f1xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32f1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32f1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32f1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32f1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32f1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32f1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32f1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32f1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32f1xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32f1xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t* file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f2xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f2xx_hal_conf.h deleted file mode 100755 index c26dc66dc0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f2xx_hal_conf.h +++ /dev/null @@ -1,422 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f2xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f2xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F2xx_HAL_CONF_H -#define __STM32F2xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f2xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f2xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f2xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f2xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f2xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f2xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f2xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f2xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f2xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f2xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f2xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f2xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f2xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f2xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f2xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f2xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f2xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f2xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f2xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f2xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f2xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f2xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f2xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f2xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f2xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f2xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f2xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f2xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f2xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f2xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f2xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f2xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f2xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f2xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f2xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f2xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F2xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f3xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f3xx_hal_conf.h deleted file mode 100755 index a5f7ad3991..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f3xx_hal_conf.h +++ /dev/null @@ -1,357 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f3xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F3xx_HAL_CONF_H -#define __STM32F3xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SDADC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (8000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT (5000U) /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (40000U) -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - * - External clock generated through external PLL component on EVAL 303 (based on MCO or crystal) - * - External clock not generated on EVAL 373 - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE (8000000U) /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)(1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U -#define USE_SPI_CRC 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SDADC_REGISTER_CALLBACKS 0U /* SDADC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1U*/ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f3xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f3xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f3xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f3xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f3xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f3xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f3xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f3xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f3xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32f3xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f3xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f3xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f3xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f3xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f3xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f3xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f3xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32f3xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f3xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f3xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f3xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f3xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32f3xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f3xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f3xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f3xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SDADC_MODULE_ENABLED - #include "stm32f3xx_hal_sdadc.h" -#endif /* HAL_SDADC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f3xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f3xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f3xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f3xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32f3xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f3xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f3xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f3xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F3xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f4xx_hal_conf.h deleted file mode 100755 index 4e178e97d0..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f4xx_hal_conf.h +++ /dev/null @@ -1,501 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f4xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F4xx_HAL_CONF_H -#define __STM32F4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CRC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_PCCARD_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_FMPI2C_MODULE_ENABLED -#define HAL_FMPSMBUS_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz */ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz */ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_FMPI2C_REGISTER_CALLBACKS 0U /* FMPI2C register callback disabled */ -#define USE_HAL_FMPSMBUS_REGISTER_CALLBACKS 0U /* FMPSMBUS register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x0000) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x0001) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x0010) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x0011) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x0012) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f4xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_PCCARD_MODULE_ENABLED - #include "stm32f4xx_hal_pccard.h" -#endif /* HAL_PCCARD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f4xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f4xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMPI2C_MODULE_ENABLED - #include "stm32f4xx_hal_fmpi2c.h" -#endif /* HAL_FMPI2C_MODULE_ENABLED */ - -#ifdef HAL_FMPSMBUS_MODULE_ENABLED - #include "stm32f4xx_hal_fmpsmbus.h" -#endif /* HAL_FMPSMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f4xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f7xx_hal_conf.h deleted file mode 100755 index b27f66e49a..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32f7xx_hal_conf.h +++ /dev/null @@ -1,495 +0,0 @@ -/** - ****************************************************************************** - * @file stm32f7xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32f7xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F7xx_HAL_CONF_H -#define __STM32F7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_JPEG_MODULE_ENABLED -#define HAL_MDIOS_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED - - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 25000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U /* To enable prefetch */ -#define ART_ACCLERATOR_ENABLE 1U /* To enable ART Accelerator */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIOS register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - -/* ################## Ethernet peripheral configuration ##################### */ - -/* Section 1 : Ethernet peripheral configuration */ - -/* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ -#define MAC_ADDR0 2U -#define MAC_ADDR1 0U -#define MAC_ADDR2 0U -#define MAC_ADDR3 0U -#define MAC_ADDR4 0U -#define MAC_ADDR5 0U - -/* Definition of the Ethernet driver buffers size and count */ -#define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ -#define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ -#define ETH_RXBUFNB 4U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ -#define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ - -/* Section 2: PHY configuration section */ - -/* DP83848 PHY Address*/ -#define DP83848_PHY_ADDRESS 0x01U -/* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ -#define PHY_RESET_DELAY 0x000000FFU -/* PHY Configuration delay */ -#define PHY_CONFIG_DELAY 0x00000FFFU - -#define PHY_READ_TO 0x0000FFFFU -#define PHY_WRITE_TO 0x0000FFFFU - -/* Section 3: Common PHY Registers */ - -#define PHY_BCR ((uint16_t)0x00U) /*!< Transceiver Basic Control Register */ -#define PHY_BSR ((uint16_t)0x01U) /*!< Transceiver Basic Status Register */ - -#define PHY_RESET ((uint16_t)0x8000U) /*!< PHY Reset */ -#define PHY_LOOPBACK ((uint16_t)0x4000U) /*!< Select loop-back mode */ -#define PHY_FULLDUPLEX_100M ((uint16_t)0x2100U) /*!< Set the full-duplex mode at 100 Mb/s */ -#define PHY_HALFDUPLEX_100M ((uint16_t)0x2000U) /*!< Set the half-duplex mode at 100 Mb/s */ -#define PHY_FULLDUPLEX_10M ((uint16_t)0x0100U) /*!< Set the full-duplex mode at 10 Mb/s */ -#define PHY_HALFDUPLEX_10M ((uint16_t)0x0000U) /*!< Set the half-duplex mode at 10 Mb/s */ -#define PHY_AUTONEGOTIATION ((uint16_t)0x1000U) /*!< Enable auto-negotiation function */ -#define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200U) /*!< Restart auto-negotiation function */ -#define PHY_POWERDOWN ((uint16_t)0x0800U) /*!< Select the power down mode */ -#define PHY_ISOLATE ((uint16_t)0x0400U) /*!< Isolate PHY from MII */ - -#define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020U) /*!< Auto-Negotiation process completed */ -#define PHY_LINKED_STATUS ((uint16_t)0x0004U) /*!< Valid link established */ -#define PHY_JABBER_DETECTION ((uint16_t)0x0002U) /*!< Jabber condition detected */ - -/* Section 4: Extended PHY Registers */ - -#define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ -#define PHY_MICR ((uint16_t)0x11U) /*!< MII Interrupt Control Register */ -#define PHY_MISR ((uint16_t)0x12U) /*!< MII Interrupt Status and Misc. Control Register */ - -#define PHY_LINK_STATUS ((uint16_t)0x0001U) /*!< PHY Link mask */ -#define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ -#define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ - -#define PHY_MICR_INT_EN ((uint16_t)0x0002U) /*!< PHY Enable interrupts */ -#define PHY_MICR_INT_OE ((uint16_t)0x0001U) /*!< PHY Enable output interrupt events */ - -#define PHY_MISR_LINK_INT_EN ((uint16_t)0x0020U) /*!< Enable Interrupt on change of link status */ -#define PHY_LINK_INTERRUPT ((uint16_t)0x2000U) /*!< PHY link status interrupt mask */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f7xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "stm32f7xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32f7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32f7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32f7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32f7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32f7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32f7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32f7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32f7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32f7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32f7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32f7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32f7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32f7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32f7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32f7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32f7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32f7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32f7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32f7xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32f7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32f7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32f7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g0xx_hal_conf.h deleted file mode 100755 index f0abcb9950..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g0xx_hal_conf.h +++ /dev/null @@ -1,356 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32g0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2018 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G0xx_HAL_CONF_H -#define STM32G0xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -// #define HAL_HCD_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_CEC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_I2S_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_HCD_REGISTER_CALLBACKS 0u -#define USE_HAL_PCD_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ -#endif - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S1 peripheral - * This value is used by the RCC HAL module to compute the I2S1 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S1_CLOCK_VALUE) -#define EXTERNAL_I2S1_CLOCK_VALUE (48000UL) /*!< Value of the I2S1 External clock source in Hz*/ -#endif /* EXTERNAL_I2S1_CLOCK_VALUE */ - -#if defined(STM32G0C1xx) || defined(STM32G0B1xx) || defined(STM32G0B0xx) -/** - * @brief External clock source for I2S2 peripheral - * This value is used by the RCC HAL module to compute the I2S2 clock source - * frequency. - */ -#if !defined (EXTERNAL_I2S2_CLOCK_VALUE) - #define EXTERNAL_I2S2_CLOCK_VALUE 48000U /*!< Value of the I2S2 External clock source in Hz*/ -#endif /* EXTERNAL_I2S2_CLOCK_VALUE */ -#endif - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver -* Activated: CRC code is present inside driver -* Deactivated: CRC code cleaned from driver -*/ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include modules header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32g0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32g0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32g0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32g0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32g0xx_hal_adc.h" -#include "stm32g0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32g0xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32g0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32g0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32g0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32g0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32g0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32g0xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32g0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32g0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32g0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32g0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32g0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32g0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32g0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32g0xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32g0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32g0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32g0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32g0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32g0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32g0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32g0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32g0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32g0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32g0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for functions parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g4xx_hal_conf.h deleted file mode 100755 index e518391855..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32g4xx_hal_conf.h +++ /dev/null @@ -1,382 +0,0 @@ -/** - ****************************************************************************** - * @file stm32g4xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32g4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32G4xx_HAL_CONF_H -#define STM32G4xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_EXTI_REGISTER_CALLBACKS 0U -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (8000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE (48000000UL) /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -/*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations in voltage and temperature.*/ -#define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for I2S and SAI peripherals - * This value is used by the I2S and SAI HAL modules to compute the I2S and SAI clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) -#define EXTERNAL_CLOCK_VALUE (48000UL) /*!< Value of the External clock source in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32g4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32g4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32g4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32g4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32g4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32g4xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32g4xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32g4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32g4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32g4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32g4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32g4xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32g4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32g4xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED -#include "stm32g4xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32g4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32g4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32g4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32g4xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32g4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32g4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32g4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32g4xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32g4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32g4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED -#include "stm32g4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32g4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32g4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32g4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32g4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32g4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32g4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32g4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32g4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32g4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32g4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32g4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32G4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h5xx_hal_conf.h deleted file mode 100644 index c453c736ee..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h5xx_hal_conf.h +++ /dev/null @@ -1,488 +0,0 @@ -/** - ********************************************************************************************************************** - * @file stm32h5xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32h5xx_hal_conf.h. - ********************************************************************************************************************** - * @attention - * - * Copyright (c) 2023 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 STM32H5xx_HAL_CONF_H -#define STM32H5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ----------------------------------------------------------------------------------------------------*/ -/* Exported constants ------------------------------------------------------------------------------------------------*/ - -/* ########################################### Module Selection ##################################################### */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCACHE_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DTS_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_I3C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RAMCFG_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_XSPI_MODULE_ENABLED - -/* ####################################### Oscillator Values adaptation ##############################################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 25000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Core Speed oscillator (CSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when CSI is used as system clock source, directly or through the PLL). - */ -#if !defined (CSI_VALUE) -#define CSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 64000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz -The real value may vary depending on the variations -in voltage and temperature.*/ - -#if !defined (LSI_STARTUP_TIME) -#define LSI_STARTUP_TIME 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIME */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/** - * @brief External clock source for SPI/SAI peripheral - * This value is used by the SPI/SAI HAL module to compute the SPI/SAI clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) -#define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ############################################ System Configuration ################################################ */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U /*!< Enable prefetch */ - -/* ############################################ Assert Selection #################################################### */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ############################################ Register callback feature configuration ############################# */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32h5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_I3C_REGISTER_CALLBACKS 0U /* I3C register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OPAMP register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ -#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_XSPI_REGISTER_CALLBACKS 0U /* XSPI register callback disabled */ - -/* ############################################ SPI peripheral configuration ######################################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ -#define USE_SPI_CRC 1U - - -/* Includes ----------------------------------------------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32h5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32h5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32h5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_DCACHE_MODULE_ENABLED -#include "stm32h5xx_hal_dcache.h" -#endif /* HAL_DCACHE_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32h5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32h5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED -#include "stm32h5xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32h5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32h5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32h5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32h5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32h5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32h5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32h5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32h5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED -#include "stm32h5xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32h5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32h5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32h5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32h5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED -#include "stm32h5xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_I3C_MODULE_ENABLED -#include "stm32h5xx_hal_i3c.h" -#endif /* HAL_I3C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32h5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32h5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_XSPI_MODULE_ENABLED -#include "stm32h5xx_hal_xspi.h" -#endif /* HAL_XSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32h5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32h5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32h5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32h5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32h5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32h5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32h5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32h5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32h5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32h5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32h5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32h5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32h5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32h5xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32h5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32h5xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED -#include "stm32h5xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32h5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED -#include "stm32h5xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32h5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED -#include "stm32h5xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32h5xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED -#include "stm32h5xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_RAMCFG_MODULE_ENABLED -#include "stm32h5xx_hal_ramcfg.h" -#endif /* HAL_RAMCFG_MODULE_ENABLED */ - -/* Exported macro ----------------------------------------------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ----------------------------------------------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H5xx_HAL_CONF_H */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h7xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h7xx_hal_conf.h deleted file mode 100755 index 05bf9c5f6e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32h7xx_hal_conf.h +++ /dev/null @@ -1,513 +0,0 @@ -/** - ****************************************************************************** - * @file stm32h7xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32h7xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32H7xx_HAL_CONF_H -#define STM32H7xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_DTS_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_ETH_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GFXMMU_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_HRTIM_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_JPEG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_MDIOS_MODULE_ENABLED -#define HAL_MDMA_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RAMECC_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SDRAM_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SWPMI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (25000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal oscillator (CSI) default value. - * This value is the default CSI value after Reset. - */ -#if !defined (CSI_VALUE) - #define CSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (64000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -#if !defined (LSI_VALUE) - #define LSI_VALUE (32000UL) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000UL /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x0FUL) /*!< tick interrupt priority */ -#define USE_RTOS 0 -#define USE_SD_TRANSCEIVER 0U /*!< use uSD Transceiver */ -#define USE_SPI_CRC 1U /*!< use CRC in SPI */ - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U /* DFSDM register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U /* DSI register callback disabled */ -#define USE_HAL_DTS_REGISTER_CALLBACKS 0U /* DTS register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U /* GFXMMU register callback disabled */ -#define USE_HAL_HRTIM_REGISTER_CALLBACKS 0U /* HRTIM register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_JPEG_REGISTER_CALLBACKS 0U /* JPEG register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDIOS_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U /* OSPI register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U /* QSPI register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U /* SWPMI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ########################### Ethernet Configuration ######################### */ -#define ETH_TX_DESC_CNT 4 /* number of Ethernet Tx DMA descriptors */ -#define ETH_RX_DESC_CNT 4 /* number of Ethernet Rx DMA descriptors */ - -#define ETH_MAC_ADDR0 (0x02UL) -#define ETH_MAC_ADDR1 (0x00UL) -#define ETH_MAC_ADDR2 (0x00UL) -#define ETH_MAC_ADDR3 (0x00UL) -#define ETH_MAC_ADDR4 (0x00UL) -#define ETH_MAC_ADDR5 (0x00UL) - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32h7xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32h7xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32h7xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_MDMA_MODULE_ENABLED - #include "stm32h7xx_hal_mdma.h" -#endif /* HAL_MDMA_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32h7xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32h7xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32h7xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32h7xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32h7xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_DTS_MODULE_ENABLED - #include "stm32h7xx_hal_dts.h" -#endif /* HAL_DTS_MODULE_ENABLED */ - -#ifdef HAL_ETH_MODULE_ENABLED - #include "stm32h7xx_hal_eth.h" -#endif /* HAL_ETH_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32h7xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32h7xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32h7xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32h7xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32h7xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32h7xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED - #include "stm32h7xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32h7xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32h7xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32h7xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32h7xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GFXMMU_MODULE_ENABLED - #include "stm32h7xx_hal_gfxmmu.h" -#endif /* HAL_GFXMMU_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED - #include "stm32h7xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_HRTIM_MODULE_ENABLED - #include "stm32h7xx_hal_hrtim.h" -#endif /* HAL_HRTIM_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32h7xx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32h7xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32h7xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32h7xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32h7xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32h7xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_JPEG_MODULE_ENABLED - #include "stm32h7xx_hal_jpeg.h" -#endif /* HAL_JPEG_MODULE_ENABLED */ - -#ifdef HAL_MDIOS_MODULE_ENABLED - #include "stm32h7xx_hal_mdios.h" -#endif /* HAL_MDIOS_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32h7xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32h7xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED -#include "stm32h7xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32h7xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32h7xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32h7xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED - #include "stm32h7xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32h7xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32h7xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RAMECC_MODULE_ENABLED - #include "stm32h7xx_hal_ramecc.h" -#endif /* HAL_RAMECC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32h7xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32h7xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32h7xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32h7xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SDRAM_MODULE_ENABLED - #include "stm32h7xx_hal_sdram.h" -#endif /* HAL_SDRAM_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32h7xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32h7xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32h7xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32h7xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32h7xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32h7xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32h7xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32h7xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32h7xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32h7xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32h7xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32h7xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32H7xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l0xx_hal_conf.h deleted file mode 100755 index 2f3c4d752e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l0xx_hal_conf.h +++ /dev/null @@ -1,342 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l0xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L0xx_HAL_CONF_H -#define __STM32L0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FIREWALL_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (2097152U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE (48000000U) /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1U<<__NVIC_PRIO_BITS) - 1U) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define PREREAD_ENABLE 0U -#define BUFFER_CACHE_DISABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FIREWALL_MODULE_ENABLED - #include "stm32l0xx_hal_firewall.h" -#endif /* HAL_FIREWALL_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32l0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l0xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32l0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L0xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l1xx_hal_conf.h deleted file mode 100755 index 06fbc29410..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l1xx_hal_conf.h +++ /dev/null @@ -1,324 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l1xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l1xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32L1xx_HAL_CONF_H -#define __STM32L1xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE (8000000U) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (2097000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE (37000U) /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External Low Speed oscillator (LSE) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768U) /*!< Value of the External Low Speed oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300U) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (0x000FU) /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/*#define USE_FULL_ASSERT 1U*/ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l0xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SDMMC_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l1xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l1xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l1xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l1xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32l1xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l1xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l1xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l1xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l1xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l1xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32L1xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l4xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l4xx_hal_conf.h deleted file mode 100755 index ca41261ffa..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l4xx_hal_conf.h +++ /dev/null @@ -1,480 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l4xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l4xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2017 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32L4xx_HAL_CONF_H -#define STM32L4xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CAN_MODULE_ENABLED -/* #define HAL_CAN_LEGACY_MODULE_ENABLED */ -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_DSI_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FIREWALL_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GFXMMU_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_LTDC_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_SWPMI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE 48000U /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/** - * @brief External clock source for SAI2 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) - #define EXTERNAL_SAI2_CLOCK_VALUE 48000U /*!< Value of the SAI2 External clock source in Hz*/ -#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 0x0FU /*!< tick interrupt priority */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/deregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l4xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U -#define USE_HAL_DSI_REGISTER_CALLBACKS 0U -#define USE_HAL_GFXMMU_REGISTER_CALLBACKS 0U -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SWPMI_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l4xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l4xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l4xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32l4xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l4xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l4xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32l4xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CAN_LEGACY_MODULE_ENABLED - #include "Legacy/stm32l4xx_hal_can_legacy.h" -#endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l4xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l4xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l4xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l4xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32l4xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED - #include "stm32l4xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_DSI_MODULE_ENABLED - #include "stm32l4xx_hal_dsi.h" -#endif /* HAL_DSI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l4xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_GFXMMU_MODULE_ENABLED - #include "stm32l4xx_hal_gfxmmu.h" -#endif /* HAL_GFXMMU_MODULE_ENABLED */ - -#ifdef HAL_FIREWALL_MODULE_ENABLED - #include "stm32l4xx_hal_firewall.h" -#endif /* HAL_FIREWALL_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l4xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32l4xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED - #include "stm32l4xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l4xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l4xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l4xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32l4xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32l4xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LTDC_MODULE_ENABLED - #include "stm32l4xx_hal_ltdc.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32l4xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32l4xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l4xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l4xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32l4xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l4xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32l4xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED - #include "stm32l4xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l4xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32l4xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l4xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l4xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32l4xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l4xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l4xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l4xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l4xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l4xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_SWPMI_MODULE_ENABLED - #include "stm32l4xx_hal_swpmi.h" -#endif /* HAL_SWPMI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l4xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l4xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l4xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l4xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l4xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32L4xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l5xx_hal_conf.h deleted file mode 100644 index cd47676670..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32l5xx_hal_conf.h +++ /dev/null @@ -1,439 +0,0 @@ -/** - ****************************************************************************** - * @file stm32l5xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32l5xx_hal_conf.h. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32L5xx_HAL_CONF_H -#define STM32L5xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 16000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/** - * @brief External clock source for SAI2 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI2_CLOCK_VALUE) - #define EXTERNAL_SAI2_CLOCK_VALUE 48000UL /*!< Value of the SAI2 External clock source in Hz*/ -#endif /* EXTERNAL_SAI2_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32l5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U -#define USE_HAL_DFSDM_REGISTER_CALLBACKS 0U -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U -#define USE_HAL_OSPI_REGISTER_CALLBACKS 0U -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U -#define USE_HAL_SD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U -#define USE_HAL_UART_REGISTER_CALLBACKS 0U -#define USE_HAL_USART_REGISTER_CALLBACKS 0U -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - -/* ################## SDMMC peripheral configuration ######################### */ - -#define USE_SD_TRANSCEIVER 0U - - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32l5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32l5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32l5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32l5xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32l5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32l5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32l5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32l5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32l5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32l5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32l5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32l5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32l5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED - #include "stm32l5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32l5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32l5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED - #include "stm32l5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32l5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32l5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32l5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED - #include "stm32l5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED - #include "stm32l5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED - #include "stm32l5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED - #include "stm32l5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED - #include "stm32l5xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED - #include "stm32l5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32l5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32l5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32l5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32l5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32l5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32l5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32l5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32l5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32l5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32l5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32l5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32l5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32l5xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32l5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32l5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32l5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32L5xx_HAL_CONF_H */ - - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32mp1xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32mp1xx_hal_conf.h deleted file mode 100644 index 228f2a05ab..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32mp1xx_hal_conf.h +++ /dev/null @@ -1,346 +0,0 @@ -/** - ****************************************************************************** - * @file stm32mp1xx_hal_conf.h - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - * Copyright (c) 2019 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 STM32MP1xx_HAL_CONF_H -#define STM32MP1xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_CEC_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DFSDM_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPDIFRX_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_MDMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_CEC_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE (24000000U) /*!< Value of the External oscillator in Hz : FPGA case fixed to 60MHZ */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100U) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (64000000U) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT 5000U /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE ((uint32_t)32768U) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT ((uint32_t)5000U) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal oscillator (CSI) default value. - * This value is the default CSI value after Reset. - */ -#if !defined (CSI_VALUE) - #define CSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* CSI_VALUE */ - -/** - * @brief External clock source for I2S peripheral - * This value is used by the I2S HAL module to compute the I2S clock source - * frequency, this source is inserted directly through I2S_CKIN pad. - */ -#if !defined (EXTERNAL_CLOCK_VALUE) - #define EXTERNAL_CLOCK_VALUE 12288000U /*!< Value of the External clock in Hz*/ -#endif /* EXTERNAL_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY 1U /*!< tick interrupt priority (lowest by default) */ - /* Warning: Must be set to higher priority for HAL_Delay() */ - /* and HAL_GetTick() usage under interrupt context */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 0U -#define DATA_CACHE_ENABLE 0U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32mp1xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32mp1xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32mp1xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32mp1xx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32mp1xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_MDMA_MODULE_ENABLED - #include "stm32mp1xx_hal_mdma.h" -#endif /* HAL_MDMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32mp1xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32mp1xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32mp1xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32mp1xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32mp1xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32mp1xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED - #include "stm32mp1xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_DFSDM_MODULE_ENABLED - #include "stm32mp1xx_hal_dfsdm.h" -#endif /* HAL_DFSDM_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED - #include "stm32mp1xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED - #include "stm32mp1xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32mp1xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32mp1xx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32mp1xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32mp1xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32mp1xx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32mp1xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32mp1xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32mp1xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED - #include "stm32mp1xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32mp1xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32mp1xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPDIFRX_MODULE_ENABLED - #include "stm32mp1xx_hal_spdifrx.h" -#endif /* HAL_SPDIFRX_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32mp1xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED - #include "stm32mp1xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32mp1xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32mp1xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32mp1xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32mp1xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32MP1xx_HAL_CONF_H */ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u0xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u0xx_hal_conf.h deleted file mode 100644 index e402e06798..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u0xx_hal_conf.h +++ /dev/null @@ -1,335 +0,0 @@ -/** - ****************************************************************************** - * @file stm32u0xx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 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 __STM32U0xx_HAL_CONF_H -#define __STM32U0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ - -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRS_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE 4000000U /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE 4000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI32_VALUE) -#define MSI32_VALUE 32000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI32_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE 16000000U /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE 48000000U /*!< Value of the Internal High Speed oscillator for USB FS/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE 32000U /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ - -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY (3U) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ - -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32n6xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LCD_REGISTER_CALLBACKS 0U /* LCD register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32u0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32u0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32u0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32u0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32u0xx_hal_adc.h" -#include "stm32u0xx_hal_adc_ex.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32u0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32u0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRS_MODULE_ENABLED -#include "stm32u0xx_ll_crs.h" -#endif /* HAL_CRS_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32u0xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32u0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32u0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32u0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32u0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32u0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32u0xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED -#include "stm32u0xx_hal_lcd.h" -#endif /* HAL_LTDC_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32u0xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32u0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32u0xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32u0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32u0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32u0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED -#include "stm32u0xx_ll_system.h" -#include "stm32u0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32u0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32u0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32u0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32u0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32u0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED -#include "stm32u0xx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32u0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t *file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32U0xx_HAL_CONF_H */ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u5xx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u5xx_hal_conf.h deleted file mode 100644 index e62e0a61ab..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32u5xx_hal_conf.h +++ /dev/null @@ -1,474 +0,0 @@ -/** - ****************************************************************************** - * @file stm32u5xx_hal_conf_template.h - * @author MCD Application Team - * @brief HAL configuration template file. - * This file should be copied to the application folder and renamed - * to stm32u5xx_hal_conf.h. - ****************************************************************************** - * @attention - * - * Copyright (c) 2021 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 STM32U5xx_HAL_CONF_H -#define STM32U5xx_HAL_CONF_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORDIC_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_DCACHE_MODULE_ENABLED -#define HAL_DCMI_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_DMA2D_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FDCAN_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_FMAC_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HASH_MODULE_ENABLED -#define HAL_HCD_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_ICACHE_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_MDF_MODULE_ENABLED -#define HAL_MMC_MODULE_ENABLED -#define HAL_NAND_MODULE_ENABLED -#define HAL_NOR_MODULE_ENABLED -#define HAL_OPAMP_MODULE_ENABLED -#define HAL_OSPI_MODULE_ENABLED -#define HAL_OTFDEC_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PSSI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RAMCFG_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SD_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SRAM_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) -#define HSE_VALUE 16000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) -#define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI48) value for USB FS, SDMMC and RNG. - * This internal oscillator is mainly dedicated to provide a high precision clock to - * the USB peripheral by means of a special Clock Recovery System (CRS) circuitry. - * When the CRS is not used, the HSI48 RC oscillator runs on it default frequency - * which is subject to manufacturing process variations. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal High Speed oscillator for USB FS/SDMMC/RNG in Hz. - The real value my vary depending on manufacturing process variations.*/ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz. The real value may -vary depending on the variations in voltage and temperature.*/ - -#if !defined (LSI_STARTUP_TIMEOUT) -#define LSI_STARTUP_TIMEOUT 130UL /*!< Time out for LSI start up, in ms */ -#endif /* LSI_STARTUP_TIMEOUT */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) -#define EXTERNAL_SAI1_CLOCK_VALUE 48000UL /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300UL /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 1U /*!< Enable prefetch */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## Register callback feature configuration ############### */ -/** - * @brief Set below the peripheral configuration to "1U" to add the support - * of HAL callback registration/unregistration feature for the HAL - * driver(s). This allows user application to provide specific callback - * functions thanks to HAL_PPP_RegisterCallback() rather than overwriting - * the default weak callback functions (see each stm32u5xx_hal_ppp.h file - * for possible callback identifiers defined in HAL_PPP_CallbackIDTypeDef - * for each PPP peripheral). - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CORDIC_REGISTER_CALLBACKS 0U /* CORDIC register callback disabled */ -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_DCMI_REGISTER_CALLBACKS 0U /* DCMI register callback disabled */ -#define USE_HAL_DMA2D_REGISTER_CALLBACKS 0U /* DMA2D register callback disabled */ -#define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ -#define USE_HAL_FDCAN_REGISTER_CALLBACKS 0U /* FDCAN register callback disabled */ -#define USE_HAL_FMAC_REGISTER_CALLBACKS 0U /* FMAC register callback disabled */ -#define USE_HAL_HASH_REGISTER_CALLBACKS 0U /* HASH register callback disabled */ -#define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_IWDG_REGISTER_CALLBACKS 0U /* IWDG register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0U /* LPTIM register callback disabled */ -#define USE_HAL_LTDC_REGISTER_CALLBACKS 0U /* LTDC register callback disabled */ -#define USE_HAL_MDF_REGISTER_CALLBACKS 0U /* MDF register callback disabled */ -#define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ -#define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ -#define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ -#define USE_HAL_OPAMP_REGISTER_CALLBACKS 0U /* MDIO register callback disabled */ -#define USE_HAL_OTFDEC_REGISTER_CALLBACKS 0U /* OTFDEC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ -#define USE_HAL_PKA_REGISTER_CALLBACKS 0U /* PKA register callback disabled */ -#define USE_HAL_RAMCFG_REGISTER_CALLBACKS 0U /* RAMCFG register callback disabled */ -#define USE_HAL_RNG_REGISTER_CALLBACKS 0U /* RNG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SAI_REGISTER_CALLBACKS 0U /* SAI register callback disabled */ -#define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ -#define USE_HAL_SDRAM_REGISTER_CALLBACKS 0U /* SDRAM register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ -#define USE_SPI_CRC 1U - -/* ################## SDMMC peripheral configuration ######################### */ - -#define USE_SD_TRANSCEIVER 0U - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED -#include "stm32u5xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED -#include "stm32u5xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_ICACHE_MODULE_ENABLED -#include "stm32u5xx_hal_icache.h" -#endif /* HAL_ICACHE_MODULE_ENABLED */ - -#ifdef HAL_DCACHE_MODULE_ENABLED -#include "stm32u5xx_hal_dcache.h" -#endif /* HAL_DCACHE_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED -#include "stm32u5xx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED -#include "stm32u5xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_DMA2D_MODULE_ENABLED -#include "stm32u5xx_hal_dma2d.h" -#endif /* HAL_DMA2D_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED -#include "stm32u5xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED -#include "stm32u5xx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED -#include "stm32u5xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED -#include "stm32u5xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED -#include "stm32u5xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED -#include "stm32u5xx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED -#include "stm32u5xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED -#include "stm32u5xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_HASH_MODULE_ENABLED -#include "stm32u5xx_hal_hash.h" -#endif /* HAL_HASH_MODULE_ENABLED */ - -#ifdef HAL_SRAM_MODULE_ENABLED -#include "stm32u5xx_hal_sram.h" -#endif /* HAL_SRAM_MODULE_ENABLED */ - -#ifdef HAL_MMC_MODULE_ENABLED -#include "stm32u5xx_hal_mmc.h" -#endif /* HAL_MMC_MODULE_ENABLED */ - -#ifdef HAL_NOR_MODULE_ENABLED -#include "stm32u5xx_hal_nor.h" -#endif /* HAL_NOR_MODULE_ENABLED */ - -#ifdef HAL_NAND_MODULE_ENABLED -#include "stm32u5xx_hal_nand.h" -#endif /* HAL_NAND_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED -#include "stm32u5xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED -#include "stm32u5xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED -#include "stm32u5xx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_OPAMP_MODULE_ENABLED -#include "stm32u5xx_hal_opamp.h" -#endif /* HAL_OPAMP_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED -#include "stm32u5xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_OSPI_MODULE_ENABLED -#include "stm32u5xx_hal_ospi.h" -#endif /* HAL_OSPI_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED -#include "stm32u5xx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED -#include "stm32u5xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED -#include "stm32u5xx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SD_MODULE_ENABLED -#include "stm32u5xx_hal_sd.h" -#endif /* HAL_SD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED -#include "stm32u5xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED -#include "stm32u5xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED -#include "stm32u5xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED -#include "stm32u5xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED -#include "stm32u5xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED -#include "stm32u5xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED -#include "stm32u5xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED -#include "stm32u5xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED -#include "stm32u5xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED -#include "stm32u5xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_HCD_MODULE_ENABLED -#include "stm32u5xx_hal_hcd.h" -#endif /* HAL_HCD_MODULE_ENABLED */ - -#ifdef HAL_CORDIC_MODULE_ENABLED -#include "stm32u5xx_hal_cordic.h" -#endif /* HAL_CORDIC_MODULE_ENABLED */ - -#ifdef HAL_DCMI_MODULE_ENABLED -#include "stm32u5xx_hal_dcmi.h" -#endif /* HAL_DCMI_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED -#include "stm32u5xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FDCAN_MODULE_ENABLED -#include "stm32u5xx_hal_fdcan.h" -#endif /* HAL_FDCAN_MODULE_ENABLED */ - -#ifdef HAL_FMAC_MODULE_ENABLED -#include "stm32u5xx_hal_fmac.h" -#endif /* HAL_FMAC_MODULE_ENABLED */ - -#ifdef HAL_OTFDEC_MODULE_ENABLED -#include "stm32u5xx_hal_otfdec.h" -#endif /* HAL_OTFDEC_MODULE_ENABLED */ - -#ifdef HAL_PSSI_MODULE_ENABLED -#include "stm32u5xx_hal_pssi.h" -#endif /* HAL_PSSI_MODULE_ENABLED */ - -#ifdef HAL_RAMCFG_MODULE_ENABLED -#include "stm32u5xx_hal_ramcfg.h" -#endif /* HAL_RAMCFG_MODULE_ENABLED */ - -#ifdef HAL_MDF_MODULE_ENABLED -#include "stm32u5xx_hal_mdf.h" -#endif /* HAL_MDF_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr: If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ -#define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ -void assert_failed(uint8_t *file, uint32_t line); -#else -#define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32U5xx_HAL_CONF_H */ - diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wbxx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wbxx_hal_conf.h deleted file mode 100644 index b78c5cb83d..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wbxx_hal_conf.h +++ /dev/null @@ -1,355 +0,0 @@ -/** - ****************************************************************************** - * @file stm32wbxx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2019 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32WBxx_HAL_CONF_H -#define STM32WBxx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LCD_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PCD_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_QSPI_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SAI_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_TSC_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_PCD_REGISTER_CALLBACKS 0u -#define USE_HAL_PKA_REGISTER_CALLBACKS 0u -#define USE_HAL_QSPI_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SAI_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_TSC_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -#define USE_HAL_CRYP_SUSPEND_RESUME 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ - -#if !defined (HSE_VALUE) - #define HSE_VALUE (32000000UL) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT (100UL) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) - #define MSI_VALUE (4000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE (16000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI1) value. - */ -#if !defined (LSI1_VALUE) - #define LSI1_VALUE (32000UL) /*!< LSI1 Typical Value in Hz*/ -#endif /* LSI1_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ -/** - * @brief Internal Low Speed oscillator (LSI2) value. - */ -#if !defined (LSI2_VALUE) - #define LSI2_VALUE (32000UL) /*!< LSI2 Typical Value in Hz*/ -#endif /* LSI2_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature.*/ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE (32768UL) /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (HSI48) default value. - * This value is the default HSI48 range value after Reset. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE (48000000UL) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI48_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT (5000UL) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/** - * @brief External clock source for SAI1 peripheral - * This value is used by the RCC HAL module to compute the SAI1 & SAI2 clock source - * frequency. - */ -#if !defined (EXTERNAL_SAI1_CLOCK_VALUE) - #define EXTERNAL_SAI1_CLOCK_VALUE (48000UL) /*!< Value of the SAI1 External clock source in Hz*/ -#endif /* EXTERNAL_SAI1_CLOCK_VALUE */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE (3300UL) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1UL<<__NVIC_PRIO_BITS) - 1UL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32wbxx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32wbxx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32wbxx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32wbxx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32wbxx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32wbxx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32wbxx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32wbxx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32wbxx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32wbxx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32wbxx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32wbxx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32wbxx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32wbxx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LCD_MODULE_ENABLED - #include "stm32wbxx_hal_lcd.h" -#endif /* HAL_LCD_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32wbxx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32wbxx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32wbxx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32wbxx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_QSPI_MODULE_ENABLED - #include "stm32wbxx_hal_qspi.h" -#endif /* HAL_QSPI_MODULE_ENABLED */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32wbxx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32wbxx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32wbxx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SAI_MODULE_ENABLED - #include "stm32wbxx_hal_sai.h" -#endif /* HAL_SAI_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32wbxx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32wbxx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32wbxx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32wbxx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32wbxx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32wbxx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32wbxx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32wbxx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32WBxx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wlxx_hal_conf.h b/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wlxx_hal_conf.h deleted file mode 100644 index 82170f12fe..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/submodules/stm32-cmake/tests/hal/stm32wlxx_hal_conf.h +++ /dev/null @@ -1,340 +0,0 @@ -/** - ****************************************************************************** - * @file stm32wlxx_hal_conf.h - * @author MCD Application Team - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2020 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef STM32WLxx_HAL_CONF_H -#define STM32WLxx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED -#define HAL_ADC_MODULE_ENABLED -#define HAL_COMP_MODULE_ENABLED -#define HAL_CRC_MODULE_ENABLED -#define HAL_CRYP_MODULE_ENABLED -#define HAL_DAC_MODULE_ENABLED -#define HAL_GTZC_MODULE_ENABLED -#define HAL_HSEM_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_I2S_MODULE_ENABLED -#define HAL_IPCC_MODULE_ENABLED -#define HAL_IRDA_MODULE_ENABLED -#define HAL_IWDG_MODULE_ENABLED -#define HAL_LPTIM_MODULE_ENABLED -#define HAL_PKA_MODULE_ENABLED -#define HAL_RNG_MODULE_ENABLED -#define HAL_RTC_MODULE_ENABLED -#define HAL_SMARTCARD_MODULE_ENABLED -#define HAL_SMBUS_MODULE_ENABLED -#define HAL_SPI_MODULE_ENABLED -#define HAL_SUBGHZ_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -#define HAL_UART_MODULE_ENABLED -#define HAL_USART_MODULE_ENABLED -#define HAL_WWDG_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED - -/* ########################## Register Callbacks selection ############################## */ -/** - * @brief This is the list of modules where register callback can be used - */ -#define USE_HAL_ADC_REGISTER_CALLBACKS 0u -#define USE_HAL_COMP_REGISTER_CALLBACKS 0u -#define USE_HAL_CRYP_REGISTER_CALLBACKS 0u -#define USE_HAL_DAC_REGISTER_CALLBACKS 0u -#define USE_HAL_I2C_REGISTER_CALLBACKS 0u -#define USE_HAL_I2S_REGISTER_CALLBACKS 0u -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0u -#define USE_HAL_LPTIM_REGISTER_CALLBACKS 0u -#define USE_HAL_PKA_REGISTER_CALLBACKS 0u -#define USE_HAL_RNG_REGISTER_CALLBACKS 0u -#define USE_HAL_RTC_REGISTER_CALLBACKS 0u -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0u -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0u -#define USE_HAL_SPI_REGISTER_CALLBACKS 0u -#define USE_HAL_SUBGHZ_REGISTER_CALLBACKS 0u -#define USE_HAL_TIM_REGISTER_CALLBACKS 0u -#define USE_HAL_UART_REGISTER_CALLBACKS 0u -#define USE_HAL_USART_REGISTER_CALLBACKS 0u -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0u - -/* ########################## Oscillator Values adaptation ####################*/ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ - -#if !defined (HSE_VALUE) -#define HSE_VALUE 32000000UL /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -#if !defined (HSE_STARTUP_TIMEOUT) -#define HSE_STARTUP_TIMEOUT 100UL /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal Multiple Speed oscillator (MSI) default value. - * This value is the default MSI range value after Reset. - */ -#if !defined (MSI_VALUE) -#define MSI_VALUE 4000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* MSI_VALUE */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) -#define HSI_VALUE 16000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) -#define LSI_VALUE 32000UL /*!< LSI Typical Value in Hz*/ -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ - -/** - * @brief External Low Speed oscillator (LSE) value. - * This value is used by the UART, RTC HAL module to compute the system frequency - */ -#if !defined (LSE_VALUE) -#define LSE_VALUE 32768UL /*!< Value of the External oscillator in Hz*/ -#endif /* LSE_VALUE */ - -/** - * @brief Internal Multiple Speed oscillator (HSI48) default value. - * This value is the default HSI48 range value after Reset. - */ -#if !defined (HSI48_VALUE) -#define HSI48_VALUE 48000000UL /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI48_VALUE */ - -#if !defined (LSE_STARTUP_TIMEOUT) -#define LSE_STARTUP_TIMEOUT 5000UL /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE 3300U /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((1uL <<__NVIC_PRIO_BITS) - 1uL) /*!< tick interrupt priority (lowest by default) */ -#define USE_RTOS 0U -#define PREFETCH_ENABLE 0U -#define INSTRUCTION_CACHE_ENABLE 1U -#define DATA_CACHE_ENABLE 1U - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1 */ - -/* ################## SPI peripheral configuration ########################## */ - -/* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver - * Activated: CRC code is present inside driver - * Deactivated: CRC code cleaned from driver - */ - -#define USE_SPI_CRC 1U - -/* ################## CRYP peripheral configuration ########################## */ - -#define USE_HAL_CRYP_SUSPEND_RESUME 1U - - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32wlxx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32wlxx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32wlxx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32wlxx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32wlxx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_CRYP_MODULE_ENABLED - #include "stm32wlxx_hal_cryp.h" -#endif /* HAL_CRYP_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32wlxx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32wlxx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32wlxx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32wlxx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_GTZC_MODULE_ENABLED - #include "stm32wlxx_hal_gtzc.h" -#endif /* HAL_GTZC_MODULE_ENABLED */ - -#ifdef HAL_HSEM_MODULE_ENABLED - #include "stm32wlxx_hal_hsem.h" -#endif /* HAL_HSEM_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32wlxx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32wlxx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IPCC_MODULE_ENABLED - #include "stm32wlxx_hal_ipcc.h" -#endif /* HAL_IPCC_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32wlxx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32wlxx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_LPTIM_MODULE_ENABLED - #include "stm32wlxx_hal_lptim.h" -#endif /* HAL_LPTIM_MODULE_ENABLED */ - -#ifdef HAL_PKA_MODULE_ENABLED - #include "stm32wlxx_hal_pka.h" -#endif /* HAL_PKA_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32wlxx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32wlxx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_RNG_MODULE_ENABLED - #include "stm32wlxx_hal_rng.h" -#endif /* HAL_RNG_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32wlxx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32wlxx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32wlxx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32wlxx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_SUBGHZ_MODULE_ENABLED - #include "stm32wlxx_hal_subghz.h" -#endif /* HAL_SUBGHZ_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32wlxx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32wlxx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32wlxx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32wlxx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* STM32WLxx_HAL_CONF_H */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/esp_flasher/lib/esp-serial-flasher/test/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/test/CMakeLists.txt index 7441bbca76..20ddaf1ce8 100644 --- a/esp_flasher/lib/esp-serial-flasher/test/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/test/CMakeLists.txt @@ -5,26 +5,23 @@ add_executable( ${PROJECT_NAME} test_main.cpp ../src/esp_loader.c ../src/esp_targets.c + ../src/esp_stubs.c ../src/md5_hash.c ../src/protocol_common.c ../src/protocol_uart.c ../src/slip.c) -target_include_directories(${PROJECT_NAME} PRIVATE ../include ../private_include ../test ../port) +target_include_directories(${PROJECT_NAME} PRIVATE ../include ../private_include ../test) target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Werror -O3) set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 14) -if( QEMU_TEST ) - target_sources(${PROJECT_NAME} PRIVATE serial_io_tcp.cpp qemu_test.cpp) -else() - target_sources(${PROJECT_NAME} PRIVATE serial_io_mock.cpp test.cpp) -endif() +target_sources(${PROJECT_NAME} PRIVATE test_tcp_port.cpp qemu_test.cpp) target_compile_definitions(${PROJECT_NAME} PRIVATE MD5_ENABLED=1 SERIAL_FLASHER_INTERFACE_UART SERIAL_FLASHER_DEBUG_TRACE - SERIAL_FLASHER_WRITE_BLOCK_RETRIES=1 + SERIAL_FLASHER_WRITE_BLOCK_RETRIES=3 ) diff --git a/esp_flasher/lib/esp-serial-flasher/test/README.md b/esp_flasher/lib/esp-serial-flasher/test/README.md index 67d9b1ebdf..d5cb6d8b53 100644 --- a/esp_flasher/lib/esp-serial-flasher/test/README.md +++ b/esp_flasher/lib/esp-serial-flasher/test/README.md @@ -1,30 +1,54 @@ +# Serial Flasher Tests -# Serial flasher Tests +## Overview -##Overview +The two kinds of tests are written for serial flasher: -Two kinds of tests are written for serial flasher: - -* Host tests * Qemu tests +* Target tests -Qemu tests uses emulated esp32 to test correctness of the library. - -## Installation (Only for qemu tests) +## Qemu Tests -Please refer to [building qemu](https://github.com/espressif/qemu) for instructions how to compile. +Qemu tests use emulated esp32 to test the correctness of the library. -## Build and run +### Installation -### Qemu test +Please refer to [building qemu](https://github.com/espressif/qemu) for instructions on how to compile. QEMU_PATH environment variable pointing to compiled `qemu/build/xtensa-softmmu/qemu-system-xtensa` has to be defined. -``` + +```bash export QEMU_PATH=path_to_qemu-system-xtensa -./run_test.sh qemu +./run_qemu_test.sh ``` -### Host test +## Target Tests + +To install all the necessary tools for running the Build and Target tests just run the following command: + +```pip install -r test/requirements_test.txt``` + +### Build + +Each example can be built according its README. To make things simpler, there is a tool to build all Espressif SoC examples with one command called [idf-build-apps](https://docs.espressif.com/projects/idf-build-apps/en/latest/). Before executing the [idf-build-apps](https://docs.espressif.com/projects/idf-build-apps/en/latest/), you need to run export script of [ESP-IDF](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/get-started/index.html). After this, you are able to run the following command to build the examples: + +```bash +python -m idf_build_apps build -v -p . + --recursive + --exclude ./examples/binaries + --config "sdkconfig.defaults*" + --build-dir "build_"@w + --check-warnings ``` -./run_test.sh host -``` \ No newline at end of file + +To build examples for other SoCs, please refer to the README of each example. + +### Test + +Pytest is used to test the built examples. There is a test written for each example. To execute it, just run the following command with replacing target_name and port with your settings: + +```bash +pytest --target= --port= +``` + +The examples for Espressif SoC are built for ESP32 and some of them for ESP32-S3 (`esp32_spi_load_ram_example` and `esp32_usb_cdc_acm_example`). Please be aware that tests for ESP32-S3 need to be run separately as `esp32_usb_cdc_acm_example` fails when runnning after `esp32_spi_load_ram_example`. diff --git a/esp_flasher/lib/esp-serial-flasher/test/catch.hpp b/esp_flasher/lib/esp-serial-flasher/test/catch.hpp index 879fc5b1d1..13b52bc8aa 100644 --- a/esp_flasher/lib/esp-serial-flasher/test/catch.hpp +++ b/esp_flasher/lib/esp-serial-flasher/test/catch.hpp @@ -317,115 +317,133 @@ namespace Catch { - struct IConfig; +struct IConfig; - struct CaseSensitive { enum Choice { +struct CaseSensitive { + enum Choice { Yes, No - }; }; + }; +}; - class NonCopyable { +class NonCopyable { #ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - NonCopyable( NonCopyable const& ) = delete; - NonCopyable( NonCopyable && ) = delete; - NonCopyable& operator = ( NonCopyable const& ) = delete; - NonCopyable& operator = ( NonCopyable && ) = delete; + NonCopyable( NonCopyable const & ) = delete; + NonCopyable( NonCopyable && ) = delete; + NonCopyable &operator = ( NonCopyable const & ) = delete; + NonCopyable &operator = ( NonCopyable && ) = delete; #else - NonCopyable( NonCopyable const& info ); - NonCopyable& operator = ( NonCopyable const& ); + NonCopyable( NonCopyable const &info ); + NonCopyable &operator = ( NonCopyable const & ); #endif - protected: - NonCopyable() {} - virtual ~NonCopyable(); - }; +protected: + NonCopyable() {} + virtual ~NonCopyable(); +}; - class SafeBool { - public: - typedef void (SafeBool::*type)() const; +class SafeBool { +public: + typedef void (SafeBool::*type)() const; - static type makeSafe( bool value ) { - return value ? &SafeBool::trueValue : 0; - } - private: - void trueValue() const {} - }; + static type makeSafe( bool value ) + { + return value ? &SafeBool::trueValue : 0; + } +private: + void trueValue() const {} +}; - template - inline void deleteAll( ContainerT& container ) { - typename ContainerT::const_iterator it = container.begin(); - typename ContainerT::const_iterator itEnd = container.end(); - for(; it != itEnd; ++it ) - delete *it; +template +inline void deleteAll( ContainerT &container ) +{ + typename ContainerT::const_iterator it = container.begin(); + typename ContainerT::const_iterator itEnd = container.end(); + for (; it != itEnd; ++it ) { + delete *it; } - template - inline void deleteAllValues( AssociativeContainerT& container ) { - typename AssociativeContainerT::const_iterator it = container.begin(); - typename AssociativeContainerT::const_iterator itEnd = container.end(); - for(; it != itEnd; ++it ) - delete it->second; +} +template +inline void deleteAllValues( AssociativeContainerT &container ) +{ + typename AssociativeContainerT::const_iterator it = container.begin(); + typename AssociativeContainerT::const_iterator itEnd = container.end(); + for (; it != itEnd; ++it ) { + delete it->second; } +} - bool startsWith( std::string const& s, std::string const& prefix ); - bool endsWith( std::string const& s, std::string const& suffix ); - bool contains( std::string const& s, std::string const& infix ); - void toLowerInPlace( std::string& s ); - std::string toLower( std::string const& s ); - std::string trim( std::string const& str ); - bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ); +bool startsWith( std::string const &s, std::string const &prefix ); +bool endsWith( std::string const &s, std::string const &suffix ); +bool contains( std::string const &s, std::string const &infix ); +void toLowerInPlace( std::string &s ); +std::string toLower( std::string const &s ); +std::string trim( std::string const &str ); +bool replaceInPlace( std::string &str, std::string const &replaceThis, std::string const &withThis ); - struct pluralise { - pluralise( std::size_t count, std::string const& label ); +struct pluralise { + pluralise( std::size_t count, std::string const &label ); - friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ); + friend std::ostream &operator << ( std::ostream &os, pluralise const &pluraliser ); - std::size_t m_count; - std::string m_label; - }; + std::size_t m_count; + std::string m_label; +}; - struct SourceLineInfo { +struct SourceLineInfo { - SourceLineInfo(); - SourceLineInfo( char const* _file, std::size_t _line ); - SourceLineInfo( SourceLineInfo const& other ); + SourceLineInfo(); + SourceLineInfo( char const *_file, std::size_t _line ); + SourceLineInfo( SourceLineInfo const &other ); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - SourceLineInfo( SourceLineInfo && ) = default; - SourceLineInfo& operator = ( SourceLineInfo const& ) = default; - SourceLineInfo& operator = ( SourceLineInfo && ) = default; + SourceLineInfo( SourceLineInfo && ) = default; + SourceLineInfo &operator = ( SourceLineInfo const & ) = default; + SourceLineInfo &operator = ( SourceLineInfo && ) = default; # endif - bool empty() const; - bool operator == ( SourceLineInfo const& other ) const; - bool operator < ( SourceLineInfo const& other ) const; + bool empty() const; + bool operator == ( SourceLineInfo const &other ) const; + bool operator < ( SourceLineInfo const &other ) const; - std::string file; - std::size_t line; - }; + std::string file; + std::size_t line; +}; - std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); +std::ostream &operator << ( std::ostream &os, SourceLineInfo const &info ); - // This is just here to avoid compiler warnings with macro constants and boolean literals - inline bool isTrue( bool value ){ return value; } - inline bool alwaysTrue() { return true; } - inline bool alwaysFalse() { return false; } +// This is just here to avoid compiler warnings with macro constants and boolean literals +inline bool isTrue( bool value ) +{ + return value; +} +inline bool alwaysTrue() +{ + return true; +} +inline bool alwaysFalse() +{ + return false; +} - void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ); +void throwLogicError( std::string const &message, SourceLineInfo const &locationInfo ); - void seedRng( IConfig const& config ); - unsigned int rngSeed(); +void seedRng( IConfig const &config ); +unsigned int rngSeed(); - // Use this in variadic streaming macros to allow - // >> +StreamEndStop - // as well as - // >> stuff +StreamEndStop - struct StreamEndStop { - std::string operator+() { - return std::string(); - } - }; - template - T const& operator + ( T const& value, StreamEndStop ) { - return value; +// Use this in variadic streaming macros to allow +// >> +StreamEndStop +// as well as +// >> stuff +StreamEndStop +struct StreamEndStop { + std::string operator+() + { + return std::string(); } +}; +template +T const &operator + ( T const &value, StreamEndStop ) +{ + return value; +} } #define CATCH_INTERNAL_LINEINFO ::Catch::SourceLineInfo( __FILE__, static_cast( __LINE__ ) ) @@ -435,20 +453,19 @@ namespace Catch { namespace Catch { - class NotImplementedException : public std::exception - { - public: - NotImplementedException( SourceLineInfo const& lineInfo ); - NotImplementedException( NotImplementedException const& ) {} +class NotImplementedException : public std::exception { +public: + NotImplementedException( SourceLineInfo const &lineInfo ); + NotImplementedException( NotImplementedException const & ) {} - virtual ~NotImplementedException() CATCH_NOEXCEPT {} + virtual ~NotImplementedException() CATCH_NOEXCEPT {} - virtual const char* what() const CATCH_NOEXCEPT; + virtual const char *what() const CATCH_NOEXCEPT; - private: - std::string m_what; - SourceLineInfo m_lineInfo; - }; +private: + std::string m_what; + SourceLineInfo m_lineInfo; +}; } // end namespace Catch @@ -465,20 +482,20 @@ namespace Catch { namespace Catch { - struct IGeneratorInfo { - virtual ~IGeneratorInfo(); - virtual bool moveNext() = 0; - virtual std::size_t getCurrentIndex() const = 0; - }; +struct IGeneratorInfo { + virtual ~IGeneratorInfo(); + virtual bool moveNext() = 0; + virtual std::size_t getCurrentIndex() const = 0; +}; - struct IGeneratorsForTest { - virtual ~IGeneratorsForTest(); +struct IGeneratorsForTest { + virtual ~IGeneratorsForTest(); - virtual IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) = 0; - virtual bool moveNext() = 0; - }; + virtual IGeneratorInfo &getGeneratorInfo( std::string const &fileInfo, std::size_t size ) = 0; + virtual bool moveNext() = 0; +}; - IGeneratorsForTest* createGeneratorsForTest(); +IGeneratorsForTest *createGeneratorsForTest(); } // end namespace Catch @@ -492,72 +509,103 @@ namespace Catch { namespace Catch { - // An intrusive reference counting smart pointer. - // T must implement addRef() and release() methods - // typically implementing the IShared interface - template - class Ptr { - public: - Ptr() : m_p( CATCH_NULL ){} - Ptr( T* p ) : m_p( p ){ - if( m_p ) - m_p->addRef(); - } - Ptr( Ptr const& other ) : m_p( other.m_p ){ - if( m_p ) - m_p->addRef(); - } - ~Ptr(){ - if( m_p ) - m_p->release(); - } - void reset() { - if( m_p ) - m_p->release(); - m_p = CATCH_NULL; - } - Ptr& operator = ( T* p ){ - Ptr temp( p ); - swap( temp ); - return *this; +// An intrusive reference counting smart pointer. +// T must implement addRef() and release() methods +// typically implementing the IShared interface +template +class Ptr { +public: + Ptr() : m_p( CATCH_NULL ) {} + Ptr( T *p ) : m_p( p ) + { + if ( m_p ) { + m_p->addRef(); } - Ptr& operator = ( Ptr const& other ){ - Ptr temp( other ); - swap( temp ); - return *this; + } + Ptr( Ptr const &other ) : m_p( other.m_p ) + { + if ( m_p ) { + m_p->addRef(); } - void swap( Ptr& other ) { std::swap( m_p, other.m_p ); } - T* get() const{ return m_p; } - T& operator*() const { return *m_p; } - T* operator->() const { return m_p; } - bool operator !() const { return m_p == CATCH_NULL; } - operator SafeBool::type() const { return SafeBool::makeSafe( m_p != CATCH_NULL ); } + } + ~Ptr() + { + if ( m_p ) { + m_p->release(); + } + } + void reset() + { + if ( m_p ) { + m_p->release(); + } + m_p = CATCH_NULL; + } + Ptr &operator = ( T *p ) + { + Ptr temp( p ); + swap( temp ); + return *this; + } + Ptr &operator = ( Ptr const &other ) + { + Ptr temp( other ); + swap( temp ); + return *this; + } + void swap( Ptr &other ) + { + std::swap( m_p, other.m_p ); + } + T *get() const + { + return m_p; + } + T &operator*() const + { + return *m_p; + } + T *operator->() const + { + return m_p; + } + bool operator !() const + { + return m_p == CATCH_NULL; + } + operator SafeBool::type() const + { + return SafeBool::makeSafe( m_p != CATCH_NULL ); + } - private: - T* m_p; - }; +private: + T *m_p; +}; - struct IShared : NonCopyable { - virtual ~IShared(); - virtual void addRef() const = 0; - virtual void release() const = 0; - }; +struct IShared : NonCopyable { + virtual ~IShared(); + virtual void addRef() const = 0; + virtual void release() const = 0; +}; - template - struct SharedImpl : T { +template +struct SharedImpl : T { - SharedImpl() : m_rc( 0 ){} + SharedImpl() : m_rc( 0 ) {} - virtual void addRef() const { - ++m_rc; - } - virtual void release() const { - if( --m_rc == 0 ) - delete this; + virtual void addRef() const + { + ++m_rc; + } + virtual void release() const + { + if ( --m_rc == 0 ) { + delete this; } + } - mutable unsigned int m_rc; - }; + mutable unsigned int m_rc; +}; } // end namespace Catch @@ -571,36 +619,34 @@ namespace Catch { namespace Catch { - class TestCase; - class Stream; - struct IResultCapture; - struct IRunner; - struct IGeneratorsForTest; - struct IConfig; - - struct IContext - { - virtual ~IContext(); - - virtual IResultCapture* getResultCapture() = 0; - virtual IRunner* getRunner() = 0; - virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) = 0; - virtual bool advanceGeneratorsForCurrentTest() = 0; - virtual Ptr getConfig() const = 0; - }; +class TestCase; +class Stream; +struct IResultCapture; +struct IRunner; +struct IGeneratorsForTest; +struct IConfig; + +struct IContext { + virtual ~IContext(); + + virtual IResultCapture *getResultCapture() = 0; + virtual IRunner *getRunner() = 0; + virtual size_t getGeneratorIndex( std::string const &fileInfo, size_t totalSize ) = 0; + virtual bool advanceGeneratorsForCurrentTest() = 0; + virtual Ptr getConfig() const = 0; +}; - struct IMutableContext : IContext - { - virtual ~IMutableContext(); - virtual void setResultCapture( IResultCapture* resultCapture ) = 0; - virtual void setRunner( IRunner* runner ) = 0; - virtual void setConfig( Ptr const& config ) = 0; - }; +struct IMutableContext : IContext { + virtual ~IMutableContext(); + virtual void setResultCapture( IResultCapture *resultCapture ) = 0; + virtual void setRunner( IRunner *runner ) = 0; + virtual void setConfig( Ptr const &config ) = 0; +}; - IContext& getCurrentContext(); - IMutableContext& getCurrentMutableContext(); - void cleanUpContext(); - Stream createStream( std::string const& streamName ); +IContext &getCurrentContext(); +IMutableContext &getCurrentMutableContext(); +void cleanUpContext(); +Stream createStream( std::string const &streamName ); } @@ -614,26 +660,26 @@ namespace Catch { namespace Catch { - class TestSpec; +class TestSpec; - struct ITestCase : IShared { - virtual void invoke () const = 0; - protected: - virtual ~ITestCase(); - }; +struct ITestCase : IShared { + virtual void invoke () const = 0; +protected: + virtual ~ITestCase(); +}; - class TestCase; - struct IConfig; +class TestCase; +struct IConfig; - struct ITestCaseRegistry { - virtual ~ITestCaseRegistry(); - virtual std::vector const& getAllTests() const = 0; - virtual std::vector const& getAllTestsSorted( IConfig const& config ) const = 0; - }; +struct ITestCaseRegistry { + virtual ~ITestCaseRegistry(); + virtual std::vector const &getAllTests() const = 0; + virtual std::vector const &getAllTestsSorted( IConfig const &config ) const = 0; +}; - bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ); - std::vector const& getAllTestCasesSorted( IConfig const& config ); +bool matchTest( TestCase const &testCase, TestSpec const &testSpec, IConfig const &config ); +std::vector filterTests( std::vector const &testCases, TestSpec const &testSpec, IConfig const &config ); +std::vector const &getAllTestCasesSorted( IConfig const &config ); } @@ -645,7 +691,8 @@ class MethodTestCase : public SharedImpl { public: MethodTestCase( void (C::*method)() ) : m_method( method ) {} - virtual void invoke() const { + virtual void invoke() const + { C obj; (obj.*m_method)(); } @@ -659,70 +706,71 @@ class MethodTestCase : public SharedImpl { typedef void(*TestFunction)(); struct NameAndDesc { - NameAndDesc( const char* _name = "", const char* _description= "" ) - : name( _name ), description( _description ) + NameAndDesc( const char *_name = "", const char *_description = "" ) + : name( _name ), description( _description ) {} - const char* name; - const char* description; + const char *name; + const char *description; }; void registerTestCase - ( ITestCase* testCase, - char const* className, - NameAndDesc const& nameAndDesc, - SourceLineInfo const& lineInfo ); +( ITestCase *testCase, + char const *className, + NameAndDesc const &nameAndDesc, + SourceLineInfo const &lineInfo ); struct AutoReg { AutoReg - ( TestFunction function, - SourceLineInfo const& lineInfo, - NameAndDesc const& nameAndDesc ); + ( TestFunction function, + SourceLineInfo const &lineInfo, + NameAndDesc const &nameAndDesc ); template AutoReg - ( void (C::*method)(), - char const* className, - NameAndDesc const& nameAndDesc, - SourceLineInfo const& lineInfo ) { + ( void (C::*method)(), + char const *className, + NameAndDesc const &nameAndDesc, + SourceLineInfo const &lineInfo ) + { registerTestCase - ( new MethodTestCase( method ), - className, - nameAndDesc, - lineInfo ); + ( new MethodTestCase( method ), + className, + nameAndDesc, + lineInfo ); } ~AutoReg(); private: - AutoReg( AutoReg const& ); - void operator= ( AutoReg const& ); + AutoReg( AutoReg const & ); + void operator= ( AutoReg const & ); }; void registerTestCaseFunction - ( TestFunction function, - SourceLineInfo const& lineInfo, - NameAndDesc const& nameAndDesc ); +( TestFunction function, + SourceLineInfo const &lineInfo, + NameAndDesc const &nameAndDesc ); } // end namespace Catch #ifdef CATCH_CONFIG_VARIADIC_MACROS - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \ static void TestName(); \ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); }\ static void TestName() - #define INTERNAL_CATCH_TESTCASE( ... ) \ +#define INTERNAL_CATCH_TESTCASE( ... ) \ INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), __VA_ARGS__ ) - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); } - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\ namespace{ \ struct TestName : ClassName{ \ void test(); \ @@ -730,28 +778,28 @@ void registerTestCaseFunction Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestName::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); \ } \ void TestName::test() - #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \ +#define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \ INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, __VA_ARGS__ ) - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \ Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); #else - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_TESTCASE2( TestName, Name, Desc ) \ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TESTCASE2( TestName, Name, Desc ) \ static void TestName(); \ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }\ static void TestName() - #define INTERNAL_CATCH_TESTCASE( Name, Desc ) \ +#define INTERNAL_CATCH_TESTCASE( Name, Desc ) \ INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), Name, Desc ) - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \ namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); } - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestCaseName, ClassName, TestName, Desc )\ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TEST_CASE_METHOD2( TestCaseName, ClassName, TestName, Desc )\ namespace{ \ struct TestCaseName : ClassName{ \ void test(); \ @@ -759,11 +807,11 @@ void registerTestCaseFunction Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestCaseName::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO ); \ } \ void TestCaseName::test() - #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\ +#define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\ INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, TestName, Desc ) - /////////////////////////////////////////////////////////////////////////////// - #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, Name, Desc ) \ +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_REGISTER_TESTCASE( Function, Name, Desc ) \ Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); #endif @@ -778,8 +826,9 @@ void registerTestCaseFunction namespace Catch { - // ResultWas::OfType enum - struct ResultWas { enum OfType { +// ResultWas::OfType enum +struct ResultWas { + enum OfType { Unknown = -1, Ok = 0, Info = 1, @@ -797,31 +846,46 @@ namespace Catch { FatalErrorCondition = 0x200 | FailureBit - }; }; + }; +}; - inline bool isOk( ResultWas::OfType resultType ) { - return ( resultType & ResultWas::FailureBit ) == 0; - } - inline bool isJustInfo( int flags ) { - return flags == ResultWas::Info; - } +inline bool isOk( ResultWas::OfType resultType ) +{ + return ( resultType & ResultWas::FailureBit ) == 0; +} +inline bool isJustInfo( int flags ) +{ + return flags == ResultWas::Info; +} - // ResultDisposition::Flags enum - struct ResultDisposition { enum Flags { +// ResultDisposition::Flags enum +struct ResultDisposition { + enum Flags { Normal = 0x01, ContinueOnFailure = 0x02, // Failures fail test, but execution continues FalseTest = 0x04, // Prefix expression with ! SuppressFail = 0x08 // Failures are reported but do not fail the test - }; }; + }; +}; - inline ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) { - return static_cast( static_cast( lhs ) | static_cast( rhs ) ); - } +inline ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) +{ + return static_cast( static_cast( lhs ) | static_cast( rhs ) ); +} - inline bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; } - inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; } - inline bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; } +inline bool shouldContinueOnFailure( int flags ) +{ + return ( flags & ResultDisposition::ContinueOnFailure ) != 0; +} +inline bool isFalseTest( int flags ) +{ + return ( flags & ResultDisposition::FalseTest ) != 0; +} +inline bool shouldSuppressFailure( int flags ) +{ + return ( flags & ResultDisposition::SuppressFail ) != 0; +} } // end namespace Catch @@ -832,58 +896,56 @@ namespace Catch { namespace Catch { - struct AssertionInfo - { - AssertionInfo() {} - AssertionInfo( std::string const& _macroName, - SourceLineInfo const& _lineInfo, - std::string const& _capturedExpression, - ResultDisposition::Flags _resultDisposition ); - - std::string macroName; - SourceLineInfo lineInfo; - std::string capturedExpression; - ResultDisposition::Flags resultDisposition; - }; +struct AssertionInfo { + AssertionInfo() {} + AssertionInfo( std::string const &_macroName, + SourceLineInfo const &_lineInfo, + std::string const &_capturedExpression, + ResultDisposition::Flags _resultDisposition ); + + std::string macroName; + SourceLineInfo lineInfo; + std::string capturedExpression; + ResultDisposition::Flags resultDisposition; +}; - struct AssertionResultData - { - AssertionResultData() : resultType( ResultWas::Unknown ) {} +struct AssertionResultData { + AssertionResultData() : resultType( ResultWas::Unknown ) {} - std::string reconstructedExpression; - std::string message; - ResultWas::OfType resultType; - }; + std::string reconstructedExpression; + std::string message; + ResultWas::OfType resultType; +}; - class AssertionResult { - public: - AssertionResult(); - AssertionResult( AssertionInfo const& info, AssertionResultData const& data ); - ~AssertionResult(); +class AssertionResult { +public: + AssertionResult(); + AssertionResult( AssertionInfo const &info, AssertionResultData const &data ); + ~AssertionResult(); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - AssertionResult( AssertionResult const& ) = default; - AssertionResult( AssertionResult && ) = default; - AssertionResult& operator = ( AssertionResult const& ) = default; - AssertionResult& operator = ( AssertionResult && ) = default; + AssertionResult( AssertionResult const & ) = default; + AssertionResult( AssertionResult && ) = default; + AssertionResult &operator = ( AssertionResult const & ) = default; + AssertionResult &operator = ( AssertionResult && ) = default; # endif - bool isOk() const; - bool succeeded() const; - ResultWas::OfType getResultType() const; - bool hasExpression() const; - bool hasMessage() const; - std::string getExpression() const; - std::string getExpressionInMacro() const; - bool hasExpandedExpression() const; - std::string getExpandedExpression() const; - std::string getMessage() const; - SourceLineInfo getSourceInfo() const; - std::string getTestMacroName() const; - - protected: - AssertionInfo m_info; - AssertionResultData m_resultData; - }; + bool isOk() const; + bool succeeded() const; + ResultWas::OfType getResultType() const; + bool hasExpression() const; + bool hasMessage() const; + std::string getExpression() const; + std::string getExpressionInMacro() const; + bool hasExpandedExpression() const; + std::string getExpandedExpression() const; + std::string getMessage() const; + SourceLineInfo getSourceInfo() const; + std::string getTestMacroName() const; + +protected: + AssertionInfo m_info; + AssertionResultData m_resultData; +}; } // end namespace Catch @@ -892,312 +954,354 @@ namespace Catch { namespace Catch { namespace Matchers { - namespace Impl { +namespace Impl { - namespace Generic { - template class AllOf; - template class AnyOf; - template class Not; - } +namespace Generic { +template class AllOf; +template class AnyOf; +template class Not; +} - template - struct Matcher : SharedImpl - { - typedef ExpressionT ExpressionType; +template +struct Matcher : SharedImpl { + typedef ExpressionT ExpressionType; - virtual ~Matcher() {} - virtual Ptr clone() const = 0; - virtual bool match( ExpressionT const& expr ) const = 0; - virtual std::string toString() const = 0; + virtual ~Matcher() {} + virtual Ptr clone() const = 0; + virtual bool match( ExpressionT const &expr ) const = 0; + virtual std::string toString() const = 0; - Generic::AllOf operator && ( Matcher const& other ) const; - Generic::AnyOf operator || ( Matcher const& other ) const; - Generic::Not operator ! () const; - }; + Generic::AllOf operator && ( Matcher const &other ) const; + Generic::AnyOf operator || ( Matcher const &other ) const; + Generic::Not operator ! () const; +}; - template - struct MatcherImpl : Matcher { +template +struct MatcherImpl : Matcher { - virtual Ptr > clone() const { - return Ptr >( new DerivedT( static_cast( *this ) ) ); - } - }; + virtual Ptr > clone() const + { + return Ptr >( new DerivedT( static_cast( *this ) ) ); + } +}; - namespace Generic { - template - class Not : public MatcherImpl, ExpressionT> { - public: - explicit Not( Matcher const& matcher ) : m_matcher(matcher.clone()) {} - Not( Not const& other ) : m_matcher( other.m_matcher ) {} +namespace Generic { +template +class Not : public MatcherImpl, ExpressionT> { +public: + explicit Not( Matcher const &matcher ) : m_matcher(matcher.clone()) {} + Not( Not const &other ) : m_matcher( other.m_matcher ) {} - virtual bool match( ExpressionT const& expr ) const CATCH_OVERRIDE { - return !m_matcher->match( expr ); - } + virtual bool match( ExpressionT const &expr ) const CATCH_OVERRIDE + { + return !m_matcher->match( expr ); + } - virtual std::string toString() const CATCH_OVERRIDE { - return "not " + m_matcher->toString(); - } - private: - Ptr< Matcher > m_matcher; - }; + virtual std::string toString() const CATCH_OVERRIDE + { + return "not " + m_matcher->toString(); + } +private: + Ptr< Matcher > m_matcher; +}; - template - class AllOf : public MatcherImpl, ExpressionT> { - public: +template +class AllOf : public MatcherImpl, ExpressionT> { +public: - AllOf() {} - AllOf( AllOf const& other ) : m_matchers( other.m_matchers ) {} + AllOf() {} + AllOf( AllOf const &other ) : m_matchers( other.m_matchers ) {} - AllOf& add( Matcher const& matcher ) { - m_matchers.push_back( matcher.clone() ); - return *this; - } - virtual bool match( ExpressionT const& expr ) const - { - for( std::size_t i = 0; i < m_matchers.size(); ++i ) - if( !m_matchers[i]->match( expr ) ) - return false; - return true; + AllOf &add( Matcher const &matcher ) + { + m_matchers.push_back( matcher.clone() ); + return *this; + } + virtual bool match( ExpressionT const &expr ) const + { + for ( std::size_t i = 0; i < m_matchers.size(); ++i ) + if ( !m_matchers[i]->match( expr ) ) { + return false; } - virtual std::string toString() const { - std::ostringstream oss; - oss << "( "; - for( std::size_t i = 0; i < m_matchers.size(); ++i ) { - if( i != 0 ) - oss << " and "; - oss << m_matchers[i]->toString(); - } - oss << " )"; - return oss.str(); + return true; + } + virtual std::string toString() const + { + std::ostringstream oss; + oss << "( "; + for ( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if ( i != 0 ) { + oss << " and "; } + oss << m_matchers[i]->toString(); + } + oss << " )"; + return oss.str(); + } - AllOf operator && ( Matcher const& other ) const { - AllOf allOfExpr( *this ); - allOfExpr.add( other ); - return allOfExpr; - } + AllOf operator && ( Matcher const &other ) const + { + AllOf allOfExpr( *this ); + allOfExpr.add( other ); + return allOfExpr; + } - private: - std::vector > > m_matchers; - }; +private: + std::vector > > m_matchers; +}; - template - class AnyOf : public MatcherImpl, ExpressionT> { - public: +template +class AnyOf : public MatcherImpl, ExpressionT> { +public: - AnyOf() {} - AnyOf( AnyOf const& other ) : m_matchers( other.m_matchers ) {} + AnyOf() {} + AnyOf( AnyOf const &other ) : m_matchers( other.m_matchers ) {} - AnyOf& add( Matcher const& matcher ) { - m_matchers.push_back( matcher.clone() ); - return *this; - } - virtual bool match( ExpressionT const& expr ) const - { - for( std::size_t i = 0; i < m_matchers.size(); ++i ) - if( m_matchers[i]->match( expr ) ) - return true; - return false; - } - virtual std::string toString() const { - std::ostringstream oss; - oss << "( "; - for( std::size_t i = 0; i < m_matchers.size(); ++i ) { - if( i != 0 ) - oss << " or "; - oss << m_matchers[i]->toString(); - } - oss << " )"; - return oss.str(); + AnyOf &add( Matcher const &matcher ) + { + m_matchers.push_back( matcher.clone() ); + return *this; + } + virtual bool match( ExpressionT const &expr ) const + { + for ( std::size_t i = 0; i < m_matchers.size(); ++i ) + if ( m_matchers[i]->match( expr ) ) { + return true; } - - AnyOf operator || ( Matcher const& other ) const { - AnyOf anyOfExpr( *this ); - anyOfExpr.add( other ); - return anyOfExpr; + return false; + } + virtual std::string toString() const + { + std::ostringstream oss; + oss << "( "; + for ( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if ( i != 0 ) { + oss << " or "; } - - private: - std::vector > > m_matchers; - }; - - } // namespace Generic - - template - Generic::AllOf Matcher::operator && ( Matcher const& other ) const { - Generic::AllOf allOfExpr; - allOfExpr.add( *this ); - allOfExpr.add( other ); - return allOfExpr; + oss << m_matchers[i]->toString(); + } + oss << " )"; + return oss.str(); } - template - Generic::AnyOf Matcher::operator || ( Matcher const& other ) const { - Generic::AnyOf anyOfExpr; - anyOfExpr.add( *this ); + AnyOf operator || ( Matcher const &other ) const + { + AnyOf anyOfExpr( *this ); anyOfExpr.add( other ); return anyOfExpr; } - template - Generic::Not Matcher::operator ! () const { - return Generic::Not( *this ); - } - - namespace StdString { +private: + std::vector > > m_matchers; +}; - inline std::string makeString( std::string const& str ) { return str; } - inline std::string makeString( const char* str ) { return str ? std::string( str ) : std::string(); } +} // namespace Generic - struct CasedString - { - CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity ) - : m_caseSensitivity( caseSensitivity ), - m_str( adjustString( str ) ) - {} - std::string adjustString( std::string const& str ) const { - return m_caseSensitivity == CaseSensitive::No - ? toLower( str ) - : str; +template +Generic::AllOf Matcher::operator && ( Matcher const &other ) const +{ + Generic::AllOf allOfExpr; + allOfExpr.add( *this ); + allOfExpr.add( other ); + return allOfExpr; +} - } - std::string toStringSuffix() const - { - return m_caseSensitivity == CaseSensitive::No - ? " (case insensitive)" - : ""; - } - CaseSensitive::Choice m_caseSensitivity; - std::string m_str; - }; +template +Generic::AnyOf Matcher::operator || ( Matcher const &other ) const +{ + Generic::AnyOf anyOfExpr; + anyOfExpr.add( *this ); + anyOfExpr.add( other ); + return anyOfExpr; +} - struct Equals : MatcherImpl { - Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) - : m_data( str, caseSensitivity ) - {} - Equals( Equals const& other ) : m_data( other.m_data ){} +template +Generic::Not Matcher::operator ! () const +{ + return Generic::Not( *this ); +} - virtual ~Equals(); +namespace StdString { - virtual bool match( std::string const& expr ) const { - return m_data.m_str == m_data.adjustString( expr );; - } - virtual std::string toString() const { - return "equals: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); - } +inline std::string makeString( std::string const &str ) +{ + return str; +} +inline std::string makeString( const char *str ) +{ + return str ? std::string( str ) : std::string(); +} - CasedString m_data; - }; +struct CasedString { + CasedString( std::string const &str, CaseSensitive::Choice caseSensitivity ) + : m_caseSensitivity( caseSensitivity ), + m_str( adjustString( str ) ) + {} + std::string adjustString( std::string const &str ) const + { + return m_caseSensitivity == CaseSensitive::No + ? toLower( str ) + : str; - struct Contains : MatcherImpl { - Contains( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) - : m_data( substr, caseSensitivity ){} - Contains( Contains const& other ) : m_data( other.m_data ){} + } + std::string toStringSuffix() const + { + return m_caseSensitivity == CaseSensitive::No + ? " (case insensitive)" + : ""; + } + CaseSensitive::Choice m_caseSensitivity; + std::string m_str; +}; - virtual ~Contains(); +struct Equals : MatcherImpl { + Equals( std::string const &str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( str, caseSensitivity ) + {} + Equals( Equals const &other ) : m_data( other.m_data ) {} - virtual bool match( std::string const& expr ) const { - return m_data.adjustString( expr ).find( m_data.m_str ) != std::string::npos; - } - virtual std::string toString() const { - return "contains: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); - } + virtual ~Equals(); - CasedString m_data; - }; + virtual bool match( std::string const &expr ) const + { + return m_data.m_str == m_data.adjustString( expr );; + } + virtual std::string toString() const + { + return "equals: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + } - struct StartsWith : MatcherImpl { - StartsWith( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) - : m_data( substr, caseSensitivity ){} + CasedString m_data; +}; - StartsWith( StartsWith const& other ) : m_data( other.m_data ){} +struct Contains : MatcherImpl { + Contains( std::string const &substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( substr, caseSensitivity ) {} + Contains( Contains const &other ) : m_data( other.m_data ) {} - virtual ~StartsWith(); + virtual ~Contains(); - virtual bool match( std::string const& expr ) const { - return startsWith( m_data.adjustString( expr ), m_data.m_str ); - } - virtual std::string toString() const { - return "starts with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); - } - - CasedString m_data; - }; - - struct EndsWith : MatcherImpl { - EndsWith( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) - : m_data( substr, caseSensitivity ){} - EndsWith( EndsWith const& other ) : m_data( other.m_data ){} + virtual bool match( std::string const &expr ) const + { + return m_data.adjustString( expr ).find( m_data.m_str ) != std::string::npos; + } + virtual std::string toString() const + { + return "contains: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); + } - virtual ~EndsWith(); + CasedString m_data; +}; - virtual bool match( std::string const& expr ) const { - return endsWith( m_data.adjustString( expr ), m_data.m_str ); - } - virtual std::string toString() const { - return "ends with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); - } +struct StartsWith : MatcherImpl { + StartsWith( std::string const &substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( substr, caseSensitivity ) {} - CasedString m_data; - }; - } // namespace StdString - } // namespace Impl + StartsWith( StartsWith const &other ) : m_data( other.m_data ) {} - // The following functions create the actual matcher objects. - // This allows the types to be inferred - template - inline Impl::Generic::Not Not( Impl::Matcher const& m ) { - return Impl::Generic::Not( m ); - } + virtual ~StartsWith(); - template - inline Impl::Generic::AllOf AllOf( Impl::Matcher const& m1, - Impl::Matcher const& m2 ) { - return Impl::Generic::AllOf().add( m1 ).add( m2 ); - } - template - inline Impl::Generic::AllOf AllOf( Impl::Matcher const& m1, - Impl::Matcher const& m2, - Impl::Matcher const& m3 ) { - return Impl::Generic::AllOf().add( m1 ).add( m2 ).add( m3 ); - } - template - inline Impl::Generic::AnyOf AnyOf( Impl::Matcher const& m1, - Impl::Matcher const& m2 ) { - return Impl::Generic::AnyOf().add( m1 ).add( m2 ); + virtual bool match( std::string const &expr ) const + { + return startsWith( m_data.adjustString( expr ), m_data.m_str ); } - template - inline Impl::Generic::AnyOf AnyOf( Impl::Matcher const& m1, - Impl::Matcher const& m2, - Impl::Matcher const& m3 ) { - return Impl::Generic::AnyOf().add( m1 ).add( m2 ).add( m3 ); + virtual std::string toString() const + { + return "starts with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); } - inline Impl::StdString::Equals Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { - return Impl::StdString::Equals( str, caseSensitivity ); - } - inline Impl::StdString::Equals Equals( const char* str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { - return Impl::StdString::Equals( Impl::StdString::makeString( str ), caseSensitivity ); - } - inline Impl::StdString::Contains Contains( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { - return Impl::StdString::Contains( substr, caseSensitivity ); - } - inline Impl::StdString::Contains Contains( const char* substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { - return Impl::StdString::Contains( Impl::StdString::makeString( substr ), caseSensitivity ); - } - inline Impl::StdString::StartsWith StartsWith( std::string const& substr ) { - return Impl::StdString::StartsWith( substr ); - } - inline Impl::StdString::StartsWith StartsWith( const char* substr ) { - return Impl::StdString::StartsWith( Impl::StdString::makeString( substr ) ); - } - inline Impl::StdString::EndsWith EndsWith( std::string const& substr ) { - return Impl::StdString::EndsWith( substr ); + CasedString m_data; +}; + +struct EndsWith : MatcherImpl { + EndsWith( std::string const &substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( substr, caseSensitivity ) {} + EndsWith( EndsWith const &other ) : m_data( other.m_data ) {} + + virtual ~EndsWith(); + + virtual bool match( std::string const &expr ) const + { + return endsWith( m_data.adjustString( expr ), m_data.m_str ); } - inline Impl::StdString::EndsWith EndsWith( const char* substr ) { - return Impl::StdString::EndsWith( Impl::StdString::makeString( substr ) ); + virtual std::string toString() const + { + return "ends with: \"" + m_data.m_str + "\"" + m_data.toStringSuffix(); } + CasedString m_data; +}; +} // namespace StdString +} // namespace Impl + +// The following functions create the actual matcher objects. +// This allows the types to be inferred +template +inline Impl::Generic::Not Not( Impl::Matcher const &m ) +{ + return Impl::Generic::Not( m ); +} + +template +inline Impl::Generic::AllOf AllOf( Impl::Matcher const &m1, + Impl::Matcher const &m2 ) +{ + return Impl::Generic::AllOf().add( m1 ).add( m2 ); +} +template +inline Impl::Generic::AllOf AllOf( Impl::Matcher const &m1, + Impl::Matcher const &m2, + Impl::Matcher const &m3 ) +{ + return Impl::Generic::AllOf().add( m1 ).add( m2 ).add( m3 ); +} +template +inline Impl::Generic::AnyOf AnyOf( Impl::Matcher const &m1, + Impl::Matcher const &m2 ) +{ + return Impl::Generic::AnyOf().add( m1 ).add( m2 ); +} +template +inline Impl::Generic::AnyOf AnyOf( Impl::Matcher const &m1, + Impl::Matcher const &m2, + Impl::Matcher const &m3 ) +{ + return Impl::Generic::AnyOf().add( m1 ).add( m2 ).add( m3 ); +} + +inline Impl::StdString::Equals Equals( std::string const &str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) +{ + return Impl::StdString::Equals( str, caseSensitivity ); +} +inline Impl::StdString::Equals Equals( const char *str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) +{ + return Impl::StdString::Equals( Impl::StdString::makeString( str ), caseSensitivity ); +} +inline Impl::StdString::Contains Contains( std::string const &substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) +{ + return Impl::StdString::Contains( substr, caseSensitivity ); +} +inline Impl::StdString::Contains Contains( const char *substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) +{ + return Impl::StdString::Contains( Impl::StdString::makeString( substr ), caseSensitivity ); +} +inline Impl::StdString::StartsWith StartsWith( std::string const &substr ) +{ + return Impl::StdString::StartsWith( substr ); +} +inline Impl::StdString::StartsWith StartsWith( const char *substr ) +{ + return Impl::StdString::StartsWith( Impl::StdString::makeString( substr ) ); +} +inline Impl::StdString::EndsWith EndsWith( std::string const &substr ) +{ + return Impl::StdString::EndsWith( substr ); +} +inline Impl::StdString::EndsWith EndsWith( const char *substr ) +{ + return Impl::StdString::EndsWith( Impl::StdString::makeString( substr ) ); +} + } // namespace Matchers using namespace Matchers; @@ -1206,80 +1310,83 @@ using namespace Matchers; namespace Catch { - struct TestFailureException{}; +struct TestFailureException {}; - template class ExpressionLhs; +template class ExpressionLhs; - struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; +struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; - struct CopyableStream { - CopyableStream() {} - CopyableStream( CopyableStream const& other ) { - oss << other.oss.str(); - } - CopyableStream& operator=( CopyableStream const& other ) { - oss.str(""); - oss << other.oss.str(); - return *this; - } - std::ostringstream oss; - }; +struct CopyableStream { + CopyableStream() {} + CopyableStream( CopyableStream const &other ) + { + oss << other.oss.str(); + } + CopyableStream &operator=( CopyableStream const &other ) + { + oss.str(""); + oss << other.oss.str(); + return *this; + } + std::ostringstream oss; +}; - class ResultBuilder { - public: - ResultBuilder( char const* macroName, - SourceLineInfo const& lineInfo, - char const* capturedExpression, - ResultDisposition::Flags resultDisposition, - char const* secondArg = "" ); +class ResultBuilder { +public: + ResultBuilder( char const *macroName, + SourceLineInfo const &lineInfo, + char const *capturedExpression, + ResultDisposition::Flags resultDisposition, + char const *secondArg = "" ); - template - ExpressionLhs operator <= ( T const& operand ); - ExpressionLhs operator <= ( bool value ); + template + ExpressionLhs operator <= ( T const &operand ); + ExpressionLhs operator <= ( bool value ); - template - ResultBuilder& operator << ( T const& value ) { - m_stream.oss << value; - return *this; - } + template + ResultBuilder &operator << ( T const &value ) + { + m_stream.oss << value; + return *this; + } - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator && ( RhsT const & ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator || ( RhsT const & ); - ResultBuilder& setResultType( ResultWas::OfType result ); - ResultBuilder& setResultType( bool result ); - ResultBuilder& setLhs( std::string const& lhs ); - ResultBuilder& setRhs( std::string const& rhs ); - ResultBuilder& setOp( std::string const& op ); + ResultBuilder &setResultType( ResultWas::OfType result ); + ResultBuilder &setResultType( bool result ); + ResultBuilder &setLhs( std::string const &lhs ); + ResultBuilder &setRhs( std::string const &rhs ); + ResultBuilder &setOp( std::string const &op ); - void endExpression(); + void endExpression(); - std::string reconstructExpression() const; - AssertionResult build() const; + std::string reconstructExpression() const; + AssertionResult build() const; - void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); - void captureResult( ResultWas::OfType resultType ); - void captureExpression(); - void captureExpectedException( std::string const& expectedMessage ); - void captureExpectedException( Matchers::Impl::Matcher const& matcher ); - void handleResult( AssertionResult const& result ); - void react(); - bool shouldDebugBreak() const; - bool allowThrows() const; + void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); + void captureResult( ResultWas::OfType resultType ); + void captureExpression(); + void captureExpectedException( std::string const &expectedMessage ); + void captureExpectedException( Matchers::Impl::Matcher const &matcher ); + void handleResult( AssertionResult const &result ); + void react(); + bool shouldDebugBreak() const; + bool allowThrows() const; - private: - AssertionInfo m_assertionInfo; - AssertionResultData m_data; - struct ExprComponents { - ExprComponents() : testFalse( false ) {} - bool testFalse; - std::string lhs, rhs, op; - } m_exprComponents; - CopyableStream m_stream; - - bool m_shouldDebugBreak; - bool m_shouldThrow; - }; +private: + AssertionInfo m_assertionInfo; + AssertionResultData m_data; + struct ExprComponents { + ExprComponents() : testFalse( false ) {} + bool testFalse; + std::string lhs, rhs, op; + } m_exprComponents; + CopyableStream m_stream; + + bool m_shouldDebugBreak; + bool m_shouldThrow; +}; } // namespace Catch @@ -1300,193 +1407,270 @@ namespace Catch { namespace Catch { namespace Internal { - enum Operator { - IsEqualTo, - IsNotEqualTo, - IsLessThan, - IsGreaterThan, - IsLessThanOrEqualTo, - IsGreaterThanOrEqualTo - }; +enum Operator { + IsEqualTo, + IsNotEqualTo, + IsLessThan, + IsGreaterThan, + IsLessThanOrEqualTo, + IsGreaterThanOrEqualTo +}; - template struct OperatorTraits { static const char* getName(){ return "*error*"; } }; - template<> struct OperatorTraits { static const char* getName(){ return "=="; } }; - template<> struct OperatorTraits { static const char* getName(){ return "!="; } }; - template<> struct OperatorTraits { static const char* getName(){ return "<"; } }; - template<> struct OperatorTraits { static const char* getName(){ return ">"; } }; - template<> struct OperatorTraits { static const char* getName(){ return "<="; } }; - template<> struct OperatorTraits{ static const char* getName(){ return ">="; } }; +template struct OperatorTraits { + static const char *getName() + { + return "*error*"; + } +}; +template<> struct OperatorTraits { + static const char *getName() + { + return "=="; + } +}; +template<> struct OperatorTraits { + static const char *getName() + { + return "!="; + } +}; +template<> struct OperatorTraits { + static const char *getName() + { + return "<"; + } +}; +template<> struct OperatorTraits { + static const char *getName() + { + return ">"; + } +}; +template<> struct OperatorTraits { + static const char *getName() + { + return "<="; + } +}; +template<> struct OperatorTraits { + static const char *getName() + { + return ">="; + } +}; - template - inline T& opCast(T const& t) { return const_cast(t); } +template +inline T &opCast(T const &t) +{ + return const_cast(t); +} // nullptr_t support based on pull request #154 from Konstantin Baumann #ifdef CATCH_CONFIG_CPP11_NULLPTR - inline std::nullptr_t opCast(std::nullptr_t) { return nullptr; } +inline std::nullptr_t opCast(std::nullptr_t) +{ + return nullptr; +} #endif // CATCH_CONFIG_CPP11_NULLPTR - // So the compare overloads can be operator agnostic we convey the operator as a template - // enum, which is used to specialise an Evaluator for doing the comparison. - template - class Evaluator{}; - - template - struct Evaluator { - static bool evaluate( T1 const& lhs, T2 const& rhs) { - return bool( opCast( lhs ) == opCast( rhs ) ); - } - }; - template - struct Evaluator { - static bool evaluate( T1 const& lhs, T2 const& rhs ) { - return bool( opCast( lhs ) != opCast( rhs ) ); - } - }; - template - struct Evaluator { - static bool evaluate( T1 const& lhs, T2 const& rhs ) { - return bool( opCast( lhs ) < opCast( rhs ) ); - } - }; - template - struct Evaluator { - static bool evaluate( T1 const& lhs, T2 const& rhs ) { - return bool( opCast( lhs ) > opCast( rhs ) ); - } - }; - template - struct Evaluator { - static bool evaluate( T1 const& lhs, T2 const& rhs ) { - return bool( opCast( lhs ) >= opCast( rhs ) ); - } - }; - template - struct Evaluator { - static bool evaluate( T1 const& lhs, T2 const& rhs ) { - return bool( opCast( lhs ) <= opCast( rhs ) ); - } - }; - - template - bool applyEvaluator( T1 const& lhs, T2 const& rhs ) { - return Evaluator::evaluate( lhs, rhs ); - } - - // This level of indirection allows us to specialise for integer types - // to avoid signed/ unsigned warnings - - // "base" overload - template - bool compare( T1 const& lhs, T2 const& rhs ) { - return Evaluator::evaluate( lhs, rhs ); - } +// So the compare overloads can be operator agnostic we convey the operator as a template +// enum, which is used to specialise an Evaluator for doing the comparison. +template +class Evaluator {}; - // unsigned X to int - template bool compare( unsigned int lhs, int rhs ) { - return applyEvaluator( lhs, static_cast( rhs ) ); +template +struct Evaluator { + static bool evaluate( T1 const &lhs, T2 const &rhs) + { + return bool( opCast( lhs ) == opCast( rhs ) ); } - template bool compare( unsigned long lhs, int rhs ) { - return applyEvaluator( lhs, static_cast( rhs ) ); +}; +template +struct Evaluator { + static bool evaluate( T1 const &lhs, T2 const &rhs ) + { + return bool( opCast( lhs ) != opCast( rhs ) ); } - template bool compare( unsigned char lhs, int rhs ) { - return applyEvaluator( lhs, static_cast( rhs ) ); +}; +template +struct Evaluator { + static bool evaluate( T1 const &lhs, T2 const &rhs ) + { + return bool( opCast( lhs ) < opCast( rhs ) ); } - - // unsigned X to long - template bool compare( unsigned int lhs, long rhs ) { - return applyEvaluator( lhs, static_cast( rhs ) ); +}; +template +struct Evaluator { + static bool evaluate( T1 const &lhs, T2 const &rhs ) + { + return bool( opCast( lhs ) > opCast( rhs ) ); } - template bool compare( unsigned long lhs, long rhs ) { - return applyEvaluator( lhs, static_cast( rhs ) ); +}; +template +struct Evaluator { + static bool evaluate( T1 const &lhs, T2 const &rhs ) + { + return bool( opCast( lhs ) >= opCast( rhs ) ); } - template bool compare( unsigned char lhs, long rhs ) { - return applyEvaluator( lhs, static_cast( rhs ) ); +}; +template +struct Evaluator { + static bool evaluate( T1 const &lhs, T2 const &rhs ) + { + return bool( opCast( lhs ) <= opCast( rhs ) ); } +}; - // int to unsigned X - template bool compare( int lhs, unsigned int rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( int lhs, unsigned long rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( int lhs, unsigned char rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } +template +bool applyEvaluator( T1 const &lhs, T2 const &rhs ) +{ + return Evaluator::evaluate( lhs, rhs ); +} - // long to unsigned X - template bool compare( long lhs, unsigned int rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( long lhs, unsigned long rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( long lhs, unsigned char rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } +// This level of indirection allows us to specialise for integer types +// to avoid signed/ unsigned warnings - // pointer to long (when comparing against NULL) - template bool compare( long lhs, T* rhs ) { - return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); - } - template bool compare( T* lhs, long rhs ) { - return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); - } +// "base" overload +template +bool compare( T1 const &lhs, T2 const &rhs ) +{ + return Evaluator::evaluate( lhs, rhs ); +} - // pointer to int (when comparing against NULL) - template bool compare( int lhs, T* rhs ) { - return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); - } - template bool compare( T* lhs, int rhs ) { - return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); - } +// unsigned X to int +template bool compare( unsigned int lhs, int rhs ) +{ + return applyEvaluator( lhs, static_cast( rhs ) ); +} +template bool compare( unsigned long lhs, int rhs ) +{ + return applyEvaluator( lhs, static_cast( rhs ) ); +} +template bool compare( unsigned char lhs, int rhs ) +{ + return applyEvaluator( lhs, static_cast( rhs ) ); +} + +// unsigned X to long +template bool compare( unsigned int lhs, long rhs ) +{ + return applyEvaluator( lhs, static_cast( rhs ) ); +} +template bool compare( unsigned long lhs, long rhs ) +{ + return applyEvaluator( lhs, static_cast( rhs ) ); +} +template bool compare( unsigned char lhs, long rhs ) +{ + return applyEvaluator( lhs, static_cast( rhs ) ); +} + +// int to unsigned X +template bool compare( int lhs, unsigned int rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( int lhs, unsigned long rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( int lhs, unsigned char rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} + +// long to unsigned X +template bool compare( long lhs, unsigned int rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( long lhs, unsigned long rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( long lhs, unsigned char rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} + +// pointer to long (when comparing against NULL) +template bool compare( long lhs, T *rhs ) +{ + return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); +} +template bool compare( T *lhs, long rhs ) +{ + return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); +} + +// pointer to int (when comparing against NULL) +template bool compare( int lhs, T *rhs ) +{ + return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); +} +template bool compare( T *lhs, int rhs ) +{ + return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); +} #ifdef CATCH_CONFIG_CPP11_LONG_LONG - // long long to unsigned X - template bool compare( long long lhs, unsigned int rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( long long lhs, unsigned long rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( long long lhs, unsigned long long rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( long long lhs, unsigned char rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } +// long long to unsigned X +template bool compare( long long lhs, unsigned int rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( long long lhs, unsigned long rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( long long lhs, unsigned long long rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( long long lhs, unsigned char rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} - // unsigned long long to X - template bool compare( unsigned long long lhs, int rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( unsigned long long lhs, long rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( unsigned long long lhs, long long rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } - template bool compare( unsigned long long lhs, char rhs ) { - return applyEvaluator( static_cast( lhs ), rhs ); - } +// unsigned long long to X +template bool compare( unsigned long long lhs, int rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( unsigned long long lhs, long rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( unsigned long long lhs, long long rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} +template bool compare( unsigned long long lhs, char rhs ) +{ + return applyEvaluator( static_cast( lhs ), rhs ); +} - // pointer to long long (when comparing against NULL) - template bool compare( long long lhs, T* rhs ) { - return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); - } - template bool compare( T* lhs, long long rhs ) { - return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); - } +// pointer to long long (when comparing against NULL) +template bool compare( long long lhs, T *rhs ) +{ + return Evaluator::evaluate( reinterpret_cast( lhs ), rhs ); +} +template bool compare( T *lhs, long long rhs ) +{ + return Evaluator::evaluate( lhs, reinterpret_cast( rhs ) ); +} #endif // CATCH_CONFIG_CPP11_LONG_LONG #ifdef CATCH_CONFIG_CPP11_NULLPTR - // pointer to nullptr_t (when comparing against nullptr) - template bool compare( std::nullptr_t, T* rhs ) { - return Evaluator::evaluate( nullptr, rhs ); - } - template bool compare( T* lhs, std::nullptr_t ) { - return Evaluator::evaluate( lhs, nullptr ); - } +// pointer to nullptr_t (when comparing against nullptr) +template bool compare( std::nullptr_t, T *rhs ) +{ + return Evaluator::evaluate( nullptr, rhs ); +} +template bool compare( T *lhs, std::nullptr_t ) +{ + return Evaluator::evaluate( lhs, nullptr ); +} #endif // CATCH_CONFIG_CPP11_NULLPTR } // end of namespace Internal @@ -1517,29 +1701,34 @@ namespace Internal { #define CATCH_ARC_ENABLED 0 #endif -void arcSafeRelease( NSObject* obj ); +void arcSafeRelease( NSObject *obj ); id performOptionalSelector( id obj, SEL sel ); #if !CATCH_ARC_ENABLED -inline void arcSafeRelease( NSObject* obj ) { +inline void arcSafeRelease( NSObject *obj ) +{ [obj release]; } -inline id performOptionalSelector( id obj, SEL sel ) { - if( [obj respondsToSelector: sel] ) +inline id performOptionalSelector( id obj, SEL sel ) +{ + if ( [obj respondsToSelector: sel] ) { return [obj performSelector: sel]; + } return nil; } #define CATCH_UNSAFE_UNRETAINED #define CATCH_ARC_STRONG #else -inline void arcSafeRelease( NSObject* ){} -inline id performOptionalSelector( id obj, SEL sel ) { +inline void arcSafeRelease( NSObject * ) {} +inline id performOptionalSelector( id obj, SEL sel ) +{ #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" #endif - if( [obj respondsToSelector: sel] ) + if ( [obj respondsToSelector: sel] ) { return [obj performSelector: sel]; + } #ifdef __clang__ #pragma clang diagnostic pop #endif @@ -1563,16 +1752,16 @@ namespace Catch { // Why we're here. template -std::string toString( T const& value ); +std::string toString( T const &value ); // Built in overloads -std::string toString( std::string const& value ); -std::string toString( std::wstring const& value ); -std::string toString( const char* const value ); -std::string toString( char* const value ); -std::string toString( const wchar_t* const value ); -std::string toString( wchar_t* const value ); +std::string toString( std::string const &value ); +std::string toString( std::wstring const &value ); +std::string toString( const char *const value ); +std::string toString( char *const value ); +std::string toString( const wchar_t *const value ); +std::string toString( wchar_t *const value ); std::string toString( int value ); std::string toString( unsigned long value ); std::string toString( unsigned int value ); @@ -1593,84 +1782,94 @@ std::string toString( std::nullptr_t ); #endif #ifdef __OBJC__ - std::string toString( NSString const * const& nsstring ); - std::string toString( NSString * CATCH_ARC_STRONG const& nsstring ); - std::string toString( NSObject* const& nsObject ); +std::string toString( NSString const *const &nsstring ); +std::string toString( NSString *CATCH_ARC_STRONG const &nsstring ); +std::string toString( NSObject *const &nsObject ); #endif namespace Detail { - extern const std::string unprintableString; +extern const std::string unprintableString; - struct BorgType { - template BorgType( T const& ); - }; +struct BorgType { + template BorgType( T const & ); +}; - struct TrueType { char sizer[1]; }; - struct FalseType { char sizer[2]; }; +struct TrueType { + char sizer[1]; +}; +struct FalseType { + char sizer[2]; +}; - TrueType& testStreamable( std::ostream& ); - FalseType testStreamable( FalseType ); +TrueType &testStreamable( std::ostream & ); +FalseType testStreamable( FalseType ); - FalseType operator<<( std::ostream const&, BorgType const& ); +FalseType operator<<( std::ostream const &, BorgType const & ); - template - struct IsStreamInsertable { - static std::ostream &s; - static T const&t; - enum { value = sizeof( testStreamable(s << t) ) == sizeof( TrueType ) }; - }; +template +struct IsStreamInsertable { + static std::ostream &s; + static T const &t; + enum { value = sizeof( testStreamable(s << t) ) == sizeof( TrueType ) }; +}; #if defined(CATCH_CONFIG_CPP11_IS_ENUM) - template::value - > - struct EnumStringMaker +template::value + > +struct EnumStringMaker { + static std::string convert( T const & ) { - static std::string convert( T const& ) { return unprintableString; } - }; + return unprintableString; + } +}; - template - struct EnumStringMaker +template +struct EnumStringMaker { + static std::string convert( T const &v ) { - static std::string convert( T const& v ) - { - return ::Catch::toString( - static_cast::type>(v) - ); - } - }; + return ::Catch::toString( + static_cast::type>(v) + ); + } +}; #endif - template - struct StringMakerBase { +template +struct StringMakerBase { #if defined(CATCH_CONFIG_CPP11_IS_ENUM) - template - static std::string convert( T const& v ) - { - return EnumStringMaker::convert( v ); - } + template + static std::string convert( T const &v ) + { + return EnumStringMaker::convert( v ); + } #else - template - static std::string convert( T const& ) { return unprintableString; } + template + static std::string convert( T const & ) + { + return unprintableString; + } #endif - }; - - template<> - struct StringMakerBase { - template - static std::string convert( T const& _value ) { - std::ostringstream oss; - oss << _value; - return oss.str(); - } - }; - - std::string rawMemoryToString( const void *object, std::size_t size ); +}; +template<> +struct StringMakerBase { template - inline std::string rawMemoryToString( const T& object ) { - return rawMemoryToString( &object, sizeof(object) ); + static std::string convert( T const &_value ) + { + std::ostringstream oss; + oss << _value; + return oss.str(); } +}; + +std::string rawMemoryToString( const void *object, std::size_t size ); + +template +inline std::string rawMemoryToString( const T &object ) +{ + return rawMemoryToString( &object, sizeof(object) ); +} } // end namespace Detail @@ -1679,29 +1878,33 @@ struct StringMaker : Detail::StringMakerBase::value> {}; template -struct StringMaker { +struct StringMaker { template - static std::string convert( U* p ) { - if( !p ) + static std::string convert( U *p ) + { + if ( !p ) { return "NULL"; - else + } else { return Detail::rawMemoryToString( p ); + } } }; template struct StringMaker { - static std::string convert( R C::* p ) { - if( !p ) + static std::string convert( R C::* p ) + { + if ( !p ) { return "NULL"; - else + } else { return Detail::rawMemoryToString( p ); + } } }; namespace Detail { - template - std::string rangeToString( InputIterator first, InputIterator last ); +template +std::string rangeToString( InputIterator first, InputIterator last ); } //template @@ -1712,7 +1915,8 @@ namespace Detail { //}; template -std::string toString( std::vector const& v ) { +std::string toString( std::vector const &v ) +{ return Detail::rangeToString( v.begin(), v.end() ); } @@ -1720,34 +1924,34 @@ std::string toString( std::vector const& v ) { // toString for tuples namespace TupleDetail { - template< - typename Tuple, - std::size_t N = 0, - bool = (N < std::tuple_size::value) - > - struct ElementPrinter { - static void print( const Tuple& tuple, std::ostream& os ) - { - os << ( N ? ", " : " " ) - << Catch::toString(std::get(tuple)); - ElementPrinter::print(tuple,os); - } - }; - - template< - typename Tuple, - std::size_t N - > - struct ElementPrinter { - static void print( const Tuple&, std::ostream& ) {} - }; +template < + typename Tuple, + std::size_t N = 0, + bool = (N < std::tuple_size::value) + > +struct ElementPrinter { + static void print( const Tuple &tuple, std::ostream &os ) + { + os << ( N ? ", " : " " ) + << Catch::toString(std::get(tuple)); + ElementPrinter < Tuple, N + 1 >::print(tuple, os); + } +}; + +template < + typename Tuple, + std::size_t N + > +struct ElementPrinter { + static void print( const Tuple &, std::ostream & ) {} +}; } template struct StringMaker> { - static std::string convert( const std::tuple& tuple ) + static std::string convert( const std::tuple &tuple ) { std::ostringstream os; os << '{'; @@ -1759,10 +1963,11 @@ struct StringMaker> { #endif // CATCH_CONFIG_CPP11_TUPLE namespace Detail { - template - std::string makeString( T const& value ) { - return StringMaker::convert( value ); - } +template +std::string makeString( T const &value ) +{ + return StringMaker::convert( value ); +} } // end namespace Detail /// \brief converts any type to a string @@ -1773,23 +1978,26 @@ namespace Detail { /// Overload (not specialise) this template for custom typs that you don't want /// to provide an ostream overload for. template -std::string toString( T const& value ) { +std::string toString( T const &value ) +{ return StringMaker::convert( value ); } - namespace Detail { - template - std::string rangeToString( InputIterator first, InputIterator last ) { - std::ostringstream oss; - oss << "{ "; - if( first != last ) { - oss << Catch::toString( *first ); - for( ++first ; first != last ; ++first ) - oss << ", " << Catch::toString( *first ); +namespace Detail { +template +std::string rangeToString( InputIterator first, InputIterator last ) +{ + std::ostringstream oss; + oss << "{ "; + if ( first != last ) { + oss << Catch::toString( *first ); + for ( ++first ; first != last ; ++first ) { + oss << ", " << Catch::toString( *first ); } - oss << " }"; - return oss.str(); } + oss << " }"; + return oss.str(); +} } } // end namespace Catch @@ -1800,85 +2008,95 @@ namespace Catch { // wrapping them all in a ResultBuilder object template class ExpressionLhs { - ExpressionLhs& operator = ( ExpressionLhs const& ); + ExpressionLhs &operator = ( ExpressionLhs const & ); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs& operator = ( ExpressionLhs && ) = delete; + ExpressionLhs &operator = ( ExpressionLhs && ) = delete; # endif public: - ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ) {} + ExpressionLhs( ResultBuilder &rb, T lhs ) : m_rb( rb ), m_lhs( lhs ) {} # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - ExpressionLhs( ExpressionLhs const& ) = default; + ExpressionLhs( ExpressionLhs const & ) = default; ExpressionLhs( ExpressionLhs && ) = default; # endif template - ResultBuilder& operator == ( RhsT const& rhs ) { + ResultBuilder &operator == ( RhsT const &rhs ) + { return captureExpression( rhs ); } template - ResultBuilder& operator != ( RhsT const& rhs ) { + ResultBuilder &operator != ( RhsT const &rhs ) + { return captureExpression( rhs ); } template - ResultBuilder& operator < ( RhsT const& rhs ) { + ResultBuilder &operator < ( RhsT const &rhs ) + { return captureExpression( rhs ); } template - ResultBuilder& operator > ( RhsT const& rhs ) { + ResultBuilder &operator > ( RhsT const &rhs ) + { return captureExpression( rhs ); } template - ResultBuilder& operator <= ( RhsT const& rhs ) { + ResultBuilder &operator <= ( RhsT const &rhs ) + { return captureExpression( rhs ); } template - ResultBuilder& operator >= ( RhsT const& rhs ) { + ResultBuilder &operator >= ( RhsT const &rhs ) + { return captureExpression( rhs ); } - ResultBuilder& operator == ( bool rhs ) { + ResultBuilder &operator == ( bool rhs ) + { return captureExpression( rhs ); } - ResultBuilder& operator != ( bool rhs ) { + ResultBuilder &operator != ( bool rhs ) + { return captureExpression( rhs ); } - void endExpression() { + void endExpression() + { bool value = m_lhs ? true : false; m_rb - .setLhs( Catch::toString( value ) ) - .setResultType( value ) - .endExpression(); + .setLhs( Catch::toString( value ) ) + .setResultType( value ) + .endExpression(); } // Only simple binary expressions are allowed on the LHS. // If more complex compositions are required then place the sub expression in parentheses - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); - template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator + ( RhsT const & ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator - ( RhsT const & ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator / ( RhsT const & ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator * ( RhsT const & ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator && ( RhsT const & ); + template STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison &operator || ( RhsT const & ); private: template - ResultBuilder& captureExpression( RhsT const& rhs ) { + ResultBuilder &captureExpression( RhsT const &rhs ) + { return m_rb - .setResultType( Internal::compare( m_lhs, rhs ) ) - .setLhs( Catch::toString( m_lhs ) ) - .setRhs( Catch::toString( rhs ) ) - .setOp( Internal::OperatorTraits::getName() ); + .setResultType( Internal::compare( m_lhs, rhs ) ) + .setLhs( Catch::toString( m_lhs ) ) + .setRhs( Catch::toString( rhs ) ) + .setOp( Internal::OperatorTraits::getName() ); } private: - ResultBuilder& m_rb; + ResultBuilder &m_rb; T m_lhs; }; @@ -1887,14 +2105,16 @@ class ExpressionLhs { namespace Catch { - template - inline ExpressionLhs ResultBuilder::operator <= ( T const& operand ) { - return ExpressionLhs( *this, operand ); - } +template +inline ExpressionLhs ResultBuilder::operator <= ( T const &operand ) +{ + return ExpressionLhs( *this, operand ); +} - inline ExpressionLhs ResultBuilder::operator <= ( bool value ) { - return ExpressionLhs( *this, value ); - } +inline ExpressionLhs ResultBuilder::operator <= ( bool value ) +{ + return ExpressionLhs( *this, value ); +} } // namespace Catch @@ -1905,52 +2125,55 @@ namespace Catch { namespace Catch { - struct MessageInfo { - MessageInfo( std::string const& _macroName, - SourceLineInfo const& _lineInfo, - ResultWas::OfType _type ); +struct MessageInfo { + MessageInfo( std::string const &_macroName, + SourceLineInfo const &_lineInfo, + ResultWas::OfType _type ); - std::string macroName; - SourceLineInfo lineInfo; - ResultWas::OfType type; - std::string message; - unsigned int sequence; + std::string macroName; + SourceLineInfo lineInfo; + ResultWas::OfType type; + std::string message; + unsigned int sequence; - bool operator == ( MessageInfo const& other ) const { - return sequence == other.sequence; - } - bool operator < ( MessageInfo const& other ) const { - return sequence < other.sequence; - } - private: - static unsigned int globalCount; - }; + bool operator == ( MessageInfo const &other ) const + { + return sequence == other.sequence; + } + bool operator < ( MessageInfo const &other ) const + { + return sequence < other.sequence; + } +private: + static unsigned int globalCount; +}; - struct MessageBuilder { - MessageBuilder( std::string const& macroName, - SourceLineInfo const& lineInfo, - ResultWas::OfType type ) +struct MessageBuilder { + MessageBuilder( std::string const ¯oName, + SourceLineInfo const &lineInfo, + ResultWas::OfType type ) : m_info( macroName, lineInfo, type ) - {} + {} - template - MessageBuilder& operator << ( T const& value ) { - m_stream << value; - return *this; - } + template + MessageBuilder &operator << ( T const &value ) + { + m_stream << value; + return *this; + } - MessageInfo m_info; - std::ostringstream m_stream; - }; + MessageInfo m_info; + std::ostringstream m_stream; +}; - class ScopedMessage { - public: - ScopedMessage( MessageBuilder const& builder ); - ScopedMessage( ScopedMessage const& other ); - ~ScopedMessage(); +class ScopedMessage { +public: + ScopedMessage( MessageBuilder const &builder ); + ScopedMessage( ScopedMessage const &other ); + ~ScopedMessage(); - MessageInfo m_info; - }; + MessageInfo m_info; +}; } // end namespace Catch @@ -1961,34 +2184,34 @@ namespace Catch { namespace Catch { - class TestCase; - class AssertionResult; - struct AssertionInfo; - struct SectionInfo; - struct SectionEndInfo; - struct MessageInfo; - class ScopedMessageBuilder; - struct Counts; +class TestCase; +class AssertionResult; +struct AssertionInfo; +struct SectionInfo; +struct SectionEndInfo; +struct MessageInfo; +class ScopedMessageBuilder; +struct Counts; - struct IResultCapture { +struct IResultCapture { - virtual ~IResultCapture(); + virtual ~IResultCapture(); - virtual void assertionEnded( AssertionResult const& result ) = 0; - virtual bool sectionStarted( SectionInfo const& sectionInfo, - Counts& assertions ) = 0; - virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0; - virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0; - virtual void pushScopedMessage( MessageInfo const& message ) = 0; - virtual void popScopedMessage( MessageInfo const& message ) = 0; + virtual void assertionEnded( AssertionResult const &result ) = 0; + virtual bool sectionStarted( SectionInfo const §ionInfo, + Counts &assertions ) = 0; + virtual void sectionEnded( SectionEndInfo const &endInfo ) = 0; + virtual void sectionEndedEarly( SectionEndInfo const &endInfo ) = 0; + virtual void pushScopedMessage( MessageInfo const &message ) = 0; + virtual void popScopedMessage( MessageInfo const &message ) = 0; - virtual std::string getCurrentTestName() const = 0; - virtual const AssertionResult* getLastResult() const = 0; + virtual std::string getCurrentTestName() const = 0; + virtual const AssertionResult *getLastResult() const = 0; - virtual void handleFatalErrorCondition( std::string const& message ) = 0; - }; + virtual void handleFatalErrorCondition( std::string const &message ) = 0; +}; - IResultCapture& getResultCapture(); +IResultCapture &getResultCapture(); } // #included from: catch_debugger.h @@ -2007,33 +2230,33 @@ namespace Catch { #include -namespace Catch{ +namespace Catch { - bool isDebuggerActive(); - void writeToDebugConsole( std::string const& text ); +bool isDebuggerActive(); +void writeToDebugConsole( std::string const &text ); } #ifdef CATCH_PLATFORM_MAC - // The following code snippet based on: - // http://cocoawithlove.com/2008/03/break-into-debugger.html - #ifdef DEBUG - #if defined(__ppc64__) || defined(__ppc__) - #define CATCH_BREAK_INTO_DEBUGGER() \ +// The following code snippet based on: +// http://cocoawithlove.com/2008/03/break-into-debugger.html +#ifdef DEBUG +#if defined(__ppc64__) || defined(__ppc__) +#define CATCH_BREAK_INTO_DEBUGGER() \ if( Catch::isDebuggerActive() ) { \ __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ : : : "memory","r0","r3","r4" ); \ } - #else - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) {__asm__("int $3\n" : : );} - #endif - #endif +#else +#define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) {__asm__("int $3\n" : : );} +#endif +#endif #elif defined(_MSC_VER) - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { __debugbreak(); } +#define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { __debugbreak(); } #elif defined(__MINGW32__) - extern "C" __declspec(dllimport) void __stdcall DebugBreak(); - #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { DebugBreak(); } +extern "C" __declspec(dllimport) void __stdcall DebugBreak(); +#define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { DebugBreak(); } #endif #ifndef CATCH_BREAK_INTO_DEBUGGER @@ -2044,12 +2267,12 @@ namespace Catch{ #define TWOBLUECUBES_CATCH_INTERFACES_RUNNER_H_INCLUDED namespace Catch { - class TestCase; +class TestCase; - struct IRunner { - virtual ~IRunner(); - virtual bool aborting() const = 0; - }; +struct IRunner { + virtual ~IRunner(); + virtual bool aborting() const = 0; +}; } /////////////////////////////////////////////////////////////////////////////// @@ -2138,7 +2361,7 @@ namespace Catch { /////////////////////////////////////////////////////////////////////////////// #ifdef CATCH_CONFIG_VARIADIC_MACROS - #define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, ... ) \ +#define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, ... ) \ do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ __catchResult << __VA_ARGS__ + ::Catch::StreamEndStop(); \ @@ -2146,7 +2369,7 @@ namespace Catch { INTERNAL_CATCH_REACT( __catchResult ) \ } while( Catch::alwaysFalse() ) #else - #define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, log ) \ +#define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, log ) \ do { \ Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ __catchResult << log + ::Catch::StreamEndStop(); \ @@ -2190,91 +2413,100 @@ namespace Catch { namespace Catch { - struct Counts { - Counts() : passed( 0 ), failed( 0 ), failedButOk( 0 ) {} +struct Counts { + Counts() : passed( 0 ), failed( 0 ), failedButOk( 0 ) {} - Counts operator - ( Counts const& other ) const { - Counts diff; - diff.passed = passed - other.passed; - diff.failed = failed - other.failed; - diff.failedButOk = failedButOk - other.failedButOk; - return diff; - } - Counts& operator += ( Counts const& other ) { - passed += other.passed; - failed += other.failed; - failedButOk += other.failedButOk; - return *this; - } + Counts operator - ( Counts const &other ) const + { + Counts diff; + diff.passed = passed - other.passed; + diff.failed = failed - other.failed; + diff.failedButOk = failedButOk - other.failedButOk; + return diff; + } + Counts &operator += ( Counts const &other ) + { + passed += other.passed; + failed += other.failed; + failedButOk += other.failedButOk; + return *this; + } - std::size_t total() const { - return passed + failed + failedButOk; - } - bool allPassed() const { - return failed == 0 && failedButOk == 0; - } - bool allOk() const { - return failed == 0; - } + std::size_t total() const + { + return passed + failed + failedButOk; + } + bool allPassed() const + { + return failed == 0 && failedButOk == 0; + } + bool allOk() const + { + return failed == 0; + } - std::size_t passed; - std::size_t failed; - std::size_t failedButOk; - }; + std::size_t passed; + std::size_t failed; + std::size_t failedButOk; +}; - struct Totals { +struct Totals { - Totals operator - ( Totals const& other ) const { - Totals diff; - diff.assertions = assertions - other.assertions; - diff.testCases = testCases - other.testCases; - return diff; - } + Totals operator - ( Totals const &other ) const + { + Totals diff; + diff.assertions = assertions - other.assertions; + diff.testCases = testCases - other.testCases; + return diff; + } - Totals delta( Totals const& prevTotals ) const { - Totals diff = *this - prevTotals; - if( diff.assertions.failed > 0 ) - ++diff.testCases.failed; - else if( diff.assertions.failedButOk > 0 ) - ++diff.testCases.failedButOk; - else - ++diff.testCases.passed; - return diff; + Totals delta( Totals const &prevTotals ) const + { + Totals diff = *this - prevTotals; + if ( diff.assertions.failed > 0 ) { + ++diff.testCases.failed; + } else if ( diff.assertions.failedButOk > 0 ) { + ++diff.testCases.failedButOk; + } else { + ++diff.testCases.passed; } + return diff; + } - Totals& operator += ( Totals const& other ) { - assertions += other.assertions; - testCases += other.testCases; - return *this; - } + Totals &operator += ( Totals const &other ) + { + assertions += other.assertions; + testCases += other.testCases; + return *this; + } - Counts assertions; - Counts testCases; - }; + Counts assertions; + Counts testCases; +}; } namespace Catch { - struct SectionInfo { - SectionInfo - ( SourceLineInfo const& _lineInfo, - std::string const& _name, - std::string const& _description = std::string() ); +struct SectionInfo { + SectionInfo + ( SourceLineInfo const &_lineInfo, + std::string const &_name, + std::string const &_description = std::string() ); - std::string name; - std::string description; - SourceLineInfo lineInfo; - }; + std::string name; + std::string description; + SourceLineInfo lineInfo; +}; - struct SectionEndInfo { - SectionEndInfo( SectionInfo const& _sectionInfo, Counts const& _prevAssertions, double _durationInSeconds ) +struct SectionEndInfo { + SectionEndInfo( SectionInfo const &_sectionInfo, Counts const &_prevAssertions, double _durationInSeconds ) : sectionInfo( _sectionInfo ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds ) - {} + {} - SectionInfo sectionInfo; - Counts prevAssertions; - double durationInSeconds; - }; + SectionInfo sectionInfo; + Counts prevAssertions; + double durationInSeconds; +}; } // end namespace Catch @@ -2289,17 +2521,17 @@ typedef unsigned long long uint64_t; namespace Catch { - class Timer { - public: - Timer() : m_ticks( 0 ) {} - void start(); - unsigned int getElapsedMicroseconds() const; - unsigned int getElapsedMilliseconds() const; - double getElapsedSeconds() const; +class Timer { +public: + Timer() : m_ticks( 0 ) {} + void start(); + unsigned int getElapsedMicroseconds() const; + unsigned int getElapsedMilliseconds() const; + double getElapsedSeconds() const; - private: - uint64_t m_ticks; - }; +private: + uint64_t m_ticks; +}; } // namespace Catch @@ -2307,30 +2539,30 @@ namespace Catch { namespace Catch { - class Section : NonCopyable { - public: - Section( SectionInfo const& info ); - ~Section(); +class Section : NonCopyable { +public: + Section( SectionInfo const &info ); + ~Section(); - // This indicates whether the section should be executed or not - operator bool() const; + // This indicates whether the section should be executed or not + operator bool() const; - private: - SectionInfo m_info; +private: + SectionInfo m_info; - std::string m_name; - Counts m_assertions; - bool m_sectionIncluded; - Timer m_timer; - }; + std::string m_name; + Counts m_assertions; + bool m_sectionIncluded; + Timer m_timer; +}; } // end namespace Catch #ifdef CATCH_CONFIG_VARIADIC_MACROS - #define INTERNAL_CATCH_SECTION( ... ) \ +#define INTERNAL_CATCH_SECTION( ... ) \ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) #else - #define INTERNAL_CATCH_SECTION( name, desc ) \ +#define INTERNAL_CATCH_SECTION( name, desc ) \ if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, name, desc ) ) #endif @@ -2354,14 +2586,16 @@ struct IGenerator { template class BetweenGenerator : public IGenerator { public: - BetweenGenerator( T from, T to ) : m_from( from ), m_to( to ){} + BetweenGenerator( T from, T to ) : m_from( from ), m_to( to ) {} - virtual T getValue( std::size_t index ) const { - return m_from+static_cast( index ); + virtual T getValue( std::size_t index ) const + { + return m_from + static_cast( index ); } - virtual std::size_t size() const { - return static_cast( 1+m_to-m_from ); + virtual std::size_t size() const + { + return static_cast( 1 + m_to - m_from ); } private: @@ -2373,17 +2607,20 @@ class BetweenGenerator : public IGenerator { template class ValuesGenerator : public IGenerator { public: - ValuesGenerator(){} + ValuesGenerator() {} - void add( T value ) { + void add( T value ) + { m_values.push_back( value ); } - virtual T getValue( std::size_t index ) const { + virtual T getValue( std::size_t index ) const + { return m_values[index]; } - virtual std::size_t size() const { + virtual std::size_t size() const + { return m_values.size(); } @@ -2397,33 +2634,34 @@ class CompositeGenerator { CompositeGenerator() : m_totalSize( 0 ) {} // *** Move semantics, similar to auto_ptr *** - CompositeGenerator( CompositeGenerator& other ) - : m_fileInfo( other.m_fileInfo ), - m_totalSize( 0 ) + CompositeGenerator( CompositeGenerator &other ) + : m_fileInfo( other.m_fileInfo ), + m_totalSize( 0 ) { move( other ); } - CompositeGenerator& setFileInfo( const char* fileInfo ) { + CompositeGenerator &setFileInfo( const char *fileInfo ) + { m_fileInfo = fileInfo; return *this; } - ~CompositeGenerator() { + ~CompositeGenerator() + { deleteAll( m_composed ); } - operator T () const { + operator T () const + { size_t overallIndex = getCurrentContext().getGeneratorIndex( m_fileInfo, m_totalSize ); typename std::vector*>::const_iterator it = m_composed.begin(); typename std::vector*>::const_iterator itEnd = m_composed.end(); - for( size_t index = 0; it != itEnd; ++it ) - { - const IGenerator* generator = *it; - if( overallIndex >= index && overallIndex < index + generator->size() ) - { - return generator->getValue( overallIndex-index ); + for ( size_t index = 0; it != itEnd; ++it ) { + const IGenerator *generator = *it; + if ( overallIndex >= index && overallIndex < index + generator->size() ) { + return generator->getValue( overallIndex - index ); } index += generator->size(); } @@ -2431,18 +2669,21 @@ class CompositeGenerator { return T(); // Suppress spurious "not all control paths return a value" warning in Visual Studio - if you know how to fix this please do so } - void add( const IGenerator* generator ) { + void add( const IGenerator *generator ) + { m_totalSize += generator->size(); m_composed.push_back( generator ); } - CompositeGenerator& then( CompositeGenerator& other ) { + CompositeGenerator &then( CompositeGenerator &other ) + { move( other ); return *this; } - CompositeGenerator& then( T value ) { - ValuesGenerator* valuesGen = new ValuesGenerator(); + CompositeGenerator &then( T value ) + { + ValuesGenerator *valuesGen = new ValuesGenerator(); valuesGen->add( value ); add( valuesGen ); return *this; @@ -2450,7 +2691,8 @@ class CompositeGenerator { private: - void move( CompositeGenerator& other ) { + void move( CompositeGenerator &other ) + { std::copy( other.m_composed.begin(), other.m_composed.end(), std::back_inserter( m_composed ) ); m_totalSize += other.m_totalSize; other.m_composed.clear(); @@ -2461,47 +2703,50 @@ class CompositeGenerator { size_t m_totalSize; }; -namespace Generators +namespace Generators { +template +CompositeGenerator between( T from, T to ) { - template - CompositeGenerator between( T from, T to ) { - CompositeGenerator generators; - generators.add( new BetweenGenerator( from, to ) ); - return generators; - } + CompositeGenerator generators; + generators.add( new BetweenGenerator( from, to ) ); + return generators; +} - template - CompositeGenerator values( T val1, T val2 ) { - CompositeGenerator generators; - ValuesGenerator* valuesGen = new ValuesGenerator(); - valuesGen->add( val1 ); - valuesGen->add( val2 ); - generators.add( valuesGen ); - return generators; - } +template +CompositeGenerator values( T val1, T val2 ) +{ + CompositeGenerator generators; + ValuesGenerator *valuesGen = new ValuesGenerator(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + generators.add( valuesGen ); + return generators; +} - template - CompositeGenerator values( T val1, T val2, T val3 ){ - CompositeGenerator generators; - ValuesGenerator* valuesGen = new ValuesGenerator(); - valuesGen->add( val1 ); - valuesGen->add( val2 ); - valuesGen->add( val3 ); - generators.add( valuesGen ); - return generators; - } +template +CompositeGenerator values( T val1, T val2, T val3 ) +{ + CompositeGenerator generators; + ValuesGenerator *valuesGen = new ValuesGenerator(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + generators.add( valuesGen ); + return generators; +} - template - CompositeGenerator values( T val1, T val2, T val3, T val4 ) { - CompositeGenerator generators; - ValuesGenerator* valuesGen = new ValuesGenerator(); - valuesGen->add( val1 ); - valuesGen->add( val2 ); - valuesGen->add( val3 ); - valuesGen->add( val4 ); - generators.add( valuesGen ); - return generators; - } +template +CompositeGenerator values( T val1, T val2, T val3, T val4 ) +{ + CompositeGenerator generators; + ValuesGenerator *valuesGen = new ValuesGenerator(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + valuesGen->add( val4 ); + generators.add( valuesGen ); + return generators; +} } // end namespace Generators @@ -2527,86 +2772,88 @@ using namespace Generators; namespace Catch { - class TestCase; - struct ITestCaseRegistry; - struct IExceptionTranslatorRegistry; - struct IExceptionTranslator; - struct IReporterRegistry; - struct IReporterFactory; +class TestCase; +struct ITestCaseRegistry; +struct IExceptionTranslatorRegistry; +struct IExceptionTranslator; +struct IReporterRegistry; +struct IReporterFactory; - struct IRegistryHub { - virtual ~IRegistryHub(); +struct IRegistryHub { + virtual ~IRegistryHub(); - virtual IReporterRegistry const& getReporterRegistry() const = 0; - virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0; - virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() = 0; - }; + virtual IReporterRegistry const &getReporterRegistry() const = 0; + virtual ITestCaseRegistry const &getTestCaseRegistry() const = 0; + virtual IExceptionTranslatorRegistry &getExceptionTranslatorRegistry() = 0; +}; - struct IMutableRegistryHub { - virtual ~IMutableRegistryHub(); - virtual void registerReporter( std::string const& name, Ptr const& factory ) = 0; - virtual void registerListener( Ptr const& factory ) = 0; - virtual void registerTest( TestCase const& testInfo ) = 0; - virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; - }; +struct IMutableRegistryHub { + virtual ~IMutableRegistryHub(); + virtual void registerReporter( std::string const &name, Ptr const &factory ) = 0; + virtual void registerListener( Ptr const &factory ) = 0; + virtual void registerTest( TestCase const &testInfo ) = 0; + virtual void registerTranslator( const IExceptionTranslator *translator ) = 0; +}; - IRegistryHub& getRegistryHub(); - IMutableRegistryHub& getMutableRegistryHub(); - void cleanUp(); - std::string translateActiveException(); +IRegistryHub &getRegistryHub(); +IMutableRegistryHub &getMutableRegistryHub(); +void cleanUp(); +std::string translateActiveException(); } namespace Catch { - typedef std::string(*exceptionTranslateFunction)(); +typedef std::string(*exceptionTranslateFunction)(); - struct IExceptionTranslator; - typedef std::vector ExceptionTranslators; +struct IExceptionTranslator; +typedef std::vector ExceptionTranslators; - struct IExceptionTranslator { - virtual ~IExceptionTranslator(); - virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0; - }; +struct IExceptionTranslator { + virtual ~IExceptionTranslator(); + virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0; +}; - struct IExceptionTranslatorRegistry { - virtual ~IExceptionTranslatorRegistry(); +struct IExceptionTranslatorRegistry { + virtual ~IExceptionTranslatorRegistry(); - virtual std::string translateActiveException() const = 0; - }; + virtual std::string translateActiveException() const = 0; +}; - class ExceptionTranslatorRegistrar { - template - class ExceptionTranslator : public IExceptionTranslator { - public: +class ExceptionTranslatorRegistrar { + template +class ExceptionTranslator : public IExceptionTranslator { +public: - ExceptionTranslator( std::string(*translateFunction)( T& ) ) + ExceptionTranslator( std::string(*translateFunction)( T & ) ) : m_translateFunction( translateFunction ) - {} + {} - virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const CATCH_OVERRIDE { - try { - if( it == itEnd ) - throw; - else - return (*it)->translate( it+1, itEnd ); - } - catch( T& ex ) { - return m_translateFunction( ex ); + virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const CATCH_OVERRIDE + { + try { + if ( it == itEnd ) { + throw; + } else { + return (*it)->translate( it + 1, itEnd ); } + } catch ( T &ex ) { + return m_translateFunction( ex ); } - - protected: - std::string(*m_translateFunction)( T& ); - }; - - public: - template - ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) { - getMutableRegistryHub().registerTranslator - ( new ExceptionTranslator( translateFunction ) ); } + +protected: + std::string(*m_translateFunction)( T & ); }; + +public: + template + ExceptionTranslatorRegistrar( std::string(*translateFunction)( T & ) ) + { + getMutableRegistryHub().registerTranslator + ( new ExceptionTranslator( translateFunction ) ); + } +}; } /////////////////////////////////////////////////////////////////////////////// @@ -2626,73 +2873,83 @@ namespace Catch { namespace Catch { namespace Detail { - class Approx { - public: - explicit Approx ( double value ) - : m_epsilon( std::numeric_limits::epsilon()*100 ), +class Approx { +public: + explicit Approx ( double value ) + : m_epsilon( std::numeric_limits::epsilon() * 100 ), m_scale( 1.0 ), m_value( value ) - {} + {} - Approx( Approx const& other ) + Approx( Approx const &other ) : m_epsilon( other.m_epsilon ), m_scale( other.m_scale ), m_value( other.m_value ) - {} + {} - static Approx custom() { - return Approx( 0 ); - } + static Approx custom() + { + return Approx( 0 ); + } - Approx operator()( double value ) { - Approx approx( value ); - approx.epsilon( m_epsilon ); - approx.scale( m_scale ); - return approx; - } + Approx operator()( double value ) + { + Approx approx( value ); + approx.epsilon( m_epsilon ); + approx.scale( m_scale ); + return approx; + } - friend bool operator == ( double lhs, Approx const& rhs ) { - // Thanks to Richard Harris for his help refining this formula - return fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs), fabs(rhs.m_value) ) ); - } + friend bool operator == ( double lhs, Approx const &rhs ) + { + // Thanks to Richard Harris for his help refining this formula + return fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs), fabs(rhs.m_value) ) ); + } - friend bool operator == ( Approx const& lhs, double rhs ) { - return operator==( rhs, lhs ); - } + friend bool operator == ( Approx const &lhs, double rhs ) + { + return operator==( rhs, lhs ); + } - friend bool operator != ( double lhs, Approx const& rhs ) { - return !operator==( lhs, rhs ); - } + friend bool operator != ( double lhs, Approx const &rhs ) + { + return !operator==( lhs, rhs ); + } - friend bool operator != ( Approx const& lhs, double rhs ) { - return !operator==( rhs, lhs ); - } + friend bool operator != ( Approx const &lhs, double rhs ) + { + return !operator==( rhs, lhs ); + } - Approx& epsilon( double newEpsilon ) { - m_epsilon = newEpsilon; - return *this; - } + Approx &epsilon( double newEpsilon ) + { + m_epsilon = newEpsilon; + return *this; + } - Approx& scale( double newScale ) { - m_scale = newScale; - return *this; - } + Approx &scale( double newScale ) + { + m_scale = newScale; + return *this; + } - std::string toString() const { - std::ostringstream oss; - oss << "Approx( " << Catch::toString( m_value ) << " )"; - return oss.str(); - } + std::string toString() const + { + std::ostringstream oss; + oss << "Approx( " << Catch::toString( m_value ) << " )"; + return oss.str(); + } - private: - double m_epsilon; - double m_scale; - double m_value; - }; +private: + double m_epsilon; + double m_scale; + double m_value; +}; } template<> -inline std::string toString( Detail::Approx const& value ) { +inline std::string toString( Detail::Approx const &value ) +{ return value.toString(); } @@ -2708,16 +2965,16 @@ inline std::string toString( Detail::Approx const& value ) { namespace Catch { - struct TagAlias { - TagAlias( std::string _tag, SourceLineInfo _lineInfo ) : tag( _tag ), lineInfo( _lineInfo ) {} +struct TagAlias { + TagAlias( std::string _tag, SourceLineInfo _lineInfo ) : tag( _tag ), lineInfo( _lineInfo ) {} - std::string tag; - SourceLineInfo lineInfo; - }; + std::string tag; + SourceLineInfo lineInfo; +}; - struct RegistrarForTagAliases { - RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); - }; +struct RegistrarForTagAliases { + RegistrarForTagAliases( char const *alias, char const *tag, SourceLineInfo const &lineInfo ); +}; } // end namespace Catch @@ -2727,75 +2984,104 @@ namespace Catch { namespace Catch { - // An optional type - template - class Option { - public: - Option() : nullableValue( CATCH_NULL ) {} - Option( T const& _value ) - : nullableValue( new( storage ) T( _value ) ) - {} - Option( Option const& _other ) - : nullableValue( _other ? new( storage ) T( *_other ) : CATCH_NULL ) - {} +// An optional type +template +class Option { +public: + Option() : nullableValue( CATCH_NULL ) {} + Option( T const &_value ) + : nullableValue( new ( storage ) T( _value ) ) + {} + Option( Option const &_other ) + : nullableValue( _other ? new ( storage ) T( *_other ) : CATCH_NULL ) + {} - ~Option() { - reset(); - } + ~Option() + { + reset(); + } - Option& operator= ( Option const& _other ) { - if( &_other != this ) { - reset(); - if( _other ) - nullableValue = new( storage ) T( *_other ); - } - return *this; - } - Option& operator = ( T const& _value ) { + Option &operator= ( Option const &_other ) + { + if ( &_other != this ) { reset(); - nullableValue = new( storage ) T( _value ); - return *this; + if ( _other ) { + nullableValue = new ( storage ) T( *_other ); + } } + return *this; + } + Option &operator = ( T const &_value ) + { + reset(); + nullableValue = new ( storage ) T( _value ); + return *this; + } - void reset() { - if( nullableValue ) - nullableValue->~T(); - nullableValue = CATCH_NULL; + void reset() + { + if ( nullableValue ) { + nullableValue->~T(); } + nullableValue = CATCH_NULL; + } - T& operator*() { return *nullableValue; } - T const& operator*() const { return *nullableValue; } - T* operator->() { return nullableValue; } - const T* operator->() const { return nullableValue; } + T &operator*() + { + return *nullableValue; + } + T const &operator*() const + { + return *nullableValue; + } + T *operator->() + { + return nullableValue; + } + const T *operator->() const + { + return nullableValue; + } - T valueOr( T const& defaultValue ) const { - return nullableValue ? *nullableValue : defaultValue; - } + T valueOr( T const &defaultValue ) const + { + return nullableValue ? *nullableValue : defaultValue; + } - bool some() const { return nullableValue != CATCH_NULL; } - bool none() const { return nullableValue == CATCH_NULL; } + bool some() const + { + return nullableValue != CATCH_NULL; + } + bool none() const + { + return nullableValue == CATCH_NULL; + } - bool operator !() const { return nullableValue == CATCH_NULL; } - operator SafeBool::type() const { - return SafeBool::makeSafe( some() ); - } + bool operator !() const + { + return nullableValue == CATCH_NULL; + } + operator SafeBool::type() const + { + return SafeBool::makeSafe( some() ); + } - private: - T* nullableValue; - char storage[sizeof(T)]; - }; +private: + T *nullableValue; + char storage[sizeof(T)]; +}; } // end namespace Catch namespace Catch { - struct ITagAliasRegistry { - virtual ~ITagAliasRegistry(); - virtual Option find( std::string const& alias ) const = 0; - virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0; +struct ITagAliasRegistry { + virtual ~ITagAliasRegistry(); + virtual Option find( std::string const &alias ) const = 0; + virtual std::string expandAliases( std::string const &unexpandedTestSpec ) const = 0; - static ITagAliasRegistry const& get(); - }; + static ITagAliasRegistry const &get(); +}; } // end namespace Catch @@ -2814,68 +3100,68 @@ namespace Catch { namespace Catch { - struct ITestCase; - - struct TestCaseInfo { - enum SpecialProperties{ - None = 0, - IsHidden = 1 << 1, - ShouldFail = 1 << 2, - MayFail = 1 << 3, - Throws = 1 << 4 - }; - - TestCaseInfo( std::string const& _name, - std::string const& _className, - std::string const& _description, - std::set const& _tags, - SourceLineInfo const& _lineInfo ); - - TestCaseInfo( TestCaseInfo const& other ); - - friend void setTags( TestCaseInfo& testCaseInfo, std::set const& tags ); - - bool isHidden() const; - bool throws() const; - bool okToFail() const; - bool expectedToFail() const; - - std::string name; - std::string className; - std::string description; - std::set tags; - std::set lcaseTags; - std::string tagsAsString; - SourceLineInfo lineInfo; - SpecialProperties properties; +struct ITestCase; + +struct TestCaseInfo { + enum SpecialProperties { + None = 0, + IsHidden = 1 << 1, + ShouldFail = 1 << 2, + MayFail = 1 << 3, + Throws = 1 << 4 }; - class TestCase : public TestCaseInfo { - public: + TestCaseInfo( std::string const &_name, + std::string const &_className, + std::string const &_description, + std::set const &_tags, + SourceLineInfo const &_lineInfo ); - TestCase( ITestCase* testCase, TestCaseInfo const& info ); - TestCase( TestCase const& other ); + TestCaseInfo( TestCaseInfo const &other ); - TestCase withName( std::string const& _newName ) const; + friend void setTags( TestCaseInfo &testCaseInfo, std::set const &tags ); - void invoke() const; + bool isHidden() const; + bool throws() const; + bool okToFail() const; + bool expectedToFail() const; - TestCaseInfo const& getTestCaseInfo() const; + std::string name; + std::string className; + std::string description; + std::set tags; + std::set lcaseTags; + std::string tagsAsString; + SourceLineInfo lineInfo; + SpecialProperties properties; +}; - void swap( TestCase& other ); - bool operator == ( TestCase const& other ) const; - bool operator < ( TestCase const& other ) const; - TestCase& operator = ( TestCase const& other ); +class TestCase : public TestCaseInfo { +public: - private: - Ptr test; - }; + TestCase( ITestCase *testCase, TestCaseInfo const &info ); + TestCase( TestCase const &other ); + + TestCase withName( std::string const &_newName ) const; + + void invoke() const; + + TestCaseInfo const &getTestCaseInfo() const; + + void swap( TestCase &other ); + bool operator == ( TestCase const &other ) const; + bool operator < ( TestCase const &other ) const; + TestCase &operator = ( TestCase const &other ); + +private: + Ptr test; +}; - TestCase makeTestCase( ITestCase* testCase, - std::string const& className, - std::string const& name, - std::string const& description, - SourceLineInfo const& lineInfo ); +TestCase makeTestCase( ITestCase *testCase, + std::string const &className, + std::string const &name, + std::string const &description, + SourceLineInfo const &lineInfo ); } #ifdef __clang__ @@ -2909,157 +3195,182 @@ namespace Catch { namespace Catch { - class OcMethod : public SharedImpl { +class OcMethod : public SharedImpl { - public: - OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {} +public: + OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {} - virtual void invoke() const { - id obj = [[m_cls alloc] init]; + virtual void invoke() const + { + id obj = [[m_cls alloc] init]; - performOptionalSelector( obj, @selector(setUp) ); - performOptionalSelector( obj, m_sel ); - performOptionalSelector( obj, @selector(tearDown) ); + performOptionalSelector( obj, @selector(setUp) ); + performOptionalSelector( obj, m_sel ); + performOptionalSelector( obj, @selector(tearDown) ); - arcSafeRelease( obj ); - } - private: - virtual ~OcMethod() {} + arcSafeRelease( obj ); + } +private: + virtual ~OcMethod() {} - Class m_cls; - SEL m_sel; - }; + Class m_cls; + SEL m_sel; +}; - namespace Detail{ +namespace Detail { - inline std::string getAnnotation( Class cls, - std::string const& annotationName, - std::string const& testCaseName ) { - NSString* selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()]; - SEL sel = NSSelectorFromString( selStr ); - arcSafeRelease( selStr ); - id value = performOptionalSelector( cls, sel ); - if( value ) - return [(NSString*)value UTF8String]; - return ""; - } - } +inline std::string getAnnotation( Class cls, + std::string const &annotationName, + std::string const &testCaseName ) +{ + NSString *selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()]; + SEL sel = NSSelectorFromString( selStr ); + arcSafeRelease( selStr ); + id value = performOptionalSelector( cls, sel ); + if ( value ) { + return [(NSString *)value UTF8String]; + } + return ""; +} +} - inline size_t registerTestMethods() { - size_t noTestMethods = 0; - int noClasses = objc_getClassList( CATCH_NULL, 0 ); +inline size_t registerTestMethods() +{ + size_t noTestMethods = 0; + int noClasses = objc_getClassList( CATCH_NULL, 0 ); - Class* classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses); - objc_getClassList( classes, noClasses ); + Class *classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses); + objc_getClassList( classes, noClasses ); - for( int c = 0; c < noClasses; c++ ) { - Class cls = classes[c]; - { - u_int count; - Method* methods = class_copyMethodList( cls, &count ); - for( u_int m = 0; m < count ; m++ ) { - SEL selector = method_getName(methods[m]); - std::string methodName = sel_getName(selector); - if( startsWith( methodName, "Catch_TestCase_" ) ) { - std::string testCaseName = methodName.substr( 15 ); - std::string name = Detail::getAnnotation( cls, "Name", testCaseName ); - std::string desc = Detail::getAnnotation( cls, "Description", testCaseName ); - const char* className = class_getName( cls ); - - getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, name.c_str(), desc.c_str(), SourceLineInfo() ) ); - noTestMethods++; - } + for ( int c = 0; c < noClasses; c++ ) { + Class cls = classes[c]; + { + u_int count; + Method *methods = class_copyMethodList( cls, &count ); + for ( u_int m = 0; m < count ; m++ ) { + SEL selector = method_getName(methods[m]); + std::string methodName = sel_getName(selector); + if ( startsWith( methodName, "Catch_TestCase_" ) ) { + std::string testCaseName = methodName.substr( 15 ); + std::string name = Detail::getAnnotation( cls, "Name", testCaseName ); + std::string desc = Detail::getAnnotation( cls, "Description", testCaseName ); + const char *className = class_getName( cls ); + + getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, name.c_str(), desc.c_str(), SourceLineInfo() ) ); + noTestMethods++; } - free(methods); } + free(methods); } - return noTestMethods; } + return noTestMethods; +} - namespace Matchers { - namespace Impl { - namespace NSStringMatchers { - - template - struct StringHolder : MatcherImpl{ - StringHolder( NSString* substr ) : m_substr( [substr copy] ){} - StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){} - StringHolder() { - arcSafeRelease( m_substr ); - } +namespace Matchers { +namespace Impl { +namespace NSStringMatchers { + +template +struct StringHolder : MatcherImpl { + StringHolder( NSString *substr ) : m_substr( [substr copy] ) {} + StringHolder( StringHolder const &other ) : m_substr( [other.m_substr copy] ) {} + StringHolder() + { + arcSafeRelease( m_substr ); + } - NSString* m_substr; - }; + NSString *m_substr; +}; - struct Equals : StringHolder { - Equals( NSString* substr ) : StringHolder( substr ){} +struct Equals : StringHolder { + Equals( NSString *substr ) : StringHolder( substr ) {} - virtual bool match( ExpressionType const& str ) const { - return (str != nil || m_substr == nil ) && - [str isEqualToString:m_substr]; - } + virtual bool match( ExpressionType const &str ) const + { + return (str != nil || m_substr == nil ) && + [str isEqualToString:m_substr]; + } - virtual std::string toString() const { - return "equals string: " + Catch::toString( m_substr ); - } - }; + virtual std::string toString() const + { + return "equals string: " + Catch::toString( m_substr ); + } +}; - struct Contains : StringHolder { - Contains( NSString* substr ) : StringHolder( substr ){} +struct Contains : StringHolder { + Contains( NSString *substr ) : StringHolder( substr ) {} - virtual bool match( ExpressionType const& str ) const { - return (str != nil || m_substr == nil ) && - [str rangeOfString:m_substr].location != NSNotFound; - } + virtual bool match( ExpressionType const &str ) const + { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location != NSNotFound; + } - virtual std::string toString() const { - return "contains string: " + Catch::toString( m_substr ); - } - }; + virtual std::string toString() const + { + return "contains string: " + Catch::toString( m_substr ); + } +}; - struct StartsWith : StringHolder { - StartsWith( NSString* substr ) : StringHolder( substr ){} +struct StartsWith : StringHolder { + StartsWith( NSString *substr ) : StringHolder( substr ) {} - virtual bool match( ExpressionType const& str ) const { - return (str != nil || m_substr == nil ) && - [str rangeOfString:m_substr].location == 0; - } + virtual bool match( ExpressionType const &str ) const + { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == 0; + } - virtual std::string toString() const { - return "starts with: " + Catch::toString( m_substr ); - } - }; - struct EndsWith : StringHolder { - EndsWith( NSString* substr ) : StringHolder( substr ){} + virtual std::string toString() const + { + return "starts with: " + Catch::toString( m_substr ); + } +}; +struct EndsWith : StringHolder { + EndsWith( NSString *substr ) : StringHolder( substr ) {} - virtual bool match( ExpressionType const& str ) const { - return (str != nil || m_substr == nil ) && - [str rangeOfString:m_substr].location == [str length] - [m_substr length]; - } + virtual bool match( ExpressionType const &str ) const + { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == [str length] - [m_substr length]; + } - virtual std::string toString() const { - return "ends with: " + Catch::toString( m_substr ); - } - }; + virtual std::string toString() const + { + return "ends with: " + Catch::toString( m_substr ); + } +}; - } // namespace NSStringMatchers - } // namespace Impl +} // namespace NSStringMatchers +} // namespace Impl - inline Impl::NSStringMatchers::Equals - Equals( NSString* substr ){ return Impl::NSStringMatchers::Equals( substr ); } +inline Impl::NSStringMatchers::Equals +Equals( NSString *substr ) +{ + return Impl::NSStringMatchers::Equals( substr ); +} - inline Impl::NSStringMatchers::Contains - Contains( NSString* substr ){ return Impl::NSStringMatchers::Contains( substr ); } +inline Impl::NSStringMatchers::Contains +Contains( NSString *substr ) +{ + return Impl::NSStringMatchers::Contains( substr ); +} - inline Impl::NSStringMatchers::StartsWith - StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); } +inline Impl::NSStringMatchers::StartsWith +StartsWith( NSString *substr ) +{ + return Impl::NSStringMatchers::StartsWith( substr ); +} - inline Impl::NSStringMatchers::EndsWith - EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); } +inline Impl::NSStringMatchers::EndsWith +EndsWith( NSString *substr ) +{ + return Impl::NSStringMatchers::EndsWith( substr ); +} - } // namespace Matchers +} // namespace Matchers - using namespace Matchers; +using namespace Matchers; } // namespace Catch @@ -3117,62 +3428,63 @@ return @ desc; \ // #included from: catch_wildcard_pattern.hpp #define TWOBLUECUBES_CATCH_WILDCARD_PATTERN_HPP_INCLUDED -namespace Catch -{ - class WildcardPattern { - enum WildcardPosition { - NoWildcard = 0, - WildcardAtStart = 1, - WildcardAtEnd = 2, - WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd - }; +namespace Catch { +class WildcardPattern { + enum WildcardPosition { + NoWildcard = 0, + WildcardAtStart = 1, + WildcardAtEnd = 2, + WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd + }; - public: +public: - WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity ) + WildcardPattern( std::string const &pattern, CaseSensitive::Choice caseSensitivity ) : m_caseSensitivity( caseSensitivity ), m_wildcard( NoWildcard ), m_pattern( adjustCase( pattern ) ) - { - if( startsWith( m_pattern, "*" ) ) { - m_pattern = m_pattern.substr( 1 ); - m_wildcard = WildcardAtStart; - } - if( endsWith( m_pattern, "*" ) ) { - m_pattern = m_pattern.substr( 0, m_pattern.size()-1 ); - m_wildcard = static_cast( m_wildcard | WildcardAtEnd ); - } + { + if ( startsWith( m_pattern, "*" ) ) { + m_pattern = m_pattern.substr( 1 ); + m_wildcard = WildcardAtStart; + } + if ( endsWith( m_pattern, "*" ) ) { + m_pattern = m_pattern.substr( 0, m_pattern.size() - 1 ); + m_wildcard = static_cast( m_wildcard | WildcardAtEnd ); + } + } + virtual ~WildcardPattern(); + virtual bool matches( std::string const &str ) const + { + switch ( m_wildcard ) { + case NoWildcard: + return m_pattern == adjustCase( str ); + case WildcardAtStart: + return endsWith( adjustCase( str ), m_pattern ); + case WildcardAtEnd: + return startsWith( adjustCase( str ), m_pattern ); + case WildcardAtBothEnds: + return contains( adjustCase( str ), m_pattern ); } - virtual ~WildcardPattern(); - virtual bool matches( std::string const& str ) const { - switch( m_wildcard ) { - case NoWildcard: - return m_pattern == adjustCase( str ); - case WildcardAtStart: - return endsWith( adjustCase( str ), m_pattern ); - case WildcardAtEnd: - return startsWith( adjustCase( str ), m_pattern ); - case WildcardAtBothEnds: - return contains( adjustCase( str ), m_pattern ); - } #ifdef __clang__ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wunreachable-code" #endif - throw std::logic_error( "Unknown enum" ); + throw std::logic_error( "Unknown enum" ); #ifdef __clang__ #pragma clang diagnostic pop #endif - } - private: - std::string adjustCase( std::string const& str ) const { - return m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str; - } - CaseSensitive::Choice m_caseSensitivity; - WildcardPosition m_wildcard; - std::string m_pattern; - }; + } +private: + std::string adjustCase( std::string const &str ) const + { + return m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str; + } + CaseSensitive::Choice m_caseSensitivity; + WildcardPosition m_wildcard; + std::string m_pattern; +}; } #include @@ -3180,73 +3492,83 @@ namespace Catch namespace Catch { - class TestSpec { - struct Pattern : SharedImpl<> { - virtual ~Pattern(); - virtual bool matches( TestCaseInfo const& testCase ) const = 0; - }; - class NamePattern : public Pattern { - public: - NamePattern( std::string const& name ) +class TestSpec { + struct Pattern : SharedImpl<> { + virtual ~Pattern(); + virtual bool matches( TestCaseInfo const &testCase ) const = 0; + }; + class NamePattern : public Pattern { + public: + NamePattern( std::string const &name ) : m_wildcardPattern( toLower( name ), CaseSensitive::No ) - {} - virtual ~NamePattern(); - virtual bool matches( TestCaseInfo const& testCase ) const { - return m_wildcardPattern.matches( toLower( testCase.name ) ); - } - private: - WildcardPattern m_wildcardPattern; - }; - - class TagPattern : public Pattern { - public: - TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} - virtual ~TagPattern(); - virtual bool matches( TestCaseInfo const& testCase ) const { - return testCase.lcaseTags.find( m_tag ) != testCase.lcaseTags.end(); - } - private: - std::string m_tag; - }; - - class ExcludedPattern : public Pattern { - public: - ExcludedPattern( Ptr const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} - virtual ~ExcludedPattern(); - virtual bool matches( TestCaseInfo const& testCase ) const { return !m_underlyingPattern->matches( testCase ); } - private: - Ptr m_underlyingPattern; - }; - - struct Filter { - std::vector > m_patterns; - - bool matches( TestCaseInfo const& testCase ) const { - // All patterns in a filter must match for the filter to be a match - for( std::vector >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) - if( !(*it)->matches( testCase ) ) - return false; - return true; - } - }; + {} + virtual ~NamePattern(); + virtual bool matches( TestCaseInfo const &testCase ) const + { + return m_wildcardPattern.matches( toLower( testCase.name ) ); + } + private: + WildcardPattern m_wildcardPattern; + }; + class TagPattern : public Pattern { public: - bool hasFilters() const { - return !m_filters.empty(); - } - bool matches( TestCaseInfo const& testCase ) const { - // A TestSpec matches if any filter matches - for( std::vector::const_iterator it = m_filters.begin(), itEnd = m_filters.end(); it != itEnd; ++it ) - if( it->matches( testCase ) ) - return true; - return false; + TagPattern( std::string const &tag ) : m_tag( toLower( tag ) ) {} + virtual ~TagPattern(); + virtual bool matches( TestCaseInfo const &testCase ) const + { + return testCase.lcaseTags.find( m_tag ) != testCase.lcaseTags.end(); } + private: + std::string m_tag; + }; + class ExcludedPattern : public Pattern { + public: + ExcludedPattern( Ptr const &underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} + virtual ~ExcludedPattern(); + virtual bool matches( TestCaseInfo const &testCase ) const + { + return !m_underlyingPattern->matches( testCase ); + } private: - std::vector m_filters; + Ptr m_underlyingPattern; + }; + + struct Filter { + std::vector > m_patterns; - friend class TestSpecParser; + bool matches( TestCaseInfo const &testCase ) const + { + // All patterns in a filter must match for the filter to be a match + for ( std::vector >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) + if ( !(*it)->matches( testCase ) ) { + return false; + } + return true; + } }; + +public: + bool hasFilters() const + { + return !m_filters.empty(); + } + bool matches( TestCaseInfo const &testCase ) const + { + // A TestSpec matches if any filter matches + for ( std::vector::const_iterator it = m_filters.begin(), itEnd = m_filters.end(); it != itEnd; ++it ) + if ( it->matches( testCase ) ) { + return true; + } + return false; + } + +private: + std::vector m_filters; + + friend class TestSpecParser; +}; } #ifdef __clang__ @@ -3255,94 +3577,107 @@ namespace Catch { namespace Catch { - class TestSpecParser { - enum Mode{ None, Name, QuotedName, Tag }; - Mode m_mode; - bool m_exclusion; - std::size_t m_start, m_pos; - std::string m_arg; - TestSpec::Filter m_currentFilter; - TestSpec m_testSpec; - ITagAliasRegistry const* m_tagAliases; +class TestSpecParser { + enum Mode { None, Name, QuotedName, Tag }; + Mode m_mode; + bool m_exclusion; + std::size_t m_start, m_pos; + std::string m_arg; + TestSpec::Filter m_currentFilter; + TestSpec m_testSpec; + ITagAliasRegistry const *m_tagAliases; - public: - TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {} - - TestSpecParser& parse( std::string const& arg ) { - m_mode = None; - m_exclusion = false; - m_start = std::string::npos; - m_arg = m_tagAliases->expandAliases( arg ); - for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) - visitChar( m_arg[m_pos] ); - if( m_mode == Name ) - addPattern(); - return *this; +public: + TestSpecParser( ITagAliasRegistry const &tagAliases ) : m_tagAliases( &tagAliases ) {} + + TestSpecParser &parse( std::string const &arg ) + { + m_mode = None; + m_exclusion = false; + m_start = std::string::npos; + m_arg = m_tagAliases->expandAliases( arg ); + for ( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) { + visitChar( m_arg[m_pos] ); } - TestSpec testSpec() { - addFilter(); - return m_testSpec; + if ( m_mode == Name ) { + addPattern(); } - private: - void visitChar( char c ) { - if( m_mode == None ) { - switch( c ) { - case ' ': return; - case '~': m_exclusion = true; return; - case '[': return startNewMode( Tag, ++m_pos ); - case '"': return startNewMode( QuotedName, ++m_pos ); - default: startNewMode( Name, m_pos ); break; - } + return *this; + } + TestSpec testSpec() + { + addFilter(); + return m_testSpec; + } +private: + void visitChar( char c ) + { + if ( m_mode == None ) { + switch ( c ) { + case ' ': return; + case '~': m_exclusion = true; return; + case '[': return startNewMode( Tag, ++m_pos ); + case '"': return startNewMode( QuotedName, ++m_pos ); + default: startNewMode( Name, m_pos ); break; } - if( m_mode == Name ) { - if( c == ',' ) { + } + if ( m_mode == Name ) { + if ( c == ',' ) { + addPattern(); + addFilter(); + } else if ( c == '[' ) { + if ( subString() == "exclude:" ) { + m_exclusion = true; + } else { addPattern(); - addFilter(); - } - else if( c == '[' ) { - if( subString() == "exclude:" ) - m_exclusion = true; - else - addPattern(); - startNewMode( Tag, ++m_pos ); } + startNewMode( Tag, ++m_pos ); } - else if( m_mode == QuotedName && c == '"' ) - addPattern(); - else if( m_mode == Tag && c == ']' ) - addPattern(); + } else if ( m_mode == QuotedName && c == '"' ) { + addPattern(); + } else if ( m_mode == Tag && c == ']' ) { + addPattern(); } - void startNewMode( Mode mode, std::size_t start ) { - m_mode = mode; - m_start = start; + } + void startNewMode( Mode mode, std::size_t start ) + { + m_mode = mode; + m_start = start; + } + std::string subString() const + { + return m_arg.substr( m_start, m_pos - m_start ); + } + template + void addPattern() + { + std::string token = subString(); + if ( startsWith( token, "exclude:" ) ) { + m_exclusion = true; + token = token.substr( 8 ); } - std::string subString() const { return m_arg.substr( m_start, m_pos - m_start ); } - template - void addPattern() { - std::string token = subString(); - if( startsWith( token, "exclude:" ) ) { - m_exclusion = true; - token = token.substr( 8 ); - } - if( !token.empty() ) { - Ptr pattern = new T( token ); - if( m_exclusion ) - pattern = new TestSpec::ExcludedPattern( pattern ); - m_currentFilter.m_patterns.push_back( pattern ); + if ( !token.empty() ) { + Ptr pattern = new T( token ); + if ( m_exclusion ) { + pattern = new TestSpec::ExcludedPattern( pattern ); } - m_exclusion = false; - m_mode = None; + m_currentFilter.m_patterns.push_back( pattern ); } - void addFilter() { - if( !m_currentFilter.m_patterns.empty() ) { - m_testSpec.m_filters.push_back( m_currentFilter ); - m_currentFilter = TestSpec::Filter(); - } + m_exclusion = false; + m_mode = None; + } + void addFilter() + { + if ( !m_currentFilter.m_patterns.empty() ) { + m_testSpec.m_filters.push_back( m_currentFilter ); + m_currentFilter = TestSpec::Filter(); } - }; - inline TestSpec parseTestSpec( std::string const& arg ) { - return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec(); } +}; +inline TestSpec parseTestSpec( std::string const &arg ) +{ + return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec(); +} } // namespace Catch @@ -3359,53 +3694,63 @@ namespace Catch { namespace Catch { - struct Verbosity { enum Level { +struct Verbosity { + enum Level { NoOutput = 0, Quiet, Normal - }; }; + }; +}; - struct WarnAbout { enum What { +struct WarnAbout { + enum What { Nothing = 0x00, NoAssertions = 0x01 - }; }; + }; +}; - struct ShowDurations { enum OrNot { +struct ShowDurations { + enum OrNot { DefaultForReporter, Always, Never - }; }; - struct RunTests { enum InWhatOrder { + }; +}; +struct RunTests { + enum InWhatOrder { InDeclarationOrder, InLexicographicalOrder, InRandomOrder - }; }; - struct UseColour { enum YesOrNo { + }; +}; +struct UseColour { + enum YesOrNo { Auto, Yes, No - }; }; - - class TestSpec; - - struct IConfig : IShared { - - virtual ~IConfig(); - - virtual bool allowThrows() const = 0; - virtual std::ostream& stream() const = 0; - virtual std::string name() const = 0; - virtual bool includeSuccessfulResults() const = 0; - virtual bool shouldDebugBreak() const = 0; - virtual bool warnAboutMissingAssertions() const = 0; - virtual int abortAfter() const = 0; - virtual bool showInvisibles() const = 0; - virtual ShowDurations::OrNot showDurations() const = 0; - virtual TestSpec const& testSpec() const = 0; - virtual RunTests::InWhatOrder runOrder() const = 0; - virtual unsigned int rngSeed() const = 0; - virtual UseColour::YesOrNo useColour() const = 0; }; +}; + +class TestSpec; + +struct IConfig : IShared { + + virtual ~IConfig(); + + virtual bool allowThrows() const = 0; + virtual std::ostream &stream() const = 0; + virtual std::string name() const = 0; + virtual bool includeSuccessfulResults() const = 0; + virtual bool shouldDebugBreak() const = 0; + virtual bool warnAboutMissingAssertions() const = 0; + virtual int abortAfter() const = 0; + virtual bool showInvisibles() const = 0; + virtual ShowDurations::OrNot showDurations() const = 0; + virtual TestSpec const &testSpec() const = 0; + virtual RunTests::InWhatOrder runOrder() const = 0; + virtual unsigned int rngSeed() const = 0; + virtual UseColour::YesOrNo useColour() const = 0; +}; } // #included from: catch_stream.h @@ -3418,10 +3763,10 @@ namespace Catch { namespace Catch { - class StreamBufBase : public std::streambuf { - public: - virtual ~StreamBufBase() CATCH_NOEXCEPT; - }; +class StreamBufBase : public std::streambuf { +public: + virtual ~StreamBufBase() CATCH_NOEXCEPT; +}; } #include @@ -3430,43 +3775,43 @@ namespace Catch { namespace Catch { - std::ostream& cout(); - std::ostream& cerr(); +std::ostream &cout(); +std::ostream &cerr(); - struct IStream { - virtual ~IStream() CATCH_NOEXCEPT; - virtual std::ostream& stream() const = 0; - }; +struct IStream { + virtual ~IStream() CATCH_NOEXCEPT; + virtual std::ostream &stream() const = 0; +}; - class FileStream : public IStream { - mutable std::ofstream m_ofs; - public: - FileStream( std::string const& filename ); - virtual ~FileStream() CATCH_NOEXCEPT; - public: // IStream - virtual std::ostream& stream() const CATCH_OVERRIDE; - }; +class FileStream : public IStream { + mutable std::ofstream m_ofs; +public: + FileStream( std::string const &filename ); + virtual ~FileStream() CATCH_NOEXCEPT; +public: // IStream + virtual std::ostream &stream() const CATCH_OVERRIDE; +}; - class CoutStream : public IStream { - mutable std::ostream m_os; - public: - CoutStream(); - virtual ~CoutStream() CATCH_NOEXCEPT; +class CoutStream : public IStream { + mutable std::ostream m_os; +public: + CoutStream(); + virtual ~CoutStream() CATCH_NOEXCEPT; - public: // IStream - virtual std::ostream& stream() const CATCH_OVERRIDE; - }; +public: // IStream + virtual std::ostream &stream() const CATCH_OVERRIDE; +}; - class DebugOutStream : public IStream { - CATCH_AUTO_PTR( StreamBufBase ) m_streamBuf; - mutable std::ostream m_os; - public: - DebugOutStream(); - virtual ~DebugOutStream() CATCH_NOEXCEPT; +class DebugOutStream : public IStream { + CATCH_AUTO_PTR( StreamBufBase ) m_streamBuf; + mutable std::ostream m_os; +public: + DebugOutStream(); + virtual ~DebugOutStream() CATCH_NOEXCEPT; - public: // IStream - virtual std::ostream& stream() const CATCH_OVERRIDE; - }; +public: // IStream + virtual std::ostream &stream() const CATCH_OVERRIDE; +}; } #include @@ -3481,9 +3826,9 @@ namespace Catch { namespace Catch { - struct ConfigData { +struct ConfigData { - ConfigData() + ConfigData() : listTests( false ), listTags( false ), listReporters( false ), @@ -3501,114 +3846,179 @@ namespace Catch { showDurations( ShowDurations::DefaultForReporter ), runOrder( RunTests::InDeclarationOrder ), useColour( UseColour::Auto ) - {} + {} - bool listTests; - bool listTags; - bool listReporters; - bool listTestNamesOnly; - - bool showSuccessfulTests; - bool shouldDebugBreak; - bool noThrow; - bool showHelp; - bool showInvisibles; - bool filenamesAsTags; - - int abortAfter; - unsigned int rngSeed; - - Verbosity::Level verbosity; - WarnAbout::What warnings; - ShowDurations::OrNot showDurations; - RunTests::InWhatOrder runOrder; - UseColour::YesOrNo useColour; - - std::string outputFilename; - std::string name; - std::string processName; - - std::vector reporterNames; - std::vector testsOrTags; - }; + bool listTests; + bool listTags; + bool listReporters; + bool listTestNamesOnly; + + bool showSuccessfulTests; + bool shouldDebugBreak; + bool noThrow; + bool showHelp; + bool showInvisibles; + bool filenamesAsTags; + + int abortAfter; + unsigned int rngSeed; + + Verbosity::Level verbosity; + WarnAbout::What warnings; + ShowDurations::OrNot showDurations; + RunTests::InWhatOrder runOrder; + UseColour::YesOrNo useColour; + + std::string outputFilename; + std::string name; + std::string processName; + + std::vector reporterNames; + std::vector testsOrTags; +}; - class Config : public SharedImpl { - private: - Config( Config const& other ); - Config& operator = ( Config const& other ); - virtual void dummy(); - public: +class Config : public SharedImpl { +private: + Config( Config const &other ); + Config &operator = ( Config const &other ); + virtual void dummy(); +public: - Config() - {} + Config() + {} - Config( ConfigData const& data ) + Config( ConfigData const &data ) : m_data( data ), m_stream( openStream() ) - { - if( !data.testsOrTags.empty() ) { - TestSpecParser parser( ITagAliasRegistry::get() ); - for( std::size_t i = 0; i < data.testsOrTags.size(); ++i ) - parser.parse( data.testsOrTags[i] ); - m_testSpec = parser.testSpec(); + { + if ( !data.testsOrTags.empty() ) { + TestSpecParser parser( ITagAliasRegistry::get() ); + for ( std::size_t i = 0; i < data.testsOrTags.size(); ++i ) { + parser.parse( data.testsOrTags[i] ); } + m_testSpec = parser.testSpec(); } + } - virtual ~Config() { - } + virtual ~Config() + { + } - std::string const& getFilename() const { - return m_data.outputFilename ; - } + std::string const &getFilename() const + { + return m_data.outputFilename ; + } - bool listTests() const { return m_data.listTests; } - bool listTestNamesOnly() const { return m_data.listTestNamesOnly; } - bool listTags() const { return m_data.listTags; } - bool listReporters() const { return m_data.listReporters; } + bool listTests() const + { + return m_data.listTests; + } + bool listTestNamesOnly() const + { + return m_data.listTestNamesOnly; + } + bool listTags() const + { + return m_data.listTags; + } + bool listReporters() const + { + return m_data.listReporters; + } - std::string getProcessName() const { return m_data.processName; } + std::string getProcessName() const + { + return m_data.processName; + } - bool shouldDebugBreak() const { return m_data.shouldDebugBreak; } + bool shouldDebugBreak() const + { + return m_data.shouldDebugBreak; + } - std::vector getReporterNames() const { return m_data.reporterNames; } + std::vector getReporterNames() const + { + return m_data.reporterNames; + } - int abortAfter() const { return m_data.abortAfter; } + int abortAfter() const + { + return m_data.abortAfter; + } - TestSpec const& testSpec() const { return m_testSpec; } + TestSpec const &testSpec() const + { + return m_testSpec; + } - bool showHelp() const { return m_data.showHelp; } - bool showInvisibles() const { return m_data.showInvisibles; } + bool showHelp() const + { + return m_data.showHelp; + } + bool showInvisibles() const + { + return m_data.showInvisibles; + } - // IConfig interface - virtual bool allowThrows() const { return !m_data.noThrow; } - virtual std::ostream& stream() const { return m_stream->stream(); } - virtual std::string name() const { return m_data.name.empty() ? m_data.processName : m_data.name; } - virtual bool includeSuccessfulResults() const { return m_data.showSuccessfulTests; } - virtual bool warnAboutMissingAssertions() const { return m_data.warnings & WarnAbout::NoAssertions; } - virtual ShowDurations::OrNot showDurations() const { return m_data.showDurations; } - virtual RunTests::InWhatOrder runOrder() const { return m_data.runOrder; } - virtual unsigned int rngSeed() const { return m_data.rngSeed; } - virtual UseColour::YesOrNo useColour() const { return m_data.useColour; } + // IConfig interface + virtual bool allowThrows() const + { + return !m_data.noThrow; + } + virtual std::ostream &stream() const + { + return m_stream->stream(); + } + virtual std::string name() const + { + return m_data.name.empty() ? m_data.processName : m_data.name; + } + virtual bool includeSuccessfulResults() const + { + return m_data.showSuccessfulTests; + } + virtual bool warnAboutMissingAssertions() const + { + return m_data.warnings & WarnAbout::NoAssertions; + } + virtual ShowDurations::OrNot showDurations() const + { + return m_data.showDurations; + } + virtual RunTests::InWhatOrder runOrder() const + { + return m_data.runOrder; + } + virtual unsigned int rngSeed() const + { + return m_data.rngSeed; + } + virtual UseColour::YesOrNo useColour() const + { + return m_data.useColour; + } - private: +private: - IStream const* openStream() { - if( m_data.outputFilename.empty() ) - return new CoutStream(); - else if( m_data.outputFilename[0] == '%' ) { - if( m_data.outputFilename == "%debug" ) - return new DebugOutStream(); - else - throw std::domain_error( "Unrecognised stream: " + m_data.outputFilename ); + IStream const *openStream() + { + if ( m_data.outputFilename.empty() ) { + return new CoutStream(); + } else if ( m_data.outputFilename[0] == '%' ) { + if ( m_data.outputFilename == "%debug" ) { + return new DebugOutStream(); + } else { + throw std::domain_error( "Unrecognised stream: " + m_data.outputFilename ); } - else - return new FileStream( m_data.outputFilename ); + } else { + return new FileStream( m_data.outputFilename ); } - ConfigData m_data; + } + ConfigData m_data; - CATCH_AUTO_PTR( IStream const ) m_stream; - TestSpec m_testSpec; - }; + CATCH_AUTO_PTR( IStream const ) m_stream; + TestSpec m_testSpec; +}; } // end namespace Catch @@ -3662,121 +4072,158 @@ namespace STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE { namespace Tbc { #ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH - const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; #else - const unsigned int consoleWidth = 80; +const unsigned int consoleWidth = 80; #endif - struct TextAttributes { - TextAttributes() +struct TextAttributes { + TextAttributes() : initialIndent( std::string::npos ), indent( 0 ), - width( consoleWidth-1 ), + width( consoleWidth - 1 ), tabChar( '\t' ) - {} + {} - TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } - TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } - TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } - TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } + TextAttributes &setInitialIndent( std::size_t _value ) + { + initialIndent = _value; + return *this; + } + TextAttributes &setIndent( std::size_t _value ) + { + indent = _value; + return *this; + } + TextAttributes &setWidth( std::size_t _value ) + { + width = _value; + return *this; + } + TextAttributes &setTabChar( char _value ) + { + tabChar = _value; + return *this; + } - std::size_t initialIndent; // indent of first line, or npos - std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos - std::size_t width; // maximum width of text, including indent. Longer text will wrap - char tabChar; // If this char is seen the indent is changed to current pos - }; + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + char tabChar; // If this char is seen the indent is changed to current pos +}; - class Text { - public: - Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) +class Text { +public: + Text( std::string const &_str, TextAttributes const &_attr = TextAttributes() ) : attr( _attr ) - { - std::string wrappableChars = " [({.,/|\\-"; - std::size_t indent = _attr.initialIndent != std::string::npos - ? _attr.initialIndent - : _attr.indent; - std::string remainder = _str; - - while( !remainder.empty() ) { - if( lines.size() >= 1000 ) { - lines.push_back( "... message truncated due to excessive size" ); - return; - } - std::size_t tabPos = std::string::npos; - std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); - std::size_t pos = remainder.find_first_of( '\n' ); - if( pos <= width ) { - width = pos; - } - pos = remainder.find_last_of( _attr.tabChar, width ); - if( pos != std::string::npos ) { - tabPos = pos; - if( remainder[width] == '\n' ) - width--; - remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); + { + std::string wrappableChars = " [({.,/|\\-"; + std::size_t indent = _attr.initialIndent != std::string::npos + ? _attr.initialIndent + : _attr.indent; + std::string remainder = _str; + + while ( !remainder.empty() ) { + if ( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + std::size_t tabPos = std::string::npos; + std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); + std::size_t pos = remainder.find_first_of( '\n' ); + if ( pos <= width ) { + width = pos; + } + pos = remainder.find_last_of( _attr.tabChar, width ); + if ( pos != std::string::npos ) { + tabPos = pos; + if ( remainder[width] == '\n' ) { + width--; } + remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos + 1 ); + } - if( width == remainder.size() ) { - spliceLine( indent, remainder, width ); + if ( width == remainder.size() ) { + spliceLine( indent, remainder, width ); + } else if ( remainder[width] == '\n' ) { + spliceLine( indent, remainder, width ); + if ( width <= 1 || remainder.size() != 1 ) { + remainder = remainder.substr( 1 ); } - else if( remainder[width] == '\n' ) { - spliceLine( indent, remainder, width ); - if( width <= 1 || remainder.size() != 1 ) + indent = _attr.indent; + } else { + pos = remainder.find_last_of( wrappableChars, width ); + if ( pos != std::string::npos && pos > 0 ) { + spliceLine( indent, remainder, pos ); + if ( remainder[0] == ' ' ) { remainder = remainder.substr( 1 ); + } + } else { + spliceLine( indent, remainder, width - 1 ); + lines.back() += "-"; + } + if ( lines.size() == 1 ) { indent = _attr.indent; } - else { - pos = remainder.find_last_of( wrappableChars, width ); - if( pos != std::string::npos && pos > 0 ) { - spliceLine( indent, remainder, pos ); - if( remainder[0] == ' ' ) - remainder = remainder.substr( 1 ); - } - else { - spliceLine( indent, remainder, width-1 ); - lines.back() += "-"; - } - if( lines.size() == 1 ) - indent = _attr.indent; - if( tabPos != std::string::npos ) - indent += tabPos; + if ( tabPos != std::string::npos ) { + indent += tabPos; } } } + } - void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { - lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); - _remainder = _remainder.substr( _pos ); - } + void spliceLine( std::size_t _indent, std::string &_remainder, std::size_t _pos ) + { + lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); + _remainder = _remainder.substr( _pos ); + } - typedef std::vector::const_iterator const_iterator; + typedef std::vector::const_iterator const_iterator; - const_iterator begin() const { return lines.begin(); } - const_iterator end() const { return lines.end(); } - std::string const& last() const { return lines.back(); } - std::size_t size() const { return lines.size(); } - std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } - std::string toString() const { - std::ostringstream oss; - oss << *this; - return oss.str(); - } + const_iterator begin() const + { + return lines.begin(); + } + const_iterator end() const + { + return lines.end(); + } + std::string const &last() const + { + return lines.back(); + } + std::size_t size() const + { + return lines.size(); + } + std::string const &operator[]( std::size_t _index ) const + { + return lines[_index]; + } + std::string toString() const + { + std::ostringstream oss; + oss << *this; + return oss.str(); + } - inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { - for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + inline friend std::ostream &operator << ( std::ostream &_stream, Text const &_text ) + { + for ( Text::const_iterator it = _text.begin(), itEnd = _text.end(); it != itEnd; ++it ) { - if( it != _text.begin() ) - _stream << "\n"; - _stream << *it; + if ( it != _text.begin() ) { + _stream << "\n"; } - return _stream; + _stream << *it; } + return _stream; + } - private: - std::string str; - TextAttributes attr; - std::vector lines; - }; +private: + std::string str; + TextAttributes attr; + std::vector lines; +}; } // end namespace Tbc @@ -3953,683 +4400,824 @@ STITCH_CLARA_OPEN_NAMESPACE namespace Clara { - struct UnpositionalTag {}; +struct UnpositionalTag {}; - extern UnpositionalTag _; +extern UnpositionalTag _; #ifdef CLARA_CONFIG_MAIN - UnpositionalTag _; +UnpositionalTag _; #endif - namespace Detail { +namespace Detail { #ifdef CLARA_CONSOLE_WIDTH - const unsigned int consoleWidth = CLARA_CONFIG_CONSOLE_WIDTH; +const unsigned int consoleWidth = CLARA_CONFIG_CONSOLE_WIDTH; #else - const unsigned int consoleWidth = 80; +const unsigned int consoleWidth = 80; #endif - using namespace Tbc; +using namespace Tbc; - inline bool startsWith( std::string const& str, std::string const& prefix ) { - return str.size() >= prefix.size() && str.substr( 0, prefix.size() ) == prefix; - } +inline bool startsWith( std::string const &str, std::string const &prefix ) +{ + return str.size() >= prefix.size() && str.substr( 0, prefix.size() ) == prefix; +} + +template struct RemoveConstRef { + typedef T type; +}; +template struct RemoveConstRef { + typedef T type; +}; +template struct RemoveConstRef { + typedef T type; +}; +template struct RemoveConstRef { + typedef T type; +}; - template struct RemoveConstRef{ typedef T type; }; - template struct RemoveConstRef{ typedef T type; }; - template struct RemoveConstRef{ typedef T type; }; - template struct RemoveConstRef{ typedef T type; }; +template struct IsBool { + static const bool value = false; +}; +template<> struct IsBool { + static const bool value = true; +}; - template struct IsBool { static const bool value = false; }; - template<> struct IsBool { static const bool value = true; }; +template +void convertInto( std::string const &_source, T &_dest ) +{ + std::stringstream ss; + ss << _source; + ss >> _dest; + if ( ss.fail() ) { + throw std::runtime_error( "Unable to convert " + _source + " to destination type" ); + } +} +inline void convertInto( std::string const &_source, std::string &_dest ) +{ + _dest = _source; +} +inline void convertInto( std::string const &_source, bool &_dest ) +{ + std::string sourceLC = _source; + std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), ::tolower ); + if ( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) { + _dest = true; + } else if ( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) { + _dest = false; + } else { + throw std::runtime_error( "Expected a boolean value but did not recognise:\n '" + _source + "'" ); + } +} - template - void convertInto( std::string const& _source, T& _dest ) { - std::stringstream ss; - ss << _source; - ss >> _dest; - if( ss.fail() ) - throw std::runtime_error( "Unable to convert " + _source + " to destination type" ); - } - inline void convertInto( std::string const& _source, std::string& _dest ) { - _dest = _source; - } - inline void convertInto( std::string const& _source, bool& _dest ) { - std::string sourceLC = _source; - std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), ::tolower ); - if( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) - _dest = true; - else if( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) - _dest = false; - else - throw std::runtime_error( "Expected a boolean value but did not recognise:\n '" + _source + "'" ); - } - - template - struct IArgFunction { - virtual ~IArgFunction() {} +template +struct IArgFunction { + virtual ~IArgFunction() {} #ifdef CLARA_CONFIG_CPP11_GENERATED_METHODS - IArgFunction() = default; - IArgFunction( IArgFunction const& ) = default; -#endif - virtual void set( ConfigT& config, std::string const& value ) const = 0; - virtual bool takesArg() const = 0; - virtual IArgFunction* clone() const = 0; - }; - - template - class BoundArgFunction { - public: - BoundArgFunction() : functionObj( CLARA_NULL ) {} - BoundArgFunction( IArgFunction* _functionObj ) : functionObj( _functionObj ) {} - BoundArgFunction( BoundArgFunction const& other ) : functionObj( other.functionObj ? other.functionObj->clone() : CLARA_NULL ) {} - BoundArgFunction& operator = ( BoundArgFunction const& other ) { - IArgFunction* newFunctionObj = other.functionObj ? other.functionObj->clone() : CLARA_NULL; - delete functionObj; - functionObj = newFunctionObj; - return *this; - } - ~BoundArgFunction() { delete functionObj; } + IArgFunction() = default; + IArgFunction( IArgFunction const & ) = default; +#endif + virtual void set( ConfigT &config, std::string const &value ) const = 0; + virtual bool takesArg() const = 0; + virtual IArgFunction *clone() const = 0; +}; - void set( ConfigT& config, std::string const& value ) const { - functionObj->set( config, value ); - } - bool takesArg() const { return functionObj->takesArg(); } +template +class BoundArgFunction { +public: + BoundArgFunction() : functionObj( CLARA_NULL ) {} + BoundArgFunction( IArgFunction *_functionObj ) : functionObj( _functionObj ) {} + BoundArgFunction( BoundArgFunction const &other ) : functionObj( other.functionObj ? other.functionObj->clone() : CLARA_NULL ) {} + BoundArgFunction &operator = ( BoundArgFunction const &other ) + { + IArgFunction *newFunctionObj = other.functionObj ? other.functionObj->clone() : CLARA_NULL; + delete functionObj; + functionObj = newFunctionObj; + return *this; + } + ~BoundArgFunction() + { + delete functionObj; + } - bool isSet() const { - return functionObj != CLARA_NULL; - } - private: - IArgFunction* functionObj; - }; + void set( ConfigT &config, std::string const &value ) const + { + functionObj->set( config, value ); + } + bool takesArg() const + { + return functionObj->takesArg(); + } - template - struct NullBinder : IArgFunction{ - virtual void set( C&, std::string const& ) const {} - virtual bool takesArg() const { return true; } - virtual IArgFunction* clone() const { return new NullBinder( *this ); } - }; + bool isSet() const + { + return functionObj != CLARA_NULL; + } +private: + IArgFunction *functionObj; +}; - template - struct BoundDataMember : IArgFunction{ - BoundDataMember( M C::* _member ) : member( _member ) {} - virtual void set( C& p, std::string const& stringValue ) const { - convertInto( stringValue, p.*member ); - } - virtual bool takesArg() const { return !IsBool::value; } - virtual IArgFunction* clone() const { return new BoundDataMember( *this ); } - M C::* member; - }; - template - struct BoundUnaryMethod : IArgFunction{ - BoundUnaryMethod( void (C::*_member)( M ) ) : member( _member ) {} - virtual void set( C& p, std::string const& stringValue ) const { - typename RemoveConstRef::type value; - convertInto( stringValue, value ); - (p.*member)( value ); - } - virtual bool takesArg() const { return !IsBool::value; } - virtual IArgFunction* clone() const { return new BoundUnaryMethod( *this ); } - void (C::*member)( M ); - }; - template - struct BoundNullaryMethod : IArgFunction{ - BoundNullaryMethod( void (C::*_member)() ) : member( _member ) {} - virtual void set( C& p, std::string const& stringValue ) const { - bool value; - convertInto( stringValue, value ); - if( value ) - (p.*member)(); - } - virtual bool takesArg() const { return false; } - virtual IArgFunction* clone() const { return new BoundNullaryMethod( *this ); } - void (C::*member)(); - }; +template +struct NullBinder : IArgFunction { + virtual void set( C &, std::string const & ) const {} + virtual bool takesArg() const + { + return true; + } + virtual IArgFunction *clone() const + { + return new NullBinder( *this ); + } +}; - template - struct BoundUnaryFunction : IArgFunction{ - BoundUnaryFunction( void (*_function)( C& ) ) : function( _function ) {} - virtual void set( C& obj, std::string const& stringValue ) const { - bool value; - convertInto( stringValue, value ); - if( value ) - function( obj ); - } - virtual bool takesArg() const { return false; } - virtual IArgFunction* clone() const { return new BoundUnaryFunction( *this ); } - void (*function)( C& ); - }; +template +struct BoundDataMember : IArgFunction { + BoundDataMember( M C::* _member ) : member( _member ) {} + virtual void set( C &p, std::string const &stringValue ) const + { + convertInto( stringValue, p.*member ); + } + virtual bool takesArg() const + { + return !IsBool::value; + } + virtual IArgFunction *clone() const + { + return new BoundDataMember( *this ); + } + M C::*member; +}; +template +struct BoundUnaryMethod : IArgFunction { + BoundUnaryMethod( void (C::*_member)( M ) ) : member( _member ) {} + virtual void set( C &p, std::string const &stringValue ) const + { + typename RemoveConstRef::type value; + convertInto( stringValue, value ); + (p.*member)( value ); + } + virtual bool takesArg() const + { + return !IsBool::value; + } + virtual IArgFunction *clone() const + { + return new BoundUnaryMethod( *this ); + } + void (C::*member)( M ); +}; +template +struct BoundNullaryMethod : IArgFunction { + BoundNullaryMethod( void (C::*_member)() ) : member( _member ) {} + virtual void set( C &p, std::string const &stringValue ) const + { + bool value; + convertInto( stringValue, value ); + if ( value ) { + (p.*member)(); + } + } + virtual bool takesArg() const + { + return false; + } + virtual IArgFunction *clone() const + { + return new BoundNullaryMethod( *this ); + } + void (C::*member)(); +}; - template - struct BoundBinaryFunction : IArgFunction{ - BoundBinaryFunction( void (*_function)( C&, T ) ) : function( _function ) {} - virtual void set( C& obj, std::string const& stringValue ) const { - typename RemoveConstRef::type value; - convertInto( stringValue, value ); - function( obj, value ); - } - virtual bool takesArg() const { return !IsBool::value; } - virtual IArgFunction* clone() const { return new BoundBinaryFunction( *this ); } - void (*function)( C&, T ); - }; +template +struct BoundUnaryFunction : IArgFunction { + BoundUnaryFunction( void (*_function)( C & ) ) : function( _function ) {} + virtual void set( C &obj, std::string const &stringValue ) const + { + bool value; + convertInto( stringValue, value ); + if ( value ) { + function( obj ); + } + } + virtual bool takesArg() const + { + return false; + } + virtual IArgFunction *clone() const + { + return new BoundUnaryFunction( *this ); + } + void (*function)( C & ); +}; - } // namespace Detail +template +struct BoundBinaryFunction : IArgFunction { + BoundBinaryFunction( void (*_function)( C &, T ) ) : function( _function ) {} + virtual void set( C &obj, std::string const &stringValue ) const + { + typename RemoveConstRef::type value; + convertInto( stringValue, value ); + function( obj, value ); + } + virtual bool takesArg() const + { + return !IsBool::value; + } + virtual IArgFunction *clone() const + { + return new BoundBinaryFunction( *this ); + } + void (*function)( C &, T ); +}; - inline std::vector argsToVector( int argc, char const* const* const argv ) { - std::vector args( static_cast( argc ) ); - for( std::size_t i = 0; i < static_cast( argc ); ++i ) - args[i] = argv[i]; +} // namespace Detail - return args; +inline std::vector argsToVector( int argc, char const *const *const argv ) +{ + std::vector args( static_cast( argc ) ); + for ( std::size_t i = 0; i < static_cast( argc ); ++i ) { + args[i] = argv[i]; } - class Parser { - enum Mode { None, MaybeShortOpt, SlashOpt, ShortOpt, LongOpt, Positional }; - Mode mode; - std::size_t from; - bool inQuotes; - public: + return args; +} + +class Parser { + enum Mode { None, MaybeShortOpt, SlashOpt, ShortOpt, LongOpt, Positional }; + Mode mode; + std::size_t from; + bool inQuotes; +public: - struct Token { - enum Type { Positional, ShortOpt, LongOpt }; - Token( Type _type, std::string const& _data ) : type( _type ), data( _data ) {} - Type type; - std::string data; - }; + struct Token { + enum Type { Positional, ShortOpt, LongOpt }; + Token( Type _type, std::string const &_data ) : type( _type ), data( _data ) {} + Type type; + std::string data; + }; - Parser() : mode( None ), from( 0 ), inQuotes( false ){} + Parser() : mode( None ), from( 0 ), inQuotes( false ) {} - void parseIntoTokens( std::vector const& args, std::vector& tokens ) { - const std::string doubleDash = "--"; - for( std::size_t i = 1; i < args.size() && args[i] != doubleDash; ++i ) - parseIntoTokens( args[i], tokens); + void parseIntoTokens( std::vector const &args, std::vector &tokens ) + { + const std::string doubleDash = "--"; + for ( std::size_t i = 1; i < args.size() && args[i] != doubleDash; ++i ) { + parseIntoTokens( args[i], tokens); } + } - void parseIntoTokens( std::string const& arg, std::vector& tokens ) { - for( std::size_t i = 0; i <= arg.size(); ++i ) { - char c = arg[i]; - if( c == '"' ) - inQuotes = !inQuotes; - mode = handleMode( i, c, arg, tokens ); + void parseIntoTokens( std::string const &arg, std::vector &tokens ) + { + for ( std::size_t i = 0; i <= arg.size(); ++i ) { + char c = arg[i]; + if ( c == '"' ) { + inQuotes = !inQuotes; } + mode = handleMode( i, c, arg, tokens ); } - Mode handleMode( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { - switch( mode ) { - case None: return handleNone( i, c ); - case MaybeShortOpt: return handleMaybeShortOpt( i, c ); - case ShortOpt: - case LongOpt: - case SlashOpt: return handleOpt( i, c, arg, tokens ); - case Positional: return handlePositional( i, c, arg, tokens ); - default: throw std::logic_error( "Unknown mode" ); - } + } + Mode handleMode( std::size_t i, char c, std::string const &arg, std::vector &tokens ) + { + switch ( mode ) { + case None: return handleNone( i, c ); + case MaybeShortOpt: return handleMaybeShortOpt( i, c ); + case ShortOpt: + case LongOpt: + case SlashOpt: return handleOpt( i, c, arg, tokens ); + case Positional: return handlePositional( i, c, arg, tokens ); + default: throw std::logic_error( "Unknown mode" ); } + } - Mode handleNone( std::size_t i, char c ) { - if( inQuotes ) { - from = i; - return Positional; - } - switch( c ) { - case '-': return MaybeShortOpt; + Mode handleNone( std::size_t i, char c ) + { + if ( inQuotes ) { + from = i; + return Positional; + } + switch ( c ) { + case '-': return MaybeShortOpt; #ifdef CLARA_PLATFORM_WINDOWS - case '/': from = i+1; return SlashOpt; + case '/': from = i + 1; return SlashOpt; #endif - default: from = i; return Positional; - } + default: from = i; return Positional; } - Mode handleMaybeShortOpt( std::size_t i, char c ) { - switch( c ) { - case '-': from = i+1; return LongOpt; - default: from = i; return ShortOpt; - } + } + Mode handleMaybeShortOpt( std::size_t i, char c ) + { + switch ( c ) { + case '-': from = i + 1; return LongOpt; + default: from = i; return ShortOpt; } - Mode handleOpt( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { - if( std::string( ":=\0", 3 ).find( c ) == std::string::npos ) - return mode; - - std::string optName = arg.substr( from, i-from ); - if( mode == ShortOpt ) - for( std::size_t j = 0; j < optName.size(); ++j ) - tokens.push_back( Token( Token::ShortOpt, optName.substr( j, 1 ) ) ); - else if( mode == SlashOpt && optName.size() == 1 ) - tokens.push_back( Token( Token::ShortOpt, optName ) ); - else - tokens.push_back( Token( Token::LongOpt, optName ) ); - return None; + } + Mode handleOpt( std::size_t i, char c, std::string const &arg, std::vector &tokens ) + { + if ( std::string( ":=\0", 3 ).find( c ) == std::string::npos ) { + return mode; } - Mode handlePositional( std::size_t i, char c, std::string const& arg, std::vector& tokens ) { - if( inQuotes || std::string( "\0", 1 ).find( c ) == std::string::npos ) - return mode; - std::string data = arg.substr( from, i-from ); - tokens.push_back( Token( Token::Positional, data ) ); - return None; + std::string optName = arg.substr( from, i - from ); + if ( mode == ShortOpt ) + for ( std::size_t j = 0; j < optName.size(); ++j ) { + tokens.push_back( Token( Token::ShortOpt, optName.substr( j, 1 ) ) ); + } else if ( mode == SlashOpt && optName.size() == 1 ) { + tokens.push_back( Token( Token::ShortOpt, optName ) ); + } else { + tokens.push_back( Token( Token::LongOpt, optName ) ); + } + return None; + } + Mode handlePositional( std::size_t i, char c, std::string const &arg, std::vector &tokens ) + { + if ( inQuotes || std::string( "\0", 1 ).find( c ) == std::string::npos ) { + return mode; } - }; - template - struct CommonArgProperties { - CommonArgProperties() {} - CommonArgProperties( Detail::BoundArgFunction const& _boundField ) : boundField( _boundField ) {} + std::string data = arg.substr( from, i - from ); + tokens.push_back( Token( Token::Positional, data ) ); + return None; + } +}; - Detail::BoundArgFunction boundField; - std::string description; - std::string detail; - std::string placeholder; // Only value if boundField takes an arg +template +struct CommonArgProperties { + CommonArgProperties() {} + CommonArgProperties( Detail::BoundArgFunction const &_boundField ) : boundField( _boundField ) {} - bool takesArg() const { - return !placeholder.empty(); - } - void validate() const { - if( !boundField.isSet() ) - throw std::logic_error( "option not bound" ); - } - }; - struct OptionArgProperties { - std::vector shortNames; - std::string longName; + Detail::BoundArgFunction boundField; + std::string description; + std::string detail; + std::string placeholder; // Only value if boundField takes an arg - bool hasShortName( std::string const& shortName ) const { - return std::find( shortNames.begin(), shortNames.end(), shortName ) != shortNames.end(); - } - bool hasLongName( std::string const& _longName ) const { - return _longName == longName; + bool takesArg() const + { + return !placeholder.empty(); + } + void validate() const + { + if ( !boundField.isSet() ) { + throw std::logic_error( "option not bound" ); } - }; - struct PositionalArgProperties { - PositionalArgProperties() : position( -1 ) {} - int position; // -1 means non-positional (floating) + } +}; +struct OptionArgProperties { + std::vector shortNames; + std::string longName; - bool isFixedPositional() const { - return position != -1; - } - }; + bool hasShortName( std::string const &shortName ) const + { + return std::find( shortNames.begin(), shortNames.end(), shortName ) != shortNames.end(); + } + bool hasLongName( std::string const &_longName ) const + { + return _longName == longName; + } +}; +struct PositionalArgProperties { + PositionalArgProperties() : position( -1 ) {} + int position; // -1 means non-positional (floating) + + bool isFixedPositional() const + { + return position != -1; + } +}; - template - class CommandLine { +template +class CommandLine { - struct Arg : CommonArgProperties, OptionArgProperties, PositionalArgProperties { - Arg() {} - Arg( Detail::BoundArgFunction const& _boundField ) : CommonArgProperties( _boundField ) {} +struct Arg : CommonArgProperties, OptionArgProperties, PositionalArgProperties { + Arg() {} + Arg( Detail::BoundArgFunction const &_boundField ) : CommonArgProperties( _boundField ) {} - using CommonArgProperties::placeholder; // !TBD + using CommonArgProperties::placeholder; // !TBD - std::string dbgName() const { - if( !longName.empty() ) - return "--" + longName; - if( !shortNames.empty() ) - return "-" + shortNames[0]; - return "positional args"; + std::string dbgName() const + { + if ( !longName.empty() ) { + return "--" + longName; + } + if ( !shortNames.empty() ) { + return "-" + shortNames[0]; + } + return "positional args"; + } + std::string commands() const + { + std::ostringstream oss; + bool first = true; + std::vector::const_iterator it = shortNames.begin(), itEnd = shortNames.end(); + for (; it != itEnd; ++it ) { + if ( first ) { + first = false; + } else { + oss << ", "; } - std::string commands() const { - std::ostringstream oss; - bool first = true; - std::vector::const_iterator it = shortNames.begin(), itEnd = shortNames.end(); - for(; it != itEnd; ++it ) { - if( first ) - first = false; - else - oss << ", "; - oss << "-" << *it; - } - if( !longName.empty() ) { - if( !first ) - oss << ", "; - oss << "--" << longName; - } - if( !placeholder.empty() ) - oss << " <" << placeholder << ">"; - return oss.str(); + oss << "-" << *it; + } + if ( !longName.empty() ) { + if ( !first ) { + oss << ", "; } - }; + oss << "--" << longName; + } + if ( !placeholder.empty() ) { + oss << " <" << placeholder << ">"; + } + return oss.str(); + } + }; + + typedef CLARA_AUTO_PTR( Arg ) ArgAutoPtr; + + friend void addOptName( Arg &arg, std::string const &optName ) + { + if ( optName.empty() ) { + return; + } + if ( Detail::startsWith( optName, "--" ) ) { + if ( !arg.longName.empty() ) + throw std::logic_error( "Only one long opt may be specified. '" + + arg.longName + + "' already specified, now attempting to add '" + + optName + "'" ); + arg.longName = optName.substr( 2 ); + } else if ( Detail::startsWith( optName, "-" ) ) { + arg.shortNames.push_back( optName.substr( 1 ) ); + } else { + throw std::logic_error( "option must begin with - or --. Option was: '" + optName + "'" ); + } + } + friend void setPositionalArg( Arg &arg, int position ) + { + arg.position = position; + } - typedef CLARA_AUTO_PTR( Arg ) ArgAutoPtr; + class ArgBuilder { + public: + ArgBuilder( Arg *arg ) : m_arg( arg ) {} - friend void addOptName( Arg& arg, std::string const& optName ) + // Bind a non-boolean data member (requires placeholder string) + template + void bind( M C::* field, std::string const &placeholder ) { - if( optName.empty() ) - return; - if( Detail::startsWith( optName, "--" ) ) { - if( !arg.longName.empty() ) - throw std::logic_error( "Only one long opt may be specified. '" - + arg.longName - + "' already specified, now attempting to add '" - + optName + "'" ); - arg.longName = optName.substr( 2 ); - } - else if( Detail::startsWith( optName, "-" ) ) - arg.shortNames.push_back( optName.substr( 1 ) ); - else - throw std::logic_error( "option must begin with - or --. Option was: '" + optName + "'" ); + m_arg->boundField = new Detail::BoundDataMember( field ); + m_arg->placeholder = placeholder; } - friend void setPositionalArg( Arg& arg, int position ) + // Bind a boolean data member (no placeholder required) + template + void bind( bool C::* field ) { - arg.position = position; + m_arg->boundField = new Detail::BoundDataMember( field ); } - class ArgBuilder { - public: - ArgBuilder( Arg* arg ) : m_arg( arg ) {} - - // Bind a non-boolean data member (requires placeholder string) - template - void bind( M C::* field, std::string const& placeholder ) { - m_arg->boundField = new Detail::BoundDataMember( field ); - m_arg->placeholder = placeholder; - } - // Bind a boolean data member (no placeholder required) - template - void bind( bool C::* field ) { - m_arg->boundField = new Detail::BoundDataMember( field ); - } - - // Bind a method taking a single, non-boolean argument (requires a placeholder string) - template - void bind( void (C::* unaryMethod)( M ), std::string const& placeholder ) { - m_arg->boundField = new Detail::BoundUnaryMethod( unaryMethod ); - m_arg->placeholder = placeholder; - } + // Bind a method taking a single, non-boolean argument (requires a placeholder string) + template + void bind( void (C::* unaryMethod)( M ), std::string const &placeholder ) + { + m_arg->boundField = new Detail::BoundUnaryMethod( unaryMethod ); + m_arg->placeholder = placeholder; + } - // Bind a method taking a single, boolean argument (no placeholder string required) - template - void bind( void (C::* unaryMethod)( bool ) ) { - m_arg->boundField = new Detail::BoundUnaryMethod( unaryMethod ); - } + // Bind a method taking a single, boolean argument (no placeholder string required) + template + void bind( void (C::* unaryMethod)( bool ) ) + { + m_arg->boundField = new Detail::BoundUnaryMethod( unaryMethod ); + } - // Bind a method that takes no arguments (will be called if opt is present) - template - void bind( void (C::* nullaryMethod)() ) { - m_arg->boundField = new Detail::BoundNullaryMethod( nullaryMethod ); - } + // Bind a method that takes no arguments (will be called if opt is present) + template + void bind( void (C::* nullaryMethod)() ) + { + m_arg->boundField = new Detail::BoundNullaryMethod( nullaryMethod ); + } - // Bind a free function taking a single argument - the object to operate on (no placeholder string required) - template - void bind( void (* unaryFunction)( C& ) ) { - m_arg->boundField = new Detail::BoundUnaryFunction( unaryFunction ); - } + // Bind a free function taking a single argument - the object to operate on (no placeholder string required) + template + void bind( void (* unaryFunction)( C & ) ) + { + m_arg->boundField = new Detail::BoundUnaryFunction( unaryFunction ); + } - // Bind a free function taking a single argument - the object to operate on (requires a placeholder string) - template - void bind( void (* binaryFunction)( C&, T ), std::string const& placeholder ) { - m_arg->boundField = new Detail::BoundBinaryFunction( binaryFunction ); - m_arg->placeholder = placeholder; - } + // Bind a free function taking a single argument - the object to operate on (requires a placeholder string) + template + void bind( void (* binaryFunction)( C &, T ), std::string const &placeholder ) + { + m_arg->boundField = new Detail::BoundBinaryFunction( binaryFunction ); + m_arg->placeholder = placeholder; + } - ArgBuilder& describe( std::string const& description ) { - m_arg->description = description; - return *this; - } - ArgBuilder& detail( std::string const& detail ) { - m_arg->detail = detail; - return *this; - } + ArgBuilder &describe( std::string const &description ) + { + m_arg->description = description; + return *this; + } + ArgBuilder &detail( std::string const &detail ) + { + m_arg->detail = detail; + return *this; + } - protected: - Arg* m_arg; - }; + protected: + Arg *m_arg; + }; - class OptBuilder : public ArgBuilder { - public: - OptBuilder( Arg* arg ) : ArgBuilder( arg ) {} - OptBuilder( OptBuilder& other ) : ArgBuilder( other ) {} + class OptBuilder : public ArgBuilder { + public: + OptBuilder( Arg *arg ) : ArgBuilder( arg ) {} + OptBuilder( OptBuilder &other ) : ArgBuilder( other ) {} - OptBuilder& operator[]( std::string const& optName ) { - addOptName( *ArgBuilder::m_arg, optName ); - return *this; - } - }; + OptBuilder &operator[]( std::string const &optName ) + { + addOptName( *ArgBuilder::m_arg, optName ); + return *this; + } + }; - public: +public: - CommandLine() + CommandLine() : m_boundProcessName( new Detail::NullBinder() ), m_highestSpecifiedArgPosition( 0 ), m_throwOnUnrecognisedTokens( false ) - {} - CommandLine( CommandLine const& other ) + {} + CommandLine( CommandLine const &other ) : m_boundProcessName( other.m_boundProcessName ), m_options ( other.m_options ), m_positionalArgs( other.m_positionalArgs ), m_highestSpecifiedArgPosition( other.m_highestSpecifiedArgPosition ), m_throwOnUnrecognisedTokens( other.m_throwOnUnrecognisedTokens ) - { - if( other.m_floatingArg.get() ) - m_floatingArg.reset( new Arg( *other.m_floatingArg ) ); + { + if ( other.m_floatingArg.get() ) { + m_floatingArg.reset( new Arg( *other.m_floatingArg ) ); } + } - CommandLine& setThrowOnUnrecognisedTokens( bool shouldThrow = true ) { - m_throwOnUnrecognisedTokens = shouldThrow; - return *this; - } + CommandLine &setThrowOnUnrecognisedTokens( bool shouldThrow = true ) + { + m_throwOnUnrecognisedTokens = shouldThrow; + return *this; + } - OptBuilder operator[]( std::string const& optName ) { - m_options.push_back( Arg() ); - addOptName( m_options.back(), optName ); - OptBuilder builder( &m_options.back() ); - return builder; - } + OptBuilder operator[]( std::string const &optName ) + { + m_options.push_back( Arg() ); + addOptName( m_options.back(), optName ); + OptBuilder builder( &m_options.back() ); + return builder; + } - ArgBuilder operator[]( int position ) { - m_positionalArgs.insert( std::make_pair( position, Arg() ) ); - if( position > m_highestSpecifiedArgPosition ) - m_highestSpecifiedArgPosition = position; - setPositionalArg( m_positionalArgs[position], position ); - ArgBuilder builder( &m_positionalArgs[position] ); - return builder; + ArgBuilder operator[]( int position ) + { + m_positionalArgs.insert( std::make_pair( position, Arg() ) ); + if ( position > m_highestSpecifiedArgPosition ) { + m_highestSpecifiedArgPosition = position; } + setPositionalArg( m_positionalArgs[position], position ); + ArgBuilder builder( &m_positionalArgs[position] ); + return builder; + } - // Invoke this with the _ instance - ArgBuilder operator[]( UnpositionalTag ) { - if( m_floatingArg.get() ) - throw std::logic_error( "Only one unpositional argument can be added" ); - m_floatingArg.reset( new Arg() ); - ArgBuilder builder( m_floatingArg.get() ); - return builder; + // Invoke this with the _ instance + ArgBuilder operator[]( UnpositionalTag ) + { + if ( m_floatingArg.get() ) { + throw std::logic_error( "Only one unpositional argument can be added" ); } + m_floatingArg.reset( new Arg() ); + ArgBuilder builder( m_floatingArg.get() ); + return builder; + } - template - void bindProcessName( M C::* field ) { - m_boundProcessName = new Detail::BoundDataMember( field ); + template + void bindProcessName( M C::* field ) + { + m_boundProcessName = new Detail::BoundDataMember( field ); + } + template + void bindProcessName( void (C::*_unaryMethod)( M ) ) + { + m_boundProcessName = new Detail::BoundUnaryMethod( _unaryMethod ); + } + + void optUsage( std::ostream &os, std::size_t indent = 0, std::size_t width = Detail::consoleWidth ) const + { + typename std::vector::const_iterator itBegin = m_options.begin(), itEnd = m_options.end(), it; + std::size_t maxWidth = 0; + for ( it = itBegin; it != itEnd; ++it ) { + maxWidth = (std::max)( maxWidth, it->commands().size() ); } - template - void bindProcessName( void (C::*_unaryMethod)( M ) ) { - m_boundProcessName = new Detail::BoundUnaryMethod( _unaryMethod ); - } - - void optUsage( std::ostream& os, std::size_t indent = 0, std::size_t width = Detail::consoleWidth ) const { - typename std::vector::const_iterator itBegin = m_options.begin(), itEnd = m_options.end(), it; - std::size_t maxWidth = 0; - for( it = itBegin; it != itEnd; ++it ) - maxWidth = (std::max)( maxWidth, it->commands().size() ); - - for( it = itBegin; it != itEnd; ++it ) { - Detail::Text usage( it->commands(), Detail::TextAttributes() - .setWidth( maxWidth+indent ) - .setIndent( indent ) ); - Detail::Text desc( it->description, Detail::TextAttributes() - .setWidth( width - maxWidth - 3 ) ); - - for( std::size_t i = 0; i < (std::max)( usage.size(), desc.size() ); ++i ) { - std::string usageCol = i < usage.size() ? usage[i] : ""; - os << usageCol; - - if( i < desc.size() && !desc[i].empty() ) - os << std::string( indent + 2 + maxWidth - usageCol.size(), ' ' ) - << desc[i]; - os << "\n"; - } + + for ( it = itBegin; it != itEnd; ++it ) { + Detail::Text usage( it->commands(), Detail::TextAttributes() + .setWidth( maxWidth + indent ) + .setIndent( indent ) ); + Detail::Text desc( it->description, Detail::TextAttributes() + .setWidth( width - maxWidth - 3 ) ); + + for ( std::size_t i = 0; i < (std::max)( usage.size(), desc.size() ); ++i ) { + std::string usageCol = i < usage.size() ? usage[i] : ""; + os << usageCol; + + if ( i < desc.size() && !desc[i].empty() ) + os << std::string( indent + 2 + maxWidth - usageCol.size(), ' ' ) + << desc[i]; + os << "\n"; } } - std::string optUsage() const { - std::ostringstream oss; - optUsage( oss ); - return oss.str(); - } - - void argSynopsis( std::ostream& os ) const { - for( int i = 1; i <= m_highestSpecifiedArgPosition; ++i ) { - if( i > 1 ) - os << " "; - typename std::map::const_iterator it = m_positionalArgs.find( i ); - if( it != m_positionalArgs.end() ) - os << "<" << it->second.placeholder << ">"; - else if( m_floatingArg.get() ) - os << "<" << m_floatingArg->placeholder << ">"; - else - throw std::logic_error( "non consecutive positional arguments with no floating args" ); + } + std::string optUsage() const + { + std::ostringstream oss; + optUsage( oss ); + return oss.str(); + } + + void argSynopsis( std::ostream &os ) const + { + for ( int i = 1; i <= m_highestSpecifiedArgPosition; ++i ) { + if ( i > 1 ) { + os << " "; } - // !TBD No indication of mandatory args - if( m_floatingArg.get() ) { - if( m_highestSpecifiedArgPosition > 1 ) - os << " "; - os << "[<" << m_floatingArg->placeholder << "> ...]"; + typename std::map::const_iterator it = m_positionalArgs.find( i ); + if ( it != m_positionalArgs.end() ) { + os << "<" << it->second.placeholder << ">"; + } else if ( m_floatingArg.get() ) { + os << "<" << m_floatingArg->placeholder << ">"; + } else { + throw std::logic_error( "non consecutive positional arguments with no floating args" ); } } - std::string argSynopsis() const { - std::ostringstream oss; - argSynopsis( oss ); - return oss.str(); + // !TBD No indication of mandatory args + if ( m_floatingArg.get() ) { + if ( m_highestSpecifiedArgPosition > 1 ) { + os << " "; + } + os << "[<" << m_floatingArg->placeholder << "> ...]"; } + } + std::string argSynopsis() const + { + std::ostringstream oss; + argSynopsis( oss ); + return oss.str(); + } - void usage( std::ostream& os, std::string const& procName ) const { - validate(); - os << "usage:\n " << procName << " "; - argSynopsis( os ); - if( !m_options.empty() ) { - os << " [options]\n\nwhere options are: \n"; - optUsage( os, 2 ); - } - os << "\n"; + void usage( std::ostream &os, std::string const &procName ) const + { + validate(); + os << "usage:\n " << procName << " "; + argSynopsis( os ); + if ( !m_options.empty() ) { + os << " [options]\n\nwhere options are: \n"; + optUsage( os, 2 ); } - std::string usage( std::string const& procName ) const { - std::ostringstream oss; - usage( oss, procName ); - return oss.str(); - } - - ConfigT parse( std::vector const& args ) const { - ConfigT config; - parseInto( args, config ); - return config; - } - - std::vector parseInto( std::vector const& args, ConfigT& config ) const { - std::string processName = args[0]; - std::size_t lastSlash = processName.find_last_of( "/\\" ); - if( lastSlash != std::string::npos ) - processName = processName.substr( lastSlash+1 ); - m_boundProcessName.set( config, processName ); - std::vector tokens; - Parser parser; - parser.parseIntoTokens( args, tokens ); - return populate( tokens, config ); - } - - std::vector populate( std::vector const& tokens, ConfigT& config ) const { - validate(); - std::vector unusedTokens = populateOptions( tokens, config ); - unusedTokens = populateFixedArgs( unusedTokens, config ); - unusedTokens = populateFloatingArgs( unusedTokens, config ); - return unusedTokens; - } - - std::vector populateOptions( std::vector const& tokens, ConfigT& config ) const { - std::vector unusedTokens; - std::vector errors; - for( std::size_t i = 0; i < tokens.size(); ++i ) { - Parser::Token const& token = tokens[i]; - typename std::vector::const_iterator it = m_options.begin(), itEnd = m_options.end(); - for(; it != itEnd; ++it ) { - Arg const& arg = *it; - - try { - if( ( token.type == Parser::Token::ShortOpt && arg.hasShortName( token.data ) ) || + os << "\n"; + } + std::string usage( std::string const &procName ) const + { + std::ostringstream oss; + usage( oss, procName ); + return oss.str(); + } + + ConfigT parse( std::vector const &args ) const + { + ConfigT config; + parseInto( args, config ); + return config; + } + + std::vector parseInto( std::vector const &args, ConfigT &config ) const + { + std::string processName = args[0]; + std::size_t lastSlash = processName.find_last_of( "/\\" ); + if ( lastSlash != std::string::npos ) { + processName = processName.substr( lastSlash + 1 ); + } + m_boundProcessName.set( config, processName ); + std::vector tokens; + Parser parser; + parser.parseIntoTokens( args, tokens ); + return populate( tokens, config ); + } + + std::vector populate( std::vector const &tokens, ConfigT &config ) const + { + validate(); + std::vector unusedTokens = populateOptions( tokens, config ); + unusedTokens = populateFixedArgs( unusedTokens, config ); + unusedTokens = populateFloatingArgs( unusedTokens, config ); + return unusedTokens; + } + + std::vector populateOptions( std::vector const &tokens, ConfigT &config ) const + { + std::vector unusedTokens; + std::vector errors; + for ( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const &token = tokens[i]; + typename std::vector::const_iterator it = m_options.begin(), itEnd = m_options.end(); + for (; it != itEnd; ++it ) { + Arg const &arg = *it; + + try { + if ( ( token.type == Parser::Token::ShortOpt && arg.hasShortName( token.data ) ) || ( token.type == Parser::Token::LongOpt && arg.hasLongName( token.data ) ) ) { - if( arg.takesArg() ) { - if( i == tokens.size()-1 || tokens[i+1].type != Parser::Token::Positional ) - errors.push_back( "Expected argument to option: " + token.data ); - else - arg.boundField.set( config, tokens[++i].data ); - } - else { - arg.boundField.set( config, "true" ); + if ( arg.takesArg() ) { + if ( i == tokens.size() - 1 || tokens[i + 1].type != Parser::Token::Positional ) { + errors.push_back( "Expected argument to option: " + token.data ); + } else { + arg.boundField.set( config, tokens[++i].data ); } - break; + } else { + arg.boundField.set( config, "true" ); } + break; } - catch( std::exception& ex ) { - errors.push_back( std::string( ex.what() ) + "\n- while parsing: (" + arg.commands() + ")" ); - } + } catch ( std::exception &ex ) { + errors.push_back( std::string( ex.what() ) + "\n- while parsing: (" + arg.commands() + ")" ); } - if( it == itEnd ) { - if( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens ) - unusedTokens.push_back( token ); - else if( errors.empty() && m_throwOnUnrecognisedTokens ) - errors.push_back( "unrecognised option: " + token.data ); + } + if ( it == itEnd ) { + if ( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens ) { + unusedTokens.push_back( token ); + } else if ( errors.empty() && m_throwOnUnrecognisedTokens ) { + errors.push_back( "unrecognised option: " + token.data ); } } - if( !errors.empty() ) { - std::ostringstream oss; - for( std::vector::const_iterator it = errors.begin(), itEnd = errors.end(); - it != itEnd; - ++it ) { - if( it != errors.begin() ) - oss << "\n"; - oss << *it; + } + if ( !errors.empty() ) { + std::ostringstream oss; + for ( std::vector::const_iterator it = errors.begin(), itEnd = errors.end(); + it != itEnd; + ++it ) { + if ( it != errors.begin() ) { + oss << "\n"; } - throw std::runtime_error( oss.str() ); + oss << *it; } - return unusedTokens; - } - std::vector populateFixedArgs( std::vector const& tokens, ConfigT& config ) const { - std::vector unusedTokens; - int position = 1; - for( std::size_t i = 0; i < tokens.size(); ++i ) { - Parser::Token const& token = tokens[i]; - typename std::map::const_iterator it = m_positionalArgs.find( position ); - if( it != m_positionalArgs.end() ) - it->second.boundField.set( config, token.data ); - else - unusedTokens.push_back( token ); - if( token.type == Parser::Token::Positional ) - position++; + throw std::runtime_error( oss.str() ); + } + return unusedTokens; + } + std::vector populateFixedArgs( std::vector const &tokens, ConfigT &config ) const + { + std::vector unusedTokens; + int position = 1; + for ( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const &token = tokens[i]; + typename std::map::const_iterator it = m_positionalArgs.find( position ); + if ( it != m_positionalArgs.end() ) { + it->second.boundField.set( config, token.data ); + } else { + unusedTokens.push_back( token ); } - return unusedTokens; - } - std::vector populateFloatingArgs( std::vector const& tokens, ConfigT& config ) const { - if( !m_floatingArg.get() ) - return tokens; - std::vector unusedTokens; - for( std::size_t i = 0; i < tokens.size(); ++i ) { - Parser::Token const& token = tokens[i]; - if( token.type == Parser::Token::Positional ) - m_floatingArg->boundField.set( config, token.data ); - else - unusedTokens.push_back( token ); + if ( token.type == Parser::Token::Positional ) { + position++; + } + } + return unusedTokens; + } + std::vector populateFloatingArgs( std::vector const &tokens, ConfigT &config ) const + { + if ( !m_floatingArg.get() ) { + return tokens; + } + std::vector unusedTokens; + for ( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const &token = tokens[i]; + if ( token.type == Parser::Token::Positional ) { + m_floatingArg->boundField.set( config, token.data ); + } else { + unusedTokens.push_back( token ); } - return unusedTokens; } + return unusedTokens; + } - void validate() const - { - if( m_options.empty() && m_positionalArgs.empty() && !m_floatingArg.get() ) - throw std::logic_error( "No options or arguments specified" ); + void validate() const + { + if ( m_options.empty() && m_positionalArgs.empty() && !m_floatingArg.get() ) { + throw std::logic_error( "No options or arguments specified" ); + } - for( typename std::vector::const_iterator it = m_options.begin(), - itEnd = m_options.end(); - it != itEnd; ++it ) - it->validate(); + for ( typename std::vector::const_iterator it = m_options.begin(), + itEnd = m_options.end(); + it != itEnd; ++it ) { + it->validate(); } + } - private: - Detail::BoundArgFunction m_boundProcessName; - std::vector m_options; - std::map m_positionalArgs; - ArgAutoPtr m_floatingArg; - int m_highestSpecifiedArgPosition; - bool m_throwOnUnrecognisedTokens; - }; +private: + Detail::BoundArgFunction m_boundProcessName; + std::vector m_options; + std::map m_positionalArgs; + ArgAutoPtr m_floatingArg; + int m_highestSpecifiedArgPosition; + bool m_throwOnUnrecognisedTokens; +}; } // end namespace Clara @@ -4650,139 +5238,164 @@ STITCH_CLARA_CLOSE_NAMESPACE namespace Catch { - inline void abortAfterFirst( ConfigData& config ) { config.abortAfter = 1; } - inline void abortAfterX( ConfigData& config, int x ) { - if( x < 1 ) - throw std::runtime_error( "Value after -x or --abortAfter must be greater than zero" ); - config.abortAfter = x; - } - inline void addTestOrTags( ConfigData& config, std::string const& _testSpec ) { config.testsOrTags.push_back( _testSpec ); } - inline void addReporterName( ConfigData& config, std::string const& _reporterName ) { config.reporterNames.push_back( _reporterName ); } - - inline void addWarning( ConfigData& config, std::string const& _warning ) { - if( _warning == "NoAssertions" ) - config.warnings = static_cast( config.warnings | WarnAbout::NoAssertions ); - else - throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" ); - } - inline void setOrder( ConfigData& config, std::string const& order ) { - if( startsWith( "declared", order ) ) - config.runOrder = RunTests::InDeclarationOrder; - else if( startsWith( "lexical", order ) ) - config.runOrder = RunTests::InLexicographicalOrder; - else if( startsWith( "random", order ) ) - config.runOrder = RunTests::InRandomOrder; - else - throw std::runtime_error( "Unrecognised ordering: '" + order + "'" ); - } - inline void setRngSeed( ConfigData& config, std::string const& seed ) { - if( seed == "time" ) { - config.rngSeed = static_cast( std::time(0) ); - } - else { - std::stringstream ss; - ss << seed; - ss >> config.rngSeed; - if( ss.fail() ) - throw std::runtime_error( "Argment to --rng-seed should be the word 'time' or a number" ); - } - } - inline void setVerbosity( ConfigData& config, int level ) { - // !TBD: accept strings? - config.verbosity = static_cast( level ); - } - inline void setShowDurations( ConfigData& config, bool _showDurations ) { - config.showDurations = _showDurations - ? ShowDurations::Always - : ShowDurations::Never; - } - inline void setUseColour( ConfigData& config, std::string const& value ) { - std::string mode = toLower( value ); - - if( mode == "yes" ) - config.useColour = UseColour::Yes; - else if( mode == "no" ) - config.useColour = UseColour::No; - else if( mode == "auto" ) - config.useColour = UseColour::Auto; - else - throw std::runtime_error( "colour mode must be one of: auto, yes or no" ); - } - inline void forceColour( ConfigData& config ) { +inline void abortAfterFirst( ConfigData &config ) +{ + config.abortAfter = 1; +} +inline void abortAfterX( ConfigData &config, int x ) +{ + if ( x < 1 ) { + throw std::runtime_error( "Value after -x or --abortAfter must be greater than zero" ); + } + config.abortAfter = x; +} +inline void addTestOrTags( ConfigData &config, std::string const &_testSpec ) +{ + config.testsOrTags.push_back( _testSpec ); +} +inline void addReporterName( ConfigData &config, std::string const &_reporterName ) +{ + config.reporterNames.push_back( _reporterName ); +} + +inline void addWarning( ConfigData &config, std::string const &_warning ) +{ + if ( _warning == "NoAssertions" ) { + config.warnings = static_cast( config.warnings | WarnAbout::NoAssertions ); + } else { + throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" ); + } +} +inline void setOrder( ConfigData &config, std::string const &order ) +{ + if ( startsWith( "declared", order ) ) { + config.runOrder = RunTests::InDeclarationOrder; + } else if ( startsWith( "lexical", order ) ) { + config.runOrder = RunTests::InLexicographicalOrder; + } else if ( startsWith( "random", order ) ) { + config.runOrder = RunTests::InRandomOrder; + } else { + throw std::runtime_error( "Unrecognised ordering: '" + order + "'" ); + } +} +inline void setRngSeed( ConfigData &config, std::string const &seed ) +{ + if ( seed == "time" ) { + config.rngSeed = static_cast( std::time(0) ); + } else { + std::stringstream ss; + ss << seed; + ss >> config.rngSeed; + if ( ss.fail() ) { + throw std::runtime_error( "Argment to --rng-seed should be the word 'time' or a number" ); + } + } +} +inline void setVerbosity( ConfigData &config, int level ) +{ + // !TBD: accept strings? + config.verbosity = static_cast( level ); +} +inline void setShowDurations( ConfigData &config, bool _showDurations ) +{ + config.showDurations = _showDurations + ? ShowDurations::Always + : ShowDurations::Never; +} +inline void setUseColour( ConfigData &config, std::string const &value ) +{ + std::string mode = toLower( value ); + + if ( mode == "yes" ) { config.useColour = UseColour::Yes; + } else if ( mode == "no" ) { + config.useColour = UseColour::No; + } else if ( mode == "auto" ) { + config.useColour = UseColour::Auto; + } else { + throw std::runtime_error( "colour mode must be one of: auto, yes or no" ); + } +} +inline void forceColour( ConfigData &config ) +{ + config.useColour = UseColour::Yes; +} +inline void loadTestNamesFromFile( ConfigData &config, std::string const &_filename ) +{ + std::ifstream f( _filename.c_str() ); + if ( !f.is_open() ) { + throw std::domain_error( "Unable to load input file: " + _filename ); } - inline void loadTestNamesFromFile( ConfigData& config, std::string const& _filename ) { - std::ifstream f( _filename.c_str() ); - if( !f.is_open() ) - throw std::domain_error( "Unable to load input file: " + _filename ); - std::string line; - while( std::getline( f, line ) ) { - line = trim(line); - if( !line.empty() && !startsWith( line, "#" ) ) - addTestOrTags( config, "\"" + line + "\"," ); + std::string line; + while ( std::getline( f, line ) ) { + line = trim(line); + if ( !line.empty() && !startsWith( line, "#" ) ) { + addTestOrTags( config, "\"" + line + "\"," ); } } +} - inline Clara::CommandLine makeCommandLineParser() { +inline Clara::CommandLine makeCommandLineParser() +{ - using namespace Clara; - CommandLine cli; + using namespace Clara; + CommandLine cli; - cli.bindProcessName( &ConfigData::processName ); + cli.bindProcessName( &ConfigData::processName ); - cli["-?"]["-h"]["--help"] - .describe( "display usage information" ) - .bind( &ConfigData::showHelp ); + cli["-?"]["-h"]["--help"] + .describe( "display usage information" ) + .bind( &ConfigData::showHelp ); - cli["-l"]["--list-tests"] - .describe( "list all/matching test cases" ) - .bind( &ConfigData::listTests ); + cli["-l"]["--list-tests"] + .describe( "list all/matching test cases" ) + .bind( &ConfigData::listTests ); - cli["-t"]["--list-tags"] - .describe( "list all/matching tags" ) - .bind( &ConfigData::listTags ); + cli["-t"]["--list-tags"] + .describe( "list all/matching tags" ) + .bind( &ConfigData::listTags ); - cli["-s"]["--success"] - .describe( "include successful tests in output" ) - .bind( &ConfigData::showSuccessfulTests ); + cli["-s"]["--success"] + .describe( "include successful tests in output" ) + .bind( &ConfigData::showSuccessfulTests ); - cli["-b"]["--break"] - .describe( "break into debugger on failure" ) - .bind( &ConfigData::shouldDebugBreak ); + cli["-b"]["--break"] + .describe( "break into debugger on failure" ) + .bind( &ConfigData::shouldDebugBreak ); - cli["-e"]["--nothrow"] - .describe( "skip exception tests" ) - .bind( &ConfigData::noThrow ); + cli["-e"]["--nothrow"] + .describe( "skip exception tests" ) + .bind( &ConfigData::noThrow ); - cli["-i"]["--invisibles"] - .describe( "show invisibles (tabs, newlines)" ) - .bind( &ConfigData::showInvisibles ); + cli["-i"]["--invisibles"] + .describe( "show invisibles (tabs, newlines)" ) + .bind( &ConfigData::showInvisibles ); - cli["-o"]["--out"] - .describe( "output filename" ) - .bind( &ConfigData::outputFilename, "filename" ); + cli["-o"]["--out"] + .describe( "output filename" ) + .bind( &ConfigData::outputFilename, "filename" ); - cli["-r"]["--reporter"] + cli["-r"]["--reporter"] // .placeholder( "name[:filename]" ) - .describe( "reporter to use (defaults to console)" ) - .bind( &addReporterName, "name" ); + .describe( "reporter to use (defaults to console)" ) + .bind( &addReporterName, "name" ); - cli["-n"]["--name"] - .describe( "suite name" ) - .bind( &ConfigData::name, "name" ); + cli["-n"]["--name"] + .describe( "suite name" ) + .bind( &ConfigData::name, "name" ); - cli["-a"]["--abort"] - .describe( "abort at first failure" ) - .bind( &abortAfterFirst ); + cli["-a"]["--abort"] + .describe( "abort at first failure" ) + .bind( &abortAfterFirst ); - cli["-x"]["--abortx"] - .describe( "abort after x failures" ) - .bind( &abortAfterX, "no. failures" ); + cli["-x"]["--abortx"] + .describe( "abort after x failures" ) + .bind( &abortAfterX, "no. failures" ); - cli["-w"]["--warn"] - .describe( "enable warnings" ) - .bind( &addWarning, "warning name" ); + cli["-w"]["--warn"] + .describe( "enable warnings" ) + .bind( &addWarning, "warning name" ); // - needs updating if reinstated // cli.into( &setVerbosity ) @@ -4791,49 +5404,49 @@ namespace Catch { // .longOpt( "verbosity" ) // .placeholder( "level" ); - cli[_] - .describe( "which test or tests to use" ) - .bind( &addTestOrTags, "test name, pattern or tags" ); + cli[_] + .describe( "which test or tests to use" ) + .bind( &addTestOrTags, "test name, pattern or tags" ); - cli["-d"]["--durations"] - .describe( "show test durations" ) - .bind( &setShowDurations, "yes|no" ); + cli["-d"]["--durations"] + .describe( "show test durations" ) + .bind( &setShowDurations, "yes|no" ); - cli["-f"]["--input-file"] - .describe( "load test names to run from a file" ) - .bind( &loadTestNamesFromFile, "filename" ); + cli["-f"]["--input-file"] + .describe( "load test names to run from a file" ) + .bind( &loadTestNamesFromFile, "filename" ); - cli["-#"]["--filenames-as-tags"] - .describe( "adds a tag for the filename" ) - .bind( &ConfigData::filenamesAsTags ); + cli["-#"]["--filenames-as-tags"] + .describe( "adds a tag for the filename" ) + .bind( &ConfigData::filenamesAsTags ); - // Less common commands which don't have a short form - cli["--list-test-names-only"] - .describe( "list all/matching test cases names only" ) - .bind( &ConfigData::listTestNamesOnly ); + // Less common commands which don't have a short form + cli["--list-test-names-only"] + .describe( "list all/matching test cases names only" ) + .bind( &ConfigData::listTestNamesOnly ); - cli["--list-reporters"] - .describe( "list all reporters" ) - .bind( &ConfigData::listReporters ); + cli["--list-reporters"] + .describe( "list all reporters" ) + .bind( &ConfigData::listReporters ); - cli["--order"] - .describe( "test case order (defaults to decl)" ) - .bind( &setOrder, "decl|lex|rand" ); + cli["--order"] + .describe( "test case order (defaults to decl)" ) + .bind( &setOrder, "decl|lex|rand" ); - cli["--rng-seed"] - .describe( "set a specific seed for random numbers" ) - .bind( &setRngSeed, "'time'|number" ); + cli["--rng-seed"] + .describe( "set a specific seed for random numbers" ) + .bind( &setRngSeed, "'time'|number" ); - cli["--force-colour"] - .describe( "force colourised output (deprecated)" ) - .bind( &forceColour ); + cli["--force-colour"] + .describe( "force colourised output (deprecated)" ) + .bind( &forceColour ); - cli["--use-colour"] - .describe( "should output be colourised" ) - .bind( &setUseColour, "yes|no" ); + cli["--use-colour"] + .describe( "should output be colourised" ) + .bind( &setUseColour, "yes|no" ); - return cli; - } + return cli; +} } // end namespace Catch @@ -4870,134 +5483,171 @@ namespace CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE { namespace Tbc { #ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH - const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; #else - const unsigned int consoleWidth = 80; +const unsigned int consoleWidth = 80; #endif - struct TextAttributes { - TextAttributes() +struct TextAttributes { + TextAttributes() : initialIndent( std::string::npos ), indent( 0 ), - width( consoleWidth-1 ), + width( consoleWidth - 1 ), tabChar( '\t' ) - {} + {} - TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } - TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } - TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } - TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } + TextAttributes &setInitialIndent( std::size_t _value ) + { + initialIndent = _value; + return *this; + } + TextAttributes &setIndent( std::size_t _value ) + { + indent = _value; + return *this; + } + TextAttributes &setWidth( std::size_t _value ) + { + width = _value; + return *this; + } + TextAttributes &setTabChar( char _value ) + { + tabChar = _value; + return *this; + } - std::size_t initialIndent; // indent of first line, or npos - std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos - std::size_t width; // maximum width of text, including indent. Longer text will wrap - char tabChar; // If this char is seen the indent is changed to current pos - }; + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + char tabChar; // If this char is seen the indent is changed to current pos +}; - class Text { - public: - Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) +class Text { +public: + Text( std::string const &_str, TextAttributes const &_attr = TextAttributes() ) : attr( _attr ) - { - std::string wrappableChars = " [({.,/|\\-"; - std::size_t indent = _attr.initialIndent != std::string::npos - ? _attr.initialIndent - : _attr.indent; - std::string remainder = _str; - - while( !remainder.empty() ) { - if( lines.size() >= 1000 ) { - lines.push_back( "... message truncated due to excessive size" ); - return; - } - std::size_t tabPos = std::string::npos; - std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); - std::size_t pos = remainder.find_first_of( '\n' ); - if( pos <= width ) { - width = pos; - } - pos = remainder.find_last_of( _attr.tabChar, width ); - if( pos != std::string::npos ) { - tabPos = pos; - if( remainder[width] == '\n' ) - width--; - remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); + { + std::string wrappableChars = " [({.,/|\\-"; + std::size_t indent = _attr.initialIndent != std::string::npos + ? _attr.initialIndent + : _attr.indent; + std::string remainder = _str; + + while ( !remainder.empty() ) { + if ( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + std::size_t tabPos = std::string::npos; + std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); + std::size_t pos = remainder.find_first_of( '\n' ); + if ( pos <= width ) { + width = pos; + } + pos = remainder.find_last_of( _attr.tabChar, width ); + if ( pos != std::string::npos ) { + tabPos = pos; + if ( remainder[width] == '\n' ) { + width--; } + remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos + 1 ); + } - if( width == remainder.size() ) { - spliceLine( indent, remainder, width ); + if ( width == remainder.size() ) { + spliceLine( indent, remainder, width ); + } else if ( remainder[width] == '\n' ) { + spliceLine( indent, remainder, width ); + if ( width <= 1 || remainder.size() != 1 ) { + remainder = remainder.substr( 1 ); } - else if( remainder[width] == '\n' ) { - spliceLine( indent, remainder, width ); - if( width <= 1 || remainder.size() != 1 ) + indent = _attr.indent; + } else { + pos = remainder.find_last_of( wrappableChars, width ); + if ( pos != std::string::npos && pos > 0 ) { + spliceLine( indent, remainder, pos ); + if ( remainder[0] == ' ' ) { remainder = remainder.substr( 1 ); + } + } else { + spliceLine( indent, remainder, width - 1 ); + lines.back() += "-"; + } + if ( lines.size() == 1 ) { indent = _attr.indent; } - else { - pos = remainder.find_last_of( wrappableChars, width ); - if( pos != std::string::npos && pos > 0 ) { - spliceLine( indent, remainder, pos ); - if( remainder[0] == ' ' ) - remainder = remainder.substr( 1 ); - } - else { - spliceLine( indent, remainder, width-1 ); - lines.back() += "-"; - } - if( lines.size() == 1 ) - indent = _attr.indent; - if( tabPos != std::string::npos ) - indent += tabPos; + if ( tabPos != std::string::npos ) { + indent += tabPos; } } } + } - void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { - lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); - _remainder = _remainder.substr( _pos ); - } - - typedef std::vector::const_iterator const_iterator; - - const_iterator begin() const { return lines.begin(); } - const_iterator end() const { return lines.end(); } - std::string const& last() const { return lines.back(); } - std::size_t size() const { return lines.size(); } - std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } - std::string toString() const { - std::ostringstream oss; - oss << *this; - return oss.str(); - } - - inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { - for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); - it != itEnd; ++it ) { - if( it != _text.begin() ) - _stream << "\n"; - _stream << *it; - } - return _stream; - } - - private: - std::string str; - TextAttributes attr; - std::vector lines; - }; + void spliceLine( std::size_t _indent, std::string &_remainder, std::size_t _pos ) + { + lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); + _remainder = _remainder.substr( _pos ); + } -} // end namespace Tbc + typedef std::vector::const_iterator const_iterator; -#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE -} // end outer namespace + const_iterator begin() const + { + return lines.begin(); + } + const_iterator end() const + { + return lines.end(); + } + std::string const &last() const + { + return lines.back(); + } + std::size_t size() const + { + return lines.size(); + } + std::string const &operator[]( std::size_t _index ) const + { + return lines[_index]; + } + std::string toString() const + { + std::ostringstream oss; + oss << *this; + return oss.str(); + } + + inline friend std::ostream &operator << ( std::ostream &_stream, Text const &_text ) + { + for ( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + it != itEnd; ++it ) { + if ( it != _text.begin() ) { + _stream << "\n"; + } + _stream << *it; + } + return _stream; + } + +private: + std::string str; + TextAttributes attr; + std::vector lines; +}; + +} // end namespace Tbc + +#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +} // end outer namespace #endif #endif // TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED #undef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE namespace Catch { - using Tbc::Text; - using Tbc::TextAttributes; +using Tbc::Text; +using Tbc::TextAttributes; } // #included from: catch_console_colour.hpp @@ -5005,55 +5655,58 @@ namespace Catch { namespace Catch { - struct Colour { - enum Code { - None = 0, +struct Colour { + enum Code { + None = 0, - White, - Red, - Green, - Blue, - Cyan, - Yellow, - Grey, + White, + Red, + Green, + Blue, + Cyan, + Yellow, + Grey, - Bright = 0x10, + Bright = 0x10, - BrightRed = Bright | Red, - BrightGreen = Bright | Green, - LightGrey = Bright | Grey, - BrightWhite = Bright | White, + BrightRed = Bright | Red, + BrightGreen = Bright | Green, + LightGrey = Bright | Grey, + BrightWhite = Bright | White, - // By intention - FileName = LightGrey, - Warning = Yellow, - ResultError = BrightRed, - ResultSuccess = BrightGreen, - ResultExpectedFailure = Warning, + // By intention + FileName = LightGrey, + Warning = Yellow, + ResultError = BrightRed, + ResultSuccess = BrightGreen, + ResultExpectedFailure = Warning, - Error = BrightRed, - Success = Green, + Error = BrightRed, + Success = Green, - OriginalExpression = Cyan, - ReconstructedExpression = Yellow, + OriginalExpression = Cyan, + ReconstructedExpression = Yellow, - SecondaryText = LightGrey, - Headers = White - }; + SecondaryText = LightGrey, + Headers = White + }; - // Use constructed object for RAII guard - Colour( Code _colourCode ); - Colour( Colour const& other ); - ~Colour(); + // Use constructed object for RAII guard + Colour( Code _colourCode ); + Colour( Colour const &other ); + ~Colour(); - // Use static method for one-shot changes - static void use( Code _colourCode ); + // Use static method for one-shot changes + static void use( Code _colourCode ); - private: - bool m_moved; - }; +private: + bool m_moved; +}; - inline std::ostream& operator << ( std::ostream& os, Colour const& ) { return os; } +inline std::ostream &operator << ( std::ostream &os, Colour const & ) +{ + return os; +} } // end namespace Catch @@ -5065,252 +5718,262 @@ namespace Catch { #include #include -namespace Catch -{ - struct ReporterConfig { - explicit ReporterConfig( Ptr const& _fullConfig ) +namespace Catch { +struct ReporterConfig { + explicit ReporterConfig( Ptr const &_fullConfig ) : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {} - ReporterConfig( Ptr const& _fullConfig, std::ostream& _stream ) + ReporterConfig( Ptr const &_fullConfig, std::ostream &_stream ) : m_stream( &_stream ), m_fullConfig( _fullConfig ) {} - std::ostream& stream() const { return *m_stream; } - Ptr fullConfig() const { return m_fullConfig; } + std::ostream &stream() const + { + return *m_stream; + } + Ptr fullConfig() const + { + return m_fullConfig; + } - private: - std::ostream* m_stream; - Ptr m_fullConfig; - }; +private: + std::ostream *m_stream; + Ptr m_fullConfig; +}; - struct ReporterPreferences { - ReporterPreferences() +struct ReporterPreferences { + ReporterPreferences() : shouldRedirectStdOut( false ) - {} + {} - bool shouldRedirectStdOut; - }; + bool shouldRedirectStdOut; +}; - template - struct LazyStat : Option { - LazyStat() : used( false ) {} - LazyStat& operator=( T const& _value ) { - Option::operator=( _value ); - used = false; - return *this; - } - void reset() { - Option::reset(); - used = false; - } - bool used; - }; +template +struct LazyStat : Option { + LazyStat() : used( false ) {} + LazyStat &operator=( T const &_value ) + { + Option::operator=( _value ); + used = false; + return *this; + } + void reset() + { + Option::reset(); + used = false; + } + bool used; +}; - struct TestRunInfo { - TestRunInfo( std::string const& _name ) : name( _name ) {} - std::string name; - }; - struct GroupInfo { - GroupInfo( std::string const& _name, - std::size_t _groupIndex, - std::size_t _groupsCount ) +struct TestRunInfo { + TestRunInfo( std::string const &_name ) : name( _name ) {} + std::string name; +}; +struct GroupInfo { + GroupInfo( std::string const &_name, + std::size_t _groupIndex, + std::size_t _groupsCount ) : name( _name ), groupIndex( _groupIndex ), groupsCounts( _groupsCount ) - {} + {} - std::string name; - std::size_t groupIndex; - std::size_t groupsCounts; - }; + std::string name; + std::size_t groupIndex; + std::size_t groupsCounts; +}; - struct AssertionStats { - AssertionStats( AssertionResult const& _assertionResult, - std::vector const& _infoMessages, - Totals const& _totals ) +struct AssertionStats { + AssertionStats( AssertionResult const &_assertionResult, + std::vector const &_infoMessages, + Totals const &_totals ) : assertionResult( _assertionResult ), infoMessages( _infoMessages ), totals( _totals ) - { - if( assertionResult.hasMessage() ) { - // Copy message into messages list. - // !TBD This should have been done earlier, somewhere - MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() ); - builder << assertionResult.getMessage(); - builder.m_info.message = builder.m_stream.str(); - - infoMessages.push_back( builder.m_info ); - } + { + if ( assertionResult.hasMessage() ) { + // Copy message into messages list. + // !TBD This should have been done earlier, somewhere + MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() ); + builder << assertionResult.getMessage(); + builder.m_info.message = builder.m_stream.str(); + + infoMessages.push_back( builder.m_info ); } - virtual ~AssertionStats(); + } + virtual ~AssertionStats(); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - AssertionStats( AssertionStats const& ) = default; - AssertionStats( AssertionStats && ) = default; - AssertionStats& operator = ( AssertionStats const& ) = default; - AssertionStats& operator = ( AssertionStats && ) = default; + AssertionStats( AssertionStats const & ) = default; + AssertionStats( AssertionStats && ) = default; + AssertionStats &operator = ( AssertionStats const & ) = default; + AssertionStats &operator = ( AssertionStats && ) = default; # endif - AssertionResult assertionResult; - std::vector infoMessages; - Totals totals; - }; + AssertionResult assertionResult; + std::vector infoMessages; + Totals totals; +}; - struct SectionStats { - SectionStats( SectionInfo const& _sectionInfo, - Counts const& _assertions, - double _durationInSeconds, - bool _missingAssertions ) +struct SectionStats { + SectionStats( SectionInfo const &_sectionInfo, + Counts const &_assertions, + double _durationInSeconds, + bool _missingAssertions ) : sectionInfo( _sectionInfo ), assertions( _assertions ), durationInSeconds( _durationInSeconds ), missingAssertions( _missingAssertions ) - {} - virtual ~SectionStats(); + {} + virtual ~SectionStats(); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - SectionStats( SectionStats const& ) = default; - SectionStats( SectionStats && ) = default; - SectionStats& operator = ( SectionStats const& ) = default; - SectionStats& operator = ( SectionStats && ) = default; + SectionStats( SectionStats const & ) = default; + SectionStats( SectionStats && ) = default; + SectionStats &operator = ( SectionStats const & ) = default; + SectionStats &operator = ( SectionStats && ) = default; # endif - SectionInfo sectionInfo; - Counts assertions; - double durationInSeconds; - bool missingAssertions; - }; + SectionInfo sectionInfo; + Counts assertions; + double durationInSeconds; + bool missingAssertions; +}; - struct TestCaseStats { - TestCaseStats( TestCaseInfo const& _testInfo, - Totals const& _totals, - std::string const& _stdOut, - std::string const& _stdErr, - bool _aborting ) +struct TestCaseStats { + TestCaseStats( TestCaseInfo const &_testInfo, + Totals const &_totals, + std::string const &_stdOut, + std::string const &_stdErr, + bool _aborting ) : testInfo( _testInfo ), - totals( _totals ), - stdOut( _stdOut ), - stdErr( _stdErr ), - aborting( _aborting ) - {} - virtual ~TestCaseStats(); + totals( _totals ), + stdOut( _stdOut ), + stdErr( _stdErr ), + aborting( _aborting ) + {} + virtual ~TestCaseStats(); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - TestCaseStats( TestCaseStats const& ) = default; - TestCaseStats( TestCaseStats && ) = default; - TestCaseStats& operator = ( TestCaseStats const& ) = default; - TestCaseStats& operator = ( TestCaseStats && ) = default; + TestCaseStats( TestCaseStats const & ) = default; + TestCaseStats( TestCaseStats && ) = default; + TestCaseStats &operator = ( TestCaseStats const & ) = default; + TestCaseStats &operator = ( TestCaseStats && ) = default; # endif - TestCaseInfo testInfo; - Totals totals; - std::string stdOut; - std::string stdErr; - bool aborting; - }; + TestCaseInfo testInfo; + Totals totals; + std::string stdOut; + std::string stdErr; + bool aborting; +}; - struct TestGroupStats { - TestGroupStats( GroupInfo const& _groupInfo, - Totals const& _totals, - bool _aborting ) +struct TestGroupStats { + TestGroupStats( GroupInfo const &_groupInfo, + Totals const &_totals, + bool _aborting ) : groupInfo( _groupInfo ), totals( _totals ), aborting( _aborting ) - {} - TestGroupStats( GroupInfo const& _groupInfo ) + {} + TestGroupStats( GroupInfo const &_groupInfo ) : groupInfo( _groupInfo ), aborting( false ) - {} - virtual ~TestGroupStats(); + {} + virtual ~TestGroupStats(); # ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS - TestGroupStats( TestGroupStats const& ) = default; - TestGroupStats( TestGroupStats && ) = default; - TestGroupStats& operator = ( TestGroupStats const& ) = default; - TestGroupStats& operator = ( TestGroupStats && ) = default; + TestGroupStats( TestGroupStats const & ) = default; + TestGroupStats( TestGroupStats && ) = default; + TestGroupStats &operator = ( TestGroupStats const & ) = default; + TestGroupStats &operator = ( TestGroupStats && ) = default; # endif - GroupInfo groupInfo; - Totals totals; - bool aborting; - }; + GroupInfo groupInfo; + Totals totals; + bool aborting; +}; - struct TestRunStats { - TestRunStats( TestRunInfo const& _runInfo, - Totals const& _totals, - bool _aborting ) +struct TestRunStats { + TestRunStats( TestRunInfo const &_runInfo, + Totals const &_totals, + bool _aborting ) : runInfo( _runInfo ), totals( _totals ), aborting( _aborting ) - {} - virtual ~TestRunStats(); + {} + virtual ~TestRunStats(); # ifndef CATCH_CONFIG_CPP11_GENERATED_METHODS - TestRunStats( TestRunStats const& _other ) + TestRunStats( TestRunStats const &_other ) : runInfo( _other.runInfo ), totals( _other.totals ), aborting( _other.aborting ) - {} + {} # else - TestRunStats( TestRunStats const& ) = default; - TestRunStats( TestRunStats && ) = default; - TestRunStats& operator = ( TestRunStats const& ) = default; - TestRunStats& operator = ( TestRunStats && ) = default; + TestRunStats( TestRunStats const & ) = default; + TestRunStats( TestRunStats && ) = default; + TestRunStats &operator = ( TestRunStats const & ) = default; + TestRunStats &operator = ( TestRunStats && ) = default; # endif - TestRunInfo runInfo; - Totals totals; - bool aborting; - }; + TestRunInfo runInfo; + Totals totals; + bool aborting; +}; - class MultipleReporters; +class MultipleReporters; - struct IStreamingReporter : IShared { - virtual ~IStreamingReporter(); +struct IStreamingReporter : IShared { + virtual ~IStreamingReporter(); - // Implementing class must also provide the following static method: - // static std::string getDescription(); + // Implementing class must also provide the following static method: + // static std::string getDescription(); - virtual ReporterPreferences getPreferences() const = 0; + virtual ReporterPreferences getPreferences() const = 0; - virtual void noMatchingTestCases( std::string const& spec ) = 0; + virtual void noMatchingTestCases( std::string const &spec ) = 0; - virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0; - virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0; + virtual void testRunStarting( TestRunInfo const &testRunInfo ) = 0; + virtual void testGroupStarting( GroupInfo const &groupInfo ) = 0; - virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0; - virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0; + virtual void testCaseStarting( TestCaseInfo const &testInfo ) = 0; + virtual void sectionStarting( SectionInfo const §ionInfo ) = 0; - virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0; + virtual void assertionStarting( AssertionInfo const &assertionInfo ) = 0; - // The return value indicates if the messages buffer should be cleared: - virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0; + // The return value indicates if the messages buffer should be cleared: + virtual bool assertionEnded( AssertionStats const &assertionStats ) = 0; - virtual void sectionEnded( SectionStats const& sectionStats ) = 0; - virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0; - virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0; - virtual void testRunEnded( TestRunStats const& testRunStats ) = 0; + virtual void sectionEnded( SectionStats const §ionStats ) = 0; + virtual void testCaseEnded( TestCaseStats const &testCaseStats ) = 0; + virtual void testGroupEnded( TestGroupStats const &testGroupStats ) = 0; + virtual void testRunEnded( TestRunStats const &testRunStats ) = 0; - virtual void skipTest( TestCaseInfo const& testInfo ) = 0; + virtual void skipTest( TestCaseInfo const &testInfo ) = 0; - virtual MultipleReporters* tryAsMulti() { return CATCH_NULL; } - }; + virtual MultipleReporters *tryAsMulti() + { + return CATCH_NULL; + } +}; - struct IReporterFactory : IShared { - virtual ~IReporterFactory(); - virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0; - virtual std::string getDescription() const = 0; - }; +struct IReporterFactory : IShared { + virtual ~IReporterFactory(); + virtual IStreamingReporter *create( ReporterConfig const &config ) const = 0; + virtual std::string getDescription() const = 0; +}; - struct IReporterRegistry { - typedef std::map > FactoryMap; - typedef std::vector > Listeners; +struct IReporterRegistry { + typedef std::map > FactoryMap; + typedef std::vector > Listeners; - virtual ~IReporterRegistry(); - virtual IStreamingReporter* create( std::string const& name, Ptr const& config ) const = 0; - virtual FactoryMap const& getFactories() const = 0; - virtual Listeners const& getListeners() const = 0; - }; + virtual ~IReporterRegistry(); + virtual IStreamingReporter *create( std::string const &name, Ptr const &config ) const = 0; + virtual FactoryMap const &getFactories() const = 0; + virtual Listeners const &getListeners() const = 0; +}; - Ptr addReporter( Ptr const& existingReporter, Ptr const& additionalReporter ); +Ptr addReporter( Ptr const &existingReporter, Ptr const &additionalReporter ); } @@ -5319,157 +5982,174 @@ namespace Catch namespace Catch { - inline std::size_t listTests( Config const& config ) { +inline std::size_t listTests( Config const &config ) +{ + + TestSpec testSpec = config.testSpec(); + if ( config.testSpec().hasFilters() ) { + Catch::cout() << "Matching test cases:\n"; + } else { + Catch::cout() << "All available test cases:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + + std::size_t matchedTests = 0; + TextAttributes nameAttr, tagsAttr; + nameAttr.setInitialIndent( 2 ).setIndent( 4 ); + tagsAttr.setIndent( 6 ); - TestSpec testSpec = config.testSpec(); - if( config.testSpec().hasFilters() ) - Catch::cout() << "Matching test cases:\n"; - else { - Catch::cout() << "All available test cases:\n"; - testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for ( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const &testCaseInfo = it->getTestCaseInfo(); + Colour::Code colour = testCaseInfo.isHidden() + ? Colour::SecondaryText + : Colour::None; + Colour colourGuard( colour ); + + Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl; + if ( !testCaseInfo.tags.empty() ) { + Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl; } + } - std::size_t matchedTests = 0; - TextAttributes nameAttr, tagsAttr; - nameAttr.setInitialIndent( 2 ).setIndent( 4 ); - tagsAttr.setIndent( 6 ); + if ( !config.testSpec().hasFilters() ) { + Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl; + } else { + Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; + } + return matchedTests; +} - std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); - for( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); - it != itEnd; - ++it ) { - matchedTests++; - TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); - Colour::Code colour = testCaseInfo.isHidden() - ? Colour::SecondaryText - : Colour::None; - Colour colourGuard( colour ); - - Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl; - if( !testCaseInfo.tags.empty() ) - Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl; - } - - if( !config.testSpec().hasFilters() ) - Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl; - else - Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; - return matchedTests; - } - - inline std::size_t listTestsNamesOnly( Config const& config ) { - TestSpec testSpec = config.testSpec(); - if( !config.testSpec().hasFilters() ) - testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); - std::size_t matchedTests = 0; - std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); - for( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); +inline std::size_t listTestsNamesOnly( Config const &config ) +{ + TestSpec testSpec = config.testSpec(); + if ( !config.testSpec().hasFilters() ) { + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + std::size_t matchedTests = 0; + std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for ( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const &testCaseInfo = it->getTestCaseInfo(); + Catch::cout() << testCaseInfo.name << std::endl; + } + return matchedTests; +} + +struct TagInfo { + TagInfo() : count ( 0 ) {} + void add( std::string const &spelling ) + { + ++count; + spellings.insert( spelling ); + } + std::string all() const + { + std::string out; + for ( std::set::const_iterator it = spellings.begin(), itEnd = spellings.end(); it != itEnd; ++it ) { - matchedTests++; - TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); - Catch::cout() << testCaseInfo.name << std::endl; + out += "[" + *it + "]"; } - return matchedTests; + return out; } + std::set spellings; + std::size_t count; +}; - struct TagInfo { - TagInfo() : count ( 0 ) {} - void add( std::string const& spelling ) { - ++count; - spellings.insert( spelling ); - } - std::string all() const { - std::string out; - for( std::set::const_iterator it = spellings.begin(), itEnd = spellings.end(); - it != itEnd; - ++it ) - out += "[" + *it + "]"; - return out; - } - std::set spellings; - std::size_t count; - }; - - inline std::size_t listTags( Config const& config ) { - TestSpec testSpec = config.testSpec(); - if( config.testSpec().hasFilters() ) - Catch::cout() << "Tags for matching test cases:\n"; - else { - Catch::cout() << "All available tags:\n"; - testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); - } +inline std::size_t listTags( Config const &config ) +{ + TestSpec testSpec = config.testSpec(); + if ( config.testSpec().hasFilters() ) { + Catch::cout() << "Tags for matching test cases:\n"; + } else { + Catch::cout() << "All available tags:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } - std::map tagCounts; + std::map tagCounts; - std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); - for( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); - it != itEnd; - ++it ) { - for( std::set::const_iterator tagIt = it->getTestCaseInfo().tags.begin(), - tagItEnd = it->getTestCaseInfo().tags.end(); - tagIt != tagItEnd; - ++tagIt ) { - std::string tagName = *tagIt; - std::string lcaseTagName = toLower( tagName ); - std::map::iterator countIt = tagCounts.find( lcaseTagName ); - if( countIt == tagCounts.end() ) - countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first; - countIt->second.add( tagName ); + std::vector matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for ( std::vector::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + for ( std::set::const_iterator tagIt = it->getTestCaseInfo().tags.begin(), + tagItEnd = it->getTestCaseInfo().tags.end(); + tagIt != tagItEnd; + ++tagIt ) { + std::string tagName = *tagIt; + std::string lcaseTagName = toLower( tagName ); + std::map::iterator countIt = tagCounts.find( lcaseTagName ); + if ( countIt == tagCounts.end() ) { + countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first; } + countIt->second.add( tagName ); } + } - for( std::map::const_iterator countIt = tagCounts.begin(), - countItEnd = tagCounts.end(); - countIt != countItEnd; - ++countIt ) { - std::ostringstream oss; - oss << " " << std::setw(2) << countIt->second.count << " "; - Text wrapper( countIt->second.all(), TextAttributes() - .setInitialIndent( 0 ) - .setIndent( oss.str().size() ) - .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); - Catch::cout() << oss.str() << wrapper << "\n"; - } - Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; - return tagCounts.size(); - } - - inline std::size_t listReporters( Config const& /*config*/ ) { - Catch::cout() << "Available reporters:\n"; - IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); - IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it; - std::size_t maxNameLen = 0; - for(it = itBegin; it != itEnd; ++it ) - maxNameLen = (std::max)( maxNameLen, it->first.size() ); - - for(it = itBegin; it != itEnd; ++it ) { - Text wrapper( it->second->getDescription(), TextAttributes() - .setInitialIndent( 0 ) - .setIndent( 7+maxNameLen ) - .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); - Catch::cout() << " " - << it->first - << ":" - << std::string( maxNameLen - it->first.size() + 2, ' ' ) - << wrapper << "\n"; - } - Catch::cout() << std::endl; - return factories.size(); - } - - inline Option list( Config const& config ) { - Option listedCount; - if( config.listTests() ) - listedCount = listedCount.valueOr(0) + listTests( config ); - if( config.listTestNamesOnly() ) - listedCount = listedCount.valueOr(0) + listTestsNamesOnly( config ); - if( config.listTags() ) - listedCount = listedCount.valueOr(0) + listTags( config ); - if( config.listReporters() ) - listedCount = listedCount.valueOr(0) + listReporters( config ); - return listedCount; + for ( std::map::const_iterator countIt = tagCounts.begin(), + countItEnd = tagCounts.end(); + countIt != countItEnd; + ++countIt ) { + std::ostringstream oss; + oss << " " << std::setw(2) << countIt->second.count << " "; + Text wrapper( countIt->second.all(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( oss.str().size() ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - 10 ) ); + Catch::cout() << oss.str() << wrapper << "\n"; + } + Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; + return tagCounts.size(); +} + +inline std::size_t listReporters( Config const & /*config*/ ) +{ + Catch::cout() << "Available reporters:\n"; + IReporterRegistry::FactoryMap const &factories = getRegistryHub().getReporterRegistry().getFactories(); + IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it; + std::size_t maxNameLen = 0; + for (it = itBegin; it != itEnd; ++it ) { + maxNameLen = (std::max)( maxNameLen, it->first.size() ); + } + + for (it = itBegin; it != itEnd; ++it ) { + Text wrapper( it->second->getDescription(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( 7 + maxNameLen ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen - 8 ) ); + Catch::cout() << " " + << it->first + << ":" + << std::string( maxNameLen - it->first.size() + 2, ' ' ) + << wrapper << "\n"; + } + Catch::cout() << std::endl; + return factories.size(); +} + +inline Option list( Config const &config ) +{ + Option listedCount; + if ( config.listTests() ) { + listedCount = listedCount.valueOr(0) + listTests( config ); + } + if ( config.listTestNamesOnly() ) { + listedCount = listedCount.valueOr(0) + listTestsNamesOnly( config ); } + if ( config.listTags() ) { + listedCount = listedCount.valueOr(0) + listTags( config ); + } + if ( config.listReporters() ) { + listedCount = listedCount.valueOr(0) + listReporters( config ); + } + return listedCount; +} } // end namespace Catch @@ -5487,302 +6167,347 @@ namespace Catch { namespace Catch { namespace TestCaseTracking { - struct ITracker : SharedImpl<> { - virtual ~ITracker(); +struct ITracker : SharedImpl<> { + virtual ~ITracker(); - // static queries - virtual std::string name() const = 0; + // static queries + virtual std::string name() const = 0; - // dynamic queries - virtual bool isComplete() const = 0; // Successfully completed or failed - virtual bool isSuccessfullyCompleted() const = 0; - virtual bool isOpen() const = 0; // Started but not complete - virtual bool hasChildren() const = 0; + // dynamic queries + virtual bool isComplete() const = 0; // Successfully completed or failed + virtual bool isSuccessfullyCompleted() const = 0; + virtual bool isOpen() const = 0; // Started but not complete + virtual bool hasChildren() const = 0; - virtual ITracker& parent() = 0; + virtual ITracker &parent() = 0; - // actions - virtual void close() = 0; // Successfully complete - virtual void fail() = 0; - virtual void markAsNeedingAnotherRun() = 0; + // actions + virtual void close() = 0; // Successfully complete + virtual void fail() = 0; + virtual void markAsNeedingAnotherRun() = 0; - virtual void addChild( Ptr const& child ) = 0; - virtual ITracker* findChild( std::string const& name ) = 0; - virtual void openChild() = 0; + virtual void addChild( Ptr const &child ) = 0; + virtual ITracker *findChild( std::string const &name ) = 0; + virtual void openChild() = 0; - // Debug/ checking - virtual bool isSectionTracker() const = 0; - virtual bool isIndexTracker() const = 0; - }; + // Debug/ checking + virtual bool isSectionTracker() const = 0; + virtual bool isIndexTracker() const = 0; +}; - class TrackerContext { +class TrackerContext { - enum RunState { - NotStarted, - Executing, - CompletedCycle - }; + enum RunState { + NotStarted, + Executing, + CompletedCycle + }; - Ptr m_rootTracker; - ITracker* m_currentTracker; - RunState m_runState; + Ptr m_rootTracker; + ITracker *m_currentTracker; + RunState m_runState; - public: +public: - static TrackerContext& instance() { - static TrackerContext s_instance; - return s_instance; - } + static TrackerContext &instance() + { + static TrackerContext s_instance; + return s_instance; + } - TrackerContext() + TrackerContext() : m_currentTracker( CATCH_NULL ), m_runState( NotStarted ) - {} + {} - ITracker& startRun(); + ITracker &startRun(); - void endRun() { - m_rootTracker.reset(); - m_currentTracker = CATCH_NULL; - m_runState = NotStarted; - } + void endRun() + { + m_rootTracker.reset(); + m_currentTracker = CATCH_NULL; + m_runState = NotStarted; + } - void startCycle() { - m_currentTracker = m_rootTracker.get(); - m_runState = Executing; - } - void completeCycle() { - m_runState = CompletedCycle; - } + void startCycle() + { + m_currentTracker = m_rootTracker.get(); + m_runState = Executing; + } + void completeCycle() + { + m_runState = CompletedCycle; + } - bool completedCycle() const { - return m_runState == CompletedCycle; - } - ITracker& currentTracker() { - return *m_currentTracker; - } - void setCurrentTracker( ITracker* tracker ) { - m_currentTracker = tracker; - } - }; + bool completedCycle() const + { + return m_runState == CompletedCycle; + } + ITracker ¤tTracker() + { + return *m_currentTracker; + } + void setCurrentTracker( ITracker *tracker ) + { + m_currentTracker = tracker; + } +}; - class TrackerBase : public ITracker { - protected: - enum CycleState { - NotStarted, - Executing, - ExecutingChildren, - NeedsAnotherRun, - CompletedSuccessfully, - Failed - }; - class TrackerHasName { - std::string m_name; - public: - TrackerHasName( std::string const& name ) : m_name( name ) {} - bool operator ()( Ptr const& tracker ) { - return tracker->name() == m_name; - } - }; - typedef std::vector > Children; +class TrackerBase : public ITracker { +protected: + enum CycleState { + NotStarted, + Executing, + ExecutingChildren, + NeedsAnotherRun, + CompletedSuccessfully, + Failed + }; + class TrackerHasName { std::string m_name; - TrackerContext& m_ctx; - ITracker* m_parent; - Children m_children; - CycleState m_runState; public: - TrackerBase( std::string const& name, TrackerContext& ctx, ITracker* parent ) + TrackerHasName( std::string const &name ) : m_name( name ) {} + bool operator ()( Ptr const &tracker ) + { + return tracker->name() == m_name; + } + }; + typedef std::vector > Children; + std::string m_name; + TrackerContext &m_ctx; + ITracker *m_parent; + Children m_children; + CycleState m_runState; +public: + TrackerBase( std::string const &name, TrackerContext &ctx, ITracker *parent ) : m_name( name ), m_ctx( ctx ), m_parent( parent ), m_runState( NotStarted ) - {} - virtual ~TrackerBase(); + {} + virtual ~TrackerBase(); - virtual std::string name() const CATCH_OVERRIDE { - return m_name; - } - virtual bool isComplete() const CATCH_OVERRIDE { - return m_runState == CompletedSuccessfully || m_runState == Failed; - } - virtual bool isSuccessfullyCompleted() const CATCH_OVERRIDE { - return m_runState == CompletedSuccessfully; - } - virtual bool isOpen() const CATCH_OVERRIDE { - return m_runState != NotStarted && !isComplete(); - } - virtual bool hasChildren() const CATCH_OVERRIDE { - return !m_children.empty(); - } + virtual std::string name() const CATCH_OVERRIDE + { + return m_name; + } + virtual bool isComplete() const CATCH_OVERRIDE + { + return m_runState == CompletedSuccessfully || m_runState == Failed; + } + virtual bool isSuccessfullyCompleted() const CATCH_OVERRIDE + { + return m_runState == CompletedSuccessfully; + } + virtual bool isOpen() const CATCH_OVERRIDE + { + return m_runState != NotStarted && !isComplete(); + } + virtual bool hasChildren() const CATCH_OVERRIDE + { + return !m_children.empty(); + } - virtual void addChild( Ptr const& child ) CATCH_OVERRIDE { - m_children.push_back( child ); - } + virtual void addChild( Ptr const &child ) CATCH_OVERRIDE { + m_children.push_back( child ); + } - virtual ITracker* findChild( std::string const& name ) CATCH_OVERRIDE { - Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( name ) ); - return( it != m_children.end() ) - ? it->get() - : CATCH_NULL; - } - virtual ITracker& parent() CATCH_OVERRIDE { - assert( m_parent ); // Should always be non-null except for root - return *m_parent; - } + virtual ITracker *findChild( std::string const &name ) CATCH_OVERRIDE { + Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( name ) ); + return ( it != m_children.end() ) + ? it->get() + : CATCH_NULL; + } + virtual ITracker &parent() CATCH_OVERRIDE { + assert( m_parent ); // Should always be non-null except for root + return *m_parent; + } - virtual void openChild() CATCH_OVERRIDE { - if( m_runState != ExecutingChildren ) { - m_runState = ExecutingChildren; - if( m_parent ) - m_parent->openChild(); + virtual void openChild() CATCH_OVERRIDE { + if ( m_runState != ExecutingChildren ) + { + m_runState = ExecutingChildren; + if ( m_parent ) { + m_parent->openChild(); } } + } - virtual bool isSectionTracker() const CATCH_OVERRIDE { return false; } - virtual bool isIndexTracker() const CATCH_OVERRIDE { return false; } + virtual bool isSectionTracker() const CATCH_OVERRIDE + { + return false; + } + virtual bool isIndexTracker() const CATCH_OVERRIDE + { + return false; + } - void open() { - m_runState = Executing; - moveToThis(); - if( m_parent ) - m_parent->openChild(); + void open() + { + m_runState = Executing; + moveToThis(); + if ( m_parent ) { + m_parent->openChild(); } + } - virtual void close() CATCH_OVERRIDE { - - // Close any still open children (e.g. generators) - while( &m_ctx.currentTracker() != this ) - m_ctx.currentTracker().close(); + virtual void close() CATCH_OVERRIDE { - switch( m_runState ) { - case NotStarted: - case CompletedSuccessfully: - case Failed: - throw std::logic_error( "Illogical state" ); + // Close any still open children (e.g. generators) + while ( &m_ctx.currentTracker() != this ) + { + m_ctx.currentTracker().close(); + } - case NeedsAnotherRun: - break;; + switch ( m_runState ) + { + case NotStarted: + case CompletedSuccessfully: + case Failed: + throw std::logic_error( "Illogical state" ); - case Executing: - m_runState = CompletedSuccessfully; - break; - case ExecutingChildren: - if( m_children.empty() || m_children.back()->isComplete() ) - m_runState = CompletedSuccessfully; - break; + case NeedsAnotherRun: + break;; - default: - throw std::logic_error( "Unexpected state" ); + case Executing: + m_runState = CompletedSuccessfully; + break; + case ExecutingChildren: + if ( m_children.empty() || m_children.back()->isComplete() ) { + m_runState = CompletedSuccessfully; } - moveToParent(); - m_ctx.completeCycle(); - } - virtual void fail() CATCH_OVERRIDE { - m_runState = Failed; - if( m_parent ) - m_parent->markAsNeedingAnotherRun(); - moveToParent(); - m_ctx.completeCycle(); - } - virtual void markAsNeedingAnotherRun() CATCH_OVERRIDE { - m_runState = NeedsAnotherRun; - } - private: - void moveToParent() { - assert( m_parent ); - m_ctx.setCurrentTracker( m_parent ); + break; + + default: + throw std::logic_error( "Unexpected state" ); } - void moveToThis() { - m_ctx.setCurrentTracker( this ); + moveToParent(); + m_ctx.completeCycle(); + } + virtual void fail() CATCH_OVERRIDE { + m_runState = Failed; + if ( m_parent ) + { + m_parent->markAsNeedingAnotherRun(); } - }; + moveToParent(); + m_ctx.completeCycle(); + } + virtual void markAsNeedingAnotherRun() CATCH_OVERRIDE { + m_runState = NeedsAnotherRun; + } +private: + void moveToParent() + { + assert( m_parent ); + m_ctx.setCurrentTracker( m_parent ); + } + void moveToThis() + { + m_ctx.setCurrentTracker( this ); + } +}; - class SectionTracker : public TrackerBase { - public: - SectionTracker( std::string const& name, TrackerContext& ctx, ITracker* parent ) +class SectionTracker : public TrackerBase { +public: + SectionTracker( std::string const &name, TrackerContext &ctx, ITracker *parent ) : TrackerBase( name, ctx, parent ) - {} - virtual ~SectionTracker(); + {} + virtual ~SectionTracker(); - virtual bool isSectionTracker() const CATCH_OVERRIDE { return true; } + virtual bool isSectionTracker() const CATCH_OVERRIDE + { + return true; + } - static SectionTracker& acquire( TrackerContext& ctx, std::string const& name ) { - SectionTracker* section = CATCH_NULL; + static SectionTracker &acquire( TrackerContext &ctx, std::string const &name ) + { + SectionTracker *section = CATCH_NULL; - ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { - assert( childTracker ); - assert( childTracker->isSectionTracker() ); - section = static_cast( childTracker ); - } - else { - section = new SectionTracker( name, ctx, ¤tTracker ); - currentTracker.addChild( section ); - } - if( !ctx.completedCycle() && !section->isComplete() ) { + ITracker ¤tTracker = ctx.currentTracker(); + if ( ITracker *childTracker = currentTracker.findChild( name ) ) { + assert( childTracker ); + assert( childTracker->isSectionTracker() ); + section = static_cast( childTracker ); + } else { + section = new SectionTracker( name, ctx, ¤tTracker ); + currentTracker.addChild( section ); + } + if ( !ctx.completedCycle() && !section->isComplete() ) { - section->open(); - } - return *section; + section->open(); } - }; + return *section; + } +}; - class IndexTracker : public TrackerBase { - int m_size; - int m_index; - public: - IndexTracker( std::string const& name, TrackerContext& ctx, ITracker* parent, int size ) +class IndexTracker : public TrackerBase { + int m_size; + int m_index; +public: + IndexTracker( std::string const &name, TrackerContext &ctx, ITracker *parent, int size ) : TrackerBase( name, ctx, parent ), m_size( size ), m_index( -1 ) - {} - virtual ~IndexTracker(); + {} + virtual ~IndexTracker(); - virtual bool isIndexTracker() const CATCH_OVERRIDE { return true; } + virtual bool isIndexTracker() const CATCH_OVERRIDE + { + return true; + } - static IndexTracker& acquire( TrackerContext& ctx, std::string const& name, int size ) { - IndexTracker* tracker = CATCH_NULL; + static IndexTracker &acquire( TrackerContext &ctx, std::string const &name, int size ) + { + IndexTracker *tracker = CATCH_NULL; - ITracker& currentTracker = ctx.currentTracker(); - if( ITracker* childTracker = currentTracker.findChild( name ) ) { - assert( childTracker ); - assert( childTracker->isIndexTracker() ); - tracker = static_cast( childTracker ); - } - else { - tracker = new IndexTracker( name, ctx, ¤tTracker, size ); - currentTracker.addChild( tracker ); - } + ITracker ¤tTracker = ctx.currentTracker(); + if ( ITracker *childTracker = currentTracker.findChild( name ) ) { + assert( childTracker ); + assert( childTracker->isIndexTracker() ); + tracker = static_cast( childTracker ); + } else { + tracker = new IndexTracker( name, ctx, ¤tTracker, size ); + currentTracker.addChild( tracker ); + } - if( !ctx.completedCycle() && !tracker->isComplete() ) { - if( tracker->m_runState != ExecutingChildren && tracker->m_runState != NeedsAnotherRun ) - tracker->moveNext(); - tracker->open(); + if ( !ctx.completedCycle() && !tracker->isComplete() ) { + if ( tracker->m_runState != ExecutingChildren && tracker->m_runState != NeedsAnotherRun ) { + tracker->moveNext(); } - - return *tracker; + tracker->open(); } - int index() const { return m_index; } + return *tracker; + } - void moveNext() { - m_index++; - m_children.clear(); - } + int index() const + { + return m_index; + } - virtual void close() CATCH_OVERRIDE { - TrackerBase::close(); - if( m_runState == CompletedSuccessfully && m_index < m_size-1 ) - m_runState = Executing; - } - }; + void moveNext() + { + m_index++; + m_children.clear(); + } - inline ITracker& TrackerContext::startRun() { - m_rootTracker = new SectionTracker( "{root}", *this, CATCH_NULL ); - m_currentTracker = CATCH_NULL; - m_runState = Executing; - return *m_rootTracker; + virtual void close() CATCH_OVERRIDE { + TrackerBase::close(); + if ( m_runState == CompletedSuccessfully && m_index < m_size - 1 ) + { + m_runState = Executing; + } } +}; + +inline ITracker &TrackerContext::startRun() +{ + m_rootTracker = new SectionTracker( "{root}", *this, CATCH_NULL ); + m_currentTracker = CATCH_NULL; + m_runState = Executing; + return *m_rootTracker; +} } // namespace TestCaseTracking @@ -5798,15 +6523,17 @@ using TestCaseTracking::IndexTracker; namespace Catch { - // Report the error condition then exit the process - inline void fatal( std::string const& message, int exitCode ) { - IContext& context = Catch::getCurrentContext(); - IResultCapture* resultCapture = context.getResultCapture(); - resultCapture->handleFatalErrorCondition( message ); +// Report the error condition then exit the process +inline void fatal( std::string const &message, int exitCode ) +{ + IContext &context = Catch::getCurrentContext(); + IResultCapture *resultCapture = context.getResultCapture(); + resultCapture->handleFatalErrorCondition( message ); - if( Catch::alwaysTrue() ) // avoids "no return" warnings - exit( exitCode ); + if ( Catch::alwaysTrue() ) { // avoids "no return" warnings + exit( exitCode ); } +} } // namespace Catch @@ -5814,9 +6541,9 @@ namespace Catch { namespace Catch { - struct FatalConditionHandler { - void reset() {} - }; +struct FatalConditionHandler { + void reset() {} +}; } // namespace Catch @@ -5826,43 +6553,53 @@ namespace Catch { namespace Catch { - struct SignalDefs { int id; const char* name; }; - extern SignalDefs signalDefs[]; - SignalDefs signalDefs[] = { - { SIGINT, "SIGINT - Terminal interrupt signal" }, - { SIGILL, "SIGILL - Illegal instruction signal" }, - { SIGFPE, "SIGFPE - Floating point error signal" }, - { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, - { SIGTERM, "SIGTERM - Termination request signal" }, - { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } - }; +struct SignalDefs { + int id; + const char *name; +}; +extern SignalDefs signalDefs[]; +SignalDefs signalDefs[] = { + { SIGINT, "SIGINT - Terminal interrupt signal" }, + { SIGILL, "SIGILL - Illegal instruction signal" }, + { SIGFPE, "SIGFPE - Floating point error signal" }, + { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, + { SIGTERM, "SIGTERM - Termination request signal" }, + { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } +}; - struct FatalConditionHandler { +struct FatalConditionHandler { - static void handleSignal( int sig ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - if( sig == signalDefs[i].id ) - fatal( signalDefs[i].name, -sig ); - fatal( "", -sig ); - } + static void handleSignal( int sig ) + { + for ( std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i ) + if ( sig == signalDefs[i].id ) { + fatal( signalDefs[i].name, -sig ); + } + fatal( "", -sig ); + } - FatalConditionHandler() : m_isSet( true ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, handleSignal ); - } - ~FatalConditionHandler() { - reset(); + FatalConditionHandler() : m_isSet( true ) + { + for ( std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i ) { + signal( signalDefs[i].id, handleSignal ); } - void reset() { - if( m_isSet ) { - for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) - signal( signalDefs[i].id, SIG_DFL ); - m_isSet = false; + } + ~FatalConditionHandler() + { + reset(); + } + void reset() + { + if ( m_isSet ) { + for ( std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i ) { + signal( signalDefs[i].id, SIG_DFL ); } + m_isSet = false; } + } - bool m_isSet; - }; + bool m_isSet; +}; } // namespace Catch @@ -5873,335 +6610,359 @@ namespace Catch { namespace Catch { - class StreamRedirect { +class StreamRedirect { - public: - StreamRedirect( std::ostream& stream, std::string& targetString ) +public: + StreamRedirect( std::ostream &stream, std::string &targetString ) : m_stream( stream ), m_prevBuf( stream.rdbuf() ), m_targetString( targetString ) - { - stream.rdbuf( m_oss.rdbuf() ); - } + { + stream.rdbuf( m_oss.rdbuf() ); + } - ~StreamRedirect() { - m_targetString += m_oss.str(); - m_stream.rdbuf( m_prevBuf ); - } + ~StreamRedirect() + { + m_targetString += m_oss.str(); + m_stream.rdbuf( m_prevBuf ); + } - private: - std::ostream& m_stream; - std::streambuf* m_prevBuf; - std::ostringstream m_oss; - std::string& m_targetString; - }; +private: + std::ostream &m_stream; + std::streambuf *m_prevBuf; + std::ostringstream m_oss; + std::string &m_targetString; +}; - /////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////// - class RunContext : public IResultCapture, public IRunner { +class RunContext : public IResultCapture, public IRunner { - RunContext( RunContext const& ); - void operator =( RunContext const& ); + RunContext( RunContext const & ); + void operator =( RunContext const & ); - public: +public: - explicit RunContext( Ptr const& _config, Ptr const& reporter ) + explicit RunContext( Ptr const &_config, Ptr const &reporter ) : m_runInfo( _config->name() ), m_context( getCurrentMutableContext() ), m_activeTestCase( CATCH_NULL ), m_config( _config ), m_reporter( reporter ) - { - m_context.setRunner( this ); - m_context.setConfig( m_config ); - m_context.setResultCapture( this ); - m_reporter->testRunStarting( m_runInfo ); - } + { + m_context.setRunner( this ); + m_context.setConfig( m_config ); + m_context.setResultCapture( this ); + m_reporter->testRunStarting( m_runInfo ); + } - virtual ~RunContext() { - m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, aborting() ) ); - } + virtual ~RunContext() + { + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, aborting() ) ); + } - void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount ) { - m_reporter->testGroupStarting( GroupInfo( testSpec, groupIndex, groupsCount ) ); - } - void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount ) { - m_reporter->testGroupEnded( TestGroupStats( GroupInfo( testSpec, groupIndex, groupsCount ), totals, aborting() ) ); - } + void testGroupStarting( std::string const &testSpec, std::size_t groupIndex, std::size_t groupsCount ) + { + m_reporter->testGroupStarting( GroupInfo( testSpec, groupIndex, groupsCount ) ); + } + void testGroupEnded( std::string const &testSpec, Totals const &totals, std::size_t groupIndex, std::size_t groupsCount ) + { + m_reporter->testGroupEnded( TestGroupStats( GroupInfo( testSpec, groupIndex, groupsCount ), totals, aborting() ) ); + } - Totals runTest( TestCase const& testCase ) { - Totals prevTotals = m_totals; + Totals runTest( TestCase const &testCase ) + { + Totals prevTotals = m_totals; - std::string redirectedCout; - std::string redirectedCerr; + std::string redirectedCout; + std::string redirectedCerr; - TestCaseInfo testInfo = testCase.getTestCaseInfo(); + TestCaseInfo testInfo = testCase.getTestCaseInfo(); - m_reporter->testCaseStarting( testInfo ); + m_reporter->testCaseStarting( testInfo ); - m_activeTestCase = &testCase; + m_activeTestCase = &testCase; + do { + m_trackerContext.startRun(); do { - m_trackerContext.startRun(); - do { - m_trackerContext.startCycle(); - m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, testInfo.name ); - runCurrentTest( redirectedCout, redirectedCerr ); - } - while( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() ); - } - // !TBD: deprecated - this will be replaced by indexed trackers - while( getCurrentContext().advanceGeneratorsForCurrentTest() && !aborting() ); - - Totals deltaTotals = m_totals.delta( prevTotals ); - if( testInfo.expectedToFail() && deltaTotals.testCases.passed > 0 ) { - deltaTotals.assertions.failed++; - deltaTotals.testCases.passed--; - deltaTotals.testCases.failed++; - } - m_totals.testCases += deltaTotals.testCases; - m_reporter->testCaseEnded( TestCaseStats( testInfo, - deltaTotals, - redirectedCout, - redirectedCerr, - aborting() ) ); - - m_activeTestCase = CATCH_NULL; - m_testCaseTracker = CATCH_NULL; - - return deltaTotals; + m_trackerContext.startCycle(); + m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, testInfo.name ); + runCurrentTest( redirectedCout, redirectedCerr ); + } while ( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() ); } + // !TBD: deprecated - this will be replaced by indexed trackers + while ( getCurrentContext().advanceGeneratorsForCurrentTest() && !aborting() ); - Ptr config() const { - return m_config; + Totals deltaTotals = m_totals.delta( prevTotals ); + if ( testInfo.expectedToFail() && deltaTotals.testCases.passed > 0 ) { + deltaTotals.assertions.failed++; + deltaTotals.testCases.passed--; + deltaTotals.testCases.failed++; } + m_totals.testCases += deltaTotals.testCases; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + redirectedCout, + redirectedCerr, + aborting() ) ); - private: // IResultCapture - - virtual void assertionEnded( AssertionResult const& result ) { - if( result.getResultType() == ResultWas::Ok ) { - m_totals.assertions.passed++; - } - else if( !result.isOk() ) { - m_totals.assertions.failed++; - } + m_activeTestCase = CATCH_NULL; + m_testCaseTracker = CATCH_NULL; - if( m_reporter->assertionEnded( AssertionStats( result, m_messages, m_totals ) ) ) - m_messages.clear(); + return deltaTotals; + } - // Reset working state - m_lastAssertionInfo = AssertionInfo( "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); - m_lastResult = result; - } + Ptr config() const + { + return m_config; + } - virtual bool sectionStarted ( - SectionInfo const& sectionInfo, - Counts& assertions - ) - { - std::ostringstream oss; - oss << sectionInfo.name << "@" << sectionInfo.lineInfo; +private: // IResultCapture - ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, oss.str() ); - if( !sectionTracker.isOpen() ) - return false; - m_activeSections.push_back( §ionTracker ); + virtual void assertionEnded( AssertionResult const &result ) + { + if ( result.getResultType() == ResultWas::Ok ) { + m_totals.assertions.passed++; + } else if ( !result.isOk() ) { + m_totals.assertions.failed++; + } - m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo; + if ( m_reporter->assertionEnded( AssertionStats( result, m_messages, m_totals ) ) ) { + m_messages.clear(); + } - m_reporter->sectionStarting( sectionInfo ); + // Reset working state + m_lastAssertionInfo = AssertionInfo( "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}", m_lastAssertionInfo.resultDisposition ); + m_lastResult = result; + } - assertions = m_totals.assertions; + virtual bool sectionStarted ( + SectionInfo const §ionInfo, + Counts &assertions + ) + { + std::ostringstream oss; + oss << sectionInfo.name << "@" << sectionInfo.lineInfo; - return true; - } - bool testForMissingAssertions( Counts& assertions ) { - if( assertions.total() != 0 ) - return false; - if( !m_config->warnAboutMissingAssertions() ) - return false; - if( m_trackerContext.currentTracker().hasChildren() ) - return false; - m_totals.assertions.failed++; - assertions.failed++; - return true; + ITracker §ionTracker = SectionTracker::acquire( m_trackerContext, oss.str() ); + if ( !sectionTracker.isOpen() ) { + return false; } + m_activeSections.push_back( §ionTracker ); - virtual void sectionEnded( SectionEndInfo const& endInfo ) { - Counts assertions = m_totals.assertions - endInfo.prevAssertions; - bool missingAssertions = testForMissingAssertions( assertions ); + m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo; - if( !m_activeSections.empty() ) { - m_activeSections.back()->close(); - m_activeSections.pop_back(); - } + m_reporter->sectionStarting( sectionInfo ); - m_reporter->sectionEnded( SectionStats( endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions ) ); - m_messages.clear(); + assertions = m_totals.assertions; + + return true; + } + bool testForMissingAssertions( Counts &assertions ) + { + if ( assertions.total() != 0 ) { + return false; + } + if ( !m_config->warnAboutMissingAssertions() ) { + return false; + } + if ( m_trackerContext.currentTracker().hasChildren() ) { + return false; } + m_totals.assertions.failed++; + assertions.failed++; + return true; + } - virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) { - if( m_unfinishedSections.empty() ) - m_activeSections.back()->fail(); - else - m_activeSections.back()->close(); - m_activeSections.pop_back(); + virtual void sectionEnded( SectionEndInfo const &endInfo ) + { + Counts assertions = m_totals.assertions - endInfo.prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); - m_unfinishedSections.push_back( endInfo ); + if ( !m_activeSections.empty() ) { + m_activeSections.back()->close(); + m_activeSections.pop_back(); } - virtual void pushScopedMessage( MessageInfo const& message ) { - m_messages.push_back( message ); - } + m_reporter->sectionEnded( SectionStats( endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions ) ); + m_messages.clear(); + } - virtual void popScopedMessage( MessageInfo const& message ) { - m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() ); + virtual void sectionEndedEarly( SectionEndInfo const &endInfo ) + { + if ( m_unfinishedSections.empty() ) { + m_activeSections.back()->fail(); + } else { + m_activeSections.back()->close(); } + m_activeSections.pop_back(); - virtual std::string getCurrentTestName() const { - return m_activeTestCase - ? m_activeTestCase->getTestCaseInfo().name - : ""; - } + m_unfinishedSections.push_back( endInfo ); + } - virtual const AssertionResult* getLastResult() const { - return &m_lastResult; - } + virtual void pushScopedMessage( MessageInfo const &message ) + { + m_messages.push_back( message ); + } - virtual void handleFatalErrorCondition( std::string const& message ) { - ResultBuilder resultBuilder = makeUnexpectedResultBuilder(); - resultBuilder.setResultType( ResultWas::FatalErrorCondition ); - resultBuilder << message; - resultBuilder.captureExpression(); + virtual void popScopedMessage( MessageInfo const &message ) + { + m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() ); + } - handleUnfinishedSections(); + virtual std::string getCurrentTestName() const + { + return m_activeTestCase + ? m_activeTestCase->getTestCaseInfo().name + : ""; + } - // Recreate section for test case (as we will lose the one that was in scope) - TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); - SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + virtual const AssertionResult *getLastResult() const + { + return &m_lastResult; + } - Counts assertions; - assertions.failed = 1; - SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false ); - m_reporter->sectionEnded( testCaseSectionStats ); + virtual void handleFatalErrorCondition( std::string const &message ) + { + ResultBuilder resultBuilder = makeUnexpectedResultBuilder(); + resultBuilder.setResultType( ResultWas::FatalErrorCondition ); + resultBuilder << message; + resultBuilder.captureExpression(); - TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo(); + handleUnfinishedSections(); - Totals deltaTotals; - deltaTotals.testCases.failed = 1; - m_reporter->testCaseEnded( TestCaseStats( testInfo, - deltaTotals, - "", - "", - false ) ); - m_totals.testCases.failed++; - testGroupEnded( "", m_totals, 1, 1 ); - m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); - } + // Recreate section for test case (as we will lose the one that was in scope) + TestCaseInfo const &testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); - public: - // !TBD We need to do this another way! - bool aborting() const { - return m_totals.assertions.failed == static_cast( m_config->abortAfter() ); - } + Counts assertions; + assertions.failed = 1; + SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false ); + m_reporter->sectionEnded( testCaseSectionStats ); - private: + TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo(); - void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr ) { - TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); - SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); - m_reporter->sectionStarting( testCaseSection ); - Counts prevAssertions = m_totals.assertions; - double duration = 0; - try { - m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); + Totals deltaTotals; + deltaTotals.testCases.failed = 1; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + "", + "", + false ) ); + m_totals.testCases.failed++; + testGroupEnded( "", m_totals, 1, 1 ); + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); + } - seedRng( *m_config ); +public: + // !TBD We need to do this another way! + bool aborting() const + { + return m_totals.assertions.failed == static_cast( m_config->abortAfter() ); + } - Timer timer; - timer.start(); - if( m_reporter->getPreferences().shouldRedirectStdOut ) { - StreamRedirect coutRedir( Catch::cout(), redirectedCout ); - StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr ); - invokeActiveTestCase(); - } - else { - invokeActiveTestCase(); - } - duration = timer.getElapsedSeconds(); - } - catch( TestFailureException& ) { - // This just means the test was aborted due to failure - } - catch(...) { - makeUnexpectedResultBuilder().useActiveException(); - } - m_testCaseTracker->close(); - handleUnfinishedSections(); - m_messages.clear(); +private: - Counts assertions = m_totals.assertions - prevAssertions; - bool missingAssertions = testForMissingAssertions( assertions ); + void runCurrentTest( std::string &redirectedCout, std::string &redirectedCerr ) + { + TestCaseInfo const &testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + m_reporter->sectionStarting( testCaseSection ); + Counts prevAssertions = m_totals.assertions; + double duration = 0; + try { + m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); - if( testCaseInfo.okToFail() ) { - std::swap( assertions.failedButOk, assertions.failed ); - m_totals.assertions.failed -= assertions.failedButOk; - m_totals.assertions.failedButOk += assertions.failedButOk; - } + seedRng( *m_config ); - SectionStats testCaseSectionStats( testCaseSection, assertions, duration, missingAssertions ); - m_reporter->sectionEnded( testCaseSectionStats ); + Timer timer; + timer.start(); + if ( m_reporter->getPreferences().shouldRedirectStdOut ) { + StreamRedirect coutRedir( Catch::cout(), redirectedCout ); + StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr ); + invokeActiveTestCase(); + } else { + invokeActiveTestCase(); + } + duration = timer.getElapsedSeconds(); + } catch ( TestFailureException & ) { + // This just means the test was aborted due to failure + } catch (...) { + makeUnexpectedResultBuilder().useActiveException(); } + m_testCaseTracker->close(); + handleUnfinishedSections(); + m_messages.clear(); - void invokeActiveTestCase() { - FatalConditionHandler fatalConditionHandler; // Handle signals - m_activeTestCase->invoke(); - fatalConditionHandler.reset(); + Counts assertions = m_totals.assertions - prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); + + if ( testCaseInfo.okToFail() ) { + std::swap( assertions.failedButOk, assertions.failed ); + m_totals.assertions.failed -= assertions.failedButOk; + m_totals.assertions.failedButOk += assertions.failedButOk; } - private: + SectionStats testCaseSectionStats( testCaseSection, assertions, duration, missingAssertions ); + m_reporter->sectionEnded( testCaseSectionStats ); + } - ResultBuilder makeUnexpectedResultBuilder() const { - return ResultBuilder( m_lastAssertionInfo.macroName.c_str(), - m_lastAssertionInfo.lineInfo, - m_lastAssertionInfo.capturedExpression.c_str(), - m_lastAssertionInfo.resultDisposition ); - } + void invokeActiveTestCase() + { + FatalConditionHandler fatalConditionHandler; // Handle signals + m_activeTestCase->invoke(); + fatalConditionHandler.reset(); + } - void handleUnfinishedSections() { - // If sections ended prematurely due to an exception we stored their - // infos here so we can tear them down outside the unwind process. - for( std::vector::const_reverse_iterator it = m_unfinishedSections.rbegin(), - itEnd = m_unfinishedSections.rend(); - it != itEnd; - ++it ) - sectionEnded( *it ); - m_unfinishedSections.clear(); - } - - TestRunInfo m_runInfo; - IMutableContext& m_context; - TestCase const* m_activeTestCase; - ITracker* m_testCaseTracker; - ITracker* m_currentSectionTracker; - AssertionResult m_lastResult; - - Ptr m_config; - Totals m_totals; - Ptr m_reporter; - std::vector m_messages; - AssertionInfo m_lastAssertionInfo; - std::vector m_unfinishedSections; - std::vector m_activeSections; - TrackerContext m_trackerContext; - }; +private: + + ResultBuilder makeUnexpectedResultBuilder() const + { + return ResultBuilder( m_lastAssertionInfo.macroName.c_str(), + m_lastAssertionInfo.lineInfo, + m_lastAssertionInfo.capturedExpression.c_str(), + m_lastAssertionInfo.resultDisposition ); + } + + void handleUnfinishedSections() + { + // If sections ended prematurely due to an exception we stored their + // infos here so we can tear them down outside the unwind process. + for ( std::vector::const_reverse_iterator it = m_unfinishedSections.rbegin(), + itEnd = m_unfinishedSections.rend(); + it != itEnd; + ++it ) { + sectionEnded( *it ); + } + m_unfinishedSections.clear(); + } + + TestRunInfo m_runInfo; + IMutableContext &m_context; + TestCase const *m_activeTestCase; + ITracker *m_testCaseTracker; + ITracker *m_currentSectionTracker; + AssertionResult m_lastResult; + + Ptr m_config; + Totals m_totals; + Ptr m_reporter; + std::vector m_messages; + AssertionInfo m_lastAssertionInfo; + std::vector m_unfinishedSections; + std::vector m_activeSections; + TrackerContext m_trackerContext; +}; - IResultCapture& getResultCapture() { - if( IResultCapture* capture = getCurrentContext().getResultCapture() ) - return *capture; - else - throw std::logic_error( "No result capture instance" ); +IResultCapture &getResultCapture() +{ + if ( IResultCapture *capture = getCurrentContext().getResultCapture() ) { + return *capture; + } else { + throw std::logic_error( "No result capture instance" ); } +} } // end namespace Catch @@ -6210,29 +6971,29 @@ namespace Catch { namespace Catch { - // Versioning information - struct Version { - Version( unsigned int _majorVersion, - unsigned int _minorVersion, - unsigned int _patchNumber, - std::string const& _branchName, - unsigned int _buildNumber ); +// Versioning information +struct Version { + Version( unsigned int _majorVersion, + unsigned int _minorVersion, + unsigned int _patchNumber, + std::string const &_branchName, + unsigned int _buildNumber ); - unsigned int const majorVersion; - unsigned int const minorVersion; - unsigned int const patchNumber; + unsigned int const majorVersion; + unsigned int const minorVersion; + unsigned int const patchNumber; - // buildNumber is only used if branchName is not null - std::string const branchName; - unsigned int const buildNumber; + // buildNumber is only used if branchName is not null + std::string const branchName; + unsigned int const buildNumber; - friend std::ostream& operator << ( std::ostream& os, Version const& version ); + friend std::ostream &operator << ( std::ostream &os, Version const &version ); - private: - void operator=( Version const& ); - }; +private: + void operator=( Version const & ); +}; - extern Version libraryVersion; +extern Version libraryVersion; } #include @@ -6241,197 +7002,225 @@ namespace Catch { namespace Catch { - Ptr createReporter( std::string const& reporterName, Ptr const& config ) { - Ptr reporter = getRegistryHub().getReporterRegistry().create( reporterName, config.get() ); - if( !reporter ) { - std::ostringstream oss; - oss << "No reporter registered with name: '" << reporterName << "'"; - throw std::domain_error( oss.str() ); - } - return reporter; +Ptr createReporter( std::string const &reporterName, Ptr const &config ) +{ + Ptr reporter = getRegistryHub().getReporterRegistry().create( reporterName, config.get() ); + if ( !reporter ) { + std::ostringstream oss; + oss << "No reporter registered with name: '" << reporterName << "'"; + throw std::domain_error( oss.str() ); } + return reporter; +} - Ptr makeReporter( Ptr const& config ) { - std::vector reporters = config->getReporterNames(); - if( reporters.empty() ) - reporters.push_back( "console" ); +Ptr makeReporter( Ptr const &config ) +{ + std::vector reporters = config->getReporterNames(); + if ( reporters.empty() ) { + reporters.push_back( "console" ); + } - Ptr reporter; - for( std::vector::const_iterator it = reporters.begin(), itEnd = reporters.end(); - it != itEnd; - ++it ) - reporter = addReporter( reporter, createReporter( *it, config ) ); - return reporter; + Ptr reporter; + for ( std::vector::const_iterator it = reporters.begin(), itEnd = reporters.end(); + it != itEnd; + ++it ) { + reporter = addReporter( reporter, createReporter( *it, config ) ); } - Ptr addListeners( Ptr const& config, Ptr reporters ) { - IReporterRegistry::Listeners listeners = getRegistryHub().getReporterRegistry().getListeners(); - for( IReporterRegistry::Listeners::const_iterator it = listeners.begin(), itEnd = listeners.end(); - it != itEnd; - ++it ) - reporters = addReporter(reporters, (*it)->create( ReporterConfig( config ) ) ); - return reporters; + return reporter; +} +Ptr addListeners( Ptr const &config, Ptr reporters ) +{ + IReporterRegistry::Listeners listeners = getRegistryHub().getReporterRegistry().getListeners(); + for ( IReporterRegistry::Listeners::const_iterator it = listeners.begin(), itEnd = listeners.end(); + it != itEnd; + ++it ) { + reporters = addReporter(reporters, (*it)->create( ReporterConfig( config ) ) ); } + return reporters; +} - Totals runTests( Ptr const& config ) { +Totals runTests( Ptr const &config ) +{ - Ptr iconfig = config.get(); + Ptr iconfig = config.get(); - Ptr reporter = makeReporter( config ); - reporter = addListeners( iconfig, reporter ); + Ptr reporter = makeReporter( config ); + reporter = addListeners( iconfig, reporter ); - RunContext context( iconfig, reporter ); + RunContext context( iconfig, reporter ); - Totals totals; + Totals totals; - context.testGroupStarting( config->name(), 1, 1 ); + context.testGroupStarting( config->name(), 1, 1 ); - TestSpec testSpec = config->testSpec(); - if( !testSpec.hasFilters() ) - testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "~[.]" ).testSpec(); // All not hidden tests + TestSpec testSpec = config->testSpec(); + if ( !testSpec.hasFilters() ) { + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "~[.]" ).testSpec(); // All not hidden tests + } - std::vector const& allTestCases = getAllTestCasesSorted( *iconfig ); - for( std::vector::const_iterator it = allTestCases.begin(), itEnd = allTestCases.end(); - it != itEnd; - ++it ) { - if( !context.aborting() && matchTest( *it, testSpec, *iconfig ) ) - totals += context.runTest( *it ); - else - reporter->skipTest( *it ); + std::vector const &allTestCases = getAllTestCasesSorted( *iconfig ); + for ( std::vector::const_iterator it = allTestCases.begin(), itEnd = allTestCases.end(); + it != itEnd; + ++it ) { + if ( !context.aborting() && matchTest( *it, testSpec, *iconfig ) ) { + totals += context.runTest( *it ); + } else { + reporter->skipTest( *it ); } - - context.testGroupEnded( iconfig->name(), totals, 1, 1 ); - return totals; } - void applyFilenamesAsTags( IConfig const& config ) { - std::vector const& tests = getAllTestCasesSorted( config ); - for(std::size_t i = 0; i < tests.size(); ++i ) { - TestCase& test = const_cast( tests[i] ); - std::set tags = test.tags; + context.testGroupEnded( iconfig->name(), totals, 1, 1 ); + return totals; +} - std::string filename = test.lineInfo.file; - std::string::size_type lastSlash = filename.find_last_of( "\\/" ); - if( lastSlash != std::string::npos ) - filename = filename.substr( lastSlash+1 ); +void applyFilenamesAsTags( IConfig const &config ) +{ + std::vector const &tests = getAllTestCasesSorted( config ); + for (std::size_t i = 0; i < tests.size(); ++i ) { + TestCase &test = const_cast( tests[i] ); + std::set tags = test.tags; - std::string::size_type lastDot = filename.find_last_of( "." ); - if( lastDot != std::string::npos ) - filename = filename.substr( 0, lastDot ); + std::string filename = test.lineInfo.file; + std::string::size_type lastSlash = filename.find_last_of( "\\/" ); + if ( lastSlash != std::string::npos ) { + filename = filename.substr( lastSlash + 1 ); + } - tags.insert( "#" + filename ); - setTags( test, tags ); + std::string::size_type lastDot = filename.find_last_of( "." ); + if ( lastDot != std::string::npos ) { + filename = filename.substr( 0, lastDot ); } + + tags.insert( "#" + filename ); + setTags( test, tags ); } +} - class Session : NonCopyable { - static bool alreadyInstantiated; +class Session : NonCopyable { + static bool alreadyInstantiated; - public: +public: - struct OnUnusedOptions { enum DoWhat { Ignore, Fail }; }; + struct OnUnusedOptions { + enum DoWhat { Ignore, Fail }; + }; - Session() - : m_cli( makeCommandLineParser() ) { - if( alreadyInstantiated ) { - std::string msg = "Only one instance of Catch::Session can ever be used"; - Catch::cerr() << msg << std::endl; - throw std::logic_error( msg ); - } - alreadyInstantiated = true; - } - ~Session() { - Catch::cleanUp(); + Session() + : m_cli( makeCommandLineParser() ) + { + if ( alreadyInstantiated ) { + std::string msg = "Only one instance of Catch::Session can ever be used"; + Catch::cerr() << msg << std::endl; + throw std::logic_error( msg ); } + alreadyInstantiated = true; + } + ~Session() + { + Catch::cleanUp(); + } - void showHelp( std::string const& processName ) { - Catch::cout() << "\nCatch v" << libraryVersion << "\n"; + void showHelp( std::string const &processName ) + { + Catch::cout() << "\nCatch v" << libraryVersion << "\n"; - m_cli.usage( Catch::cout(), processName ); - Catch::cout() << "For more detail usage please see the project docs\n" << std::endl; - } + m_cli.usage( Catch::cout(), processName ); + Catch::cout() << "For more detail usage please see the project docs\n" << std::endl; + } - int applyCommandLine( int argc, char const* const* const argv, OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) { - try { - m_cli.setThrowOnUnrecognisedTokens( unusedOptionBehaviour == OnUnusedOptions::Fail ); - m_unusedTokens = m_cli.parseInto( Clara::argsToVector( argc, argv ), m_configData ); - if( m_configData.showHelp ) - showHelp( m_configData.processName ); - m_config.reset(); + int applyCommandLine( int argc, char const *const *const argv, OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) + { + try { + m_cli.setThrowOnUnrecognisedTokens( unusedOptionBehaviour == OnUnusedOptions::Fail ); + m_unusedTokens = m_cli.parseInto( Clara::argsToVector( argc, argv ), m_configData ); + if ( m_configData.showHelp ) { + showHelp( m_configData.processName ); } - catch( std::exception& ex ) { - { - Colour colourGuard( Colour::Red ); - Catch::cerr() + m_config.reset(); + } catch ( std::exception &ex ) { + { + Colour colourGuard( Colour::Red ); + Catch::cerr() << "\nError(s) in input:\n" << Text( ex.what(), TextAttributes().setIndent(2) ) << "\n\n"; - } - m_cli.usage( Catch::cout(), m_configData.processName ); - return (std::numeric_limits::max)(); } - return 0; + m_cli.usage( Catch::cout(), m_configData.processName ); + return (std::numeric_limits::max)(); } + return 0; + } - void useConfigData( ConfigData const& _configData ) { - m_configData = _configData; - m_config.reset(); - } + void useConfigData( ConfigData const &_configData ) + { + m_configData = _configData; + m_config.reset(); + } - int run( int argc, char const* const* const argv ) { + int run( int argc, char const *const *const argv ) + { - int returnCode = applyCommandLine( argc, argv ); - if( returnCode == 0 ) - returnCode = run(); - return returnCode; + int returnCode = applyCommandLine( argc, argv ); + if ( returnCode == 0 ) { + returnCode = run(); } + return returnCode; + } - int run() { - if( m_configData.showHelp ) - return 0; + int run() + { + if ( m_configData.showHelp ) { + return 0; + } - try - { - config(); // Force config to be constructed + try { + config(); // Force config to be constructed - seedRng( *m_config ); + seedRng( *m_config ); - if( m_configData.filenamesAsTags ) - applyFilenamesAsTags( *m_config ); - - // Handle list request - if( Option listed = list( config() ) ) - return static_cast( *listed ); - - return static_cast( runTests( m_config ).assertions.failed ); + if ( m_configData.filenamesAsTags ) { + applyFilenamesAsTags( *m_config ); } - catch( std::exception& ex ) { - Catch::cerr() << ex.what() << std::endl; - return (std::numeric_limits::max)(); + + // Handle list request + if ( Option listed = list( config() ) ) { + return static_cast( *listed ); } - } - Clara::CommandLine const& cli() const { - return m_cli; - } - std::vector const& unusedTokens() const { - return m_unusedTokens; - } - ConfigData& configData() { - return m_configData; + return static_cast( runTests( m_config ).assertions.failed ); + } catch ( std::exception &ex ) { + Catch::cerr() << ex.what() << std::endl; + return (std::numeric_limits::max)(); } - Config& config() { - if( !m_config ) - m_config = new Config( m_configData ); - return *m_config; + } + + Clara::CommandLine const &cli() const + { + return m_cli; + } + std::vector const &unusedTokens() const + { + return m_unusedTokens; + } + ConfigData &configData() + { + return m_configData; + } + Config &config() + { + if ( !m_config ) { + m_config = new Config( m_configData ); } - private: - Clara::CommandLine m_cli; - std::vector m_unusedTokens; - ConfigData m_configData; - Ptr m_config; - }; + return *m_config; + } +private: + Clara::CommandLine m_cli; + std::vector m_unusedTokens; + ConfigData m_configData; + Ptr m_config; +}; - bool Session::alreadyInstantiated = false; +bool Session::alreadyInstantiated = false; } // end namespace Catch @@ -6453,185 +7242,212 @@ namespace Catch { namespace Catch { - struct RandomNumberGenerator { - typedef int result_type; +struct RandomNumberGenerator { + typedef int result_type; - result_type operator()( result_type n ) const { return std::rand() % n; } + result_type operator()( result_type n ) const + { + return std::rand() % n; + } #ifdef CATCH_CPP14_OR_GREATER - static constexpr result_type min() { return 0; } - static constexpr result_type max() { return 1000000; } - result_type operator()() const { return std::rand() % max(); } + static constexpr result_type min() + { + return 0; + } + static constexpr result_type max() + { + return 1000000; + } + result_type operator()() const + { + return std::rand() % max(); + } #endif - template - static void shuffle( V& vector ) { - RandomNumberGenerator rng; + template + static void shuffle( V &vector ) + { + RandomNumberGenerator rng; #ifdef CATCH_CPP14_OR_GREATER - std::shuffle( vector.begin(), vector.end(), rng ); + std::shuffle( vector.begin(), vector.end(), rng ); #else - std::random_shuffle( vector.begin(), vector.end(), rng ); + std::random_shuffle( vector.begin(), vector.end(), rng ); #endif - } - }; + } +}; - inline std::vector sortTests( IConfig const& config, std::vector const& unsortedTestCases ) { +inline std::vector sortTests( IConfig const &config, std::vector const &unsortedTestCases ) +{ - std::vector sorted = unsortedTestCases; + std::vector sorted = unsortedTestCases; - switch( config.runOrder() ) { - case RunTests::InLexicographicalOrder: - std::sort( sorted.begin(), sorted.end() ); - break; - case RunTests::InRandomOrder: - { - seedRng( config ); - RandomNumberGenerator::shuffle( sorted ); - } - break; - case RunTests::InDeclarationOrder: - // already in declaration order - break; - } - return sorted; + switch ( config.runOrder() ) { + case RunTests::InLexicographicalOrder: + std::sort( sorted.begin(), sorted.end() ); + break; + case RunTests::InRandomOrder: { + seedRng( config ); + RandomNumberGenerator::shuffle( sorted ); } - bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ) { - return testSpec.matches( testCase ) && ( config.allowThrows() || !testCase.throws() ); + break; + case RunTests::InDeclarationOrder: + // already in declaration order + break; } + return sorted; +} +bool matchTest( TestCase const &testCase, TestSpec const &testSpec, IConfig const &config ) +{ + return testSpec.matches( testCase ) && ( config.allowThrows() || !testCase.throws() ); +} - void enforceNoDuplicateTestCases( std::vector const& functions ) { - std::set seenFunctions; - for( std::vector::const_iterator it = functions.begin(), itEnd = functions.end(); +void enforceNoDuplicateTestCases( std::vector const &functions ) +{ + std::set seenFunctions; + for ( std::vector::const_iterator it = functions.begin(), itEnd = functions.end(); it != itEnd; ++it ) { - std::pair::const_iterator, bool> prev = seenFunctions.insert( *it ); - if( !prev.second ) { - std::ostringstream ss; + std::pair::const_iterator, bool> prev = seenFunctions.insert( *it ); + if ( !prev.second ) { + std::ostringstream ss; - ss << Colour( Colour::Red ) - << "error: TEST_CASE( \"" << it->name << "\" ) already defined.\n" - << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n" - << "\tRedefined at " << it->getTestCaseInfo().lineInfo << std::endl; + ss << Colour( Colour::Red ) + << "error: TEST_CASE( \"" << it->name << "\" ) already defined.\n" + << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n" + << "\tRedefined at " << it->getTestCaseInfo().lineInfo << std::endl; - throw std::runtime_error(ss.str()); - } + throw std::runtime_error(ss.str()); } } +} - std::vector filterTests( std::vector const& testCases, TestSpec const& testSpec, IConfig const& config ) { - std::vector filtered; - filtered.reserve( testCases.size() ); - for( std::vector::const_iterator it = testCases.begin(), itEnd = testCases.end(); - it != itEnd; - ++it ) - if( matchTest( *it, testSpec, config ) ) - filtered.push_back( *it ); - return filtered; - } - std::vector const& getAllTestCasesSorted( IConfig const& config ) { - return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config ); - } +std::vector filterTests( std::vector const &testCases, TestSpec const &testSpec, IConfig const &config ) +{ + std::vector filtered; + filtered.reserve( testCases.size() ); + for ( std::vector::const_iterator it = testCases.begin(), itEnd = testCases.end(); + it != itEnd; + ++it ) + if ( matchTest( *it, testSpec, config ) ) { + filtered.push_back( *it ); + } + return filtered; +} +std::vector const &getAllTestCasesSorted( IConfig const &config ) +{ + return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config ); +} - class TestRegistry : public ITestCaseRegistry { - public: - TestRegistry() +class TestRegistry : public ITestCaseRegistry { +public: + TestRegistry() : m_currentSortOrder( RunTests::InDeclarationOrder ), m_unnamedCount( 0 ) - {} - virtual ~TestRegistry(); - - virtual void registerTest( TestCase const& testCase ) { - std::string name = testCase.getTestCaseInfo().name; - if( name == "" ) { - std::ostringstream oss; - oss << "Anonymous test case " << ++m_unnamedCount; - return registerTest( testCase.withName( oss.str() ) ); - } - m_functions.push_back( testCase ); + {} + virtual ~TestRegistry(); + + virtual void registerTest( TestCase const &testCase ) + { + std::string name = testCase.getTestCaseInfo().name; + if ( name == "" ) { + std::ostringstream oss; + oss << "Anonymous test case " << ++m_unnamedCount; + return registerTest( testCase.withName( oss.str() ) ); } + m_functions.push_back( testCase ); + } - virtual std::vector const& getAllTests() const { - return m_functions; + virtual std::vector const &getAllTests() const + { + return m_functions; + } + virtual std::vector const &getAllTestsSorted( IConfig const &config ) const + { + if ( m_sortedFunctions.empty() ) { + enforceNoDuplicateTestCases( m_functions ); } - virtual std::vector const& getAllTestsSorted( IConfig const& config ) const { - if( m_sortedFunctions.empty() ) - enforceNoDuplicateTestCases( m_functions ); - if( m_currentSortOrder != config.runOrder() || m_sortedFunctions.empty() ) { - m_sortedFunctions = sortTests( config, m_functions ); - m_currentSortOrder = config.runOrder(); - } - return m_sortedFunctions; + if ( m_currentSortOrder != config.runOrder() || m_sortedFunctions.empty() ) { + m_sortedFunctions = sortTests( config, m_functions ); + m_currentSortOrder = config.runOrder(); } + return m_sortedFunctions; + } - private: - std::vector m_functions; - mutable RunTests::InWhatOrder m_currentSortOrder; - mutable std::vector m_sortedFunctions; - size_t m_unnamedCount; - std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised - }; +private: + std::vector m_functions; + mutable RunTests::InWhatOrder m_currentSortOrder; + mutable std::vector m_sortedFunctions; + size_t m_unnamedCount; + std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised +}; - /////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////// - class FreeFunctionTestCase : public SharedImpl { - public: +class FreeFunctionTestCase : public SharedImpl { +public: - FreeFunctionTestCase( TestFunction fun ) : m_fun( fun ) {} + FreeFunctionTestCase( TestFunction fun ) : m_fun( fun ) {} - virtual void invoke() const { - m_fun(); - } + virtual void invoke() const + { + m_fun(); + } - private: - virtual ~FreeFunctionTestCase(); +private: + virtual ~FreeFunctionTestCase(); - TestFunction m_fun; - }; + TestFunction m_fun; +}; - inline std::string extractClassName( std::string const& classOrQualifiedMethodName ) { - std::string className = classOrQualifiedMethodName; - if( startsWith( className, "&" ) ) - { - std::size_t lastColons = className.rfind( "::" ); - std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); - if( penultimateColons == std::string::npos ) - penultimateColons = 1; - className = className.substr( penultimateColons, lastColons-penultimateColons ); +inline std::string extractClassName( std::string const &classOrQualifiedMethodName ) +{ + std::string className = classOrQualifiedMethodName; + if ( startsWith( className, "&" ) ) { + std::size_t lastColons = className.rfind( "::" ); + std::size_t penultimateColons = className.rfind( "::", lastColons - 1 ); + if ( penultimateColons == std::string::npos ) { + penultimateColons = 1; } - return className; + className = className.substr( penultimateColons, lastColons - penultimateColons ); } + return className; +} - void registerTestCase - ( ITestCase* testCase, - char const* classOrQualifiedMethodName, - NameAndDesc const& nameAndDesc, - SourceLineInfo const& lineInfo ) { +void registerTestCase +( ITestCase *testCase, + char const *classOrQualifiedMethodName, + NameAndDesc const &nameAndDesc, + SourceLineInfo const &lineInfo ) +{ - getMutableRegistryHub().registerTest - ( makeTestCase - ( testCase, - extractClassName( classOrQualifiedMethodName ), - nameAndDesc.name, - nameAndDesc.description, - lineInfo ) ); - } - void registerTestCaseFunction - ( TestFunction function, - SourceLineInfo const& lineInfo, - NameAndDesc const& nameAndDesc ) { - registerTestCase( new FreeFunctionTestCase( function ), "", nameAndDesc, lineInfo ); - } + getMutableRegistryHub().registerTest + ( makeTestCase + ( testCase, + extractClassName( classOrQualifiedMethodName ), + nameAndDesc.name, + nameAndDesc.description, + lineInfo ) ); +} +void registerTestCaseFunction +( TestFunction function, + SourceLineInfo const &lineInfo, + NameAndDesc const &nameAndDesc ) +{ + registerTestCase( new FreeFunctionTestCase( function ), "", nameAndDesc, lineInfo ); +} - /////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////// - AutoReg::AutoReg - ( TestFunction function, - SourceLineInfo const& lineInfo, - NameAndDesc const& nameAndDesc ) { - registerTestCaseFunction( function, lineInfo, nameAndDesc ); - } +AutoReg::AutoReg +( TestFunction function, + SourceLineInfo const &lineInfo, + NameAndDesc const &nameAndDesc ) +{ + registerTestCaseFunction( function, lineInfo, nameAndDesc ); +} - AutoReg::~AutoReg() {} +AutoReg::~AutoReg() {} } // end namespace Catch @@ -6642,37 +7458,43 @@ namespace Catch { namespace Catch { - class ReporterRegistry : public IReporterRegistry { +class ReporterRegistry : public IReporterRegistry { - public: +public: - virtual ~ReporterRegistry() CATCH_OVERRIDE {} + virtual ~ReporterRegistry() CATCH_OVERRIDE {} - virtual IStreamingReporter* create( std::string const& name, Ptr const& config ) const CATCH_OVERRIDE { - FactoryMap::const_iterator it = m_factories.find( name ); - if( it == m_factories.end() ) - return CATCH_NULL; - return it->second->create( ReporterConfig( config ) ); + virtual IStreamingReporter *create( std::string const &name, Ptr const &config ) const CATCH_OVERRIDE + { + FactoryMap::const_iterator it = m_factories.find( name ); + if ( it == m_factories.end() ) { + return CATCH_NULL; } + return it->second->create( ReporterConfig( config ) ); + } - void registerReporter( std::string const& name, Ptr const& factory ) { - m_factories.insert( std::make_pair( name, factory ) ); - } - void registerListener( Ptr const& factory ) { - m_listeners.push_back( factory ); - } + void registerReporter( std::string const &name, Ptr const &factory ) + { + m_factories.insert( std::make_pair( name, factory ) ); + } + void registerListener( Ptr const &factory ) + { + m_listeners.push_back( factory ); + } - virtual FactoryMap const& getFactories() const CATCH_OVERRIDE { - return m_factories; - } - virtual Listeners const& getListeners() const CATCH_OVERRIDE { - return m_listeners; - } + virtual FactoryMap const &getFactories() const CATCH_OVERRIDE + { + return m_factories; + } + virtual Listeners const &getListeners() const CATCH_OVERRIDE + { + return m_listeners; + } - private: - FactoryMap m_factories; - Listeners m_listeners; - }; +private: + FactoryMap m_factories; + Listeners m_listeners; +}; } // #included from: catch_exception_translator_registry.hpp @@ -6684,124 +7506,133 @@ namespace Catch { namespace Catch { - class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { - public: - ~ExceptionTranslatorRegistry() { - deleteAll( m_translators ); - } +class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { +public: + ~ExceptionTranslatorRegistry() + { + deleteAll( m_translators ); + } - virtual void registerTranslator( const IExceptionTranslator* translator ) { - m_translators.push_back( translator ); - } + virtual void registerTranslator( const IExceptionTranslator *translator ) + { + m_translators.push_back( translator ); + } - virtual std::string translateActiveException() const { - try { + virtual std::string translateActiveException() const + { + try { #ifdef __OBJC__ - // In Objective-C try objective-c exceptions first - @try { - return tryTranslators(); - } - @catch (NSException *exception) { - return Catch::toString( [exception description] ); - } -#else + // In Objective-C try objective-c exceptions first + @try { return tryTranslators(); -#endif - } - catch( TestFailureException& ) { - throw; - } - catch( std::exception& ex ) { - return ex.what(); - } - catch( std::string& msg ) { - return msg; } - catch( const char* msg ) { - return msg; - } - catch(...) { - return "Unknown exception"; + @catch (NSException *exception) { + return Catch::toString( [exception description] ); } +#else + return tryTranslators(); +#endif + } catch ( TestFailureException & ) { + throw; + } catch ( std::exception &ex ) { + return ex.what(); + } catch ( std::string &msg ) { + return msg; + } catch ( const char *msg ) { + return msg; + } catch (...) { + return "Unknown exception"; } + } - std::string tryTranslators() const { - if( m_translators.empty() ) - throw; - else - return m_translators[0]->translate( m_translators.begin()+1, m_translators.end() ); + std::string tryTranslators() const + { + if ( m_translators.empty() ) { + throw; + } else { + return m_translators[0]->translate( m_translators.begin() + 1, m_translators.end() ); } + } - private: - std::vector m_translators; - }; +private: + std::vector m_translators; +}; } namespace Catch { - namespace { - - class RegistryHub : public IRegistryHub, public IMutableRegistryHub { - - RegistryHub( RegistryHub const& ); - void operator=( RegistryHub const& ); - - public: // IRegistryHub - RegistryHub() { - } - virtual IReporterRegistry const& getReporterRegistry() const CATCH_OVERRIDE { - return m_reporterRegistry; - } - virtual ITestCaseRegistry const& getTestCaseRegistry() const CATCH_OVERRIDE { - return m_testCaseRegistry; - } - virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() CATCH_OVERRIDE { - return m_exceptionTranslatorRegistry; - } +namespace { - public: // IMutableRegistryHub - virtual void registerReporter( std::string const& name, Ptr const& factory ) CATCH_OVERRIDE { - m_reporterRegistry.registerReporter( name, factory ); - } - virtual void registerListener( Ptr const& factory ) CATCH_OVERRIDE { - m_reporterRegistry.registerListener( factory ); - } - virtual void registerTest( TestCase const& testInfo ) CATCH_OVERRIDE { - m_testCaseRegistry.registerTest( testInfo ); - } - virtual void registerTranslator( const IExceptionTranslator* translator ) CATCH_OVERRIDE { - m_exceptionTranslatorRegistry.registerTranslator( translator ); - } +class RegistryHub : public IRegistryHub, public IMutableRegistryHub { - private: - TestRegistry m_testCaseRegistry; - ReporterRegistry m_reporterRegistry; - ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; - }; + RegistryHub( RegistryHub const & ); + void operator=( RegistryHub const & ); - // Single, global, instance - inline RegistryHub*& getTheRegistryHub() { - static RegistryHub* theRegistryHub = CATCH_NULL; - if( !theRegistryHub ) - theRegistryHub = new RegistryHub(); - return theRegistryHub; - } +public: // IRegistryHub + RegistryHub() + { + } + virtual IReporterRegistry const &getReporterRegistry() const CATCH_OVERRIDE + { + return m_reporterRegistry; + } + virtual ITestCaseRegistry const &getTestCaseRegistry() const CATCH_OVERRIDE + { + return m_testCaseRegistry; + } + virtual IExceptionTranslatorRegistry &getExceptionTranslatorRegistry() CATCH_OVERRIDE { + return m_exceptionTranslatorRegistry; } - IRegistryHub& getRegistryHub() { - return *getTheRegistryHub(); +public: // IMutableRegistryHub + virtual void registerReporter( std::string const &name, Ptr const &factory ) CATCH_OVERRIDE { + m_reporterRegistry.registerReporter( name, factory ); + } + virtual void registerListener( Ptr const &factory ) CATCH_OVERRIDE { + m_reporterRegistry.registerListener( factory ); } - IMutableRegistryHub& getMutableRegistryHub() { - return *getTheRegistryHub(); + virtual void registerTest( TestCase const &testInfo ) CATCH_OVERRIDE { + m_testCaseRegistry.registerTest( testInfo ); } - void cleanUp() { - delete getTheRegistryHub(); - getTheRegistryHub() = CATCH_NULL; - cleanUpContext(); + virtual void registerTranslator( const IExceptionTranslator *translator ) CATCH_OVERRIDE { + m_exceptionTranslatorRegistry.registerTranslator( translator ); } - std::string translateActiveException() { - return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); + +private: + TestRegistry m_testCaseRegistry; + ReporterRegistry m_reporterRegistry; + ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; +}; + +// Single, global, instance +inline RegistryHub *&getTheRegistryHub() +{ + static RegistryHub *theRegistryHub = CATCH_NULL; + if ( !theRegistryHub ) { + theRegistryHub = new RegistryHub(); } + return theRegistryHub; +} +} + +IRegistryHub &getRegistryHub() +{ + return *getTheRegistryHub(); +} +IMutableRegistryHub &getMutableRegistryHub() +{ + return *getTheRegistryHub(); +} +void cleanUp() +{ + delete getTheRegistryHub(); + getTheRegistryHub() = CATCH_NULL; + cleanUpContext(); +} +std::string translateActiveException() +{ + return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); +} } // end namespace Catch @@ -6812,17 +7643,19 @@ namespace Catch { namespace Catch { - NotImplementedException::NotImplementedException( SourceLineInfo const& lineInfo ) - : m_lineInfo( lineInfo ) { - std::ostringstream oss; - oss << lineInfo << ": function "; - oss << "not implemented"; - m_what = oss.str(); - } +NotImplementedException::NotImplementedException( SourceLineInfo const &lineInfo ) + : m_lineInfo( lineInfo ) +{ + std::ostringstream oss; + oss << lineInfo << ": function "; + oss << "not implemented"; + m_what = oss.str(); +} - const char* NotImplementedException::what() const CATCH_NOEXCEPT { - return m_what.c_str(); - } +const char *NotImplementedException::what() const CATCH_NOEXCEPT +{ + return m_what.c_str(); +} } // end namespace Catch @@ -6838,202 +7671,228 @@ namespace Catch { namespace Catch { - template - class StreamBufImpl : public StreamBufBase { - char data[bufferSize]; - WriterF m_writer; +template +class StreamBufImpl : public StreamBufBase { + char data[bufferSize]; + WriterF m_writer; - public: - StreamBufImpl() { - setp( data, data + sizeof(data) ); - } +public: + StreamBufImpl() + { + setp( data, data + sizeof(data) ); + } - ~StreamBufImpl() CATCH_NOEXCEPT { - sync(); - } + ~StreamBufImpl() CATCH_NOEXCEPT { + sync(); + } - private: - int overflow( int c ) { - sync(); - - if( c != EOF ) { - if( pbase() == epptr() ) - m_writer( std::string( 1, static_cast( c ) ) ); - else - sputc( static_cast( c ) ); - } - return 0; - } +private: + int overflow( int c ) + { + sync(); - int sync() { - if( pbase() != pptr() ) { - m_writer( std::string( pbase(), static_cast( pptr() - pbase() ) ) ); - setp( pbase(), epptr() ); + if ( c != EOF ) { + if ( pbase() == epptr() ) { + m_writer( std::string( 1, static_cast( c ) ) ); + } else { + sputc( static_cast( c ) ); } - return 0; } - }; - - /////////////////////////////////////////////////////////////////////////// + return 0; + } - FileStream::FileStream( std::string const& filename ) { - m_ofs.open( filename.c_str() ); - if( m_ofs.fail() ) { - std::ostringstream oss; - oss << "Unable to open file: '" << filename << "'"; - throw std::domain_error( oss.str() ); + int sync() + { + if ( pbase() != pptr() ) { + m_writer( std::string( pbase(), static_cast( pptr() - pbase() ) ) ); + setp( pbase(), epptr() ); } + return 0; } +}; - std::ostream& FileStream::stream() const { - return m_ofs; +/////////////////////////////////////////////////////////////////////////// + +FileStream::FileStream( std::string const &filename ) +{ + m_ofs.open( filename.c_str() ); + if ( m_ofs.fail() ) { + std::ostringstream oss; + oss << "Unable to open file: '" << filename << "'"; + throw std::domain_error( oss.str() ); } +} + +std::ostream &FileStream::stream() const +{ + return m_ofs; +} - struct OutputDebugWriter { +struct OutputDebugWriter { - void operator()( std::string const&str ) { - writeToDebugConsole( str ); - } - }; + void operator()( std::string const &str ) + { + writeToDebugConsole( str ); + } +}; - DebugOutStream::DebugOutStream() +DebugOutStream::DebugOutStream() : m_streamBuf( new StreamBufImpl() ), m_os( m_streamBuf.get() ) - {} +{} - std::ostream& DebugOutStream::stream() const { - return m_os; - } +std::ostream &DebugOutStream::stream() const +{ + return m_os; +} - // Store the streambuf from cout up-front because - // cout may get redirected when running tests - CoutStream::CoutStream() +// Store the streambuf from cout up-front because +// cout may get redirected when running tests +CoutStream::CoutStream() : m_os( Catch::cout().rdbuf() ) - {} +{} - std::ostream& CoutStream::stream() const { - return m_os; - } +std::ostream &CoutStream::stream() const +{ + return m_os; +} #ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement these functions - std::ostream& cout() { - return std::cout; - } - std::ostream& cerr() { - return std::cerr; - } +std::ostream &cout() +{ + return std::cout; +} +std::ostream &cerr() +{ + return std::cerr; +} #endif } namespace Catch { - class Context : public IMutableContext { - - Context() : m_config( CATCH_NULL ), m_runner( CATCH_NULL ), m_resultCapture( CATCH_NULL ) {} - Context( Context const& ); - void operator=( Context const& ); - - public: // IContext - virtual IResultCapture* getResultCapture() { - return m_resultCapture; - } - virtual IRunner* getRunner() { - return m_runner; - } - virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) { - return getGeneratorsForCurrentTest() - .getGeneratorInfo( fileInfo, totalSize ) - .getCurrentIndex(); - } - virtual bool advanceGeneratorsForCurrentTest() { - IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); - return generators && generators->moveNext(); - } +class Context : public IMutableContext { - virtual Ptr getConfig() const { - return m_config; - } + Context() : m_config( CATCH_NULL ), m_runner( CATCH_NULL ), m_resultCapture( CATCH_NULL ) {} + Context( Context const & ); + void operator=( Context const & ); - public: // IMutableContext - virtual void setResultCapture( IResultCapture* resultCapture ) { - m_resultCapture = resultCapture; - } - virtual void setRunner( IRunner* runner ) { - m_runner = runner; - } - virtual void setConfig( Ptr const& config ) { - m_config = config; - } +public: // IContext + virtual IResultCapture *getResultCapture() + { + return m_resultCapture; + } + virtual IRunner *getRunner() + { + return m_runner; + } + virtual size_t getGeneratorIndex( std::string const &fileInfo, size_t totalSize ) + { + return getGeneratorsForCurrentTest() + .getGeneratorInfo( fileInfo, totalSize ) + .getCurrentIndex(); + } + virtual bool advanceGeneratorsForCurrentTest() + { + IGeneratorsForTest *generators = findGeneratorsForCurrentTest(); + return generators && generators->moveNext(); + } - friend IMutableContext& getCurrentMutableContext(); + virtual Ptr getConfig() const + { + return m_config; + } - private: - IGeneratorsForTest* findGeneratorsForCurrentTest() { - std::string testName = getResultCapture()->getCurrentTestName(); - - std::map::const_iterator it = - m_generatorsByTestName.find( testName ); - return it != m_generatorsByTestName.end() - ? it->second - : CATCH_NULL; - } +public: // IMutableContext + virtual void setResultCapture( IResultCapture *resultCapture ) + { + m_resultCapture = resultCapture; + } + virtual void setRunner( IRunner *runner ) + { + m_runner = runner; + } + virtual void setConfig( Ptr const &config ) + { + m_config = config; + } - IGeneratorsForTest& getGeneratorsForCurrentTest() { - IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); - if( !generators ) { - std::string testName = getResultCapture()->getCurrentTestName(); - generators = createGeneratorsForTest(); - m_generatorsByTestName.insert( std::make_pair( testName, generators ) ); - } - return *generators; - } + friend IMutableContext &getCurrentMutableContext(); - private: - Ptr m_config; - IRunner* m_runner; - IResultCapture* m_resultCapture; - std::map m_generatorsByTestName; - }; +private: + IGeneratorsForTest *findGeneratorsForCurrentTest() + { + std::string testName = getResultCapture()->getCurrentTestName(); - namespace { - Context* currentContext = CATCH_NULL; + std::map::const_iterator it = + m_generatorsByTestName.find( testName ); + return it != m_generatorsByTestName.end() + ? it->second + : CATCH_NULL; } - IMutableContext& getCurrentMutableContext() { - if( !currentContext ) - currentContext = new Context(); - return *currentContext; - } - IContext& getCurrentContext() { - return getCurrentMutableContext(); + + IGeneratorsForTest &getGeneratorsForCurrentTest() + { + IGeneratorsForTest *generators = findGeneratorsForCurrentTest(); + if ( !generators ) { + std::string testName = getResultCapture()->getCurrentTestName(); + generators = createGeneratorsForTest(); + m_generatorsByTestName.insert( std::make_pair( testName, generators ) ); + } + return *generators; } - void cleanUpContext() { - delete currentContext; - currentContext = CATCH_NULL; +private: + Ptr m_config; + IRunner *m_runner; + IResultCapture *m_resultCapture; + std::map m_generatorsByTestName; +}; + +namespace { +Context *currentContext = CATCH_NULL; +} +IMutableContext &getCurrentMutableContext() +{ + if ( !currentContext ) { + currentContext = new Context(); } + return *currentContext; +} +IContext &getCurrentContext() +{ + return getCurrentMutableContext(); +} + +void cleanUpContext() +{ + delete currentContext; + currentContext = CATCH_NULL; +} } // #included from: catch_console_colour_impl.hpp #define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_IMPL_HPP_INCLUDED namespace Catch { - namespace { +namespace { - struct IColourImpl { - virtual ~IColourImpl() {} - virtual void use( Colour::Code _colourCode ) = 0; - }; +struct IColourImpl { + virtual ~IColourImpl() {} + virtual void use( Colour::Code _colourCode ) = 0; +}; - struct NoColourImpl : IColourImpl { - void use( Colour::Code ) {} +struct NoColourImpl : IColourImpl { + void use( Colour::Code ) {} - static IColourImpl* instance() { - static NoColourImpl s_instance; - return &s_instance; - } - }; + static IColourImpl *instance() + { + static NoColourImpl s_instance; + return &s_instance; + } +}; - } // anon namespace +} // anon namespace } // namespace Catch #if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI ) @@ -7059,60 +7918,63 @@ namespace Catch { namespace Catch { namespace { - class Win32ColourImpl : public IColourImpl { - public: - Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) ) - { - CONSOLE_SCREEN_BUFFER_INFO csbiInfo; - GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo ); - originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY ); - originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY ); - } - - virtual void use( Colour::Code _colourCode ) { - switch( _colourCode ) { - case Colour::None: return setTextAttribute( originalForegroundAttributes ); - case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); - case Colour::Red: return setTextAttribute( FOREGROUND_RED ); - case Colour::Green: return setTextAttribute( FOREGROUND_GREEN ); - case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE ); - case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN ); - case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN ); - case Colour::Grey: return setTextAttribute( 0 ); - - case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY ); - case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED ); - case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN ); - case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); - - case Colour::Bright: throw std::logic_error( "not a colour" ); - } - } +class Win32ColourImpl : public IColourImpl { +public: + Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) ) + { + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo ); + originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY ); + originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY ); + } - private: - void setTextAttribute( WORD _textAttribute ) { - SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes ); - } - HANDLE stdoutHandle; - WORD originalForegroundAttributes; - WORD originalBackgroundAttributes; - }; + virtual void use( Colour::Code _colourCode ) + { + switch ( _colourCode ) { + case Colour::None: return setTextAttribute( originalForegroundAttributes ); + case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + case Colour::Red: return setTextAttribute( FOREGROUND_RED ); + case Colour::Green: return setTextAttribute( FOREGROUND_GREEN ); + case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE ); + case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN ); + case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN ); + case Colour::Grey: return setTextAttribute( 0 ); - IColourImpl* platformColourInstance() { - static Win32ColourImpl s_instance; + case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY ); + case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED ); + case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN ); + case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); + } + } - Ptr config = getCurrentContext().getConfig(); - UseColour::YesOrNo colourMode = config - ? config->useColour() - : UseColour::Auto; - if( colourMode == UseColour::Auto ) - colourMode = !isDebuggerActive() - ? UseColour::Yes - : UseColour::No; - return colourMode == UseColour::Yes - ? &s_instance - : NoColourImpl::instance(); +private: + void setTextAttribute( WORD _textAttribute ) + { + SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes ); } + HANDLE stdoutHandle; + WORD originalForegroundAttributes; + WORD originalBackgroundAttributes; +}; + +IColourImpl *platformColourInstance() +{ + static Win32ColourImpl s_instance; + + Ptr config = getCurrentContext().getConfig(); + UseColour::YesOrNo colourMode = config + ? config->useColour() + : UseColour::Auto; + if ( colourMode == UseColour::Auto ) + colourMode = !isDebuggerActive() + ? UseColour::Yes + : UseColour::No; + return colourMode == UseColour::Yes + ? &s_instance + : NoColourImpl::instance(); +} } // end anon namespace } // end namespace Catch @@ -7124,55 +7986,59 @@ namespace { namespace Catch { namespace { - // use POSIX/ ANSI console terminal codes - // Thanks to Adam Strzelecki for original contribution - // (http://github.com/nanoant) - // https://github.com/philsquared/Catch/pull/131 - class PosixColourImpl : public IColourImpl { - public: - virtual void use( Colour::Code _colourCode ) { - switch( _colourCode ) { - case Colour::None: - case Colour::White: return setColour( "[0m" ); - case Colour::Red: return setColour( "[0;31m" ); - case Colour::Green: return setColour( "[0;32m" ); - case Colour::Blue: return setColour( "[0:34m" ); - case Colour::Cyan: return setColour( "[0;36m" ); - case Colour::Yellow: return setColour( "[0;33m" ); - case Colour::Grey: return setColour( "[1;30m" ); - - case Colour::LightGrey: return setColour( "[0;37m" ); - case Colour::BrightRed: return setColour( "[1;31m" ); - case Colour::BrightGreen: return setColour( "[1;32m" ); - case Colour::BrightWhite: return setColour( "[1;37m" ); - - case Colour::Bright: throw std::logic_error( "not a colour" ); - } - } - static IColourImpl* instance() { - static PosixColourImpl s_instance; - return &s_instance; - } +// use POSIX/ ANSI console terminal codes +// Thanks to Adam Strzelecki for original contribution +// (http://github.com/nanoant) +// https://github.com/philsquared/Catch/pull/131 +class PosixColourImpl : public IColourImpl { +public: + virtual void use( Colour::Code _colourCode ) + { + switch ( _colourCode ) { + case Colour::None: + case Colour::White: return setColour( "[0m" ); + case Colour::Red: return setColour( "[0;31m" ); + case Colour::Green: return setColour( "[0;32m" ); + case Colour::Blue: return setColour( "[0:34m" ); + case Colour::Cyan: return setColour( "[0;36m" ); + case Colour::Yellow: return setColour( "[0;33m" ); + case Colour::Grey: return setColour( "[1;30m" ); - private: - void setColour( const char* _escapeCode ) { - Catch::cout() << '\033' << _escapeCode; + case Colour::LightGrey: return setColour( "[0;37m" ); + case Colour::BrightRed: return setColour( "[1;31m" ); + case Colour::BrightGreen: return setColour( "[1;32m" ); + case Colour::BrightWhite: return setColour( "[1;37m" ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); } - }; + } + static IColourImpl *instance() + { + static PosixColourImpl s_instance; + return &s_instance; + } - IColourImpl* platformColourInstance() { - Ptr config = getCurrentContext().getConfig(); - UseColour::YesOrNo colourMode = config - ? config->useColour() - : UseColour::Auto; - if( colourMode == UseColour::Auto ) - colourMode = (!isDebuggerActive() && isatty(STDOUT_FILENO) ) - ? UseColour::Yes - : UseColour::No; - return colourMode == UseColour::Yes - ? PosixColourImpl::instance() - : NoColourImpl::instance(); +private: + void setColour( const char *_escapeCode ) + { + Catch::cout() << '\033' << _escapeCode; } +}; + +IColourImpl *platformColourInstance() +{ + Ptr config = getCurrentContext().getConfig(); + UseColour::YesOrNo colourMode = config + ? config->useColour() + : UseColour::Auto; + if ( colourMode == UseColour::Auto ) + colourMode = (!isDebuggerActive() && isatty(STDOUT_FILENO) ) + ? UseColour::Yes + : UseColour::No; + return colourMode == UseColour::Yes + ? PosixColourImpl::instance() + : NoColourImpl::instance(); +} } // end anon namespace } // end namespace Catch @@ -7181,7 +8047,10 @@ namespace { namespace Catch { - static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); } +static IColourImpl *platformColourInstance() +{ + return NoColourImpl::instance(); +} } // end namespace Catch @@ -7189,14 +8058,26 @@ namespace Catch { namespace Catch { - Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); } - Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast( _other ).m_moved = true; } - Colour::~Colour(){ if( !m_moved ) use( None ); } - - void Colour::use( Code _colourCode ) { - static IColourImpl* impl = platformColourInstance(); - impl->use( _colourCode ); +Colour::Colour( Code _colourCode ) : m_moved( false ) +{ + use( _colourCode ); +} +Colour::Colour( Colour const &_other ) : m_moved( false ) +{ + const_cast( _other ).m_moved = true; +} +Colour::~Colour() +{ + if ( !m_moved ) { + use( None ); } +} + +void Colour::use( Code _colourCode ) +{ + static IColourImpl *impl = platformColourInstance(); + impl->use( _colourCode ); +} } // end namespace Catch @@ -7209,68 +8090,74 @@ namespace Catch { namespace Catch { - struct GeneratorInfo : IGeneratorInfo { +struct GeneratorInfo : IGeneratorInfo { - GeneratorInfo( std::size_t size ) + GeneratorInfo( std::size_t size ) : m_size( size ), m_currentIndex( 0 ) - {} + {} - bool moveNext() { - if( ++m_currentIndex == m_size ) { - m_currentIndex = 0; - return false; - } - return true; + bool moveNext() + { + if ( ++m_currentIndex == m_size ) { + m_currentIndex = 0; + return false; } + return true; + } - std::size_t getCurrentIndex() const { - return m_currentIndex; - } + std::size_t getCurrentIndex() const + { + return m_currentIndex; + } - std::size_t m_size; - std::size_t m_currentIndex; - }; + std::size_t m_size; + std::size_t m_currentIndex; +}; - /////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////// - class GeneratorsForTest : public IGeneratorsForTest { +class GeneratorsForTest : public IGeneratorsForTest { - public: - ~GeneratorsForTest() { - deleteAll( m_generatorsInOrder ); - } +public: + ~GeneratorsForTest() + { + deleteAll( m_generatorsInOrder ); + } - IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) { - std::map::const_iterator it = m_generatorsByName.find( fileInfo ); - if( it == m_generatorsByName.end() ) { - IGeneratorInfo* info = new GeneratorInfo( size ); - m_generatorsByName.insert( std::make_pair( fileInfo, info ) ); - m_generatorsInOrder.push_back( info ); - return *info; - } - return *it->second; + IGeneratorInfo &getGeneratorInfo( std::string const &fileInfo, std::size_t size ) + { + std::map::const_iterator it = m_generatorsByName.find( fileInfo ); + if ( it == m_generatorsByName.end() ) { + IGeneratorInfo *info = new GeneratorInfo( size ); + m_generatorsByName.insert( std::make_pair( fileInfo, info ) ); + m_generatorsInOrder.push_back( info ); + return *info; } + return *it->second; + } - bool moveNext() { - std::vector::const_iterator it = m_generatorsInOrder.begin(); - std::vector::const_iterator itEnd = m_generatorsInOrder.end(); - for(; it != itEnd; ++it ) { - if( (*it)->moveNext() ) - return true; + bool moveNext() + { + std::vector::const_iterator it = m_generatorsInOrder.begin(); + std::vector::const_iterator itEnd = m_generatorsInOrder.end(); + for (; it != itEnd; ++it ) { + if ( (*it)->moveNext() ) { + return true; } - return false; } + return false; + } - private: - std::map m_generatorsByName; - std::vector m_generatorsInOrder; - }; +private: + std::map m_generatorsByName; + std::vector m_generatorsInOrder; +}; - IGeneratorsForTest* createGeneratorsForTest() - { - return new GeneratorsForTest(); - } +IGeneratorsForTest *createGeneratorsForTest() +{ + return new GeneratorsForTest(); +} } // end namespace Catch @@ -7279,78 +8166,92 @@ namespace Catch { namespace Catch { - AssertionInfo::AssertionInfo( std::string const& _macroName, - SourceLineInfo const& _lineInfo, - std::string const& _capturedExpression, - ResultDisposition::Flags _resultDisposition ) +AssertionInfo::AssertionInfo( std::string const &_macroName, + SourceLineInfo const &_lineInfo, + std::string const &_capturedExpression, + ResultDisposition::Flags _resultDisposition ) : macroName( _macroName ), lineInfo( _lineInfo ), capturedExpression( _capturedExpression ), resultDisposition( _resultDisposition ) - {} +{} - AssertionResult::AssertionResult() {} +AssertionResult::AssertionResult() {} - AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data ) +AssertionResult::AssertionResult( AssertionInfo const &info, AssertionResultData const &data ) : m_info( info ), m_resultData( data ) - {} +{} - AssertionResult::~AssertionResult() {} +AssertionResult::~AssertionResult() {} - // Result was a success - bool AssertionResult::succeeded() const { - return Catch::isOk( m_resultData.resultType ); - } +// Result was a success +bool AssertionResult::succeeded() const +{ + return Catch::isOk( m_resultData.resultType ); +} - // Result was a success, or failure is suppressed - bool AssertionResult::isOk() const { - return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition ); - } +// Result was a success, or failure is suppressed +bool AssertionResult::isOk() const +{ + return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition ); +} - ResultWas::OfType AssertionResult::getResultType() const { - return m_resultData.resultType; - } +ResultWas::OfType AssertionResult::getResultType() const +{ + return m_resultData.resultType; +} - bool AssertionResult::hasExpression() const { - return !m_info.capturedExpression.empty(); - } +bool AssertionResult::hasExpression() const +{ + return !m_info.capturedExpression.empty(); +} - bool AssertionResult::hasMessage() const { - return !m_resultData.message.empty(); - } +bool AssertionResult::hasMessage() const +{ + return !m_resultData.message.empty(); +} - std::string AssertionResult::getExpression() const { - if( isFalseTest( m_info.resultDisposition ) ) - return "!" + m_info.capturedExpression; - else - return m_info.capturedExpression; +std::string AssertionResult::getExpression() const +{ + if ( isFalseTest( m_info.resultDisposition ) ) { + return "!" + m_info.capturedExpression; + } else { + return m_info.capturedExpression; } - std::string AssertionResult::getExpressionInMacro() const { - if( m_info.macroName.empty() ) - return m_info.capturedExpression; - else - return m_info.macroName + "( " + m_info.capturedExpression + " )"; +} +std::string AssertionResult::getExpressionInMacro() const +{ + if ( m_info.macroName.empty() ) { + return m_info.capturedExpression; + } else { + return m_info.macroName + "( " + m_info.capturedExpression + " )"; } +} - bool AssertionResult::hasExpandedExpression() const { - return hasExpression() && getExpandedExpression() != getExpression(); - } +bool AssertionResult::hasExpandedExpression() const +{ + return hasExpression() && getExpandedExpression() != getExpression(); +} - std::string AssertionResult::getExpandedExpression() const { - return m_resultData.reconstructedExpression; - } +std::string AssertionResult::getExpandedExpression() const +{ + return m_resultData.reconstructedExpression; +} - std::string AssertionResult::getMessage() const { - return m_resultData.message; - } - SourceLineInfo AssertionResult::getSourceInfo() const { - return m_info.lineInfo; - } +std::string AssertionResult::getMessage() const +{ + return m_resultData.message; +} +SourceLineInfo AssertionResult::getSourceInfo() const +{ + return m_info.lineInfo; +} - std::string AssertionResult::getTestMacroName() const { - return m_info.macroName; - } +std::string AssertionResult::getTestMacroName() const +{ + return m_info.macroName; +} } // end namespace Catch @@ -7359,114 +8260,119 @@ namespace Catch { namespace Catch { - inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { - if( startsWith( tag, "." ) || +inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const &tag ) +{ + if ( startsWith( tag, "." ) || tag == "hide" || - tag == "!hide" ) - return TestCaseInfo::IsHidden; - else if( tag == "!throws" ) - return TestCaseInfo::Throws; - else if( tag == "!shouldfail" ) - return TestCaseInfo::ShouldFail; - else if( tag == "!mayfail" ) - return TestCaseInfo::MayFail; - else - return TestCaseInfo::None; - } - inline bool isReservedTag( std::string const& tag ) { - return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !isalnum( tag[0] ); - } - inline void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) { - if( isReservedTag( tag ) ) { - { - Colour colourGuard( Colour::Red ); - Catch::cerr() + tag == "!hide" ) { + return TestCaseInfo::IsHidden; + } else if ( tag == "!throws" ) { + return TestCaseInfo::Throws; + } else if ( tag == "!shouldfail" ) { + return TestCaseInfo::ShouldFail; + } else if ( tag == "!mayfail" ) { + return TestCaseInfo::MayFail; + } else { + return TestCaseInfo::None; + } +} +inline bool isReservedTag( std::string const &tag ) +{ + return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !isalnum( tag[0] ); +} +inline void enforceNotReservedTag( std::string const &tag, SourceLineInfo const &_lineInfo ) +{ + if ( isReservedTag( tag ) ) { + { + Colour colourGuard( Colour::Red ); + Catch::cerr() << "Tag name [" << tag << "] not allowed.\n" << "Tag names starting with non alpha-numeric characters are reserved\n"; - } - { - Colour colourGuard( Colour::FileName ); - Catch::cerr() << _lineInfo << std::endl; - } - exit(1); } + { + Colour colourGuard( Colour::FileName ); + Catch::cerr() << _lineInfo << std::endl; + } + exit(1); } +} - TestCase makeTestCase( ITestCase* _testCase, - std::string const& _className, - std::string const& _name, - std::string const& _descOrTags, - SourceLineInfo const& _lineInfo ) - { - bool isHidden( startsWith( _name, "./" ) ); // Legacy support - - // Parse out tags - std::set tags; - std::string desc, tag; - bool inTag = false; - for( std::size_t i = 0; i < _descOrTags.size(); ++i ) { - char c = _descOrTags[i]; - if( !inTag ) { - if( c == '[' ) - inTag = true; - else - desc += c; - } - else { - if( c == ']' ) { - TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); - if( prop == TestCaseInfo::IsHidden ) - isHidden = true; - else if( prop == TestCaseInfo::None ) - enforceNotReservedTag( tag, _lineInfo ); - - tags.insert( tag ); - tag.clear(); - inTag = false; +TestCase makeTestCase( ITestCase *_testCase, + std::string const &_className, + std::string const &_name, + std::string const &_descOrTags, + SourceLineInfo const &_lineInfo ) +{ + bool isHidden( startsWith( _name, "./" ) ); // Legacy support + + // Parse out tags + std::set tags; + std::string desc, tag; + bool inTag = false; + for ( std::size_t i = 0; i < _descOrTags.size(); ++i ) { + char c = _descOrTags[i]; + if ( !inTag ) { + if ( c == '[' ) { + inTag = true; + } else { + desc += c; + } + } else { + if ( c == ']' ) { + TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); + if ( prop == TestCaseInfo::IsHidden ) { + isHidden = true; + } else if ( prop == TestCaseInfo::None ) { + enforceNotReservedTag( tag, _lineInfo ); } - else - tag += c; + + tags.insert( tag ); + tag.clear(); + inTag = false; + } else { + tag += c; } } - if( isHidden ) { - tags.insert( "hide" ); - tags.insert( "." ); - } - - TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); - return TestCase( _testCase, info ); + } + if ( isHidden ) { + tags.insert( "hide" ); + tags.insert( "." ); } - void setTags( TestCaseInfo& testCaseInfo, std::set const& tags ) - { - testCaseInfo.tags = tags; - testCaseInfo.lcaseTags.clear(); + TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); + return TestCase( _testCase, info ); +} - std::ostringstream oss; - for( std::set::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { - oss << "[" << *it << "]"; - std::string lcaseTag = toLower( *it ); - testCaseInfo.properties = static_cast( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); - testCaseInfo.lcaseTags.insert( lcaseTag ); - } - testCaseInfo.tagsAsString = oss.str(); +void setTags( TestCaseInfo &testCaseInfo, std::set const &tags ) +{ + testCaseInfo.tags = tags; + testCaseInfo.lcaseTags.clear(); + + std::ostringstream oss; + for ( std::set::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { + oss << "[" << *it << "]"; + std::string lcaseTag = toLower( *it ); + testCaseInfo.properties = static_cast( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); + testCaseInfo.lcaseTags.insert( lcaseTag ); } + testCaseInfo.tagsAsString = oss.str(); +} - TestCaseInfo::TestCaseInfo( std::string const& _name, - std::string const& _className, - std::string const& _description, - std::set const& _tags, - SourceLineInfo const& _lineInfo ) +TestCaseInfo::TestCaseInfo( std::string const &_name, + std::string const &_className, + std::string const &_description, + std::set const &_tags, + SourceLineInfo const &_lineInfo ) : name( _name ), className( _className ), description( _description ), lineInfo( _lineInfo ), properties( None ) - { - setTags( *this, _tags ); - } +{ + setTags( *this, _tags ); +} - TestCaseInfo::TestCaseInfo( TestCaseInfo const& other ) +TestCaseInfo::TestCaseInfo( TestCaseInfo const &other ) : name( other.name ), className( other.className ), description( other.description ), @@ -7475,69 +8381,79 @@ namespace Catch { tagsAsString( other.tagsAsString ), lineInfo( other.lineInfo ), properties( other.properties ) - {} +{} - bool TestCaseInfo::isHidden() const { - return ( properties & IsHidden ) != 0; - } - bool TestCaseInfo::throws() const { - return ( properties & Throws ) != 0; - } - bool TestCaseInfo::okToFail() const { - return ( properties & (ShouldFail | MayFail ) ) != 0; - } - bool TestCaseInfo::expectedToFail() const { - return ( properties & (ShouldFail ) ) != 0; - } +bool TestCaseInfo::isHidden() const +{ + return ( properties & IsHidden ) != 0; +} +bool TestCaseInfo::throws() const +{ + return ( properties & Throws ) != 0; +} +bool TestCaseInfo::okToFail() const +{ + return ( properties & (ShouldFail | MayFail ) ) != 0; +} +bool TestCaseInfo::expectedToFail() const +{ + return ( properties & (ShouldFail ) ) != 0; +} - TestCase::TestCase( ITestCase* testCase, TestCaseInfo const& info ) : TestCaseInfo( info ), test( testCase ) {} +TestCase::TestCase( ITestCase *testCase, TestCaseInfo const &info ) : TestCaseInfo( info ), test( testCase ) {} - TestCase::TestCase( TestCase const& other ) +TestCase::TestCase( TestCase const &other ) : TestCaseInfo( other ), test( other.test ) - {} +{} - TestCase TestCase::withName( std::string const& _newName ) const { - TestCase other( *this ); - other.name = _newName; - return other; - } +TestCase TestCase::withName( std::string const &_newName ) const +{ + TestCase other( *this ); + other.name = _newName; + return other; +} - void TestCase::swap( TestCase& other ) { - test.swap( other.test ); - name.swap( other.name ); - className.swap( other.className ); - description.swap( other.description ); - tags.swap( other.tags ); - lcaseTags.swap( other.lcaseTags ); - tagsAsString.swap( other.tagsAsString ); - std::swap( TestCaseInfo::properties, static_cast( other ).properties ); - std::swap( lineInfo, other.lineInfo ); - } +void TestCase::swap( TestCase &other ) +{ + test.swap( other.test ); + name.swap( other.name ); + className.swap( other.className ); + description.swap( other.description ); + tags.swap( other.tags ); + lcaseTags.swap( other.lcaseTags ); + tagsAsString.swap( other.tagsAsString ); + std::swap( TestCaseInfo::properties, static_cast( other ).properties ); + std::swap( lineInfo, other.lineInfo ); +} - void TestCase::invoke() const { - test->invoke(); - } +void TestCase::invoke() const +{ + test->invoke(); +} - bool TestCase::operator == ( TestCase const& other ) const { - return test.get() == other.test.get() && - name == other.name && - className == other.className; - } +bool TestCase::operator == ( TestCase const &other ) const +{ + return test.get() == other.test.get() && + name == other.name && + className == other.className; +} - bool TestCase::operator < ( TestCase const& other ) const { - return name < other.name; - } - TestCase& TestCase::operator = ( TestCase const& other ) { - TestCase temp( other ); - swap( temp ); - return *this; - } +bool TestCase::operator < ( TestCase const &other ) const +{ + return name < other.name; +} +TestCase &TestCase::operator = ( TestCase const &other ) +{ + TestCase temp( other ); + swap( temp ); + return *this; +} - TestCaseInfo const& TestCase::getTestCaseInfo() const - { - return *this; - } +TestCaseInfo const &TestCase::getTestCaseInfo() const +{ + return *this; +} } // end namespace Catch @@ -7546,32 +8462,33 @@ namespace Catch { namespace Catch { - Version::Version - ( unsigned int _majorVersion, - unsigned int _minorVersion, - unsigned int _patchNumber, - std::string const& _branchName, - unsigned int _buildNumber ) +Version::Version +( unsigned int _majorVersion, + unsigned int _minorVersion, + unsigned int _patchNumber, + std::string const &_branchName, + unsigned int _buildNumber ) : majorVersion( _majorVersion ), minorVersion( _minorVersion ), patchNumber( _patchNumber ), branchName( _branchName ), buildNumber( _buildNumber ) - {} +{} - std::ostream& operator << ( std::ostream& os, Version const& version ) { - os << version.majorVersion << "." - << version.minorVersion << "." - << version.patchNumber; +std::ostream &operator << ( std::ostream &os, Version const &version ) +{ + os << version.majorVersion << "." + << version.minorVersion << "." + << version.patchNumber; - if( !version.branchName.empty() ) { - os << "-" << version.branchName - << "." << version.buildNumber; - } - return os; + if ( !version.branchName.empty() ) { + os << "-" << version.branchName + << "." << version.buildNumber; } + return os; +} - Version libraryVersion( 1, 5, 6, "", 0 ); +Version libraryVersion( 1, 5, 6, "", 0 ); } @@ -7580,33 +8497,34 @@ namespace Catch { namespace Catch { - MessageInfo::MessageInfo( std::string const& _macroName, - SourceLineInfo const& _lineInfo, - ResultWas::OfType _type ) +MessageInfo::MessageInfo( std::string const &_macroName, + SourceLineInfo const &_lineInfo, + ResultWas::OfType _type ) : macroName( _macroName ), lineInfo( _lineInfo ), type( _type ), sequence( ++globalCount ) - {} +{} - // This may need protecting if threading support is added - unsigned int MessageInfo::globalCount = 0; +// This may need protecting if threading support is added +unsigned int MessageInfo::globalCount = 0; - //////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// - ScopedMessage::ScopedMessage( MessageBuilder const& builder ) +ScopedMessage::ScopedMessage( MessageBuilder const &builder ) : m_info( builder.m_info ) - { - m_info.message = builder.m_stream.str(); - getResultCapture().pushScopedMessage( m_info ); - } - ScopedMessage::ScopedMessage( ScopedMessage const& other ) +{ + m_info.message = builder.m_stream.str(); + getResultCapture().pushScopedMessage( m_info ); +} +ScopedMessage::ScopedMessage( ScopedMessage const &other ) : m_info( other.m_info ) - {} +{} - ScopedMessage::~ScopedMessage() { - getResultCapture().popScopedMessage( m_info ); - } +ScopedMessage::~ScopedMessage() +{ + getResultCapture().popScopedMessage( m_info ); +} } // end namespace Catch @@ -7616,122 +8534,133 @@ namespace Catch { // #included from: catch_legacy_reporter_adapter.h #define TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_H_INCLUDED -namespace Catch -{ - // Deprecated - struct IReporter : IShared { - virtual ~IReporter(); - - virtual bool shouldRedirectStdout() const = 0; - - virtual void StartTesting() = 0; - virtual void EndTesting( Totals const& totals ) = 0; - virtual void StartGroup( std::string const& groupName ) = 0; - virtual void EndGroup( std::string const& groupName, Totals const& totals ) = 0; - virtual void StartTestCase( TestCaseInfo const& testInfo ) = 0; - virtual void EndTestCase( TestCaseInfo const& testInfo, Totals const& totals, std::string const& stdOut, std::string const& stdErr ) = 0; - virtual void StartSection( std::string const& sectionName, std::string const& description ) = 0; - virtual void EndSection( std::string const& sectionName, Counts const& assertions ) = 0; - virtual void NoAssertionsInSection( std::string const& sectionName ) = 0; - virtual void NoAssertionsInTestCase( std::string const& testName ) = 0; - virtual void Aborted() = 0; - virtual void Result( AssertionResult const& result ) = 0; - }; +namespace Catch { +// Deprecated +struct IReporter : IShared { + virtual ~IReporter(); + + virtual bool shouldRedirectStdout() const = 0; + + virtual void StartTesting() = 0; + virtual void EndTesting( Totals const &totals ) = 0; + virtual void StartGroup( std::string const &groupName ) = 0; + virtual void EndGroup( std::string const &groupName, Totals const &totals ) = 0; + virtual void StartTestCase( TestCaseInfo const &testInfo ) = 0; + virtual void EndTestCase( TestCaseInfo const &testInfo, Totals const &totals, std::string const &stdOut, std::string const &stdErr ) = 0; + virtual void StartSection( std::string const §ionName, std::string const &description ) = 0; + virtual void EndSection( std::string const §ionName, Counts const &assertions ) = 0; + virtual void NoAssertionsInSection( std::string const §ionName ) = 0; + virtual void NoAssertionsInTestCase( std::string const &testName ) = 0; + virtual void Aborted() = 0; + virtual void Result( AssertionResult const &result ) = 0; +}; - class LegacyReporterAdapter : public SharedImpl - { - public: - LegacyReporterAdapter( Ptr const& legacyReporter ); - virtual ~LegacyReporterAdapter(); - - virtual ReporterPreferences getPreferences() const; - virtual void noMatchingTestCases( std::string const& ); - virtual void testRunStarting( TestRunInfo const& ); - virtual void testGroupStarting( GroupInfo const& groupInfo ); - virtual void testCaseStarting( TestCaseInfo const& testInfo ); - virtual void sectionStarting( SectionInfo const& sectionInfo ); - virtual void assertionStarting( AssertionInfo const& ); - virtual bool assertionEnded( AssertionStats const& assertionStats ); - virtual void sectionEnded( SectionStats const& sectionStats ); - virtual void testCaseEnded( TestCaseStats const& testCaseStats ); - virtual void testGroupEnded( TestGroupStats const& testGroupStats ); - virtual void testRunEnded( TestRunStats const& testRunStats ); - virtual void skipTest( TestCaseInfo const& ); +class LegacyReporterAdapter : public SharedImpl { +public: + LegacyReporterAdapter( Ptr const &legacyReporter ); + virtual ~LegacyReporterAdapter(); + + virtual ReporterPreferences getPreferences() const; + virtual void noMatchingTestCases( std::string const & ); + virtual void testRunStarting( TestRunInfo const & ); + virtual void testGroupStarting( GroupInfo const &groupInfo ); + virtual void testCaseStarting( TestCaseInfo const &testInfo ); + virtual void sectionStarting( SectionInfo const §ionInfo ); + virtual void assertionStarting( AssertionInfo const & ); + virtual bool assertionEnded( AssertionStats const &assertionStats ); + virtual void sectionEnded( SectionStats const §ionStats ); + virtual void testCaseEnded( TestCaseStats const &testCaseStats ); + virtual void testGroupEnded( TestGroupStats const &testGroupStats ); + virtual void testRunEnded( TestRunStats const &testRunStats ); + virtual void skipTest( TestCaseInfo const & ); - private: - Ptr m_legacyReporter; - }; +private: + Ptr m_legacyReporter; +}; } -namespace Catch -{ - LegacyReporterAdapter::LegacyReporterAdapter( Ptr const& legacyReporter ) +namespace Catch { +LegacyReporterAdapter::LegacyReporterAdapter( Ptr const &legacyReporter ) : m_legacyReporter( legacyReporter ) - {} - LegacyReporterAdapter::~LegacyReporterAdapter() {} +{} +LegacyReporterAdapter::~LegacyReporterAdapter() {} - ReporterPreferences LegacyReporterAdapter::getPreferences() const { - ReporterPreferences prefs; - prefs.shouldRedirectStdOut = m_legacyReporter->shouldRedirectStdout(); - return prefs; - } +ReporterPreferences LegacyReporterAdapter::getPreferences() const +{ + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = m_legacyReporter->shouldRedirectStdout(); + return prefs; +} - void LegacyReporterAdapter::noMatchingTestCases( std::string const& ) {} - void LegacyReporterAdapter::testRunStarting( TestRunInfo const& ) { - m_legacyReporter->StartTesting(); - } - void LegacyReporterAdapter::testGroupStarting( GroupInfo const& groupInfo ) { - m_legacyReporter->StartGroup( groupInfo.name ); - } - void LegacyReporterAdapter::testCaseStarting( TestCaseInfo const& testInfo ) { - m_legacyReporter->StartTestCase( testInfo ); - } - void LegacyReporterAdapter::sectionStarting( SectionInfo const& sectionInfo ) { - m_legacyReporter->StartSection( sectionInfo.name, sectionInfo.description ); - } - void LegacyReporterAdapter::assertionStarting( AssertionInfo const& ) { - // Not on legacy interface - } +void LegacyReporterAdapter::noMatchingTestCases( std::string const & ) {} +void LegacyReporterAdapter::testRunStarting( TestRunInfo const & ) +{ + m_legacyReporter->StartTesting(); +} +void LegacyReporterAdapter::testGroupStarting( GroupInfo const &groupInfo ) +{ + m_legacyReporter->StartGroup( groupInfo.name ); +} +void LegacyReporterAdapter::testCaseStarting( TestCaseInfo const &testInfo ) +{ + m_legacyReporter->StartTestCase( testInfo ); +} +void LegacyReporterAdapter::sectionStarting( SectionInfo const §ionInfo ) +{ + m_legacyReporter->StartSection( sectionInfo.name, sectionInfo.description ); +} +void LegacyReporterAdapter::assertionStarting( AssertionInfo const & ) +{ + // Not on legacy interface +} - bool LegacyReporterAdapter::assertionEnded( AssertionStats const& assertionStats ) { - if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { - for( std::vector::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); - it != itEnd; - ++it ) { - if( it->type == ResultWas::Info ) { - ResultBuilder rb( it->macroName.c_str(), it->lineInfo, "", ResultDisposition::Normal ); - rb << it->message; - rb.setResultType( ResultWas::Info ); - AssertionResult result = rb.build(); - m_legacyReporter->Result( result ); - } +bool LegacyReporterAdapter::assertionEnded( AssertionStats const &assertionStats ) +{ + if ( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { + for ( std::vector::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if ( it->type == ResultWas::Info ) { + ResultBuilder rb( it->macroName.c_str(), it->lineInfo, "", ResultDisposition::Normal ); + rb << it->message; + rb.setResultType( ResultWas::Info ); + AssertionResult result = rb.build(); + m_legacyReporter->Result( result ); } } - m_legacyReporter->Result( assertionStats.assertionResult ); - return true; - } - void LegacyReporterAdapter::sectionEnded( SectionStats const& sectionStats ) { - if( sectionStats.missingAssertions ) - m_legacyReporter->NoAssertionsInSection( sectionStats.sectionInfo.name ); - m_legacyReporter->EndSection( sectionStats.sectionInfo.name, sectionStats.assertions ); - } - void LegacyReporterAdapter::testCaseEnded( TestCaseStats const& testCaseStats ) { - m_legacyReporter->EndTestCase - ( testCaseStats.testInfo, - testCaseStats.totals, - testCaseStats.stdOut, - testCaseStats.stdErr ); - } - void LegacyReporterAdapter::testGroupEnded( TestGroupStats const& testGroupStats ) { - if( testGroupStats.aborting ) - m_legacyReporter->Aborted(); - m_legacyReporter->EndGroup( testGroupStats.groupInfo.name, testGroupStats.totals ); } - void LegacyReporterAdapter::testRunEnded( TestRunStats const& testRunStats ) { - m_legacyReporter->EndTesting( testRunStats.totals ); + m_legacyReporter->Result( assertionStats.assertionResult ); + return true; +} +void LegacyReporterAdapter::sectionEnded( SectionStats const §ionStats ) +{ + if ( sectionStats.missingAssertions ) { + m_legacyReporter->NoAssertionsInSection( sectionStats.sectionInfo.name ); } - void LegacyReporterAdapter::skipTest( TestCaseInfo const& ) { + m_legacyReporter->EndSection( sectionStats.sectionInfo.name, sectionStats.assertions ); +} +void LegacyReporterAdapter::testCaseEnded( TestCaseStats const &testCaseStats ) +{ + m_legacyReporter->EndTestCase + ( testCaseStats.testInfo, + testCaseStats.totals, + testCaseStats.stdOut, + testCaseStats.stdErr ); +} +void LegacyReporterAdapter::testGroupEnded( TestGroupStats const &testGroupStats ) +{ + if ( testGroupStats.aborting ) { + m_legacyReporter->Aborted(); } + m_legacyReporter->EndGroup( testGroupStats.groupInfo.name, testGroupStats.totals ); +} +void LegacyReporterAdapter::testRunEnded( TestRunStats const &testRunStats ) +{ + m_legacyReporter->EndTesting( testRunStats.totals ); +} +void LegacyReporterAdapter::skipTest( TestCaseInfo const & ) +{ +} } // #included from: catch_timer.hpp @@ -7749,39 +8678,45 @@ namespace Catch namespace Catch { - namespace { +namespace { #ifdef CATCH_PLATFORM_WINDOWS - uint64_t getCurrentTicks() { - static uint64_t hz=0, hzo=0; - if (!hz) { - QueryPerformanceFrequency( reinterpret_cast( &hz ) ); - QueryPerformanceCounter( reinterpret_cast( &hzo ) ); - } - uint64_t t; - QueryPerformanceCounter( reinterpret_cast( &t ) ); - return ((t-hzo)*1000000)/hz; - } +uint64_t getCurrentTicks() +{ + static uint64_t hz = 0, hzo = 0; + if (!hz) { + QueryPerformanceFrequency( reinterpret_cast( &hz ) ); + QueryPerformanceCounter( reinterpret_cast( &hzo ) ); + } + uint64_t t; + QueryPerformanceCounter( reinterpret_cast( &t ) ); + return ((t - hzo) * 1000000) / hz; +} #else - uint64_t getCurrentTicks() { - timeval t; - gettimeofday(&t,CATCH_NULL); - return static_cast( t.tv_sec ) * 1000000ull + static_cast( t.tv_usec ); - } +uint64_t getCurrentTicks() +{ + timeval t; + gettimeofday(&t, CATCH_NULL); + return static_cast( t.tv_sec ) * 1000000ull + static_cast( t.tv_usec ); +} #endif - } +} - void Timer::start() { - m_ticks = getCurrentTicks(); - } - unsigned int Timer::getElapsedMicroseconds() const { - return static_cast(getCurrentTicks() - m_ticks); - } - unsigned int Timer::getElapsedMilliseconds() const { - return static_cast(getElapsedMicroseconds()/1000); - } - double Timer::getElapsedSeconds() const { - return getElapsedMicroseconds()/1000000.0; - } +void Timer::start() +{ + m_ticks = getCurrentTicks(); +} +unsigned int Timer::getElapsedMicroseconds() const +{ + return static_cast(getCurrentTicks() - m_ticks); +} +unsigned int Timer::getElapsedMilliseconds() const +{ + return static_cast(getElapsedMicroseconds() / 1000); +} +double Timer::getElapsedSeconds() const +{ + return getElapsedMicroseconds() / 1000000.0; +} } // namespace Catch @@ -7793,136 +8728,158 @@ namespace Catch { namespace Catch { - bool startsWith( std::string const& s, std::string const& prefix ) { - return s.size() >= prefix.size() && s.substr( 0, prefix.size() ) == prefix; - } - bool endsWith( std::string const& s, std::string const& suffix ) { - return s.size() >= suffix.size() && s.substr( s.size()-suffix.size(), suffix.size() ) == suffix; - } - bool contains( std::string const& s, std::string const& infix ) { - return s.find( infix ) != std::string::npos; - } - void toLowerInPlace( std::string& s ) { - std::transform( s.begin(), s.end(), s.begin(), ::tolower ); - } - std::string toLower( std::string const& s ) { - std::string lc = s; - toLowerInPlace( lc ); - return lc; - } - std::string trim( std::string const& str ) { - static char const* whitespaceChars = "\n\r\t "; - std::string::size_type start = str.find_first_not_of( whitespaceChars ); - std::string::size_type end = str.find_last_not_of( whitespaceChars ); +bool startsWith( std::string const &s, std::string const &prefix ) +{ + return s.size() >= prefix.size() && s.substr( 0, prefix.size() ) == prefix; +} +bool endsWith( std::string const &s, std::string const &suffix ) +{ + return s.size() >= suffix.size() && s.substr( s.size() - suffix.size(), suffix.size() ) == suffix; +} +bool contains( std::string const &s, std::string const &infix ) +{ + return s.find( infix ) != std::string::npos; +} +void toLowerInPlace( std::string &s ) +{ + std::transform( s.begin(), s.end(), s.begin(), ::tolower ); +} +std::string toLower( std::string const &s ) +{ + std::string lc = s; + toLowerInPlace( lc ); + return lc; +} +std::string trim( std::string const &str ) +{ + static char const *whitespaceChars = "\n\r\t "; + std::string::size_type start = str.find_first_not_of( whitespaceChars ); + std::string::size_type end = str.find_last_not_of( whitespaceChars ); - return start != std::string::npos ? str.substr( start, 1+end-start ) : ""; - } + return start != std::string::npos ? str.substr( start, 1 + end - start ) : ""; +} - bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { - bool replaced = false; - std::size_t i = str.find( replaceThis ); - while( i != std::string::npos ) { - replaced = true; - str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() ); - if( i < str.size()-withThis.size() ) - i = str.find( replaceThis, i+withThis.size() ); - else - i = std::string::npos; - } - return replaced; - } +bool replaceInPlace( std::string &str, std::string const &replaceThis, std::string const &withThis ) +{ + bool replaced = false; + std::size_t i = str.find( replaceThis ); + while ( i != std::string::npos ) { + replaced = true; + str = str.substr( 0, i ) + withThis + str.substr( i + replaceThis.size() ); + if ( i < str.size() - withThis.size() ) { + i = str.find( replaceThis, i + withThis.size() ); + } else { + i = std::string::npos; + } + } + return replaced; +} - pluralise::pluralise( std::size_t count, std::string const& label ) +pluralise::pluralise( std::size_t count, std::string const &label ) : m_count( count ), m_label( label ) - {} +{} - std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) { - os << pluraliser.m_count << " " << pluraliser.m_label; - if( pluraliser.m_count != 1 ) - os << "s"; - return os; +std::ostream &operator << ( std::ostream &os, pluralise const &pluraliser ) +{ + os << pluraliser.m_count << " " << pluraliser.m_label; + if ( pluraliser.m_count != 1 ) { + os << "s"; } + return os; +} - SourceLineInfo::SourceLineInfo() : line( 0 ){} - SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) +SourceLineInfo::SourceLineInfo() : line( 0 ) {} +SourceLineInfo::SourceLineInfo( char const *_file, std::size_t _line ) : file( _file ), line( _line ) - {} - SourceLineInfo::SourceLineInfo( SourceLineInfo const& other ) +{} +SourceLineInfo::SourceLineInfo( SourceLineInfo const &other ) : file( other.file ), line( other.line ) - {} - bool SourceLineInfo::empty() const { - return file.empty(); - } - bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const { - return line == other.line && file == other.file; - } - bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const { - return line < other.line || ( line == other.line && file < other.file ); - } +{} +bool SourceLineInfo::empty() const +{ + return file.empty(); +} +bool SourceLineInfo::operator == ( SourceLineInfo const &other ) const +{ + return line == other.line && file == other.file; +} +bool SourceLineInfo::operator < ( SourceLineInfo const &other ) const +{ + return line < other.line || ( line == other.line && file < other.file ); +} - void seedRng( IConfig const& config ) { - if( config.rngSeed() != 0 ) - std::srand( config.rngSeed() ); - } - unsigned int rngSeed() { - return getCurrentContext().getConfig()->rngSeed(); +void seedRng( IConfig const &config ) +{ + if ( config.rngSeed() != 0 ) { + std::srand( config.rngSeed() ); } +} +unsigned int rngSeed() +{ + return getCurrentContext().getConfig()->rngSeed(); +} - std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { +std::ostream &operator << ( std::ostream &os, SourceLineInfo const &info ) +{ #ifndef __GNUG__ - os << info.file << "(" << info.line << ")"; + os << info.file << "(" << info.line << ")"; #else - os << info.file << ":" << info.line; + os << info.file << ":" << info.line; #endif - return os; - } + return os; +} - void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ) { - std::ostringstream oss; - oss << locationInfo << ": Internal Catch error: '" << message << "'"; - if( alwaysTrue() ) - throw std::logic_error( oss.str() ); +void throwLogicError( std::string const &message, SourceLineInfo const &locationInfo ) +{ + std::ostringstream oss; + oss << locationInfo << ": Internal Catch error: '" << message << "'"; + if ( alwaysTrue() ) { + throw std::logic_error( oss.str() ); } } +} // #included from: catch_section.hpp #define TWOBLUECUBES_CATCH_SECTION_HPP_INCLUDED namespace Catch { - SectionInfo::SectionInfo - ( SourceLineInfo const& _lineInfo, - std::string const& _name, - std::string const& _description ) +SectionInfo::SectionInfo +( SourceLineInfo const &_lineInfo, + std::string const &_name, + std::string const &_description ) : name( _name ), description( _description ), lineInfo( _lineInfo ) - {} +{} - Section::Section( SectionInfo const& info ) +Section::Section( SectionInfo const &info ) : m_info( info ), m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) ) - { - m_timer.start(); - } +{ + m_timer.start(); +} - Section::~Section() { - if( m_sectionIncluded ) { - SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() ); - if( std::uncaught_exception() ) - getResultCapture().sectionEndedEarly( endInfo ); - else - getResultCapture().sectionEnded( endInfo ); +Section::~Section() +{ + if ( m_sectionIncluded ) { + SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() ); + if ( std::uncaught_exception() ) { + getResultCapture().sectionEndedEarly( endInfo ); + } else { + getResultCapture().sectionEnded( endInfo ); } } +} - // This indicates whether the section should be executed or not - Section::operator bool() const { - return m_sectionIncluded; - } +// This indicates whether the section should be executed or not +Section::operator bool() const +{ + return m_sectionIncluded; +} } // end namespace Catch @@ -7933,86 +8890,94 @@ namespace Catch { #ifdef CATCH_PLATFORM_MAC - #include - #include - #include - #include - #include +#include +#include +#include +#include +#include - namespace Catch{ +namespace Catch { - // The following function is taken directly from the following technical note: - // http://developer.apple.com/library/mac/#qa/qa2004/qa1361.html +// The following function is taken directly from the following technical note: +// http://developer.apple.com/library/mac/#qa/qa2004/qa1361.html - // Returns true if the current process is being debugged (either - // running under the debugger or has a debugger attached post facto). - bool isDebuggerActive(){ +// Returns true if the current process is being debugged (either +// running under the debugger or has a debugger attached post facto). +bool isDebuggerActive() +{ - int mib[4]; - struct kinfo_proc info; - size_t size; + int mib[4]; + struct kinfo_proc info; + size_t size; - // Initialize the flags so that, if sysctl fails for some bizarre - // reason, we get a predictable result. + // Initialize the flags so that, if sysctl fails for some bizarre + // reason, we get a predictable result. - info.kp_proc.p_flag = 0; + info.kp_proc.p_flag = 0; - // Initialize mib, which tells sysctl the info we want, in this case - // we're looking for information about a specific process ID. + // Initialize mib, which tells sysctl the info we want, in this case + // we're looking for information about a specific process ID. - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PID; - mib[3] = getpid(); + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); - // Call sysctl. + // Call sysctl. - size = sizeof(info); - if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, CATCH_NULL, 0) != 0 ) { - Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl; - return false; - } + size = sizeof(info); + if ( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, CATCH_NULL, 0) != 0 ) { + Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl; + return false; + } - // We're being debugged if the P_TRACED flag is set. + // We're being debugged if the P_TRACED flag is set. - return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); - } - } // namespace Catch + return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); +} +} // namespace Catch #elif defined(_MSC_VER) - extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); - namespace Catch { - bool isDebuggerActive() { - return IsDebuggerPresent() != 0; - } - } +extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); +namespace Catch { +bool isDebuggerActive() +{ + return IsDebuggerPresent() != 0; +} +} #elif defined(__MINGW32__) - extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); - namespace Catch { - bool isDebuggerActive() { - return IsDebuggerPresent() != 0; - } - } +extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); +namespace Catch { +bool isDebuggerActive() +{ + return IsDebuggerPresent() != 0; +} +} #else - namespace Catch { - inline bool isDebuggerActive() { return false; } - } +namespace Catch { +inline bool isDebuggerActive() +{ + return false; +} +} #endif // Platform #ifdef CATCH_PLATFORM_WINDOWS - extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA( const char* ); - namespace Catch { - void writeToDebugConsole( std::string const& text ) { - ::OutputDebugStringA( text.c_str() ); - } - } +extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA( const char * ); +namespace Catch { +void writeToDebugConsole( std::string const &text ) +{ + ::OutputDebugStringA( text.c_str() ); +} +} #else - namespace Catch { - void writeToDebugConsole( std::string const& text ) { - // !TBD: Need a version for Mac/ XCode and other IDEs - Catch::cout() << text; - } - } +namespace Catch { +void writeToDebugConsole( std::string const &text ) +{ + // !TBD: Need a version for Mac/ XCode and other IDEs + Catch::cout() << text; +} +} #endif // Platform // #included from: catch_tostring.hpp @@ -8022,187 +8987,217 @@ namespace Catch { namespace Detail { - const std::string unprintableString = "{?}"; +const std::string unprintableString = "{?}"; - namespace { - const int hexThreshold = 255; +namespace { +const int hexThreshold = 255; - struct Endianness { - enum Arch { Big, Little }; +struct Endianness { + enum Arch { Big, Little }; - static Arch which() { - union _{ - int asInt; - char asChar[sizeof (int)]; - } u; + static Arch which() + { + union _ { + int asInt; + char asChar[sizeof (int)]; + } u; - u.asInt = 1; - return ( u.asChar[sizeof(int)-1] == 1 ) ? Big : Little; - } - }; + u.asInt = 1; + return ( u.asChar[sizeof(int) -1] == 1 ) ? Big : Little; } +}; +} - std::string rawMemoryToString( const void *object, std::size_t size ) - { - // Reverse order for little endian architectures - int i = 0, end = static_cast( size ), inc = 1; - if( Endianness::which() == Endianness::Little ) { - i = end-1; - end = inc = -1; - } +std::string rawMemoryToString( const void *object, std::size_t size ) +{ + // Reverse order for little endian architectures + int i = 0, end = static_cast( size ), inc = 1; + if ( Endianness::which() == Endianness::Little ) { + i = end - 1; + end = inc = -1; + } - unsigned char const *bytes = static_cast(object); - std::ostringstream os; - os << "0x" << std::setfill('0') << std::hex; - for( ; i != end; i += inc ) - os << std::setw(2) << static_cast(bytes[i]); - return os.str(); + unsigned char const *bytes = static_cast(object); + std::ostringstream os; + os << "0x" << std::setfill('0') << std::hex; + for ( ; i != end; i += inc ) { + os << std::setw(2) << static_cast(bytes[i]); } + return os.str(); +} } -std::string toString( std::string const& value ) { +std::string toString( std::string const &value ) +{ std::string s = value; - if( getCurrentContext().getConfig()->showInvisibles() ) { - for(size_t i = 0; i < s.size(); ++i ) { + if ( getCurrentContext().getConfig()->showInvisibles() ) { + for (size_t i = 0; i < s.size(); ++i ) { std::string subs; - switch( s[i] ) { + switch ( s[i] ) { case '\n': subs = "\\n"; break; case '\t': subs = "\\t"; break; default: break; } - if( !subs.empty() ) { - s = s.substr( 0, i ) + subs + s.substr( i+1 ); + if ( !subs.empty() ) { + s = s.substr( 0, i ) + subs + s.substr( i + 1 ); ++i; } } } return "\"" + s + "\""; } -std::string toString( std::wstring const& value ) { +std::string toString( std::wstring const &value ) +{ std::string s; s.reserve( value.size() ); - for(size_t i = 0; i < value.size(); ++i ) + for (size_t i = 0; i < value.size(); ++i ) { s += value[i] <= 0xff ? static_cast( value[i] ) : '?'; + } return Catch::toString( s ); } -std::string toString( const char* const value ) { +std::string toString( const char *const value ) +{ return value ? Catch::toString( std::string( value ) ) : std::string( "{null string}" ); } -std::string toString( char* const value ) { - return Catch::toString( static_cast( value ) ); +std::string toString( char *const value ) +{ + return Catch::toString( static_cast( value ) ); } -std::string toString( const wchar_t* const value ) +std::string toString( const wchar_t *const value ) { - return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); + return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); } -std::string toString( wchar_t* const value ) +std::string toString( wchar_t *const value ) { - return Catch::toString( static_cast( value ) ); + return Catch::toString( static_cast( value ) ); } -std::string toString( int value ) { +std::string toString( int value ) +{ std::ostringstream oss; oss << value; - if( value > Detail::hexThreshold ) + if ( value > Detail::hexThreshold ) { oss << " (0x" << std::hex << value << ")"; + } return oss.str(); } -std::string toString( unsigned long value ) { +std::string toString( unsigned long value ) +{ std::ostringstream oss; oss << value; - if( value > Detail::hexThreshold ) + if ( value > Detail::hexThreshold ) { oss << " (0x" << std::hex << value << ")"; + } return oss.str(); } -std::string toString( unsigned int value ) { +std::string toString( unsigned int value ) +{ return Catch::toString( static_cast( value ) ); } template -std::string fpToString( T value, int precision ) { +std::string fpToString( T value, int precision ) +{ std::ostringstream oss; oss << std::setprecision( precision ) << std::fixed << value; std::string d = oss.str(); std::size_t i = d.find_last_not_of( '0' ); - if( i != std::string::npos && i != d.size()-1 ) { - if( d[i] == '.' ) + if ( i != std::string::npos && i != d.size() - 1 ) { + if ( d[i] == '.' ) { i++; - d = d.substr( 0, i+1 ); + } + d = d.substr( 0, i + 1 ); } return d; } -std::string toString( const double value ) { +std::string toString( const double value ) +{ return fpToString( value, 10 ); } -std::string toString( const float value ) { +std::string toString( const float value ) +{ return fpToString( value, 5 ) + "f"; } -std::string toString( bool value ) { +std::string toString( bool value ) +{ return value ? "true" : "false"; } -std::string toString( char value ) { +std::string toString( char value ) +{ return value < ' ' - ? toString( static_cast( value ) ) - : Detail::makeString( value ); + ? toString( static_cast( value ) ) + : Detail::makeString( value ); } -std::string toString( signed char value ) { +std::string toString( signed char value ) +{ return toString( static_cast( value ) ); } -std::string toString( unsigned char value ) { +std::string toString( unsigned char value ) +{ return toString( static_cast( value ) ); } #ifdef CATCH_CONFIG_CPP11_LONG_LONG -std::string toString( long long value ) { +std::string toString( long long value ) +{ std::ostringstream oss; oss << value; - if( value > Detail::hexThreshold ) + if ( value > Detail::hexThreshold ) { oss << " (0x" << std::hex << value << ")"; + } return oss.str(); } -std::string toString( unsigned long long value ) { +std::string toString( unsigned long long value ) +{ std::ostringstream oss; oss << value; - if( value > Detail::hexThreshold ) + if ( value > Detail::hexThreshold ) { oss << " (0x" << std::hex << value << ")"; + } return oss.str(); } #endif #ifdef CATCH_CONFIG_CPP11_NULLPTR -std::string toString( std::nullptr_t ) { +std::string toString( std::nullptr_t ) +{ return "nullptr"; } #endif #ifdef __OBJC__ - std::string toString( NSString const * const& nsstring ) { - if( !nsstring ) - return "nil"; - return "@" + toString([nsstring UTF8String]); - } - std::string toString( NSString * CATCH_ARC_STRONG const& nsstring ) { - if( !nsstring ) - return "nil"; - return "@" + toString([nsstring UTF8String]); +std::string toString( NSString const *const &nsstring ) +{ + if ( !nsstring ) { + return "nil"; } - std::string toString( NSObject* const& nsObject ) { - return toString( [nsObject description] ); + return "@" + toString([nsstring UTF8String]); +} +std::string toString( NSString *CATCH_ARC_STRONG const &nsstring ) +{ + if ( !nsstring ) { + return "nil"; } + return "@" + toString([nsstring UTF8String]); +} +std::string toString( NSObject *const &nsObject ) +{ + return toString( [nsObject description] ); +} #endif } // end namespace Catch @@ -8212,143 +9207,170 @@ std::string toString( std::nullptr_t ) { namespace Catch { - std::string capturedExpressionWithSecondArgument( std::string const& capturedExpression, std::string const& secondArg ) { - return secondArg.empty() || secondArg == "\"\"" - ? capturedExpression - : capturedExpression + ", " + secondArg; - } - ResultBuilder::ResultBuilder( char const* macroName, - SourceLineInfo const& lineInfo, - char const* capturedExpression, - ResultDisposition::Flags resultDisposition, - char const* secondArg ) +std::string capturedExpressionWithSecondArgument( std::string const &capturedExpression, std::string const &secondArg ) +{ + return secondArg.empty() || secondArg == "\"\"" + ? capturedExpression + : capturedExpression + ", " + secondArg; +} +ResultBuilder::ResultBuilder( char const *macroName, + SourceLineInfo const &lineInfo, + char const *capturedExpression, + ResultDisposition::Flags resultDisposition, + char const *secondArg ) : m_assertionInfo( macroName, lineInfo, capturedExpressionWithSecondArgument( capturedExpression, secondArg ), resultDisposition ), m_shouldDebugBreak( false ), m_shouldThrow( false ) - {} +{} - ResultBuilder& ResultBuilder::setResultType( ResultWas::OfType result ) { - m_data.resultType = result; - return *this; - } - ResultBuilder& ResultBuilder::setResultType( bool result ) { - m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; - return *this; - } - ResultBuilder& ResultBuilder::setLhs( std::string const& lhs ) { - m_exprComponents.lhs = lhs; - return *this; - } - ResultBuilder& ResultBuilder::setRhs( std::string const& rhs ) { - m_exprComponents.rhs = rhs; - return *this; - } - ResultBuilder& ResultBuilder::setOp( std::string const& op ) { - m_exprComponents.op = op; - return *this; - } +ResultBuilder &ResultBuilder::setResultType( ResultWas::OfType result ) +{ + m_data.resultType = result; + return *this; +} +ResultBuilder &ResultBuilder::setResultType( bool result ) +{ + m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; + return *this; +} +ResultBuilder &ResultBuilder::setLhs( std::string const &lhs ) +{ + m_exprComponents.lhs = lhs; + return *this; +} +ResultBuilder &ResultBuilder::setRhs( std::string const &rhs ) +{ + m_exprComponents.rhs = rhs; + return *this; +} +ResultBuilder &ResultBuilder::setOp( std::string const &op ) +{ + m_exprComponents.op = op; + return *this; +} - void ResultBuilder::endExpression() { - m_exprComponents.testFalse = isFalseTest( m_assertionInfo.resultDisposition ); - captureExpression(); - } +void ResultBuilder::endExpression() +{ + m_exprComponents.testFalse = isFalseTest( m_assertionInfo.resultDisposition ); + captureExpression(); +} - void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) { - m_assertionInfo.resultDisposition = resultDisposition; - m_stream.oss << Catch::translateActiveException(); - captureResult( ResultWas::ThrewException ); - } +void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) +{ + m_assertionInfo.resultDisposition = resultDisposition; + m_stream.oss << Catch::translateActiveException(); + captureResult( ResultWas::ThrewException ); +} - void ResultBuilder::captureResult( ResultWas::OfType resultType ) { - setResultType( resultType ); - captureExpression(); - } - void ResultBuilder::captureExpectedException( std::string const& expectedMessage ) { - if( expectedMessage.empty() ) - captureExpectedException( Matchers::Impl::Generic::AllOf() ); - else - captureExpectedException( Matchers::Equals( expectedMessage ) ); +void ResultBuilder::captureResult( ResultWas::OfType resultType ) +{ + setResultType( resultType ); + captureExpression(); +} +void ResultBuilder::captureExpectedException( std::string const &expectedMessage ) +{ + if ( expectedMessage.empty() ) { + captureExpectedException( Matchers::Impl::Generic::AllOf() ); + } else { + captureExpectedException( Matchers::Equals( expectedMessage ) ); } +} - void ResultBuilder::captureExpectedException( Matchers::Impl::Matcher const& matcher ) { +void ResultBuilder::captureExpectedException( Matchers::Impl::Matcher const &matcher ) +{ - assert( m_exprComponents.testFalse == false ); - AssertionResultData data = m_data; - data.resultType = ResultWas::Ok; - data.reconstructedExpression = m_assertionInfo.capturedExpression; + assert( m_exprComponents.testFalse == false ); + AssertionResultData data = m_data; + data.resultType = ResultWas::Ok; + data.reconstructedExpression = m_assertionInfo.capturedExpression; - std::string actualMessage = Catch::translateActiveException(); - if( !matcher.match( actualMessage ) ) { - data.resultType = ResultWas::ExpressionFailed; - data.reconstructedExpression = actualMessage; - } - AssertionResult result( m_assertionInfo, data ); - handleResult( result ); + std::string actualMessage = Catch::translateActiveException(); + if ( !matcher.match( actualMessage ) ) { + data.resultType = ResultWas::ExpressionFailed; + data.reconstructedExpression = actualMessage; } + AssertionResult result( m_assertionInfo, data ); + handleResult( result ); +} - void ResultBuilder::captureExpression() { - AssertionResult result = build(); - handleResult( result ); - } - void ResultBuilder::handleResult( AssertionResult const& result ) - { - getResultCapture().assertionEnded( result ); +void ResultBuilder::captureExpression() +{ + AssertionResult result = build(); + handleResult( result ); +} +void ResultBuilder::handleResult( AssertionResult const &result ) +{ + getResultCapture().assertionEnded( result ); - if( !result.isOk() ) { - if( getCurrentContext().getConfig()->shouldDebugBreak() ) - m_shouldDebugBreak = true; - if( getCurrentContext().getRunner()->aborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) ) - m_shouldThrow = true; + if ( !result.isOk() ) { + if ( getCurrentContext().getConfig()->shouldDebugBreak() ) { + m_shouldDebugBreak = true; + } + if ( getCurrentContext().getRunner()->aborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) ) { + m_shouldThrow = true; } } - void ResultBuilder::react() { - if( m_shouldThrow ) - throw Catch::TestFailureException(); - } +} +void ResultBuilder::react() +{ + if ( m_shouldThrow ) { + throw Catch::TestFailureException(); + } +} - bool ResultBuilder::shouldDebugBreak() const { return m_shouldDebugBreak; } - bool ResultBuilder::allowThrows() const { return getCurrentContext().getConfig()->allowThrows(); } +bool ResultBuilder::shouldDebugBreak() const +{ + return m_shouldDebugBreak; +} +bool ResultBuilder::allowThrows() const +{ + return getCurrentContext().getConfig()->allowThrows(); +} - AssertionResult ResultBuilder::build() const - { - assert( m_data.resultType != ResultWas::Unknown ); +AssertionResult ResultBuilder::build() const +{ + assert( m_data.resultType != ResultWas::Unknown ); - AssertionResultData data = m_data; + AssertionResultData data = m_data; - // Flip bool results if testFalse is set - if( m_exprComponents.testFalse ) { - if( data.resultType == ResultWas::Ok ) - data.resultType = ResultWas::ExpressionFailed; - else if( data.resultType == ResultWas::ExpressionFailed ) - data.resultType = ResultWas::Ok; + // Flip bool results if testFalse is set + if ( m_exprComponents.testFalse ) { + if ( data.resultType == ResultWas::Ok ) { + data.resultType = ResultWas::ExpressionFailed; + } else if ( data.resultType == ResultWas::ExpressionFailed ) { + data.resultType = ResultWas::Ok; } + } - data.message = m_stream.oss.str(); - data.reconstructedExpression = reconstructExpression(); - if( m_exprComponents.testFalse ) { - if( m_exprComponents.op == "" ) - data.reconstructedExpression = "!" + data.reconstructedExpression; - else - data.reconstructedExpression = "!(" + data.reconstructedExpression + ")"; + data.message = m_stream.oss.str(); + data.reconstructedExpression = reconstructExpression(); + if ( m_exprComponents.testFalse ) { + if ( m_exprComponents.op == "" ) { + data.reconstructedExpression = "!" + data.reconstructedExpression; + } else { + data.reconstructedExpression = "!(" + data.reconstructedExpression + ")"; } - return AssertionResult( m_assertionInfo, data ); } - std::string ResultBuilder::reconstructExpression() const { - if( m_exprComponents.op == "" ) - return m_exprComponents.lhs.empty() ? m_assertionInfo.capturedExpression : m_exprComponents.op + m_exprComponents.lhs; - else if( m_exprComponents.op == "matches" ) - return m_exprComponents.lhs + " " + m_exprComponents.rhs; - else if( m_exprComponents.op != "!" ) { - if( m_exprComponents.lhs.size() + m_exprComponents.rhs.size() < 40 && + return AssertionResult( m_assertionInfo, data ); +} +std::string ResultBuilder::reconstructExpression() const +{ + if ( m_exprComponents.op == "" ) { + return m_exprComponents.lhs.empty() ? m_assertionInfo.capturedExpression : m_exprComponents.op + m_exprComponents.lhs; + } else if ( m_exprComponents.op == "matches" ) { + return m_exprComponents.lhs + " " + m_exprComponents.rhs; + } else if ( m_exprComponents.op != "!" ) { + if ( m_exprComponents.lhs.size() + m_exprComponents.rhs.size() < 40 && m_exprComponents.lhs.find("\n") == std::string::npos && - m_exprComponents.rhs.find("\n") == std::string::npos ) - return m_exprComponents.lhs + " " + m_exprComponents.op + " " + m_exprComponents.rhs; - else - return m_exprComponents.lhs + "\n" + m_exprComponents.op + "\n" + m_exprComponents.rhs; + m_exprComponents.rhs.find("\n") == std::string::npos ) { + return m_exprComponents.lhs + " " + m_exprComponents.op + " " + m_exprComponents.rhs; + } else { + return m_exprComponents.lhs + "\n" + m_exprComponents.op + "\n" + m_exprComponents.rhs; } - else - return "{can't expand - use " + m_assertionInfo.macroName + "_FALSE( " + m_assertionInfo.capturedExpression.substr(1) + " ) instead of " + m_assertionInfo.macroName + "( " + m_assertionInfo.capturedExpression + " ) for better diagnostics}"; + } else { + return "{can't expand - use " + m_assertionInfo.macroName + "_FALSE( " + m_assertionInfo.capturedExpression.substr(1) + " ) instead of " + m_assertionInfo.macroName + "( " + m_assertionInfo.capturedExpression + " ) for better diagnostics}"; } +} } // end namespace Catch @@ -8362,17 +9384,17 @@ namespace Catch { namespace Catch { - class TagAliasRegistry : public ITagAliasRegistry { - public: - virtual ~TagAliasRegistry(); - virtual Option find( std::string const& alias ) const; - virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const; - void add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); - static TagAliasRegistry& get(); +class TagAliasRegistry : public ITagAliasRegistry { +public: + virtual ~TagAliasRegistry(); + virtual Option find( std::string const &alias ) const; + virtual std::string expandAliases( std::string const &unexpandedTestSpec ) const; + void add( char const *alias, char const *tag, SourceLineInfo const &lineInfo ); + static TagAliasRegistry &get(); - private: - std::map m_registry; - }; +private: + std::map m_registry; +}; } // end namespace Catch @@ -8381,66 +9403,74 @@ namespace Catch { namespace Catch { - TagAliasRegistry::~TagAliasRegistry() {} +TagAliasRegistry::~TagAliasRegistry() {} - Option TagAliasRegistry::find( std::string const& alias ) const { - std::map::const_iterator it = m_registry.find( alias ); - if( it != m_registry.end() ) - return it->second; - else - return Option(); +Option TagAliasRegistry::find( std::string const &alias ) const +{ + std::map::const_iterator it = m_registry.find( alias ); + if ( it != m_registry.end() ) { + return it->second; + } else { + return Option(); } +} - std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const { - std::string expandedTestSpec = unexpandedTestSpec; - for( std::map::const_iterator it = m_registry.begin(), itEnd = m_registry.end(); - it != itEnd; - ++it ) { - std::size_t pos = expandedTestSpec.find( it->first ); - if( pos != std::string::npos ) { - expandedTestSpec = expandedTestSpec.substr( 0, pos ) + - it->second.tag + - expandedTestSpec.substr( pos + it->first.size() ); - } +std::string TagAliasRegistry::expandAliases( std::string const &unexpandedTestSpec ) const +{ + std::string expandedTestSpec = unexpandedTestSpec; + for ( std::map::const_iterator it = m_registry.begin(), itEnd = m_registry.end(); + it != itEnd; + ++it ) { + std::size_t pos = expandedTestSpec.find( it->first ); + if ( pos != std::string::npos ) { + expandedTestSpec = expandedTestSpec.substr( 0, pos ) + + it->second.tag + + expandedTestSpec.substr( pos + it->first.size() ); } - return expandedTestSpec; } + return expandedTestSpec; +} - void TagAliasRegistry::add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { +void TagAliasRegistry::add( char const *alias, char const *tag, SourceLineInfo const &lineInfo ) +{ - if( !startsWith( alias, "[@" ) || !endsWith( alias, "]" ) ) { - std::ostringstream oss; - oss << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" << lineInfo; - throw std::domain_error( oss.str().c_str() ); - } - if( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { - std::ostringstream oss; - oss << "error: tag alias, \"" << alias << "\" already registered.\n" - << "\tFirst seen at " << find(alias)->lineInfo << "\n" - << "\tRedefined at " << lineInfo; - throw std::domain_error( oss.str().c_str() ); - } + if ( !startsWith( alias, "[@" ) || !endsWith( alias, "]" ) ) { + std::ostringstream oss; + oss << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" << lineInfo; + throw std::domain_error( oss.str().c_str() ); + } + if ( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { + std::ostringstream oss; + oss << "error: tag alias, \"" << alias << "\" already registered.\n" + << "\tFirst seen at " << find(alias)->lineInfo << "\n" + << "\tRedefined at " << lineInfo; + throw std::domain_error( oss.str().c_str() ); } +} - TagAliasRegistry& TagAliasRegistry::get() { - static TagAliasRegistry instance; - return instance; +TagAliasRegistry &TagAliasRegistry::get() +{ + static TagAliasRegistry instance; + return instance; - } +} - ITagAliasRegistry::~ITagAliasRegistry() {} - ITagAliasRegistry const& ITagAliasRegistry::get() { return TagAliasRegistry::get(); } +ITagAliasRegistry::~ITagAliasRegistry() {} +ITagAliasRegistry const &ITagAliasRegistry::get() +{ + return TagAliasRegistry::get(); +} - RegistrarForTagAliases::RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { - try { - TagAliasRegistry::get().add( alias, tag, lineInfo ); - } - catch( std::exception& ex ) { - Colour colourGuard( Colour::Red ); - Catch::cerr() << ex.what() << std::endl; - exit(1); - } +RegistrarForTagAliases::RegistrarForTagAliases( char const *alias, char const *tag, SourceLineInfo const &lineInfo ) +{ + try { + TagAliasRegistry::get().add( alias, tag, lineInfo ); + } catch ( std::exception &ex ) { + Colour colourGuard( Colour::Red ); + Catch::cerr() << ex.what() << std::endl; + exit(1); } +} } // end namespace Catch @@ -8454,126 +9484,154 @@ class MultipleReporters : public SharedImpl { Reporters m_reporters; public: - void add( Ptr const& reporter ) { + void add( Ptr const &reporter ) + { m_reporters.push_back( reporter ); } public: // IStreamingReporter - virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE + { return m_reporters[0]->getPreferences(); } - virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void noMatchingTestCases( std::string const &spec ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->noMatchingTestCases( spec ); + } } - virtual void testRunStarting( TestRunInfo const& testRunInfo ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void testRunStarting( TestRunInfo const &testRunInfo ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->testRunStarting( testRunInfo ); + } } - virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void testGroupStarting( GroupInfo const &groupInfo ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->testGroupStarting( groupInfo ); + } } - virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void testCaseStarting( TestCaseInfo const &testInfo ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->testCaseStarting( testInfo ); + } } - virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void sectionStarting( SectionInfo const §ionInfo ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->sectionStarting( sectionInfo ); + } } - virtual void assertionStarting( AssertionInfo const& assertionInfo ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void assertionStarting( AssertionInfo const &assertionInfo ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->assertionStarting( assertionInfo ); + } } // The return value indicates if the messages buffer should be cleared: - virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + virtual bool assertionEnded( AssertionStats const &assertionStats ) CATCH_OVERRIDE { bool clearBuffer = false; - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { clearBuffer |= (*it)->assertionEnded( assertionStats ); + } return clearBuffer; } - virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void sectionEnded( SectionStats const §ionStats ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->sectionEnded( sectionStats ); + } } - virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void testCaseEnded( TestCaseStats const &testCaseStats ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->testCaseEnded( testCaseStats ); + } } - virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void testGroupEnded( TestGroupStats const &testGroupStats ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->testGroupEnded( testGroupStats ); + } } - virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void testRunEnded( TestRunStats const &testRunStats ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->testRunEnded( testRunStats ); + } } - virtual void skipTest( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { - for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + virtual void skipTest( TestCaseInfo const &testInfo ) CATCH_OVERRIDE { + for ( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); it != itEnd; ++it ) + { (*it)->skipTest( testInfo ); + } } - virtual MultipleReporters* tryAsMulti() CATCH_OVERRIDE { + virtual MultipleReporters *tryAsMulti() CATCH_OVERRIDE { return this; } }; -Ptr addReporter( Ptr const& existingReporter, Ptr const& additionalReporter ) { +Ptr addReporter( Ptr const &existingReporter, Ptr const &additionalReporter ) +{ Ptr resultingReporter; - if( existingReporter ) { - MultipleReporters* multi = existingReporter->tryAsMulti(); - if( !multi ) { + if ( existingReporter ) { + MultipleReporters *multi = existingReporter->tryAsMulti(); + if ( !multi ) { multi = new MultipleReporters; resultingReporter = Ptr( multi ); - if( existingReporter ) + if ( existingReporter ) { multi->add( existingReporter ); - } - else + } + } else { resultingReporter = existingReporter; + } multi->add( additionalReporter ); - } - else + } else { resultingReporter = additionalReporter; + } return resultingReporter; } @@ -8590,231 +9648,239 @@ Ptr addReporter( Ptr const& existingRepo namespace Catch { - struct StreamingReporterBase : SharedImpl { +struct StreamingReporterBase : SharedImpl { - StreamingReporterBase( ReporterConfig const& _config ) + StreamingReporterBase( ReporterConfig const &_config ) : m_config( _config.fullConfig() ), stream( _config.stream() ) - { - m_reporterPrefs.shouldRedirectStdOut = false; - } + { + m_reporterPrefs.shouldRedirectStdOut = false; + } - virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { - return m_reporterPrefs; - } + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE + { + return m_reporterPrefs; + } - virtual ~StreamingReporterBase() CATCH_OVERRIDE; + virtual ~StreamingReporterBase() CATCH_OVERRIDE; - virtual void noMatchingTestCases( std::string const& ) CATCH_OVERRIDE {} + virtual void noMatchingTestCases( std::string const & ) CATCH_OVERRIDE {} - virtual void testRunStarting( TestRunInfo const& _testRunInfo ) CATCH_OVERRIDE { - currentTestRunInfo = _testRunInfo; - } - virtual void testGroupStarting( GroupInfo const& _groupInfo ) CATCH_OVERRIDE { - currentGroupInfo = _groupInfo; - } + virtual void testRunStarting( TestRunInfo const &_testRunInfo ) CATCH_OVERRIDE { + currentTestRunInfo = _testRunInfo; + } + virtual void testGroupStarting( GroupInfo const &_groupInfo ) CATCH_OVERRIDE { + currentGroupInfo = _groupInfo; + } - virtual void testCaseStarting( TestCaseInfo const& _testInfo ) CATCH_OVERRIDE { - currentTestCaseInfo = _testInfo; - } - virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE { - m_sectionStack.push_back( _sectionInfo ); - } + virtual void testCaseStarting( TestCaseInfo const &_testInfo ) CATCH_OVERRIDE { + currentTestCaseInfo = _testInfo; + } + virtual void sectionStarting( SectionInfo const &_sectionInfo ) CATCH_OVERRIDE { + m_sectionStack.push_back( _sectionInfo ); + } - virtual void sectionEnded( SectionStats const& /* _sectionStats */ ) CATCH_OVERRIDE { - m_sectionStack.pop_back(); - } - virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) CATCH_OVERRIDE { - currentTestCaseInfo.reset(); - } - virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) CATCH_OVERRIDE { - currentGroupInfo.reset(); - } - virtual void testRunEnded( TestRunStats const& /* _testRunStats */ ) CATCH_OVERRIDE { - currentTestCaseInfo.reset(); - currentGroupInfo.reset(); - currentTestRunInfo.reset(); - } + virtual void sectionEnded( SectionStats const & /* _sectionStats */ ) CATCH_OVERRIDE { + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const & /* _testCaseStats */ ) CATCH_OVERRIDE { + currentTestCaseInfo.reset(); + } + virtual void testGroupEnded( TestGroupStats const & /* _testGroupStats */ ) CATCH_OVERRIDE { + currentGroupInfo.reset(); + } + virtual void testRunEnded( TestRunStats const & /* _testRunStats */ ) CATCH_OVERRIDE { + currentTestCaseInfo.reset(); + currentGroupInfo.reset(); + currentTestRunInfo.reset(); + } - virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE { - // Don't do anything with this by default. - // It can optionally be overridden in the derived class. - } + virtual void skipTest( TestCaseInfo const & ) CATCH_OVERRIDE { + // Don't do anything with this by default. + // It can optionally be overridden in the derived class. + } + + Ptr m_config; + std::ostream &stream; + + LazyStat currentTestRunInfo; + LazyStat currentGroupInfo; + LazyStat currentTestCaseInfo; - Ptr m_config; - std::ostream& stream; + std::vector m_sectionStack; + ReporterPreferences m_reporterPrefs; +}; - LazyStat currentTestRunInfo; - LazyStat currentGroupInfo; - LazyStat currentTestCaseInfo; +struct CumulativeReporterBase : SharedImpl { + template +struct Node : SharedImpl<> { + explicit Node( T const &_value ) : value( _value ) {} + virtual ~Node() {} - std::vector m_sectionStack; - ReporterPreferences m_reporterPrefs; + typedef std::vector > ChildNodes; + T value; + ChildNodes children; }; + struct SectionNode : SharedImpl<> { + explicit SectionNode( SectionStats const &_stats ) : stats( _stats ) {} + virtual ~SectionNode(); - struct CumulativeReporterBase : SharedImpl { - template - struct Node : SharedImpl<> { - explicit Node( T const& _value ) : value( _value ) {} - virtual ~Node() {} - - typedef std::vector > ChildNodes; - T value; - ChildNodes children; - }; - struct SectionNode : SharedImpl<> { - explicit SectionNode( SectionStats const& _stats ) : stats( _stats ) {} - virtual ~SectionNode(); - - bool operator == ( SectionNode const& other ) const { - return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; - } - bool operator == ( Ptr const& other ) const { - return operator==( *other ); - } + bool operator == ( SectionNode const &other ) const + { + return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; + } + bool operator == ( Ptr const &other ) const + { + return operator==( *other ); + } - SectionStats stats; - typedef std::vector > ChildSections; - typedef std::vector Assertions; - ChildSections childSections; - Assertions assertions; - std::string stdOut; - std::string stdErr; - }; - - struct BySectionInfo { - BySectionInfo( SectionInfo const& other ) : m_other( other ) {} - BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} - bool operator() ( Ptr const& node ) const { - return node->stats.sectionInfo.lineInfo == m_other.lineInfo; - } - private: - void operator=( BySectionInfo const& ); - SectionInfo const& m_other; - }; + SectionStats stats; + typedef std::vector > ChildSections; + typedef std::vector Assertions; + ChildSections childSections; + Assertions assertions; + std::string stdOut; + std::string stdErr; + }; - typedef Node TestCaseNode; - typedef Node TestGroupNode; - typedef Node TestRunNode; + struct BySectionInfo { + BySectionInfo( SectionInfo const &other ) : m_other( other ) {} + BySectionInfo( BySectionInfo const &other ) : m_other( other.m_other ) {} + bool operator() ( Ptr const &node ) const + { + return node->stats.sectionInfo.lineInfo == m_other.lineInfo; + } + private: + void operator=( BySectionInfo const & ); + SectionInfo const &m_other; + }; - CumulativeReporterBase( ReporterConfig const& _config ) + typedef Node TestCaseNode; + typedef Node TestGroupNode; + typedef Node TestRunNode; + + CumulativeReporterBase( ReporterConfig const &_config ) : m_config( _config.fullConfig() ), stream( _config.stream() ) - { - m_reporterPrefs.shouldRedirectStdOut = false; - } - ~CumulativeReporterBase(); + { + m_reporterPrefs.shouldRedirectStdOut = false; + } + ~CumulativeReporterBase(); - virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { - return m_reporterPrefs; - } + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE + { + return m_reporterPrefs; + } - virtual void testRunStarting( TestRunInfo const& ) CATCH_OVERRIDE {} - virtual void testGroupStarting( GroupInfo const& ) CATCH_OVERRIDE {} + virtual void testRunStarting( TestRunInfo const & ) CATCH_OVERRIDE {} + virtual void testGroupStarting( GroupInfo const & ) CATCH_OVERRIDE {} - virtual void testCaseStarting( TestCaseInfo const& ) CATCH_OVERRIDE {} + virtual void testCaseStarting( TestCaseInfo const & ) CATCH_OVERRIDE {} - virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { - SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); - Ptr node; - if( m_sectionStack.empty() ) { - if( !m_rootSection ) - m_rootSection = new SectionNode( incompleteStats ); - node = m_rootSection; + virtual void sectionStarting( SectionInfo const §ionInfo ) CATCH_OVERRIDE { + SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); + Ptr node; + if ( m_sectionStack.empty() ) + { + if ( !m_rootSection ) { + m_rootSection = new SectionNode( incompleteStats ); } - else { - SectionNode& parentNode = *m_sectionStack.back(); - SectionNode::ChildSections::const_iterator it = - std::find_if( parentNode.childSections.begin(), - parentNode.childSections.end(), - BySectionInfo( sectionInfo ) ); - if( it == parentNode.childSections.end() ) { - node = new SectionNode( incompleteStats ); - parentNode.childSections.push_back( node ); - } - else - node = *it; + node = m_rootSection; + } else + { + SectionNode &parentNode = *m_sectionStack.back(); + SectionNode::ChildSections::const_iterator it = + std::find_if( parentNode.childSections.begin(), + parentNode.childSections.end(), + BySectionInfo( sectionInfo ) ); + if ( it == parentNode.childSections.end() ) { + node = new SectionNode( incompleteStats ); + parentNode.childSections.push_back( node ); + } else { + node = *it; } - m_sectionStack.push_back( node ); - m_deepestSection = node; } + m_sectionStack.push_back( node ); + m_deepestSection = node; + } - virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {} + virtual void assertionStarting( AssertionInfo const & ) CATCH_OVERRIDE {} - virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { - assert( !m_sectionStack.empty() ); - SectionNode& sectionNode = *m_sectionStack.back(); - sectionNode.assertions.push_back( assertionStats ); - return true; - } - virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { - assert( !m_sectionStack.empty() ); - SectionNode& node = *m_sectionStack.back(); - node.stats = sectionStats; - m_sectionStack.pop_back(); - } - virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { - Ptr node = new TestCaseNode( testCaseStats ); - assert( m_sectionStack.size() == 0 ); - node->children.push_back( m_rootSection ); - m_testCases.push_back( node ); - m_rootSection.reset(); + virtual bool assertionEnded( AssertionStats const &assertionStats ) CATCH_OVERRIDE { + assert( !m_sectionStack.empty() ); + SectionNode §ionNode = *m_sectionStack.back(); + sectionNode.assertions.push_back( assertionStats ); + return true; + } + virtual void sectionEnded( SectionStats const §ionStats ) CATCH_OVERRIDE { + assert( !m_sectionStack.empty() ); + SectionNode &node = *m_sectionStack.back(); + node.stats = sectionStats; + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const &testCaseStats ) CATCH_OVERRIDE { + Ptr node = new TestCaseNode( testCaseStats ); + assert( m_sectionStack.size() == 0 ); + node->children.push_back( m_rootSection ); + m_testCases.push_back( node ); + m_rootSection.reset(); - assert( m_deepestSection ); - m_deepestSection->stdOut = testCaseStats.stdOut; - m_deepestSection->stdErr = testCaseStats.stdErr; - } - virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { - Ptr node = new TestGroupNode( testGroupStats ); - node->children.swap( m_testCases ); - m_testGroups.push_back( node ); - } - virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { - Ptr node = new TestRunNode( testRunStats ); - node->children.swap( m_testGroups ); - m_testRuns.push_back( node ); - testRunEndedCumulative(); - } - virtual void testRunEndedCumulative() = 0; + assert( m_deepestSection ); + m_deepestSection->stdOut = testCaseStats.stdOut; + m_deepestSection->stdErr = testCaseStats.stdErr; + } + virtual void testGroupEnded( TestGroupStats const &testGroupStats ) CATCH_OVERRIDE { + Ptr node = new TestGroupNode( testGroupStats ); + node->children.swap( m_testCases ); + m_testGroups.push_back( node ); + } + virtual void testRunEnded( TestRunStats const &testRunStats ) CATCH_OVERRIDE { + Ptr node = new TestRunNode( testRunStats ); + node->children.swap( m_testGroups ); + m_testRuns.push_back( node ); + testRunEndedCumulative(); + } + virtual void testRunEndedCumulative() = 0; - virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {} + virtual void skipTest( TestCaseInfo const & ) CATCH_OVERRIDE {} - Ptr m_config; - std::ostream& stream; - std::vector m_assertions; - std::vector > > m_sections; - std::vector > m_testCases; - std::vector > m_testGroups; + Ptr m_config; + std::ostream &stream; + std::vector m_assertions; + std::vector > > m_sections; + std::vector > m_testCases; + std::vector > m_testGroups; - std::vector > m_testRuns; + std::vector > m_testRuns; - Ptr m_rootSection; - Ptr m_deepestSection; - std::vector > m_sectionStack; - ReporterPreferences m_reporterPrefs; + Ptr m_rootSection; + Ptr m_deepestSection; + std::vector > m_sectionStack; + ReporterPreferences m_reporterPrefs; - }; +}; - template - char const* getLineOfChars() { - static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; - if( !*line ) { - memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 ); - line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0; - } - return line; +template +char const *getLineOfChars() +{ + static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; + if ( !*line ) { + memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH - 1 ); + line[CATCH_CONFIG_CONSOLE_WIDTH - 1] = 0; } + return line; +} - struct TestEventListenerBase : StreamingReporterBase { - TestEventListenerBase( ReporterConfig const& _config ) +struct TestEventListenerBase : StreamingReporterBase { + TestEventListenerBase( ReporterConfig const &_config ) : StreamingReporterBase( _config ) - {} + {} - virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {} - virtual bool assertionEnded( AssertionStats const& ) CATCH_OVERRIDE { - return false; - } - }; + virtual void assertionStarting( AssertionInfo const & ) CATCH_OVERRIDE {} + virtual bool assertionEnded( AssertionStats const & ) CATCH_OVERRIDE { + return false; + } +}; } // end namespace Catch @@ -8823,77 +9889,86 @@ namespace Catch { namespace Catch { - template - class LegacyReporterRegistrar { - - class ReporterFactory : public IReporterFactory { - virtual IStreamingReporter* create( ReporterConfig const& config ) const { - return new LegacyReporterAdapter( new T( config ) ); - } - - virtual std::string getDescription() const { - return T::getDescription(); - } - }; +template +class LegacyReporterRegistrar { - public: +class ReporterFactory : public IReporterFactory { + virtual IStreamingReporter *create( ReporterConfig const &config ) const + { + return new LegacyReporterAdapter( new T( config ) ); + } - LegacyReporterRegistrar( std::string const& name ) { - getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); - } + virtual std::string getDescription() const + { + return T::getDescription(); + } }; - template - class ReporterRegistrar { - - class ReporterFactory : public SharedImpl { - - // *** Please Note ***: - // - If you end up here looking at a compiler error because it's trying to register - // your custom reporter class be aware that the native reporter interface has changed - // to IStreamingReporter. The "legacy" interface, IReporter, is still supported via - // an adapter. Just use REGISTER_LEGACY_REPORTER to take advantage of the adapter. - // However please consider updating to the new interface as the old one is now - // deprecated and will probably be removed quite soon! - // Please contact me via github if you have any questions at all about this. - // In fact, ideally, please contact me anyway to let me know you've hit this - as I have - // no idea who is actually using custom reporters at all (possibly no-one!). - // The new interface is designed to minimise exposure to interface changes in the future. - virtual IStreamingReporter* create( ReporterConfig const& config ) const { - return new T( config ); - } +public: - virtual std::string getDescription() const { - return T::getDescription(); - } - }; + LegacyReporterRegistrar( std::string const &name ) + { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } +}; - public: +template +class ReporterRegistrar { + +class ReporterFactory : public SharedImpl { + + // *** Please Note ***: + // - If you end up here looking at a compiler error because it's trying to register + // your custom reporter class be aware that the native reporter interface has changed + // to IStreamingReporter. The "legacy" interface, IReporter, is still supported via + // an adapter. Just use REGISTER_LEGACY_REPORTER to take advantage of the adapter. + // However please consider updating to the new interface as the old one is now + // deprecated and will probably be removed quite soon! + // Please contact me via github if you have any questions at all about this. + // In fact, ideally, please contact me anyway to let me know you've hit this - as I have + // no idea who is actually using custom reporters at all (possibly no-one!). + // The new interface is designed to minimise exposure to interface changes in the future. + virtual IStreamingReporter *create( ReporterConfig const &config ) const + { + return new T( config ); + } - ReporterRegistrar( std::string const& name ) { - getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); - } + virtual std::string getDescription() const + { + return T::getDescription(); + } }; - template - class ListenerRegistrar { +public: - class ListenerFactory : public SharedImpl { + ReporterRegistrar( std::string const &name ) + { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } +}; - virtual IStreamingReporter* create( ReporterConfig const& config ) const { - return new T( config ); - } - virtual std::string getDescription() const { - return ""; - } - }; +template +class ListenerRegistrar { - public: +class ListenerFactory : public SharedImpl { - ListenerRegistrar() { - getMutableRegistryHub().registerListener( new ListenerFactory() ); - } + virtual IStreamingReporter *create( ReporterConfig const &config ) const + { + return new T( config ); + } + virtual std::string getDescription() const + { + return ""; + } }; + +public: + + ListenerRegistrar() + { + getMutableRegistryHub().registerListener( new ListenerFactory() ); + } +}; } #define INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) \ @@ -8915,217 +9990,243 @@ namespace Catch { namespace Catch { - class XmlEncode { - public: - enum ForWhat { ForTextNodes, ForAttributes }; +class XmlEncode { +public: + enum ForWhat { ForTextNodes, ForAttributes }; - XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes ) + XmlEncode( std::string const &str, ForWhat forWhat = ForTextNodes ) : m_str( str ), m_forWhat( forWhat ) - {} - - void encodeTo( std::ostream& os ) const { - - // Apostrophe escaping not necessary if we always use " to write attributes - // (see: http://www.w3.org/TR/xml/#syntax) + {} - for( std::size_t i = 0; i < m_str.size(); ++ i ) { - char c = m_str[i]; - switch( c ) { - case '<': os << "<"; break; - case '&': os << "&"; break; + void encodeTo( std::ostream &os ) const + { - case '>': - // See: http://www.w3.org/TR/xml/#syntax - if( i > 2 && m_str[i-1] == ']' && m_str[i-2] == ']' ) - os << ">"; - else - os << c; - break; + // Apostrophe escaping not necessary if we always use " to write attributes + // (see: http://www.w3.org/TR/xml/#syntax) + + for ( std::size_t i = 0; i < m_str.size(); ++ i ) { + char c = m_str[i]; + switch ( c ) { + case '<': os << "<"; break; + case '&': os << "&"; break; + + case '>': + // See: http://www.w3.org/TR/xml/#syntax + if ( i > 2 && m_str[i - 1] == ']' && m_str[i - 2] == ']' ) { + os << ">"; + } else { + os << c; + } + break; - case '\"': - if( m_forWhat == ForAttributes ) - os << """; - else - os << c; - break; + case '\"': + if ( m_forWhat == ForAttributes ) { + os << """; + } else { + os << c; + } + break; - default: - // Escape control chars - based on contribution by @espenalb in PR #465 - if ( ( c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) - os << "&#x" << std::uppercase << std::hex << static_cast( c ); - else - os << c; + default: + // Escape control chars - based on contribution by @espenalb in PR #465 + if ( ( c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c == '\x7F' ) { + os << "&#x" << std::uppercase << std::hex << static_cast( c ); + } else { + os << c; } } } + } - friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) { - xmlEncode.encodeTo( os ); - return os; - } + friend std::ostream &operator << ( std::ostream &os, XmlEncode const &xmlEncode ) + { + xmlEncode.encodeTo( os ); + return os; + } - private: - std::string m_str; - ForWhat m_forWhat; - }; +private: + std::string m_str; + ForWhat m_forWhat; +}; - class XmlWriter { - public: +class XmlWriter { +public: - class ScopedElement { - public: - ScopedElement( XmlWriter* writer ) + class ScopedElement { + public: + ScopedElement( XmlWriter *writer ) : m_writer( writer ) - {} + {} - ScopedElement( ScopedElement const& other ) - : m_writer( other.m_writer ){ - other.m_writer = CATCH_NULL; - } + ScopedElement( ScopedElement const &other ) + : m_writer( other.m_writer ) + { + other.m_writer = CATCH_NULL; + } - ~ScopedElement() { - if( m_writer ) - m_writer->endElement(); + ~ScopedElement() + { + if ( m_writer ) { + m_writer->endElement(); } + } - ScopedElement& writeText( std::string const& text, bool indent = true ) { - m_writer->writeText( text, indent ); - return *this; - } + ScopedElement &writeText( std::string const &text, bool indent = true ) + { + m_writer->writeText( text, indent ); + return *this; + } - template - ScopedElement& writeAttribute( std::string const& name, T const& attribute ) { - m_writer->writeAttribute( name, attribute ); - return *this; - } + template + ScopedElement &writeAttribute( std::string const &name, T const &attribute ) + { + m_writer->writeAttribute( name, attribute ); + return *this; + } - private: - mutable XmlWriter* m_writer; - }; + private: + mutable XmlWriter *m_writer; + }; - XmlWriter() + XmlWriter() : m_tagIsOpen( false ), m_needsNewline( false ), m_os( &Catch::cout() ) - {} + {} - XmlWriter( std::ostream& os ) + XmlWriter( std::ostream &os ) : m_tagIsOpen( false ), m_needsNewline( false ), m_os( &os ) - {} + {} - ~XmlWriter() { - while( !m_tags.empty() ) - endElement(); + ~XmlWriter() + { + while ( !m_tags.empty() ) { + endElement(); } + } - XmlWriter& startElement( std::string const& name ) { - ensureTagClosed(); - newlineIfNecessary(); - stream() << m_indent << "<" << name; - m_tags.push_back( name ); - m_indent += " "; - m_tagIsOpen = true; - return *this; - } + XmlWriter &startElement( std::string const &name ) + { + ensureTagClosed(); + newlineIfNecessary(); + stream() << m_indent << "<" << name; + m_tags.push_back( name ); + m_indent += " "; + m_tagIsOpen = true; + return *this; + } - ScopedElement scopedElement( std::string const& name ) { - ScopedElement scoped( this ); - startElement( name ); - return scoped; - } + ScopedElement scopedElement( std::string const &name ) + { + ScopedElement scoped( this ); + startElement( name ); + return scoped; + } - XmlWriter& endElement() { - newlineIfNecessary(); - m_indent = m_indent.substr( 0, m_indent.size()-2 ); - if( m_tagIsOpen ) { - stream() << "/>\n"; - m_tagIsOpen = false; - } - else { - stream() << m_indent << "\n"; - } - m_tags.pop_back(); - return *this; - } + XmlWriter &endElement() + { + newlineIfNecessary(); + m_indent = m_indent.substr( 0, m_indent.size() - 2 ); + if ( m_tagIsOpen ) { + stream() << "/>\n"; + m_tagIsOpen = false; + } else { + stream() << m_indent << "\n"; + } + m_tags.pop_back(); + return *this; + } - XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ) { - if( !name.empty() && !attribute.empty() ) - stream() << " " << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << "\""; - return *this; + XmlWriter &writeAttribute( std::string const &name, std::string const &attribute ) + { + if ( !name.empty() && !attribute.empty() ) { + stream() << " " << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << "\""; } + return *this; + } - XmlWriter& writeAttribute( std::string const& name, bool attribute ) { - stream() << " " << name << "=\"" << ( attribute ? "true" : "false" ) << "\""; - return *this; - } + XmlWriter &writeAttribute( std::string const &name, bool attribute ) + { + stream() << " " << name << "=\"" << ( attribute ? "true" : "false" ) << "\""; + return *this; + } - template - XmlWriter& writeAttribute( std::string const& name, T const& attribute ) { - std::ostringstream oss; - oss << attribute; - return writeAttribute( name, oss.str() ); - } - - XmlWriter& writeText( std::string const& text, bool indent = true ) { - if( !text.empty() ){ - bool tagWasOpen = m_tagIsOpen; - ensureTagClosed(); - if( tagWasOpen && indent ) - stream() << m_indent; - stream() << XmlEncode( text ); - m_needsNewline = true; - } - return *this; - } + template + XmlWriter &writeAttribute( std::string const &name, T const &attribute ) + { + std::ostringstream oss; + oss << attribute; + return writeAttribute( name, oss.str() ); + } - XmlWriter& writeComment( std::string const& text ) { + XmlWriter &writeText( std::string const &text, bool indent = true ) + { + if ( !text.empty() ) { + bool tagWasOpen = m_tagIsOpen; ensureTagClosed(); - stream() << m_indent << ""; + if ( tagWasOpen && indent ) { + stream() << m_indent; + } + stream() << XmlEncode( text ); m_needsNewline = true; - return *this; } + return *this; + } - XmlWriter& writeBlankLine() { - ensureTagClosed(); - stream() << "\n"; - return *this; - } + XmlWriter &writeComment( std::string const &text ) + { + ensureTagClosed(); + stream() << m_indent << ""; + m_needsNewline = true; + return *this; + } - void setStream( std::ostream& os ) { - m_os = &os; - } + XmlWriter &writeBlankLine() + { + ensureTagClosed(); + stream() << "\n"; + return *this; + } - private: - XmlWriter( XmlWriter const& ); - void operator=( XmlWriter const& ); + void setStream( std::ostream &os ) + { + m_os = &os; + } - std::ostream& stream() { - return *m_os; - } +private: + XmlWriter( XmlWriter const & ); + void operator=( XmlWriter const & ); - void ensureTagClosed() { - if( m_tagIsOpen ) { - stream() << ">\n"; - m_tagIsOpen = false; - } + std::ostream &stream() + { + return *m_os; + } + + void ensureTagClosed() + { + if ( m_tagIsOpen ) { + stream() << ">\n"; + m_tagIsOpen = false; } + } - void newlineIfNecessary() { - if( m_needsNewline ) { - stream() << "\n"; - m_needsNewline = false; - } + void newlineIfNecessary() + { + if ( m_needsNewline ) { + stream() << "\n"; + m_needsNewline = false; } + } - bool m_tagIsOpen; - bool m_needsNewline; - std::vector m_tags; - std::string m_indent; - std::ostream* m_os; - }; + bool m_tagIsOpen; + bool m_needsNewline; + std::vector m_tags; + std::string m_indent; + std::ostream *m_os; +}; } // #included from: catch_reenable_warnings.h @@ -9144,183 +10245,200 @@ namespace Catch { namespace Catch { - class XmlReporter : public StreamingReporterBase { - public: - XmlReporter( ReporterConfig const& _config ) +class XmlReporter : public StreamingReporterBase { +public: + XmlReporter( ReporterConfig const &_config ) : StreamingReporterBase( _config ), m_sectionDepth( 0 ) - { - m_reporterPrefs.shouldRedirectStdOut = true; - } + { + m_reporterPrefs.shouldRedirectStdOut = true; + } - virtual ~XmlReporter() CATCH_OVERRIDE; + virtual ~XmlReporter() CATCH_OVERRIDE; - static std::string getDescription() { - return "Reports test results as an XML document"; - } + static std::string getDescription() + { + return "Reports test results as an XML document"; + } - public: // StreamingReporterBase +public: // StreamingReporterBase - virtual void noMatchingTestCases( std::string const& s ) CATCH_OVERRIDE { - StreamingReporterBase::noMatchingTestCases( s ); - } + virtual void noMatchingTestCases( std::string const &s ) CATCH_OVERRIDE { + StreamingReporterBase::noMatchingTestCases( s ); + } - virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE { - StreamingReporterBase::testRunStarting( testInfo ); - m_xml.setStream( stream ); - m_xml.startElement( "Catch" ); - if( !m_config->name().empty() ) - m_xml.writeAttribute( "name", m_config->name() ); + virtual void testRunStarting( TestRunInfo const &testInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testRunStarting( testInfo ); + m_xml.setStream( stream ); + m_xml.startElement( "Catch" ); + if ( !m_config->name().empty() ) + { + m_xml.writeAttribute( "name", m_config->name() ); } + } - virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { - StreamingReporterBase::testGroupStarting( groupInfo ); - m_xml.startElement( "Group" ) - .writeAttribute( "name", groupInfo.name ); - } + virtual void testGroupStarting( GroupInfo const &groupInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testGroupStarting( groupInfo ); + m_xml.startElement( "Group" ) + .writeAttribute( "name", groupInfo.name ); + } - virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { - StreamingReporterBase::testCaseStarting(testInfo); - m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) ); + virtual void testCaseStarting( TestCaseInfo const &testInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseStarting(testInfo); + m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) ); - if ( m_config->showDurations() == ShowDurations::Always ) - m_testCaseTimer.start(); + if ( m_config->showDurations() == ShowDurations::Always ) + { + m_testCaseTimer.start(); } + } - virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { - StreamingReporterBase::sectionStarting( sectionInfo ); - if( m_sectionDepth++ > 0 ) { - m_xml.startElement( "Section" ) - .writeAttribute( "name", trim( sectionInfo.name ) ) - .writeAttribute( "description", sectionInfo.description ); - } + virtual void sectionStarting( SectionInfo const §ionInfo ) CATCH_OVERRIDE { + StreamingReporterBase::sectionStarting( sectionInfo ); + if ( m_sectionDepth++ > 0 ) + { + m_xml.startElement( "Section" ) + .writeAttribute( "name", trim( sectionInfo.name ) ) + .writeAttribute( "description", sectionInfo.description ); } + } - virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { } - - virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { - const AssertionResult& assertionResult = assertionStats.assertionResult; - - // Print any info messages in tags. - if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { - for( std::vector::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); - it != itEnd; - ++it ) { - if( it->type == ResultWas::Info ) { - m_xml.scopedElement( "Info" ) - .writeText( it->message ); - } else if ( it->type == ResultWas::Warning ) { - m_xml.scopedElement( "Warning" ) - .writeText( it->message ); - } - } - } - - // Drop out if result was successful but we're not printing them. - if( !m_config->includeSuccessfulResults() && isOk(assertionResult.getResultType()) ) - return true; + virtual void assertionStarting( AssertionInfo const & ) CATCH_OVERRIDE { } - // Print the expression if there is one. - if( assertionResult.hasExpression() ) { - m_xml.startElement( "Expression" ) - .writeAttribute( "success", assertionResult.succeeded() ) - .writeAttribute( "type", assertionResult.getTestMacroName() ) - .writeAttribute( "filename", assertionResult.getSourceInfo().file ) - .writeAttribute( "line", assertionResult.getSourceInfo().line ); - - m_xml.scopedElement( "Original" ) - .writeText( assertionResult.getExpression() ); - m_xml.scopedElement( "Expanded" ) - .writeText( assertionResult.getExpandedExpression() ); - } + virtual bool assertionEnded( AssertionStats const &assertionStats ) CATCH_OVERRIDE { + const AssertionResult &assertionResult = assertionStats.assertionResult; - // And... Print a result applicable to each result type. - switch( assertionResult.getResultType() ) { - case ResultWas::ThrewException: - m_xml.scopedElement( "Exception" ) - .writeAttribute( "filename", assertionResult.getSourceInfo().file ) - .writeAttribute( "line", assertionResult.getSourceInfo().line ) - .writeText( assertionResult.getMessage() ); - break; - case ResultWas::FatalErrorCondition: - m_xml.scopedElement( "Fatal Error Condition" ) - .writeAttribute( "filename", assertionResult.getSourceInfo().file ) - .writeAttribute( "line", assertionResult.getSourceInfo().line ) - .writeText( assertionResult.getMessage() ); - break; - case ResultWas::Info: + // Print any info messages in tags. + if ( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) + { + for ( std::vector::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if ( it->type == ResultWas::Info ) { m_xml.scopedElement( "Info" ) - .writeText( assertionResult.getMessage() ); - break; - case ResultWas::Warning: - // Warning will already have been written - break; - case ResultWas::ExplicitFailure: - m_xml.scopedElement( "Failure" ) - .writeText( assertionResult.getMessage() ); - break; - default: - break; + .writeText( it->message ); + } else if ( it->type == ResultWas::Warning ) { + m_xml.scopedElement( "Warning" ) + .writeText( it->message ); + } } + } - if( assertionResult.hasExpression() ) - m_xml.endElement(); - + // Drop out if result was successful but we're not printing them. + if ( !m_config->includeSuccessfulResults() && isOk(assertionResult.getResultType()) ) + { return true; } - virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { - StreamingReporterBase::sectionEnded( sectionStats ); - if( --m_sectionDepth > 0 ) { - XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" ); - e.writeAttribute( "successes", sectionStats.assertions.passed ); - e.writeAttribute( "failures", sectionStats.assertions.failed ); - e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk ); + // Print the expression if there is one. + if ( assertionResult.hasExpression() ) + { + m_xml.startElement( "Expression" ) + .writeAttribute( "success", assertionResult.succeeded() ) + .writeAttribute( "type", assertionResult.getTestMacroName() ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ); - if ( m_config->showDurations() == ShowDurations::Always ) - e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds ); + m_xml.scopedElement( "Original" ) + .writeText( assertionResult.getExpression() ); + m_xml.scopedElement( "Expanded" ) + .writeText( assertionResult.getExpandedExpression() ); + } - m_xml.endElement(); - } + // And... Print a result applicable to each result type. + switch ( assertionResult.getResultType() ) + { + case ResultWas::ThrewException: + m_xml.scopedElement( "Exception" ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::FatalErrorCondition: + m_xml.scopedElement( "Fatal Error Condition" ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::Info: + m_xml.scopedElement( "Info" ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::Warning: + // Warning will already have been written + break; + case ResultWas::ExplicitFailure: + m_xml.scopedElement( "Failure" ) + .writeText( assertionResult.getMessage() ); + break; + default: + break; + } + + if ( assertionResult.hasExpression() ) + { + m_xml.endElement(); } - virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { - StreamingReporterBase::testCaseEnded( testCaseStats ); - XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" ); - e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() ); + return true; + } - if ( m_config->showDurations() == ShowDurations::Always ) - e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() ); + virtual void sectionEnded( SectionStats const §ionStats ) CATCH_OVERRIDE { + StreamingReporterBase::sectionEnded( sectionStats ); + if ( --m_sectionDepth > 0 ) + { + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" ); + e.writeAttribute( "successes", sectionStats.assertions.passed ); + e.writeAttribute( "failures", sectionStats.assertions.failed ); + e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk ); - m_xml.endElement(); - } + if ( m_config->showDurations() == ShowDurations::Always ) { + e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds ); + } - virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { - StreamingReporterBase::testGroupEnded( testGroupStats ); - // TODO: Check testGroupStats.aborting and act accordingly. - m_xml.scopedElement( "OverallResults" ) - .writeAttribute( "successes", testGroupStats.totals.assertions.passed ) - .writeAttribute( "failures", testGroupStats.totals.assertions.failed ) - .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk ); m_xml.endElement(); } + } - virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { - StreamingReporterBase::testRunEnded( testRunStats ); - m_xml.scopedElement( "OverallResults" ) - .writeAttribute( "successes", testRunStats.totals.assertions.passed ) - .writeAttribute( "failures", testRunStats.totals.assertions.failed ) - .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk ); - m_xml.endElement(); + virtual void testCaseEnded( TestCaseStats const &testCaseStats ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseEnded( testCaseStats ); + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" ); + e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() ); + + if ( m_config->showDurations() == ShowDurations::Always ) + { + e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() ); } - private: - Timer m_testCaseTimer; - XmlWriter m_xml; - int m_sectionDepth; - }; + m_xml.endElement(); + } - INTERNAL_CATCH_REGISTER_REPORTER( "xml", XmlReporter ) + virtual void testGroupEnded( TestGroupStats const &testGroupStats ) CATCH_OVERRIDE { + StreamingReporterBase::testGroupEnded( testGroupStats ); + // TODO: Check testGroupStats.aborting and act accordingly. + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testGroupStats.totals.assertions.passed ) + .writeAttribute( "failures", testGroupStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + + virtual void testRunEnded( TestRunStats const &testRunStats ) CATCH_OVERRIDE { + StreamingReporterBase::testRunEnded( testRunStats ); + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testRunStats.totals.assertions.passed ) + .writeAttribute( "failures", testRunStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + +private: + Timer m_testCaseTimer; + XmlWriter m_xml; + int m_sectionDepth; +}; + +INTERNAL_CATCH_REGISTER_REPORTER( "xml", XmlReporter ) } // end namespace Catch @@ -9331,205 +10449,222 @@ namespace Catch { namespace Catch { - class JunitReporter : public CumulativeReporterBase { - public: - JunitReporter( ReporterConfig const& _config ) +class JunitReporter : public CumulativeReporterBase { +public: + JunitReporter( ReporterConfig const &_config ) : CumulativeReporterBase( _config ), xml( _config.stream() ) - { - m_reporterPrefs.shouldRedirectStdOut = true; - } - - virtual ~JunitReporter() CATCH_OVERRIDE; - - static std::string getDescription() { - return "Reports test results in an XML format that looks like Ant's junitreport target"; - } + { + m_reporterPrefs.shouldRedirectStdOut = true; + } - virtual void noMatchingTestCases( std::string const& /*spec*/ ) CATCH_OVERRIDE {} + virtual ~JunitReporter() CATCH_OVERRIDE; - virtual void testRunStarting( TestRunInfo const& runInfo ) CATCH_OVERRIDE { - CumulativeReporterBase::testRunStarting( runInfo ); - xml.startElement( "testsuites" ); - } + static std::string getDescription() + { + return "Reports test results in an XML format that looks like Ant's junitreport target"; + } - virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { - suiteTimer.start(); - stdOutForSuite.str(""); - stdErrForSuite.str(""); - unexpectedExceptions = 0; - CumulativeReporterBase::testGroupStarting( groupInfo ); - } + virtual void noMatchingTestCases( std::string const & /*spec*/ ) CATCH_OVERRIDE {} - virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { - if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException ) - unexpectedExceptions++; - return CumulativeReporterBase::assertionEnded( assertionStats ); - } + virtual void testRunStarting( TestRunInfo const &runInfo ) CATCH_OVERRIDE { + CumulativeReporterBase::testRunStarting( runInfo ); + xml.startElement( "testsuites" ); + } - virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { - stdOutForSuite << testCaseStats.stdOut; - stdErrForSuite << testCaseStats.stdErr; - CumulativeReporterBase::testCaseEnded( testCaseStats ); - } + virtual void testGroupStarting( GroupInfo const &groupInfo ) CATCH_OVERRIDE { + suiteTimer.start(); + stdOutForSuite.str(""); + stdErrForSuite.str(""); + unexpectedExceptions = 0; + CumulativeReporterBase::testGroupStarting( groupInfo ); + } - virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { - double suiteTime = suiteTimer.getElapsedSeconds(); - CumulativeReporterBase::testGroupEnded( testGroupStats ); - writeGroup( *m_testGroups.back(), suiteTime ); + virtual bool assertionEnded( AssertionStats const &assertionStats ) CATCH_OVERRIDE { + if ( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException ) + { + unexpectedExceptions++; } + return CumulativeReporterBase::assertionEnded( assertionStats ); + } - virtual void testRunEndedCumulative() CATCH_OVERRIDE { - xml.endElement(); - } + virtual void testCaseEnded( TestCaseStats const &testCaseStats ) CATCH_OVERRIDE { + stdOutForSuite << testCaseStats.stdOut; + stdErrForSuite << testCaseStats.stdErr; + CumulativeReporterBase::testCaseEnded( testCaseStats ); + } - void writeGroup( TestGroupNode const& groupNode, double suiteTime ) { - XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" ); - TestGroupStats const& stats = groupNode.value; - xml.writeAttribute( "name", stats.groupInfo.name ); - xml.writeAttribute( "errors", unexpectedExceptions ); - xml.writeAttribute( "failures", stats.totals.assertions.failed-unexpectedExceptions ); - xml.writeAttribute( "tests", stats.totals.assertions.total() ); - xml.writeAttribute( "hostname", "tbd" ); // !TBD - if( m_config->showDurations() == ShowDurations::Never ) - xml.writeAttribute( "time", "" ); - else - xml.writeAttribute( "time", suiteTime ); - xml.writeAttribute( "timestamp", "tbd" ); // !TBD + virtual void testGroupEnded( TestGroupStats const &testGroupStats ) CATCH_OVERRIDE { + double suiteTime = suiteTimer.getElapsedSeconds(); + CumulativeReporterBase::testGroupEnded( testGroupStats ); + writeGroup( *m_testGroups.back(), suiteTime ); + } - // Write test cases - for( TestGroupNode::ChildNodes::const_iterator - it = groupNode.children.begin(), itEnd = groupNode.children.end(); - it != itEnd; - ++it ) - writeTestCase( **it ); + virtual void testRunEndedCumulative() CATCH_OVERRIDE { + xml.endElement(); + } - xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite.str() ), false ); - xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite.str() ), false ); + void writeGroup( TestGroupNode const &groupNode, double suiteTime ) + { + XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" ); + TestGroupStats const &stats = groupNode.value; + xml.writeAttribute( "name", stats.groupInfo.name ); + xml.writeAttribute( "errors", unexpectedExceptions ); + xml.writeAttribute( "failures", stats.totals.assertions.failed - unexpectedExceptions ); + xml.writeAttribute( "tests", stats.totals.assertions.total() ); + xml.writeAttribute( "hostname", "tbd" ); // !TBD + if ( m_config->showDurations() == ShowDurations::Never ) { + xml.writeAttribute( "time", "" ); + } else { + xml.writeAttribute( "time", suiteTime ); + } + xml.writeAttribute( "timestamp", "tbd" ); // !TBD + + // Write test cases + for ( TestGroupNode::ChildNodes::const_iterator + it = groupNode.children.begin(), itEnd = groupNode.children.end(); + it != itEnd; + ++it ) { + writeTestCase( **it ); } - void writeTestCase( TestCaseNode const& testCaseNode ) { - TestCaseStats const& stats = testCaseNode.value; + xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite.str() ), false ); + xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite.str() ), false ); + } + + void writeTestCase( TestCaseNode const &testCaseNode ) + { + TestCaseStats const &stats = testCaseNode.value; - // All test cases have exactly one section - which represents the - // test case itself. That section may have 0-n nested sections - assert( testCaseNode.children.size() == 1 ); - SectionNode const& rootSection = *testCaseNode.children.front(); + // All test cases have exactly one section - which represents the + // test case itself. That section may have 0-n nested sections + assert( testCaseNode.children.size() == 1 ); + SectionNode const &rootSection = *testCaseNode.children.front(); - std::string className = stats.testInfo.className; + std::string className = stats.testInfo.className; - if( className.empty() ) { - if( rootSection.childSections.empty() ) - className = "global"; + if ( className.empty() ) { + if ( rootSection.childSections.empty() ) { + className = "global"; } - writeSection( className, "", rootSection ); } + writeSection( className, "", rootSection ); + } - void writeSection( std::string const& className, - std::string const& rootName, - SectionNode const& sectionNode ) { - std::string name = trim( sectionNode.stats.sectionInfo.name ); - if( !rootName.empty() ) - name = rootName + "/" + name; + void writeSection( std::string const &className, + std::string const &rootName, + SectionNode const §ionNode ) + { + std::string name = trim( sectionNode.stats.sectionInfo.name ); + if ( !rootName.empty() ) { + name = rootName + "/" + name; + } - if( !sectionNode.assertions.empty() || + if ( !sectionNode.assertions.empty() || !sectionNode.stdOut.empty() || !sectionNode.stdErr.empty() ) { - XmlWriter::ScopedElement e = xml.scopedElement( "testcase" ); - if( className.empty() ) { - xml.writeAttribute( "classname", name ); - xml.writeAttribute( "name", "root" ); - } - else { - xml.writeAttribute( "classname", className ); - xml.writeAttribute( "name", name ); - } - xml.writeAttribute( "time", Catch::toString( sectionNode.stats.durationInSeconds ) ); + XmlWriter::ScopedElement e = xml.scopedElement( "testcase" ); + if ( className.empty() ) { + xml.writeAttribute( "classname", name ); + xml.writeAttribute( "name", "root" ); + } else { + xml.writeAttribute( "classname", className ); + xml.writeAttribute( "name", name ); + } + xml.writeAttribute( "time", Catch::toString( sectionNode.stats.durationInSeconds ) ); - writeAssertions( sectionNode ); + writeAssertions( sectionNode ); - if( !sectionNode.stdOut.empty() ) - xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), false ); - if( !sectionNode.stdErr.empty() ) - xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), false ); + if ( !sectionNode.stdOut.empty() ) { + xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), false ); + } + if ( !sectionNode.stdErr.empty() ) { + xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), false ); } - for( SectionNode::ChildSections::const_iterator - it = sectionNode.childSections.begin(), - itEnd = sectionNode.childSections.end(); - it != itEnd; - ++it ) - if( className.empty() ) - writeSection( name, "", **it ); - else - writeSection( className, name, **it ); } + for ( SectionNode::ChildSections::const_iterator + it = sectionNode.childSections.begin(), + itEnd = sectionNode.childSections.end(); + it != itEnd; + ++it ) + if ( className.empty() ) { + writeSection( name, "", **it ); + } else { + writeSection( className, name, **it ); + } + } - void writeAssertions( SectionNode const& sectionNode ) { - for( SectionNode::Assertions::const_iterator - it = sectionNode.assertions.begin(), itEnd = sectionNode.assertions.end(); - it != itEnd; - ++it ) - writeAssertion( *it ); - } - void writeAssertion( AssertionStats const& stats ) { - AssertionResult const& result = stats.assertionResult; - if( !result.isOk() ) { - std::string elementName; - switch( result.getResultType() ) { - case ResultWas::ThrewException: - case ResultWas::FatalErrorCondition: - elementName = "error"; - break; - case ResultWas::ExplicitFailure: - elementName = "failure"; - break; - case ResultWas::ExpressionFailed: - elementName = "failure"; - break; - case ResultWas::DidntThrowException: - elementName = "failure"; - break; - - // We should never see these here: - case ResultWas::Info: - case ResultWas::Warning: - case ResultWas::Ok: - case ResultWas::Unknown: - case ResultWas::FailureBit: - case ResultWas::Exception: - elementName = "internalError"; - break; - } + void writeAssertions( SectionNode const §ionNode ) + { + for ( SectionNode::Assertions::const_iterator + it = sectionNode.assertions.begin(), itEnd = sectionNode.assertions.end(); + it != itEnd; + ++it ) { + writeAssertion( *it ); + } + } + void writeAssertion( AssertionStats const &stats ) + { + AssertionResult const &result = stats.assertionResult; + if ( !result.isOk() ) { + std::string elementName; + switch ( result.getResultType() ) { + case ResultWas::ThrewException: + case ResultWas::FatalErrorCondition: + elementName = "error"; + break; + case ResultWas::ExplicitFailure: + elementName = "failure"; + break; + case ResultWas::ExpressionFailed: + elementName = "failure"; + break; + case ResultWas::DidntThrowException: + elementName = "failure"; + break; - XmlWriter::ScopedElement e = xml.scopedElement( elementName ); + // We should never see these here: + case ResultWas::Info: + case ResultWas::Warning: + case ResultWas::Ok: + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + elementName = "internalError"; + break; + } - xml.writeAttribute( "message", result.getExpandedExpression() ); - xml.writeAttribute( "type", result.getTestMacroName() ); + XmlWriter::ScopedElement e = xml.scopedElement( elementName ); - std::ostringstream oss; - if( !result.getMessage().empty() ) - oss << result.getMessage() << "\n"; - for( std::vector::const_iterator - it = stats.infoMessages.begin(), - itEnd = stats.infoMessages.end(); - it != itEnd; - ++it ) - if( it->type == ResultWas::Info ) - oss << it->message << "\n"; + xml.writeAttribute( "message", result.getExpandedExpression() ); + xml.writeAttribute( "type", result.getTestMacroName() ); - oss << "at " << result.getSourceInfo(); - xml.writeText( oss.str(), false ); + std::ostringstream oss; + if ( !result.getMessage().empty() ) { + oss << result.getMessage() << "\n"; } + for ( std::vector::const_iterator + it = stats.infoMessages.begin(), + itEnd = stats.infoMessages.end(); + it != itEnd; + ++it ) + if ( it->type == ResultWas::Info ) { + oss << it->message << "\n"; + } + + oss << "at " << result.getSourceInfo(); + xml.writeText( oss.str(), false ); } + } - XmlWriter xml; - Timer suiteTimer; - std::ostringstream stdOutForSuite; - std::ostringstream stdErrForSuite; - unsigned int unexpectedExceptions; - }; + XmlWriter xml; + Timer suiteTimer; + std::ostringstream stdOutForSuite; + std::ostringstream stdErrForSuite; + unsigned int unexpectedExceptions; +}; - INTERNAL_CATCH_REGISTER_REPORTER( "junit", JunitReporter ) +INTERNAL_CATCH_REGISTER_REPORTER( "junit", JunitReporter ) } // end namespace Catch @@ -9538,96 +10673,105 @@ namespace Catch { namespace Catch { - struct ConsoleReporter : StreamingReporterBase { - ConsoleReporter( ReporterConfig const& _config ) +struct ConsoleReporter : StreamingReporterBase { + ConsoleReporter( ReporterConfig const &_config ) : StreamingReporterBase( _config ), m_headerPrinted( false ) - {} + {} - virtual ~ConsoleReporter() CATCH_OVERRIDE; - static std::string getDescription() { - return "Reports test results as plain lines of text"; - } + virtual ~ConsoleReporter() CATCH_OVERRIDE; + static std::string getDescription() + { + return "Reports test results as plain lines of text"; + } - virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { - stream << "No test cases matched '" << spec << "'" << std::endl; - } + virtual void noMatchingTestCases( std::string const &spec ) CATCH_OVERRIDE { + stream << "No test cases matched '" << spec << "'" << std::endl; + } - virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { - } + virtual void assertionStarting( AssertionInfo const & ) CATCH_OVERRIDE { + } - virtual bool assertionEnded( AssertionStats const& _assertionStats ) CATCH_OVERRIDE { - AssertionResult const& result = _assertionStats.assertionResult; + virtual bool assertionEnded( AssertionStats const &_assertionStats ) CATCH_OVERRIDE { + AssertionResult const &result = _assertionStats.assertionResult; - bool printInfoMessages = true; + bool printInfoMessages = true; - // Drop out if result was successful and we're not printing those - if( !m_config->includeSuccessfulResults() && result.isOk() ) { - if( result.getResultType() != ResultWas::Warning ) - return false; - printInfoMessages = false; + // Drop out if result was successful and we're not printing those + if ( !m_config->includeSuccessfulResults() && result.isOk() ) + { + if ( result.getResultType() != ResultWas::Warning ) { + return false; } + printInfoMessages = false; + } - lazyPrint(); + lazyPrint(); - AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); - printer.print(); - stream << std::endl; - return true; - } + AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); + printer.print(); + stream << std::endl; + return true; + } - virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE { - m_headerPrinted = false; - StreamingReporterBase::sectionStarting( _sectionInfo ); - } - virtual void sectionEnded( SectionStats const& _sectionStats ) CATCH_OVERRIDE { - if( _sectionStats.missingAssertions ) { - lazyPrint(); - Colour colour( Colour::ResultError ); - if( m_sectionStack.size() > 1 ) - stream << "\nNo assertions in section"; - else - stream << "\nNo assertions in test case"; - stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl; - } - if( m_headerPrinted ) { - if( m_config->showDurations() == ShowDurations::Always ) - stream << "Completed in " << _sectionStats.durationInSeconds << "s" << std::endl; - m_headerPrinted = false; + virtual void sectionStarting( SectionInfo const &_sectionInfo ) CATCH_OVERRIDE { + m_headerPrinted = false; + StreamingReporterBase::sectionStarting( _sectionInfo ); + } + virtual void sectionEnded( SectionStats const &_sectionStats ) CATCH_OVERRIDE { + if ( _sectionStats.missingAssertions ) + { + lazyPrint(); + Colour colour( Colour::ResultError ); + if ( m_sectionStack.size() > 1 ) { + stream << "\nNo assertions in section"; + } else { + stream << "\nNo assertions in test case"; } - else { - if( m_config->showDurations() == ShowDurations::Always ) - stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl; + } + if ( m_headerPrinted ) + { + if ( m_config->showDurations() == ShowDurations::Always ) { + stream << "Completed in " << _sectionStats.durationInSeconds << "s" << std::endl; } - StreamingReporterBase::sectionEnded( _sectionStats ); - } - - virtual void testCaseEnded( TestCaseStats const& _testCaseStats ) CATCH_OVERRIDE { - StreamingReporterBase::testCaseEnded( _testCaseStats ); m_headerPrinted = false; - } - virtual void testGroupEnded( TestGroupStats const& _testGroupStats ) CATCH_OVERRIDE { - if( currentGroupInfo.used ) { - printSummaryDivider(); - stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; - printTotals( _testGroupStats.totals ); - stream << "\n" << std::endl; + } else + { + if ( m_config->showDurations() == ShowDurations::Always ) { + stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << "s" << std::endl; } - StreamingReporterBase::testGroupEnded( _testGroupStats ); } - virtual void testRunEnded( TestRunStats const& _testRunStats ) CATCH_OVERRIDE { - printTotalsDivider( _testRunStats.totals ); - printTotals( _testRunStats.totals ); - stream << std::endl; - StreamingReporterBase::testRunEnded( _testRunStats ); + StreamingReporterBase::sectionEnded( _sectionStats ); + } + + virtual void testCaseEnded( TestCaseStats const &_testCaseStats ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseEnded( _testCaseStats ); + m_headerPrinted = false; + } + virtual void testGroupEnded( TestGroupStats const &_testGroupStats ) CATCH_OVERRIDE { + if ( currentGroupInfo.used ) + { + printSummaryDivider(); + stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; + printTotals( _testGroupStats.totals ); + stream << "\n" << std::endl; } + StreamingReporterBase::testGroupEnded( _testGroupStats ); + } + virtual void testRunEnded( TestRunStats const &_testRunStats ) CATCH_OVERRIDE { + printTotalsDivider( _testRunStats.totals ); + printTotals( _testRunStats.totals ); + stream << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } - private: +private: - class AssertionPrinter { - void operator= ( AssertionPrinter const& ); - public: - AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) + class AssertionPrinter { + void operator= ( AssertionPrinter const & ); + public: + AssertionPrinter( std::ostream &_stream, AssertionStats const &_stats, bool _printInfoMessages ) : stream( _stream ), stats( _stats ), result( _stats.assertionResult ), @@ -9635,333 +10779,368 @@ namespace Catch { message( result.getMessage() ), messages( _stats.infoMessages ), printInfoMessages( _printInfoMessages ) - { - switch( result.getResultType() ) { - case ResultWas::Ok: - colour = Colour::Success; - passOrFail = "PASSED"; - //if( result.hasMessage() ) - if( _stats.infoMessages.size() == 1 ) - messageLabel = "with message"; - if( _stats.infoMessages.size() > 1 ) - messageLabel = "with messages"; - break; - case ResultWas::ExpressionFailed: - if( result.isOk() ) { - colour = Colour::Success; - passOrFail = "FAILED - but was ok"; - } - else { - colour = Colour::Error; - passOrFail = "FAILED"; - } - if( _stats.infoMessages.size() == 1 ) - messageLabel = "with message"; - if( _stats.infoMessages.size() > 1 ) - messageLabel = "with messages"; - break; - case ResultWas::ThrewException: - colour = Colour::Error; - passOrFail = "FAILED"; - messageLabel = "due to unexpected exception with message"; - break; - case ResultWas::FatalErrorCondition: - colour = Colour::Error; - passOrFail = "FAILED"; - messageLabel = "due to a fatal error condition"; - break; - case ResultWas::DidntThrowException: - colour = Colour::Error; - passOrFail = "FAILED"; - messageLabel = "because no exception was thrown where one was expected"; - break; - case ResultWas::Info: - messageLabel = "info"; - break; - case ResultWas::Warning: - messageLabel = "warning"; - break; - case ResultWas::ExplicitFailure: - passOrFail = "FAILED"; - colour = Colour::Error; - if( _stats.infoMessages.size() == 1 ) - messageLabel = "explicitly with message"; - if( _stats.infoMessages.size() > 1 ) - messageLabel = "explicitly with messages"; - break; - // These cases are here to prevent compiler warnings - case ResultWas::Unknown: - case ResultWas::FailureBit: - case ResultWas::Exception: - passOrFail = "** internal error **"; - colour = Colour::Error; - break; + { + switch ( result.getResultType() ) { + case ResultWas::Ok: + colour = Colour::Success; + passOrFail = "PASSED"; + //if( result.hasMessage() ) + if ( _stats.infoMessages.size() == 1 ) { + messageLabel = "with message"; } - } - - void print() const { - printSourceInfo(); - if( stats.totals.assertions.total() > 0 ) { - if( result.isOk() ) - stream << "\n"; - printResultType(); - printOriginalExpression(); - printReconstructedExpression(); + if ( _stats.infoMessages.size() > 1 ) { + messageLabel = "with messages"; } - else { - stream << "\n"; + break; + case ResultWas::ExpressionFailed: + if ( result.isOk() ) { + colour = Colour::Success; + passOrFail = "FAILED - but was ok"; + } else { + colour = Colour::Error; + passOrFail = "FAILED"; } - printMessage(); - } - - private: - void printResultType() const { - if( !passOrFail.empty() ) { - Colour colourGuard( colour ); - stream << passOrFail << ":\n"; + if ( _stats.infoMessages.size() == 1 ) { + messageLabel = "with message"; + } + if ( _stats.infoMessages.size() > 1 ) { + messageLabel = "with messages"; + } + break; + case ResultWas::ThrewException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to unexpected exception with message"; + break; + case ResultWas::FatalErrorCondition: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to a fatal error condition"; + break; + case ResultWas::DidntThrowException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "because no exception was thrown where one was expected"; + break; + case ResultWas::Info: + messageLabel = "info"; + break; + case ResultWas::Warning: + messageLabel = "warning"; + break; + case ResultWas::ExplicitFailure: + passOrFail = "FAILED"; + colour = Colour::Error; + if ( _stats.infoMessages.size() == 1 ) { + messageLabel = "explicitly with message"; + } + if ( _stats.infoMessages.size() > 1 ) { + messageLabel = "explicitly with messages"; } + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + passOrFail = "** internal error **"; + colour = Colour::Error; + break; } - void printOriginalExpression() const { - if( result.hasExpression() ) { - Colour colourGuard( Colour::OriginalExpression ); - stream << " "; - stream << result.getExpressionInMacro(); + } + + void print() const + { + printSourceInfo(); + if ( stats.totals.assertions.total() > 0 ) { + if ( result.isOk() ) { stream << "\n"; } + printResultType(); + printOriginalExpression(); + printReconstructedExpression(); + } else { + stream << "\n"; } - void printReconstructedExpression() const { - if( result.hasExpandedExpression() ) { - stream << "with expansion:\n"; - Colour colourGuard( Colour::ReconstructedExpression ); - stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << "\n"; - } + printMessage(); + } + + private: + void printResultType() const + { + if ( !passOrFail.empty() ) { + Colour colourGuard( colour ); + stream << passOrFail << ":\n"; } - void printMessage() const { - if( !messageLabel.empty() ) - stream << messageLabel << ":" << "\n"; - for( std::vector::const_iterator it = messages.begin(), itEnd = messages.end(); - it != itEnd; - ++it ) { - // If this assertion is a warning ignore any INFO messages - if( printInfoMessages || it->type != ResultWas::Info ) - stream << Text( it->message, TextAttributes().setIndent(2) ) << "\n"; - } + } + void printOriginalExpression() const + { + if ( result.hasExpression() ) { + Colour colourGuard( Colour::OriginalExpression ); + stream << " "; + stream << result.getExpressionInMacro(); + stream << "\n"; } - void printSourceInfo() const { - Colour colourGuard( Colour::FileName ); - stream << result.getSourceInfo() << ": "; + } + void printReconstructedExpression() const + { + if ( result.hasExpandedExpression() ) { + stream << "with expansion:\n"; + Colour colourGuard( Colour::ReconstructedExpression ); + stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << "\n"; } - - std::ostream& stream; - AssertionStats const& stats; - AssertionResult const& result; - Colour::Code colour; - std::string passOrFail; - std::string messageLabel; - std::string message; - std::vector messages; - bool printInfoMessages; - }; - - void lazyPrint() { - - if( !currentTestRunInfo.used ) - lazyPrintRunInfo(); - if( !currentGroupInfo.used ) - lazyPrintGroupInfo(); - - if( !m_headerPrinted ) { - printTestCaseAndSectionHeader(); - m_headerPrinted = true; + } + void printMessage() const + { + if ( !messageLabel.empty() ) { + stream << messageLabel << ":" << "\n"; + } + for ( std::vector::const_iterator it = messages.begin(), itEnd = messages.end(); + it != itEnd; + ++it ) { + // If this assertion is a warning ignore any INFO messages + if ( printInfoMessages || it->type != ResultWas::Info ) { + stream << Text( it->message, TextAttributes().setIndent(2) ) << "\n"; + } } } - void lazyPrintRunInfo() { - stream << "\n" << getLineOfChars<'~'>() << "\n"; - Colour colour( Colour::SecondaryText ); - stream << currentTestRunInfo->name - << " is a Catch v" << libraryVersion << " host application.\n" - << "Run with -? for options\n\n"; + void printSourceInfo() const + { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ": "; + } - if( m_config->rngSeed() != 0 ) - stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n"; + std::ostream &stream; + AssertionStats const &stats; + AssertionResult const &result; + Colour::Code colour; + std::string passOrFail; + std::string messageLabel; + std::string message; + std::vector messages; + bool printInfoMessages; + }; + + void lazyPrint() + { - currentTestRunInfo.used = true; + if ( !currentTestRunInfo.used ) { + lazyPrintRunInfo(); } - void lazyPrintGroupInfo() { - if( !currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1 ) { - printClosedHeader( "Group: " + currentGroupInfo->name ); - currentGroupInfo.used = true; - } + if ( !currentGroupInfo.used ) { + lazyPrintGroupInfo(); + } + + if ( !m_headerPrinted ) { + printTestCaseAndSectionHeader(); + m_headerPrinted = true; } - void printTestCaseAndSectionHeader() { - assert( !m_sectionStack.empty() ); - printOpenHeader( currentTestCaseInfo->name ); + } + void lazyPrintRunInfo() + { + stream << "\n" << getLineOfChars<'~'>() << "\n"; + Colour colour( Colour::SecondaryText ); + stream << currentTestRunInfo->name + << " is a Catch v" << libraryVersion << " host application.\n" + << "Run with -? for options\n\n"; - if( m_sectionStack.size() > 1 ) { - Colour colourGuard( Colour::Headers ); + if ( m_config->rngSeed() != 0 ) { + stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n"; + } - std::vector::const_iterator - it = m_sectionStack.begin()+1, // Skip first section (test case) - itEnd = m_sectionStack.end(); - for( ; it != itEnd; ++it ) - printHeaderString( it->name, 2 ); - } + currentTestRunInfo.used = true; + } + void lazyPrintGroupInfo() + { + if ( !currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1 ) { + printClosedHeader( "Group: " + currentGroupInfo->name ); + currentGroupInfo.used = true; + } + } + void printTestCaseAndSectionHeader() + { + assert( !m_sectionStack.empty() ); + printOpenHeader( currentTestCaseInfo->name ); - SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; + if ( m_sectionStack.size() > 1 ) { + Colour colourGuard( Colour::Headers ); - if( !lineInfo.empty() ){ - stream << getLineOfChars<'-'>() << "\n"; - Colour colourGuard( Colour::FileName ); - stream << lineInfo << "\n"; + std::vector::const_iterator + it = m_sectionStack.begin() + 1, // Skip first section (test case) + itEnd = m_sectionStack.end(); + for ( ; it != itEnd; ++it ) { + printHeaderString( it->name, 2 ); } - stream << getLineOfChars<'.'>() << "\n" << std::endl; } - void printClosedHeader( std::string const& _name ) { - printOpenHeader( _name ); - stream << getLineOfChars<'.'>() << "\n"; + SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; + + if ( !lineInfo.empty() ) { + stream << getLineOfChars<'-'>() << "\n"; + Colour colourGuard( Colour::FileName ); + stream << lineInfo << "\n"; } - void printOpenHeader( std::string const& _name ) { - stream << getLineOfChars<'-'>() << "\n"; - { - Colour colourGuard( Colour::Headers ); - printHeaderString( _name ); - } + stream << getLineOfChars<'.'>() << "\n" << std::endl; + } + + void printClosedHeader( std::string const &_name ) + { + printOpenHeader( _name ); + stream << getLineOfChars<'.'>() << "\n"; + } + void printOpenHeader( std::string const &_name ) + { + stream << getLineOfChars<'-'>() << "\n"; + { + Colour colourGuard( Colour::Headers ); + printHeaderString( _name ); } + } - // if string has a : in first line will set indent to follow it on - // subsequent lines - void printHeaderString( std::string const& _string, std::size_t indent = 0 ) { - std::size_t i = _string.find( ": " ); - if( i != std::string::npos ) - i+=2; - else - i = 0; - stream << Text( _string, TextAttributes() - .setIndent( indent+i) - .setInitialIndent( indent ) ) << "\n"; + // if string has a : in first line will set indent to follow it on + // subsequent lines + void printHeaderString( std::string const &_string, std::size_t indent = 0 ) + { + std::size_t i = _string.find( ": " ); + if ( i != std::string::npos ) { + i += 2; + } else { + i = 0; } + stream << Text( _string, TextAttributes() + .setIndent( indent + i) + .setInitialIndent( indent ) ) << "\n"; + } - struct SummaryColumn { + struct SummaryColumn { - SummaryColumn( std::string const& _label, Colour::Code _colour ) + SummaryColumn( std::string const &_label, Colour::Code _colour ) : label( _label ), colour( _colour ) - {} - SummaryColumn addRow( std::size_t count ) { - std::ostringstream oss; - oss << count; - std::string row = oss.str(); - for( std::vector::iterator it = rows.begin(); it != rows.end(); ++it ) { - while( it->size() < row.size() ) - *it = " " + *it; - while( it->size() > row.size() ) - row = " " + row; + {} + SummaryColumn addRow( std::size_t count ) + { + std::ostringstream oss; + oss << count; + std::string row = oss.str(); + for ( std::vector::iterator it = rows.begin(); it != rows.end(); ++it ) { + while ( it->size() < row.size() ) { + *it = " " + *it; + } + while ( it->size() > row.size() ) { + row = " " + row; } - rows.push_back( row ); - return *this; } + rows.push_back( row ); + return *this; + } - std::string label; - Colour::Code colour; - std::vector rows; + std::string label; + Colour::Code colour; + std::vector rows; - }; + }; - void printTotals( Totals const& totals ) { - if( totals.testCases.total() == 0 ) { - stream << Colour( Colour::Warning ) << "No tests ran\n"; - } - else if( totals.assertions.total() > 0 && totals.testCases.allPassed() ) { - stream << Colour( Colour::ResultSuccess ) << "All tests passed"; - stream << " (" - << pluralise( totals.assertions.passed, "assertion" ) << " in " - << pluralise( totals.testCases.passed, "test case" ) << ")" - << "\n"; - } - else { - - std::vector columns; - columns.push_back( SummaryColumn( "", Colour::None ) - .addRow( totals.testCases.total() ) - .addRow( totals.assertions.total() ) ); - columns.push_back( SummaryColumn( "passed", Colour::Success ) - .addRow( totals.testCases.passed ) - .addRow( totals.assertions.passed ) ); - columns.push_back( SummaryColumn( "failed", Colour::ResultError ) - .addRow( totals.testCases.failed ) - .addRow( totals.assertions.failed ) ); - columns.push_back( SummaryColumn( "failed as expected", Colour::ResultExpectedFailure ) - .addRow( totals.testCases.failedButOk ) - .addRow( totals.assertions.failedButOk ) ); - - printSummaryRow( "test cases", columns, 0 ); - printSummaryRow( "assertions", columns, 1 ); + void printTotals( Totals const &totals ) + { + if ( totals.testCases.total() == 0 ) { + stream << Colour( Colour::Warning ) << "No tests ran\n"; + } else if ( totals.assertions.total() > 0 && totals.testCases.allPassed() ) { + stream << Colour( Colour::ResultSuccess ) << "All tests passed"; + stream << " (" + << pluralise( totals.assertions.passed, "assertion" ) << " in " + << pluralise( totals.testCases.passed, "test case" ) << ")" + << "\n"; + } else { + + std::vector columns; + columns.push_back( SummaryColumn( "", Colour::None ) + .addRow( totals.testCases.total() ) + .addRow( totals.assertions.total() ) ); + columns.push_back( SummaryColumn( "passed", Colour::Success ) + .addRow( totals.testCases.passed ) + .addRow( totals.assertions.passed ) ); + columns.push_back( SummaryColumn( "failed", Colour::ResultError ) + .addRow( totals.testCases.failed ) + .addRow( totals.assertions.failed ) ); + columns.push_back( SummaryColumn( "failed as expected", Colour::ResultExpectedFailure ) + .addRow( totals.testCases.failedButOk ) + .addRow( totals.assertions.failedButOk ) ); + + printSummaryRow( "test cases", columns, 0 ); + printSummaryRow( "assertions", columns, 1 ); + } + } + void printSummaryRow( std::string const &label, std::vector const &cols, std::size_t row ) + { + for ( std::vector::const_iterator it = cols.begin(); it != cols.end(); ++it ) { + std::string value = it->rows[row]; + if ( it->label.empty() ) { + stream << label << ": "; + if ( value != "0" ) { + stream << value; + } else { + stream << Colour( Colour::Warning ) << "- none -"; + } + } else if ( value != "0" ) { + stream << Colour( Colour::LightGrey ) << " | "; + stream << Colour( it->colour ) + << value << " " << it->label; } } - void printSummaryRow( std::string const& label, std::vector const& cols, std::size_t row ) { - for( std::vector::const_iterator it = cols.begin(); it != cols.end(); ++it ) { - std::string value = it->rows[row]; - if( it->label.empty() ) { - stream << label << ": "; - if( value != "0" ) - stream << value; - else - stream << Colour( Colour::Warning ) << "- none -"; - } - else if( value != "0" ) { - stream << Colour( Colour::LightGrey ) << " | "; - stream << Colour( it->colour ) - << value << " " << it->label; - } + stream << "\n"; + } + + static std::size_t makeRatio( std::size_t number, std::size_t total ) + { + std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number / total : 0; + return ( ratio == 0 && number > 0 ) ? 1 : ratio; + } + static std::size_t &findMax( std::size_t &i, std::size_t &j, std::size_t &k ) + { + if ( i > j && i > k ) { + return i; + } else if ( j > k ) { + return j; + } else { + return k; + } + } + + void printTotalsDivider( Totals const &totals ) + { + if ( totals.testCases.total() > 0 ) { + std::size_t failedRatio = makeRatio( totals.testCases.failed, totals.testCases.total() ); + std::size_t failedButOkRatio = makeRatio( totals.testCases.failedButOk, totals.testCases.total() ); + std::size_t passedRatio = makeRatio( totals.testCases.passed, totals.testCases.total() ); + while ( failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH - 1 ) { + findMax( failedRatio, failedButOkRatio, passedRatio )++; } - stream << "\n"; - } - - static std::size_t makeRatio( std::size_t number, std::size_t total ) { - std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number/ total : 0; - return ( ratio == 0 && number > 0 ) ? 1 : ratio; - } - static std::size_t& findMax( std::size_t& i, std::size_t& j, std::size_t& k ) { - if( i > j && i > k ) - return i; - else if( j > k ) - return j; - else - return k; - } - - void printTotalsDivider( Totals const& totals ) { - if( totals.testCases.total() > 0 ) { - std::size_t failedRatio = makeRatio( totals.testCases.failed, totals.testCases.total() ); - std::size_t failedButOkRatio = makeRatio( totals.testCases.failedButOk, totals.testCases.total() ); - std::size_t passedRatio = makeRatio( totals.testCases.passed, totals.testCases.total() ); - while( failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH-1 ) - findMax( failedRatio, failedButOkRatio, passedRatio )++; - while( failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH-1 ) - findMax( failedRatio, failedButOkRatio, passedRatio )--; - - stream << Colour( Colour::Error ) << std::string( failedRatio, '=' ); - stream << Colour( Colour::ResultExpectedFailure ) << std::string( failedButOkRatio, '=' ); - if( totals.testCases.allPassed() ) - stream << Colour( Colour::ResultSuccess ) << std::string( passedRatio, '=' ); - else - stream << Colour( Colour::Success ) << std::string( passedRatio, '=' ); + while ( failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH - 1 ) { + findMax( failedRatio, failedButOkRatio, passedRatio )--; } - else { - stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH-1, '=' ); + + stream << Colour( Colour::Error ) << std::string( failedRatio, '=' ); + stream << Colour( Colour::ResultExpectedFailure ) << std::string( failedButOkRatio, '=' ); + if ( totals.testCases.allPassed() ) { + stream << Colour( Colour::ResultSuccess ) << std::string( passedRatio, '=' ); + } else { + stream << Colour( Colour::Success ) << std::string( passedRatio, '=' ); } - stream << "\n"; - } - void printSummaryDivider() { - stream << getLineOfChars<'-'>() << "\n"; + } else { + stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH - 1, '=' ); } + stream << "\n"; + } + void printSummaryDivider() + { + stream << getLineOfChars<'-'>() << "\n"; + } - private: - bool m_headerPrinted; - }; +private: + bool m_headerPrinted; +}; - INTERNAL_CATCH_REGISTER_REPORTER( "console", ConsoleReporter ) +INTERNAL_CATCH_REGISTER_REPORTER( "console", ConsoleReporter ) } // end namespace Catch @@ -9970,350 +11149,382 @@ namespace Catch { namespace Catch { - struct CompactReporter : StreamingReporterBase { +struct CompactReporter : StreamingReporterBase { - CompactReporter( ReporterConfig const& _config ) + CompactReporter( ReporterConfig const &_config ) : StreamingReporterBase( _config ) - {} + {} - virtual ~CompactReporter(); + virtual ~CompactReporter(); - static std::string getDescription() { - return "Reports test results on a single line, suitable for IDEs"; - } + static std::string getDescription() + { + return "Reports test results on a single line, suitable for IDEs"; + } - virtual ReporterPreferences getPreferences() const { - ReporterPreferences prefs; - prefs.shouldRedirectStdOut = false; - return prefs; - } + virtual ReporterPreferences getPreferences() const + { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = false; + return prefs; + } - virtual void noMatchingTestCases( std::string const& spec ) { - stream << "No test cases matched '" << spec << "'" << std::endl; - } + virtual void noMatchingTestCases( std::string const &spec ) + { + stream << "No test cases matched '" << spec << "'" << std::endl; + } - virtual void assertionStarting( AssertionInfo const& ) { - } + virtual void assertionStarting( AssertionInfo const & ) + { + } - virtual bool assertionEnded( AssertionStats const& _assertionStats ) { - AssertionResult const& result = _assertionStats.assertionResult; + virtual bool assertionEnded( AssertionStats const &_assertionStats ) + { + AssertionResult const &result = _assertionStats.assertionResult; - bool printInfoMessages = true; + bool printInfoMessages = true; - // Drop out if result was successful and we're not printing those - if( !m_config->includeSuccessfulResults() && result.isOk() ) { - if( result.getResultType() != ResultWas::Warning ) - return false; - printInfoMessages = false; + // Drop out if result was successful and we're not printing those + if ( !m_config->includeSuccessfulResults() && result.isOk() ) { + if ( result.getResultType() != ResultWas::Warning ) { + return false; } + printInfoMessages = false; + } - AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); - printer.print(); + AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); + printer.print(); - stream << std::endl; - return true; - } + stream << std::endl; + return true; + } - virtual void testRunEnded( TestRunStats const& _testRunStats ) { - printTotals( _testRunStats.totals ); - stream << "\n" << std::endl; - StreamingReporterBase::testRunEnded( _testRunStats ); - } + virtual void testRunEnded( TestRunStats const &_testRunStats ) + { + printTotals( _testRunStats.totals ); + stream << "\n" << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } - private: - class AssertionPrinter { - void operator= ( AssertionPrinter const& ); - public: - AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) +private: + class AssertionPrinter { + void operator= ( AssertionPrinter const & ); + public: + AssertionPrinter( std::ostream &_stream, AssertionStats const &_stats, bool _printInfoMessages ) : stream( _stream ) , stats( _stats ) , result( _stats.assertionResult ) , messages( _stats.infoMessages ) , itMessage( _stats.infoMessages.begin() ) , printInfoMessages( _printInfoMessages ) - {} - - void print() { - printSourceInfo(); - - itMessage = messages.begin(); - - switch( result.getResultType() ) { - case ResultWas::Ok: - printResultType( Colour::ResultSuccess, passedString() ); - printOriginalExpression(); - printReconstructedExpression(); - if ( ! result.hasExpression() ) - printRemainingMessages( Colour::None ); - else - printRemainingMessages(); - break; - case ResultWas::ExpressionFailed: - if( result.isOk() ) - printResultType( Colour::ResultSuccess, failedString() + std::string( " - but was ok" ) ); - else - printResultType( Colour::Error, failedString() ); - printOriginalExpression(); - printReconstructedExpression(); - printRemainingMessages(); - break; - case ResultWas::ThrewException: - printResultType( Colour::Error, failedString() ); - printIssue( "unexpected exception with message:" ); - printMessage(); - printExpressionWas(); - printRemainingMessages(); - break; - case ResultWas::FatalErrorCondition: - printResultType( Colour::Error, failedString() ); - printIssue( "fatal error condition with message:" ); - printMessage(); - printExpressionWas(); - printRemainingMessages(); - break; - case ResultWas::DidntThrowException: - printResultType( Colour::Error, failedString() ); - printIssue( "expected exception, got none" ); - printExpressionWas(); - printRemainingMessages(); - break; - case ResultWas::Info: - printResultType( Colour::None, "info" ); - printMessage(); - printRemainingMessages(); - break; - case ResultWas::Warning: - printResultType( Colour::None, "warning" ); - printMessage(); - printRemainingMessages(); - break; - case ResultWas::ExplicitFailure: - printResultType( Colour::Error, failedString() ); - printIssue( "explicitly" ); - printRemainingMessages( Colour::None ); - break; - // These cases are here to prevent compiler warnings - case ResultWas::Unknown: - case ResultWas::FailureBit: - case ResultWas::Exception: - printResultType( Colour::Error, "** internal error **" ); - break; + {} + + void print() + { + printSourceInfo(); + + itMessage = messages.begin(); + + switch ( result.getResultType() ) { + case ResultWas::Ok: + printResultType( Colour::ResultSuccess, passedString() ); + printOriginalExpression(); + printReconstructedExpression(); + if ( ! result.hasExpression() ) { + printRemainingMessages( Colour::None ); + } else { + printRemainingMessages(); + } + break; + case ResultWas::ExpressionFailed: + if ( result.isOk() ) { + printResultType( Colour::ResultSuccess, failedString() + std::string( " - but was ok" ) ); + } else { + printResultType( Colour::Error, failedString() ); } + printOriginalExpression(); + printReconstructedExpression(); + printRemainingMessages(); + break; + case ResultWas::ThrewException: + printResultType( Colour::Error, failedString() ); + printIssue( "unexpected exception with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::FatalErrorCondition: + printResultType( Colour::Error, failedString() ); + printIssue( "fatal error condition with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::DidntThrowException: + printResultType( Colour::Error, failedString() ); + printIssue( "expected exception, got none" ); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::Info: + printResultType( Colour::None, "info" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::Warning: + printResultType( Colour::None, "warning" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::ExplicitFailure: + printResultType( Colour::Error, failedString() ); + printIssue( "explicitly" ); + printRemainingMessages( Colour::None ); + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + printResultType( Colour::Error, "** internal error **" ); + break; } + } - private: - // Colour::LightGrey + private: + // Colour::LightGrey - static Colour::Code dimColour() { return Colour::FileName; } + static Colour::Code dimColour() + { + return Colour::FileName; + } #ifdef CATCH_PLATFORM_MAC - static const char* failedString() { return "FAILED"; } - static const char* passedString() { return "PASSED"; } + static const char *failedString() + { + return "FAILED"; + } + static const char *passedString() + { + return "PASSED"; + } #else - static const char* failedString() { return "failed"; } - static const char* passedString() { return "passed"; } + static const char *failedString() + { + return "failed"; + } + static const char *passedString() + { + return "passed"; + } #endif - void printSourceInfo() const { - Colour colourGuard( Colour::FileName ); - stream << result.getSourceInfo() << ":"; - } + void printSourceInfo() const + { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ":"; + } - void printResultType( Colour::Code colour, std::string passOrFail ) const { - if( !passOrFail.empty() ) { - { - Colour colourGuard( colour ); - stream << " " << passOrFail; - } - stream << ":"; + void printResultType( Colour::Code colour, std::string passOrFail ) const + { + if ( !passOrFail.empty() ) { + { + Colour colourGuard( colour ); + stream << " " << passOrFail; } + stream << ":"; } + } - void printIssue( std::string issue ) const { - stream << " " << issue; - } + void printIssue( std::string issue ) const + { + stream << " " << issue; + } - void printExpressionWas() { - if( result.hasExpression() ) { - stream << ";"; - { - Colour colour( dimColour() ); - stream << " expression was:"; - } - printOriginalExpression(); + void printExpressionWas() + { + if ( result.hasExpression() ) { + stream << ";"; + { + Colour colour( dimColour() ); + stream << " expression was:"; } + printOriginalExpression(); } + } - void printOriginalExpression() const { - if( result.hasExpression() ) { - stream << " " << result.getExpression(); - } + void printOriginalExpression() const + { + if ( result.hasExpression() ) { + stream << " " << result.getExpression(); } + } - void printReconstructedExpression() const { - if( result.hasExpandedExpression() ) { - { - Colour colour( dimColour() ); - stream << " for: "; - } - stream << result.getExpandedExpression(); + void printReconstructedExpression() const + { + if ( result.hasExpandedExpression() ) { + { + Colour colour( dimColour() ); + stream << " for: "; } + stream << result.getExpandedExpression(); } + } - void printMessage() { - if ( itMessage != messages.end() ) { - stream << " '" << itMessage->message << "'"; - ++itMessage; - } + void printMessage() + { + if ( itMessage != messages.end() ) { + stream << " '" << itMessage->message << "'"; + ++itMessage; } + } - void printRemainingMessages( Colour::Code colour = dimColour() ) { - if ( itMessage == messages.end() ) - return; + void printRemainingMessages( Colour::Code colour = dimColour() ) + { + if ( itMessage == messages.end() ) { + return; + } - // using messages.end() directly yields compilation error: - std::vector::const_iterator itEnd = messages.end(); - const std::size_t N = static_cast( std::distance( itMessage, itEnd ) ); + // using messages.end() directly yields compilation error: + std::vector::const_iterator itEnd = messages.end(); + const std::size_t N = static_cast( std::distance( itMessage, itEnd ) ); - { - Colour colourGuard( colour ); - stream << " with " << pluralise( N, "message" ) << ":"; - } + { + Colour colourGuard( colour ); + stream << " with " << pluralise( N, "message" ) << ":"; + } - for(; itMessage != itEnd; ) { - // If this assertion is a warning ignore any INFO messages - if( printInfoMessages || itMessage->type != ResultWas::Info ) { - stream << " '" << itMessage->message << "'"; - if ( ++itMessage != itEnd ) { - Colour colourGuard( dimColour() ); - stream << " and"; - } + for (; itMessage != itEnd; ) { + // If this assertion is a warning ignore any INFO messages + if ( printInfoMessages || itMessage->type != ResultWas::Info ) { + stream << " '" << itMessage->message << "'"; + if ( ++itMessage != itEnd ) { + Colour colourGuard( dimColour() ); + stream << " and"; } } } + } - private: - std::ostream& stream; - AssertionStats const& stats; - AssertionResult const& result; - std::vector messages; - std::vector::const_iterator itMessage; - bool printInfoMessages; - }; - - // Colour, message variants: - // - white: No tests ran. - // - red: Failed [both/all] N test cases, failed [both/all] M assertions. - // - white: Passed [both/all] N test cases (no assertions). - // - red: Failed N tests cases, failed M assertions. - // - green: Passed [both/all] N tests cases with M assertions. - - std::string bothOrAll( std::size_t count ) const { - return count == 1 ? "" : count == 2 ? "both " : "all " ; - } - - void printTotals( const Totals& totals ) const { - if( totals.testCases.total() == 0 ) { - stream << "No tests ran."; - } - else if( totals.testCases.failed == totals.testCases.total() ) { - Colour colour( Colour::ResultError ); - const std::string qualify_assertions_failed = - totals.assertions.failed == totals.assertions.total() ? - bothOrAll( totals.assertions.failed ) : ""; - stream << - "Failed " << bothOrAll( totals.testCases.failed ) - << pluralise( totals.testCases.failed, "test case" ) << ", " - "failed " << qualify_assertions_failed << - pluralise( totals.assertions.failed, "assertion" ) << "."; - } - else if( totals.assertions.total() == 0 ) { - stream << - "Passed " << bothOrAll( totals.testCases.total() ) - << pluralise( totals.testCases.total(), "test case" ) - << " (no assertions)."; - } - else if( totals.assertions.failed ) { - Colour colour( Colour::ResultError ); - stream << - "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " - "failed " << pluralise( totals.assertions.failed, "assertion" ) << "."; - } - else { - Colour colour( Colour::ResultSuccess ); - stream << - "Passed " << bothOrAll( totals.testCases.passed ) - << pluralise( totals.testCases.passed, "test case" ) << - " with " << pluralise( totals.assertions.passed, "assertion" ) << "."; - } + private: + std::ostream &stream; + AssertionStats const &stats; + AssertionResult const &result; + std::vector messages; + std::vector::const_iterator itMessage; + bool printInfoMessages; + }; + + // Colour, message variants: + // - white: No tests ran. + // - red: Failed [both/all] N test cases, failed [both/all] M assertions. + // - white: Passed [both/all] N test cases (no assertions). + // - red: Failed N tests cases, failed M assertions. + // - green: Passed [both/all] N tests cases with M assertions. + + std::string bothOrAll( std::size_t count ) const + { + return count == 1 ? "" : count == 2 ? "both " : "all " ; + } + + void printTotals( const Totals &totals ) const + { + if ( totals.testCases.total() == 0 ) { + stream << "No tests ran."; + } else if ( totals.testCases.failed == totals.testCases.total() ) { + Colour colour( Colour::ResultError ); + const std::string qualify_assertions_failed = + totals.assertions.failed == totals.assertions.total() ? + bothOrAll( totals.assertions.failed ) : ""; + stream << + "Failed " << bothOrAll( totals.testCases.failed ) + << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << qualify_assertions_failed << + pluralise( totals.assertions.failed, "assertion" ) << "."; + } else if ( totals.assertions.total() == 0 ) { + stream << + "Passed " << bothOrAll( totals.testCases.total() ) + << pluralise( totals.testCases.total(), "test case" ) + << " (no assertions)."; + } else if ( totals.assertions.failed ) { + Colour colour( Colour::ResultError ); + stream << + "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << pluralise( totals.assertions.failed, "assertion" ) << "."; + } else { + Colour colour( Colour::ResultSuccess ); + stream << + "Passed " << bothOrAll( totals.testCases.passed ) + << pluralise( totals.testCases.passed, "test case" ) << + " with " << pluralise( totals.assertions.passed, "assertion" ) << "."; } - }; + } +}; - INTERNAL_CATCH_REGISTER_REPORTER( "compact", CompactReporter ) +INTERNAL_CATCH_REGISTER_REPORTER( "compact", CompactReporter ) } // end namespace Catch namespace Catch { - // These are all here to avoid warnings about not having any out of line - // virtual methods - NonCopyable::~NonCopyable() {} - IShared::~IShared() {} - IStream::~IStream() CATCH_NOEXCEPT {} - FileStream::~FileStream() CATCH_NOEXCEPT {} - CoutStream::~CoutStream() CATCH_NOEXCEPT {} - DebugOutStream::~DebugOutStream() CATCH_NOEXCEPT {} - StreamBufBase::~StreamBufBase() CATCH_NOEXCEPT {} - IContext::~IContext() {} - IResultCapture::~IResultCapture() {} - ITestCase::~ITestCase() {} - ITestCaseRegistry::~ITestCaseRegistry() {} - IRegistryHub::~IRegistryHub() {} - IMutableRegistryHub::~IMutableRegistryHub() {} - IExceptionTranslator::~IExceptionTranslator() {} - IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() {} - IReporter::~IReporter() {} - IReporterFactory::~IReporterFactory() {} - IReporterRegistry::~IReporterRegistry() {} - IStreamingReporter::~IStreamingReporter() {} - AssertionStats::~AssertionStats() {} - SectionStats::~SectionStats() {} - TestCaseStats::~TestCaseStats() {} - TestGroupStats::~TestGroupStats() {} - TestRunStats::~TestRunStats() {} - CumulativeReporterBase::SectionNode::~SectionNode() {} - CumulativeReporterBase::~CumulativeReporterBase() {} - - StreamingReporterBase::~StreamingReporterBase() {} - ConsoleReporter::~ConsoleReporter() {} - CompactReporter::~CompactReporter() {} - IRunner::~IRunner() {} - IMutableContext::~IMutableContext() {} - IConfig::~IConfig() {} - XmlReporter::~XmlReporter() {} - JunitReporter::~JunitReporter() {} - TestRegistry::~TestRegistry() {} - FreeFunctionTestCase::~FreeFunctionTestCase() {} - IGeneratorInfo::~IGeneratorInfo() {} - IGeneratorsForTest::~IGeneratorsForTest() {} - WildcardPattern::~WildcardPattern() {} - TestSpec::Pattern::~Pattern() {} - TestSpec::NamePattern::~NamePattern() {} - TestSpec::TagPattern::~TagPattern() {} - TestSpec::ExcludedPattern::~ExcludedPattern() {} - - Matchers::Impl::StdString::Equals::~Equals() {} - Matchers::Impl::StdString::Contains::~Contains() {} - Matchers::Impl::StdString::StartsWith::~StartsWith() {} - Matchers::Impl::StdString::EndsWith::~EndsWith() {} - - void Config::dummy() {} - - namespace TestCaseTracking { - ITracker::~ITracker() {} - TrackerBase::~TrackerBase() {} - SectionTracker::~SectionTracker() {} - IndexTracker::~IndexTracker() {} - } +// These are all here to avoid warnings about not having any out of line +// virtual methods +NonCopyable::~NonCopyable() {} +IShared::~IShared() {} +IStream::~IStream() CATCH_NOEXCEPT {} +FileStream::~FileStream() CATCH_NOEXCEPT {} +CoutStream::~CoutStream() CATCH_NOEXCEPT {} +DebugOutStream::~DebugOutStream() CATCH_NOEXCEPT {} +StreamBufBase::~StreamBufBase() CATCH_NOEXCEPT {} +IContext::~IContext() {} +IResultCapture::~IResultCapture() {} +ITestCase::~ITestCase() {} +ITestCaseRegistry::~ITestCaseRegistry() {} +IRegistryHub::~IRegistryHub() {} +IMutableRegistryHub::~IMutableRegistryHub() {} +IExceptionTranslator::~IExceptionTranslator() {} +IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() {} +IReporter::~IReporter() {} +IReporterFactory::~IReporterFactory() {} +IReporterRegistry::~IReporterRegistry() {} +IStreamingReporter::~IStreamingReporter() {} +AssertionStats::~AssertionStats() {} +SectionStats::~SectionStats() {} +TestCaseStats::~TestCaseStats() {} +TestGroupStats::~TestGroupStats() {} +TestRunStats::~TestRunStats() {} +CumulativeReporterBase::SectionNode::~SectionNode() {} +CumulativeReporterBase::~CumulativeReporterBase() {} + +StreamingReporterBase::~StreamingReporterBase() {} +ConsoleReporter::~ConsoleReporter() {} +CompactReporter::~CompactReporter() {} +IRunner::~IRunner() {} +IMutableContext::~IMutableContext() {} +IConfig::~IConfig() {} +XmlReporter::~XmlReporter() {} +JunitReporter::~JunitReporter() {} +TestRegistry::~TestRegistry() {} +FreeFunctionTestCase::~FreeFunctionTestCase() {} +IGeneratorInfo::~IGeneratorInfo() {} +IGeneratorsForTest::~IGeneratorsForTest() {} +WildcardPattern::~WildcardPattern() {} +TestSpec::Pattern::~Pattern() {} +TestSpec::NamePattern::~NamePattern() {} +TestSpec::TagPattern::~TagPattern() {} +TestSpec::ExcludedPattern::~ExcludedPattern() {} + +Matchers::Impl::StdString::Equals::~Equals() {} +Matchers::Impl::StdString::Contains::~Contains() {} +Matchers::Impl::StdString::StartsWith::~StartsWith() {} +Matchers::Impl::StdString::EndsWith::~EndsWith() {} + +void Config::dummy() {} + +namespace TestCaseTracking { +ITracker::~ITracker() {} +TrackerBase::~TrackerBase() {} +SectionTracker::~SectionTracker() {} +IndexTracker::~IndexTracker() {} +} } #ifdef __clang__ @@ -10329,20 +11540,22 @@ namespace Catch { #ifndef __OBJC__ // Standard C/C++ main entry point -int main (int argc, char * argv[]) { +int main (int argc, char *argv[]) +{ return Catch::Session().run( argc, argv ); } #else // __OBJC__ // Objective-C entry point -int main (int argc, char * const argv[]) { +int main (int argc, char *const argv[]) +{ #if !CATCH_ARC_ENABLED - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; #endif Catch::registerTestMethods(); - int result = Catch::Session().run( argc, (char* const*)argv ); + int result = Catch::Session().run( argc, (char *const *)argv ); #if !CATCH_ARC_ENABLED [pool drain]; @@ -10393,21 +11606,21 @@ int main (int argc, char * const argv[]) { #define CATCH_SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CATCH_CAPTURE" ) #ifdef CATCH_CONFIG_VARIADIC_MACROS - #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) - #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) - #define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) - #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) - #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", __VA_ARGS__ ) - #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", __VA_ARGS__ ) +#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) +#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) +#define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) +#define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) +#define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) +#define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", __VA_ARGS__ ) +#define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", __VA_ARGS__ ) #else - #define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) - #define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) - #define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) - #define CATCH_REGISTER_TEST_CASE( function, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( function, name, description ) - #define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) - #define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", msg ) - #define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", msg ) +#define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) +#define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) +#define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) +#define CATCH_REGISTER_TEST_CASE( function, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( function, name, description ) +#define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) +#define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", msg ) +#define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", msg ) #endif #define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) @@ -10462,21 +11675,21 @@ int main (int argc, char * const argv[]) { #define SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CAPTURE" ) #ifdef CATCH_CONFIG_VARIADIC_MACROS - #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) - #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) - #define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) - #define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) - #define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) - #define FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", __VA_ARGS__ ) - #define SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", __VA_ARGS__ ) +#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) +#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) +#define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) +#define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) +#define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) +#define FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", __VA_ARGS__ ) +#define SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", __VA_ARGS__ ) #else - #define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) - #define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) - #define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) - #define REGISTER_TEST_CASE( method, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( method, name, description ) - #define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) - #define FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", msg ) - #define SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", msg ) +#define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) +#define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) +#define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) +#define REGISTER_TEST_CASE( method, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( method, name, description ) +#define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) +#define FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", msg ) +#define SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", msg ) #endif #define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) @@ -10506,4 +11719,3 @@ int main (int argc, char * const argv[]) { using Catch::Detail::Approx; #endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED - diff --git a/esp_flasher/lib/esp-serial-flasher/test/qemu_test.cpp b/esp_flasher/lib/esp-serial-flasher/test/qemu_test.cpp index b4539c5a2e..a7df0d374d 100644 --- a/esp_flasher/lib/esp-serial-flasher/test/qemu_test.cpp +++ b/esp_flasher/lib/esp-serial-flasher/test/qemu_test.cpp @@ -1,4 +1,4 @@ -/* Copyright 2018-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2018-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ */ #include "catch.hpp" -#include "serial_io_mock.h" +#include "test_port.h" #include "esp_loader.h" #include "esp_loader_io.h" #include @@ -38,7 +38,7 @@ TEST_CASE( "Can connect " ) } -inline auto file_size_is(ifstream& file) +inline auto file_size_is(ifstream &file) { uint32_t file_size; @@ -49,7 +49,7 @@ inline auto file_size_is(ifstream& file) return file_size; } -void flash_application(ifstream& image) +void flash_application(ifstream &image) { uint8_t payload[1024]; int32_t count = 0; @@ -57,7 +57,7 @@ void flash_application(ifstream& image) ESP_ERR_CHECK( esp_loader_flash_start(APP_START_ADDRESS, image_size, sizeof(payload)) ); - while(image_size > 0) { + while (image_size > 0) { size_t to_read = min(image_size, sizeof(payload)); image.read((char *)payload, to_read); @@ -74,13 +74,13 @@ void flash_application(ifstream& image) // loader_flash_finish(false); } -bool file_compare(ifstream& file_1, ifstream& file_2, size_t file_size) +bool file_compare(ifstream &file_1, ifstream &file_2, size_t file_size) { vector file_data_1(file_size); vector file_data_2(file_size); - file_1.read((char*) &file_data_1[0], file_size); - file_2.read((char*) &file_data_2[0], file_size); + file_1.read((char *) &file_data_1[0], file_size); + file_2.read((char *) &file_data_2[0], file_size); return file_data_1 == file_data_2; } @@ -118,4 +118,4 @@ TEST_CASE( "Can write and read register" ) ESP_ERR_CHECK( esp_loader_write_register(SPI_MOSI_DLEN_REG, 55) ); ESP_ERR_CHECK( esp_loader_read_register(SPI_MOSI_DLEN_REG, ®_value) ); REQUIRE ( reg_value == 55 ); -} \ No newline at end of file +} diff --git a/esp_flasher/lib/esp-serial-flasher/test/requirements_test.txt b/esp_flasher/lib/esp-serial-flasher/test/requirements_test.txt new file mode 100644 index 0000000000..5324d632f6 --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/test/requirements_test.txt @@ -0,0 +1,9 @@ +idf-build-apps>=2.4.1 +pytest>=8.2.2 +pytest-rerunfailures>=14.0 +pytest-embedded>=1.10.3 +pytest-embedded-idf>=1.10.3 +pytest-embedded-serial>=1.10.3 +pytest-embedded-serial-esp>=1.10.3 +pexpect>=4.8.0 +stm32loader>=0.7.1 diff --git a/esp_flasher/lib/esp-serial-flasher/test/run_qemu_test.sh b/esp_flasher/lib/esp-serial-flasher/test/run_qemu_test.sh new file mode 100644 index 0000000000..b82171185c --- /dev/null +++ b/esp_flasher/lib/esp-serial-flasher/test/run_qemu_test.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e +mkdir -p build && cd build + +# QEMU_PATH environment variable has to be defined, pointing to qemu-system-xtensa +# Example: export QEMU_PATH=/home/user/esp/qemu/xtensa-softmmu/qemu-system-xtensa +if [ -z "${QEMU_PATH}" ]; then + echo "QEMU_PATH environment variable needs to be set" + exit 1 +fi + +# Generate empty file into which application will be flashed and compared against +dd if=/dev/zero bs=1024 count=4096 of="empty_file.bin" + +# Run qemu in background (daemonized) +${QEMU_PATH} \ + -daemonize \ + -machine esp32 \ + -drive file=empty_file.bin,if=mtd,format=raw \ + -global driver=esp32.gpio,property=strap_mode,value=0x0f \ + -serial tcp::5555,server,nowait + +cmake .. && cmake --build . && ./serial_flasher_test + +# Kill qemu process running in background +kill -9 $(pidof qemu-system-xtensa) diff --git a/esp_flasher/lib/esp-serial-flasher/test/run_test.sh b/esp_flasher/lib/esp-serial-flasher/test/run_test.sh deleted file mode 100755 index a4dff28c71..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/test/run_test.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -set -e -mkdir -p build && cd build - -if [ "$1" = "host" ]; then - cmake -DQEMU_TEST=False .. && cmake --build . && ./serial_flasher_test -elif [ "$1" = "qemu" ]; then - # QEMU_PATH environment variable has to be defined, pointing to qemu-system-xtensa - # Example: export QEMU_PATH=/home/user/esp/qemu/xtensa-softmmu/qemu-system-xtensa - if [ -z "${QEMU_PATH}" ]; then - echo "QEMU_PATH environment variable needs to be set" - exit 1 - fi - - # Generate empty file into which application will be flashed and compared against - dd if=/dev/zero bs=1024 count=4096 of="empty_file.bin" - - # Run qemu in background (daemonized) - ${QEMU_PATH} \ - -daemonize \ - -machine esp32 \ - -drive file=empty_file.bin,if=mtd,format=raw \ - -global driver=esp32.gpio,property=strap_mode,value=0x0f \ - -serial tcp::5555,server,nowait - - cmake -DQEMU_TEST=True .. && cmake --build . && ./serial_flasher_test - - # Kill qemu process running in background - kill -9 $(pidof qemu-system-xtensa) -else - echo "Please select which test to run: qemu or host" -fi \ No newline at end of file diff --git a/esp_flasher/lib/esp-serial-flasher/test/serial_io_mock.cpp b/esp_flasher/lib/esp-serial-flasher/test/serial_io_mock.cpp deleted file mode 100644 index 26732221e9..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/test/serial_io_mock.cpp +++ /dev/null @@ -1,158 +0,0 @@ -/* Copyright 2018-2023 Espressif Systems (Shanghai) CO LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include -#include -#include -#include "esp_loader_io.h" -#include "serial_io_mock.h" - -using namespace std; - -static vector write_buffer; -static vector read_buffer; -static uint32_t receive_delay = 0; -static int32_t timer = 0; - - -esp_loader_error_t loader_port_mock_init(const loader_serial_config_t *config) -{ - return ESP_LOADER_SUCCESS; -} - -void loader_port_mock_deinit() -{ - -} - -esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_t timeout) -{ - copy(&data[0], &data[size], back_inserter(write_buffer)); - - return ESP_LOADER_SUCCESS; -} - -esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeout) -{ - if (read_buffer.size() < size) { - return ESP_LOADER_ERROR_TIMEOUT; - } - - if (receive_delay != 0 && timeout != 0) { - if (receive_delay > timeout) { - receive_delay -= timeout; - return ESP_LOADER_ERROR_TIMEOUT; - } - receive_delay = 0; - } - - copy_n(read_buffer.begin(), size, data); - read_buffer.erase(read_buffer.begin(), read_buffer.begin() + size); - - return ESP_LOADER_SUCCESS; -} - -void loader_port_enter_bootloader() -{ - // GPIO0 and GPIO2 must be LOW - // Then Reset -} - -void loader_port_reset_target() -{ - -} - -void loader_port_delay_ms(uint32_t ms) -{ - -} - - -void loader_port_start_timer(uint32_t ms) -{ - timer = (int32_t)ms; -} - - -uint32_t loader_port_remaining_time(void) -{ - return (timer > 0) ? timer : 0; -} - - - -// ---------- For testing purposes only ---------- - -static void SLIP_encode(const int8_t *in_buff, size_t size, vector &encoded_buff) -{ - encoded_buff.push_back('\xc0'); - - for (uint32_t i = 0; i < size; i++) { - if (in_buff[i] == '\xc0') { - encoded_buff.push_back('\xdb'); - encoded_buff.push_back('\xdc'); - } else if (in_buff[i] == '\xdb') { - encoded_buff.push_back('\xdb'); - encoded_buff.push_back('\xdd'); - } else { - encoded_buff.push_back(in_buff[i]); - } - } - - encoded_buff.push_back('\xc0'); -} - -void clear_buffers() -{ - write_buffer.clear(); - read_buffer.clear(); -} - -int8_t *write_buffer_data() -{ - return write_buffer.data(); -} - -size_t write_buffer_size() -{ - return write_buffer.size(); -} - -void set_read_buffer(const void *data, size_t size) -{ - SLIP_encode((const int8_t *)data, size, read_buffer); -} - -void print_array(int8_t *data, uint32_t size) -{ - for (uint32_t i = 0; i < size; i++) { - printf("%02x, ", (uint8_t)data[i]); - } - printf("\n"); -} - -void write_buffer_print() -{ - print_array(write_buffer.data(), write_buffer.size()); -} - -void serial_set_time_delay(uint32_t miliseconds) -{ - receive_delay = miliseconds; -} \ No newline at end of file diff --git a/esp_flasher/lib/esp-serial-flasher/test/test.cpp b/esp_flasher/lib/esp-serial-flasher/test/test.cpp deleted file mode 100644 index 79e9b8b42e..0000000000 --- a/esp_flasher/lib/esp-serial-flasher/test/test.cpp +++ /dev/null @@ -1,405 +0,0 @@ -/* Copyright 2020-2023 Espressif Systems (Shanghai) CO LTD - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "catch.hpp" -#include "protocol.h" -#include "serial_io_mock.h" -#include "esp_loader.h" -#include "esp_loader_io.h" -#include -#include -#include -#include -#include -#include - -using namespace std; - - -#define TEST_SLIP_PACKET 0xdb, 'a', 'b', 'c', 0xc0, 0xdb, 'd', 'e', 0xc0, 'f', 0xdb - -#define SLIP_ENCODED_PACKET 0xdb, 0xdd, 'a', 'b', 'c', 0xdb, 0xdc, 0xdb, \ - 0xdd, 'd', 'e', 0xdb, 0xdc, 'f', 0xdb, 0xdd - -#define REQUIRE_SUCCESS(exp) REQUIRE( (exp) == ESP_LOADER_SUCCESS ) - -// Helper function for debugging. -__attribute__((unused)) -static void arrays_match(void *array_1, void *array_2, size_t size) -{ - int8_t *arr_1 = (int8_t *)array_1; - int8_t *arr_2 = (int8_t *)array_2; - - for (size_t i = 0; i < size; i++) { - if (arr_1[i] != arr_2[i]) { - printf("\nArrays do NOT match on index: %lu, with values %02hhx, %02hhx \n", - i, arr_1[i], arr_2[i]); - - printf("\nExpected: "); - for (uint32_t j = 0; j < size; j++) { printf("%02hhx ", arr_1[j]); } - printf("\nActual: "); - for (uint32_t j = 0; j < size; j++) { printf("%02hhx ", arr_2[j]); } - - return; - } - } - printf("Arrays Match\n"); -} - - -// Wrapper around command_t for convenience -struct __attribute__((packed)) expected_response { - expected_response(command_t cmd) - { - data.common.direction = READ_DIRECTION; - data.common.command = cmd; - data.common.size = 16; - data.common.value = 0; - data.status.failed = STATUS_SUCCESS; - data.status.error = 0; - } - - response_t data; -}; - -static_assert(sizeof(expected_response) == sizeof(response_t), "Size NOT equal"); - -inline void queue_response(expected_response &response, size_t size = sizeof(expected_response)) -{ - set_read_buffer(&response, size); -} - -expected_response set_params_response(SPI_SET_PARAMS); -expected_response flash_begin_response(FLASH_BEGIN); -expected_response flash_data_response(FLASH_DATA); -expected_response flash_end_response(FLASH_END); -expected_response write_reg_response(WRITE_REG); -expected_response read_reg_response(READ_REG); -expected_response attach_response(SPI_ATTACH); -expected_response sync_response(SYNC); - -const uint32_t reg_address = 0x1000; -const uint32_t reg_value = 55; - -struct __attribute__((packed)) write_reg_cmd_response { - uint8_t delimiter_1 = 0xc0; - write_reg_command_t write_reg_cmd = { - .common = { - .direction = WRITE_DIRECTION, - .command = WRITE_REG, - .size = 16, - .checksum = 0 - }, - .address = reg_address, - .value = reg_value, - .mask = 0xFFFFFFFF, - .delay_us = 0 - }; - uint8_t delimiter_2 = 0xc0; -}; - -map chip_magic_value = { - {ESP8266_CHIP, 0xfff0c101}, - {ESP32_CHIP, 0x00f01d83}, - {ESP32S2_CHIP, 0x000007c6}, - {ESP32C2_CHIP, 0x6f51306f}, - {ESP32C3_CHIP, 0x6921506f}, - {ESP32S3_CHIP, 0x00000009}, - {ESP32H4_CHIP, 0xca26cc22}, - {ESP32H2_CHIP, 0xd7b73e80}, - {ESP32C6_CHIP, 0x2ce0806f}, -}; - -void queue_connect_response(target_chip_t target = ESP32_CHIP, uint32_t magic_value = 0) -{ - // Set magic value register used for detection of attached chip - auto magic_value_response = read_reg_response; - magic_value_response.data.common.value = magic_value ? magic_value : chip_magic_value[target]; - clear_buffers(); - - for (uint8_t resp = 0; resp < 8; resp++) { - queue_response(sync_response); - } - - queue_response(magic_value_response); - - if (target == ESP8266_CHIP) { - queue_response(flash_begin_response); - } else { - auto efuse_pin_config_reg_1 = read_reg_response; - auto efuse_pin_config_reg_2 = read_reg_response; - - queue_response(efuse_pin_config_reg_1); - queue_response(efuse_pin_config_reg_2); - queue_response(attach_response); - } - -} - -TEST_CASE( "chip_magic_value contains all supported chips " ) -{ - REQUIRE( chip_magic_value.size() == ESP_MAX_CHIP ); -} - -TEST_CASE( "Can connect within specified time " ) -{ - queue_connect_response(); - - esp_loader_connect_args_t connect_config = { - .sync_timeout = 10, - .trials = 1 - }; - - SECTION( "Can connect" ) { - serial_set_time_delay(5); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - } - - SECTION( "Timeout error is returned when timeout expires" ) { - serial_set_time_delay(20); - REQUIRE ( esp_loader_connect(&connect_config) == ESP_LOADER_ERROR_TIMEOUT ); - } - - SECTION( "Can connect after several trials within specified time" ) { - connect_config.trials = 5; - serial_set_time_delay(40); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - - serial_set_time_delay(60); - REQUIRE( esp_loader_connect(&connect_config) == ESP_LOADER_ERROR_TIMEOUT ); - } - - serial_set_time_delay(0); -} - - -TEST_CASE( "Can detect attached target" ) -{ - esp_loader_connect_args_t connect_config = ESP_LOADER_CONNECT_DEFAULT(); - - SECTION( "Can detect ESP32" ) { - queue_connect_response(ESP32_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32_CHIP ); - } - - SECTION( "Can detect ESP32S2" ) { - queue_connect_response(ESP32S2_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32S2_CHIP ); - } - - SECTION( "Can detect ESP32C2" ) { - queue_connect_response(ESP32C2_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32C2_CHIP ); - } - - SECTION( "Can detect ESP32H4" ) { - queue_connect_response(ESP32H4_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32H4_CHIP ); - } - - SECTION( "Can detect ESP32H2" ) { - queue_connect_response(ESP32H2_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32H2_CHIP ); - } - - SECTION( "Can detect ESP32C3" ) { - queue_connect_response(ESP32C3_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32C3_CHIP ); - } - - SECTION( "Can detect ESP32C3 rev3" ) { - queue_connect_response(ESP32C3_CHIP, 0x1b31506f); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32C3_CHIP ); - } - - SECTION( "Can detect ESP32S3" ) { - queue_connect_response(ESP32S3_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP32S3_CHIP ); - } - - SECTION( "Can detect ESP8266" ) { - queue_connect_response(ESP8266_CHIP); - REQUIRE_SUCCESS( esp_loader_connect(&connect_config) ); - REQUIRE( esp_loader_get_target() == ESP8266_CHIP ); - } - - SECTION( "Can detect unknown chip" ) { - queue_connect_response(ESP_UNKNOWN_CHIP, 0xaaaaaaaa); - REQUIRE( esp_loader_connect(&connect_config) == ESP_LOADER_ERROR_INVALID_TARGET); - } -} - -TEST_CASE( "Register can be read correctly" ) -{ - clear_buffers(); - uint32_t reg_value = 0; - read_reg_response.data.common.value = 55; - - queue_response(read_reg_response); - - REQUIRE_SUCCESS( esp_loader_read_register(0, ®_value) ); - - REQUIRE( reg_value == 55 ); -} - - -TEST_CASE( "Register can be written correctly" ) -{ - write_reg_cmd_response expected; - write_reg_response.data.common.value = 55; - - clear_buffers(); - queue_response(write_reg_response); - - REQUIRE_SUCCESS( esp_loader_write_register(reg_address, reg_value) ); - - REQUIRE( memcmp(write_buffer_data(), &expected, sizeof(expected)) == 0 ); -} - -// -------------------- Serial comm test ----------------------- - -TEST_CASE ( "SLIP is encoded correctly" ) -{ - loader_flash_begin_cmd(0, 0, 0, 0, ESP32_CHIP); // To reset sequence number counter - - uint8_t data[] = { TEST_SLIP_PACKET }; - - uint8_t expected[] = { - 0xc0, // Begin - 0x00, // Write direction - 0x03, // FLASH_DATA command - 16 + sizeof(data), 0, // Number of characters to send - 0x33, 0, 0, 0,// Checksum - sizeof(data), 0, 0, 0, // Data size - 0, 0, 0, 0, // Sequence number - 0, 0, 0, 0, // zero - 0, 0, 0, 0, // zero - SLIP_ENCODED_PACKET, - 0xc0, // End - }; - - // write_buffer_print(); - // print_array(expected, sizeof(expected)); - - clear_buffers(); - queue_response(flash_data_response); - - REQUIRE_SUCCESS( loader_flash_data_cmd(data, sizeof(data)) ); - - REQUIRE( memcmp(write_buffer_data(), expected, sizeof(expected)) == 0 ); -} - - -TEST_CASE( "Sync command is constructed correctly" ) -{ - uint8_t expected[] = { - 0xc0, // Begin - 0x00, // Write direction - 0x08, // SYNC command - 36, 0, // Number of characters to send - 0, 0, 0, 0, // Checksum is ignored for this command - 0x07, 0x07, 0x12, 0x20, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, - 0xc0, // End - }; - - clear_buffers(); - - for (uint8_t resp = 0; resp < 8; resp++) { - queue_response(sync_response); - } - - REQUIRE_SUCCESS( loader_sync_cmd() ); - - REQUIRE( memcmp(write_buffer_data(), expected, sizeof(expected)) == 0 ); -} - -TEST_CASE( "Register can be read and decoded correctly" ) -{ - clear_buffers(); - read_reg_response.data.common.value = 55; - queue_response(read_reg_response); - - uint32_t reg_value = 0; - esp_loader_read_register(0, ®_value); - - REQUIRE( reg_value == 55 ); -} - -TEST_CASE( "Received response (in SLIP format) is decoded correctly" ) -{ - clear_buffers(); - read_reg_response.data.common.value = 0xC0BD; // C0, BD has to be replaced - queue_response(read_reg_response); - - uint32_t reg_value = 0; - esp_loader_read_register(0, ®_value); - - REQUIRE( reg_value == 0xC0BD ); -} - - -// -------------------- Serial mock test ----------------------- - -TEST_CASE( "Serial read works correctly" ) -{ - uint32_t reg_value = 5; - uint8_t readout[sizeof(reg_value) + 2]; - uint8_t expected[] = { 0xc0, 5, 0, 0, 0, 0xc0 }; - - clear_buffers(); - - set_read_buffer(®_value, sizeof(reg_value)); - - SECTION( "Read buffer can be read" ) { - loader_port_read(readout, sizeof(readout), 0); - REQUIRE( memcmp(readout, expected, sizeof(readout)) == 0 ); - } - - SECTION ( "Read buffer can be read in smaller chunks" ) { - loader_port_read(&readout[0], 3, 0); - loader_port_read(&readout[3], 3, 0); - REQUIRE( memcmp(readout, expected, sizeof(readout)) == 0 ); - } - - SECTION ( "Timeout is returned when requested amount of data is not available" ) { - REQUIRE( loader_port_read(readout, sizeof(readout) + 1, 0) == ESP_LOADER_ERROR_TIMEOUT); - } - - SECTION ( "Read buffer is correctly SLIP encoded " ) { - uint8_t data_to_encode[] = { TEST_SLIP_PACKET }; - uint8_t expected[] = { 0xc0, SLIP_ENCODED_PACKET, 0xc0}; - uint8_t encoded[sizeof(expected)]; - - clear_buffers(); - - fill(encoded, &encoded[sizeof(encoded)], 0); - set_read_buffer(data_to_encode, sizeof(data_to_encode)); - loader_port_read(encoded, sizeof(encoded), 0); - - REQUIRE( memcmp(expected, encoded, sizeof(expected)) == 0 ); - } -} diff --git a/esp_flasher/lib/esp-serial-flasher/test/test_main.cpp b/esp_flasher/lib/esp-serial-flasher/test/test_main.cpp index 5d962489d4..25bfe6b731 100644 --- a/esp_flasher/lib/esp-serial-flasher/test/test_main.cpp +++ b/esp_flasher/lib/esp-serial-flasher/test/test_main.cpp @@ -1,4 +1,4 @@ -/* Copyright 2018-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2018-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,15 +18,16 @@ #include "catch.hpp" #include "esp_loader_io.h" -#include "serial_io_mock.h" +#include "test_port.h" -int main( int argc, char* argv[] ) { +int main( int argc, char *argv[] ) +{ const loader_serial_config_t dummy_config = { 0 }; // global setup... - if( loader_port_mock_init(&dummy_config) != ESP_LOADER_SUCCESS ) { + if ( loader_port_test_init(&dummy_config) != ESP_LOADER_SUCCESS ) { std::cout << "Serial initialization failed"; return 0; } @@ -34,7 +35,7 @@ int main( int argc, char* argv[] ) { int result = Catch::Session().run( argc, argv ); // global clean-up... - loader_port_mock_deinit(); + loader_port_test_deinit(); return result; -} \ No newline at end of file +} diff --git a/esp_flasher/lib/esp-serial-flasher/test/serial_io_mock.h b/esp_flasher/lib/esp-serial-flasher/test/test_port.h similarity index 63% rename from esp_flasher/lib/esp-serial-flasher/test/serial_io_mock.h rename to esp_flasher/lib/esp-serial-flasher/test/test_port.h index e72242d120..1f3ec2b395 100644 --- a/esp_flasher/lib/esp-serial-flasher/test/serial_io_mock.h +++ b/esp_flasher/lib/esp-serial-flasher/test/test_port.h @@ -1,4 +1,4 @@ -/* Copyright 2018-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2018-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,20 +19,9 @@ #include #include "esp_loader.h" -void clear_buffers(); - -void write_buffer_print(); -size_t write_buffer_size(); -int8_t* write_buffer_data(); - -void set_read_buffer(const void *data, size_t size); -void print_array(int8_t *data, uint32_t size); -void serial_set_time_delay(uint32_t miliseconds); - - typedef struct { uint32_t dummy; } loader_serial_config_t; -esp_loader_error_t loader_port_mock_init(const loader_serial_config_t *config); -void loader_port_mock_deinit(); \ No newline at end of file +esp_loader_error_t loader_port_test_init(const loader_serial_config_t *config); +void loader_port_test_deinit(); diff --git a/esp_flasher/lib/esp-serial-flasher/test/serial_io_tcp.cpp b/esp_flasher/lib/esp-serial-flasher/test/test_tcp_port.cpp similarity index 69% rename from esp_flasher/lib/esp-serial-flasher/test/serial_io_tcp.cpp rename to esp_flasher/lib/esp-serial-flasher/test/test_tcp_port.cpp index 1310e65b36..02c658b99f 100644 --- a/esp_flasher/lib/esp-serial-flasher/test/serial_io_tcp.cpp +++ b/esp_flasher/lib/esp-serial-flasher/test/test_tcp_port.cpp @@ -1,4 +1,4 @@ -/* Copyright 2018-2023 Espressif Systems (Shanghai) CO LTD +/* Copyright 2018-2024 Espressif Systems (Shanghai) CO LTD * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ */ #include "esp_loader_io.h" -#include "serial_io_mock.h" +#include "test_port.h" #include #include @@ -32,8 +32,9 @@ using namespace std; const uint32_t PORT = 5555; static int sock = 0; ofstream file; +static chrono::time_point s_time_end; -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) { static bool write_prev = false; @@ -49,7 +50,7 @@ static void transfer_debug_print(const uint8_t *data, uint16_t size, bool write) } #endif -esp_loader_error_t loader_port_mock_init(const loader_serial_config_t *config) +esp_loader_error_t loader_port_test_init(const loader_serial_config_t *config) { struct sockaddr_in serv_addr; @@ -82,7 +83,7 @@ esp_loader_error_t loader_port_mock_init(const loader_serial_config_t *config) } -void loader_port_mock_deinit() +void loader_port_test_deinit() { if (sock != 0) { shutdown(sock, 0); @@ -105,7 +106,7 @@ esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_ cout << "Socket send failed\n"; return ESP_LOADER_ERROR_FAIL; } -#ifdef SERIAL_FLASHER_DEBUG_TRACE +#if SERIAL_FLASHER_DEBUG_TRACE transfer_debug_print(data, bytes_written, true); #endif written += bytes_written; @@ -115,26 +116,36 @@ esp_loader_error_t loader_port_write(const uint8_t *data, uint16_t size, uint32_ esp_loader_error_t loader_port_read(uint8_t *data, uint16_t size, uint32_t timeout) { - uint32_t written = 0; - int bytes_read = 0; + // Timeout is specified in milliseconds, split to seconds and microsecond remainder + const struct timeval timeout_values = { + .tv_sec = timeout / 1000, + .tv_usec = (timeout % 1000) * 1000 + }; + + if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, + (const char *)&timeout_values, sizeof(timeout_values)) != 0) { + cout << "Could not set socket read timeout\n"; + return ESP_LOADER_ERROR_FAIL; + } - do { - bytes_read = read(sock, &data[written], size - written); - if (bytes_read == 0) { + const int bytes_read = read(sock, data, size); + + if (bytes_read != size) { + if (errno == EWOULDBLOCK || errno == EAGAIN) { + cout << "A socket read timeout occurred\n"; + return ESP_LOADER_ERROR_TIMEOUT; + } else { cout << "Socket connection lost\n"; return ESP_LOADER_ERROR_FAIL; } + } -#ifdef SERIAL_FLASHER_DEBUG_TRACE - transfer_debug_print(data, bytes_read, false); +#if SERIAL_FLASHER_DEBUG_TRACE + transfer_debug_print(data, bytes_read, false); #endif - file.write((const char*)&data[written], bytes_read); - file.flush(); - - written += bytes_read; - } while (written != size); - + file.write((const char *)data, size); + file.flush(); return ESP_LOADER_SUCCESS; } @@ -157,11 +168,15 @@ void loader_port_delay_ms(uint32_t ms) void loader_port_start_timer(uint32_t ms) { - (void)ms; + s_time_end = chrono::steady_clock::now() + chrono::milliseconds(ms); } uint32_t loader_port_remaining_time(void) { - return 1; + const auto remaining = s_time_end - chrono::steady_clock::now(); + + const auto remaining_ms = chrono::duration_cast(remaining).count(); + + return (remaining_ms > 0) ? (uint32_t)remaining_ms : 0; } diff --git a/esp_flasher/lib/esp-serial-flasher/zephyr/CMakeLists.txt b/esp_flasher/lib/esp-serial-flasher/zephyr/CMakeLists.txt index 4b89458224..4ea53923cb 100644 --- a/esp_flasher/lib/esp-serial-flasher/zephyr/CMakeLists.txt +++ b/esp_flasher/lib/esp-serial-flasher/zephyr/CMakeLists.txt @@ -13,7 +13,8 @@ if (CONFIG_ESP_SERIAL_FLASHER) zephyr_library_sources(${ZEPHYR_CURRENT_MODULE_DIR}/src/esp_loader.c ${ZEPHYR_CURRENT_MODULE_DIR}/src/esp_targets.c - ${ZEPHYR_CURRENT_MODULE_DIR}/src/protocol_common.c + ${ZEPHYR_CURRENT_MODULE_DIR}/src/esp_stubs.c + ${ZEPHYR_CURRENT_MODULE_DIR}/src/protocol_serial.c ${ZEPHYR_CURRENT_MODULE_DIR}/src/protocol_uart.c ${ZEPHYR_CURRENT_MODULE_DIR}/src/slip.c ${ZEPHYR_CURRENT_MODULE_DIR}/src/md5_hash.c @@ -28,9 +29,25 @@ if (CONFIG_ESP_SERIAL_FLASHER) target_compile_definitions(esp_flasher INTERFACE -DMD5_ENABLED=1) endif() + if(DEFINED SERIAL_FLASHER_DEBUG_TRACE OR CONFIG_SERIAL_FLASHER_DEBUG_TRACE) + target_compile_definitions(esp_flasher INTERFACE SERIAL_FLASHER_DEBUG_TRACE=1) + endif() + target_compile_definitions(esp_flasher INTERFACE SERIAL_FLASHER_WRITE_BLOCK_RETRIES=${CONFIG_SERIAL_FLASHER_WRITE_BLOCK_RETRIES} ) + if((DEFINED SERIAL_FLASHER_RESET_INVERT AND SERIAL_FLASHER_RESET_INVERT) OR CONFIG_SERIAL_FLASHER_RESET_INVERT) + target_compile_definitions(esp_flasher INTERFACE SERIAL_FLASHER_RESET_INVERT=1) + else() + target_compile_definitions(esp_flasher INTERFACE SERIAL_FLASHER_RESET_INVERT=0) + endif() + + if((DEFINED SERIAL_FLASHER_BOOT_INVERT AND SERIAL_FLASHER_BOOT_INVERT) OR CONFIG_SERIAL_FLASHER_BOOT_INVERT) + target_compile_definitions(esp_flasher INTERFACE SERIAL_FLASHER_BOOT_INVERT=1) + else() + target_compile_definitions(esp_flasher INTERFACE SERIAL_FLASHER_BOOT_INVERT=0) + endif() + endif() diff --git a/esp_flasher/scenes/esp_flasher_scene_browse.c b/esp_flasher/scenes/esp_flasher_scene_browse.c index 5460be6209..5cab851933 100644 --- a/esp_flasher/scenes/esp_flasher_scene_browse.c +++ b/esp_flasher/scenes/esp_flasher_scene_browse.c @@ -3,6 +3,7 @@ enum SubmenuIndex { SubmenuIndexS3Mode, + SubmenuIndexC5Mode, SubmenuIndexBoot, SubmenuIndexPart, SubmenuIndexNvs, @@ -33,6 +34,13 @@ static void esp_flasher_scene_browse_callback(void* context, uint32_t index) { !app->selected_flash_options[SelectedFlashS3Mode]; view_dispatcher_send_custom_event(app->view_dispatcher, EspFlasherEventRefreshSubmenu); break; + + case SubmenuIndexC5Mode: + app->selected_flash_options[SelectedFlashC5Mode] = + !app->selected_flash_options[SelectedFlashC5Mode]; + view_dispatcher_send_custom_event(app->view_dispatcher, EspFlasherEventRefreshSubmenu); + break; + case SubmenuIndexBoot: app->selected_flash_options[SelectedFlashBoot] = !app->selected_flash_options[SelectedFlashBoot]; @@ -174,6 +182,7 @@ static void esp_flasher_scene_browse_callback(void* context, uint32_t index) { #define STR_UNSELECT "[ ]" #define STR_BOOT "Bootloader (" TOSTRING(ESP_ADDR_BOOT) ")" #define STR_BOOT_S3 "Bootloader (" TOSTRING(ESP_ADDR_BOOT_S3) ")" +#define STR_BOOT_C5 "Bootloader (" TOSTRING(ESP_ADDR_BOOT_C5) ")" #define STR_PART "Part Table (" TOSTRING(ESP_ADDR_PART) ")" #define STR_NVS "NVS (" TOSTRING(ESP_ADDR_NVS) ")" #define STR_BOOT_APP0 "boot_app0 (" TOSTRING(ESP_ADDR_BOOT_APP0) ")" @@ -181,24 +190,41 @@ static void esp_flasher_scene_browse_callback(void* context, uint32_t index) { #define STR_APP_B "FirmwareB(" TOSTRING(ESP_ADDR_APP_B) ")" #define STR_CUSTOM "Custom" #define STR_FLASH_S3 "[>] FLASH - slow (0x0)" +#define STR_FLASH_C5 "[>] FLASH - slow (0x2000)" #define STR_FLASH "[>] FLASH - slow" #define STR_FLASH_TURBO_S3 "[>] FLASH - fast (0x0)" +#define STR_FLASH_TURBO_C5 "[>] FLASH - fast (0x2000)" #define STR_FLASH_TURBO "[>] FLASH - fast" static void _refresh_submenu(EspFlasherApp* app) { Submenu* submenu = app->submenu; submenu_reset(app->submenu); - submenu_set_header(submenu, "Browse for files to flash"); + submenu_add_item( submenu, app->selected_flash_options[SelectedFlashS3Mode] ? "[x] Using S3, C3 or C6" : - "[ ] Select for S3, C3, C6", + "[ ] Select for S3, C3 or C6", SubmenuIndexS3Mode, esp_flasher_scene_browse_callback, app); + + submenu_add_item( + submenu, + app->selected_flash_options[SelectedFlashC5Mode] ? "[x] Using ESP32-C5" : + "[ ] Select for ESP32-C5", + SubmenuIndexC5Mode, + esp_flasher_scene_browse_callback, + app); + const char* strSelectBootloader = STR_UNSELECT " " STR_BOOT; - if(app->selected_flash_options[SelectedFlashS3Mode]) { + if(app->selected_flash_options[SelectedFlashC5Mode]) { + if(app->selected_flash_options[SelectedFlashBoot]) { + strSelectBootloader = STR_SELECT " Bootloader (C5 @ 0x2000)"; + } else { + strSelectBootloader = STR_UNSELECT " Bootloader (C5 @ 0x2000)"; + } + } else if(app->selected_flash_options[SelectedFlashS3Mode]) { if(app->selected_flash_options[SelectedFlashBoot]) { strSelectBootloader = STR_SELECT " " STR_BOOT_S3; } else { @@ -211,8 +237,9 @@ static void _refresh_submenu(EspFlasherApp* app) { strSelectBootloader = STR_UNSELECT " " STR_BOOT; } } - submenu_add_item( - submenu, strSelectBootloader, SubmenuIndexBoot, esp_flasher_scene_browse_callback, app); + + submenu_add_item(submenu, strSelectBootloader, SubmenuIndexBoot, esp_flasher_scene_browse_callback, app); + submenu_add_item( submenu, app->selected_flash_options[SelectedFlashPart] ? STR_SELECT " " STR_PART : @@ -220,6 +247,7 @@ static void _refresh_submenu(EspFlasherApp* app) { SubmenuIndexPart, esp_flasher_scene_browse_callback, app); + submenu_add_item( submenu, app->selected_flash_options[SelectedFlashNvs] ? STR_SELECT " " STR_NVS : @@ -227,6 +255,7 @@ static void _refresh_submenu(EspFlasherApp* app) { SubmenuIndexNvs, esp_flasher_scene_browse_callback, app); + submenu_add_item( submenu, app->selected_flash_options[SelectedFlashBootApp0] ? STR_SELECT " " STR_BOOT_APP0 : @@ -234,6 +263,7 @@ static void _refresh_submenu(EspFlasherApp* app) { SubmenuIndexBootApp0, esp_flasher_scene_browse_callback, app); + submenu_add_item( submenu, app->selected_flash_options[SelectedFlashAppA] ? STR_SELECT " " STR_APP_A : @@ -241,6 +271,7 @@ static void _refresh_submenu(EspFlasherApp* app) { SubmenuIndexAppA, esp_flasher_scene_browse_callback, app); + submenu_add_item( submenu, app->selected_flash_options[SelectedFlashAppB] ? STR_SELECT " " STR_APP_B : @@ -248,18 +279,21 @@ static void _refresh_submenu(EspFlasherApp* app) { SubmenuIndexAppB, esp_flasher_scene_browse_callback, app); - // TODO: custom addr - //submenu_add_item( - // submenu, app->selected_flash_options[SelectedFlashCustom] ? STR_SELECT " " STR_CUSTOM : STR_UNSELECT " " STR_CUSTOM, SubmenuIndexCustom, esp_flasher_scene_browse_callback, app); + submenu_add_item( submenu, - app->selected_flash_options[SelectedFlashS3Mode] ? STR_FLASH_TURBO_S3 : STR_FLASH_TURBO, + app->selected_flash_options[SelectedFlashC5Mode] ? STR_FLASH_TURBO_C5 : + app->selected_flash_options[SelectedFlashS3Mode] ? STR_FLASH_TURBO_S3 : + STR_FLASH_TURBO, SubmenuIndexFlashTurbo, esp_flasher_scene_browse_callback, app); + submenu_add_item( submenu, - app->selected_flash_options[SelectedFlashS3Mode] ? STR_FLASH_S3 : STR_FLASH, + app->selected_flash_options[SelectedFlashC5Mode] ? STR_FLASH_C5 : + app->selected_flash_options[SelectedFlashS3Mode] ? STR_FLASH_S3 : + STR_FLASH, SubmenuIndexFlash, esp_flasher_scene_browse_callback, app); diff --git a/esp_flasher/scenes/esp_flasher_scene_quick.c b/esp_flasher/scenes/esp_flasher_scene_quick.c index 5cce341d3d..22ee803f22 100644 --- a/esp_flasher/scenes/esp_flasher_scene_quick.c +++ b/esp_flasher/scenes/esp_flasher_scene_quick.c @@ -18,22 +18,52 @@ enum QuickState { QuickS2Boot_Marauder, QuickS2Boot_Flipperhttp, QuickS2Boot_Blackmagic, + QuickS2Boot_GhostESP, QuickWROOMBoot, QuickWROOMBoot_Marauder, QuickWROOMBoot_Wardriver, + QuickWROOMBoot_GhostESP, QuickS3Boot, QuickS3Boot_Marauder, QuickS3Boot_Wardriver, + QuickS3Boot_GhostESP, + QuickC3Boot, + QuickC3Boot_Marauder, + QuickC3Boot_Flipperhttp, + QuickC3Boot_GhostESP, + QuickC5Boot, + QuickC5Boot_Marauder, + QuickC5Boot_Flipperhttp, + QuickC5Boot_GhostESP, + QuickC6Boot, + QuickC6Boot_Marauder, + QuickC6Boot_Flipperhttp, + QuickC6Boot_GhostESP, QuickWROOM, QuickWROOM_Marauder, QuickWROOM_Wardriver, + QuickWROOM_GhostESP, QuickS2, QuickS2_Marauder, QuickS2_Flipperhttp, QuickS2_Blackmagic, + QuickS2_GhostESP, QuickS3, QuickS3_Marauder, QuickS3_Wardriver, + QuickS3_GhostESP, + QuickC3, + QuickC3_Marauder, + QuickC3_Flipperhttp, + QuickC3_GhostESP, + QuickC5, + QuickC5_Marauder, + QuickC5_Flipperhttp, + QuickC5_GhostESP, + QuickC6, + QuickC6_Marauder, + QuickC6_Flipperhttp, + QuickC6_GhostESP, }; void esp_flasher_scene_quick_submenu_callback(void* context, uint32_t index) { @@ -57,9 +87,15 @@ void esp_flasher_scene_quick_on_enter(void* context) { case QuickS2Boot: case QuickWROOMBoot: case QuickS3Boot: + case QuickC3Boot: + case QuickC5Boot: + case QuickC6Boot: case QuickWROOM: case QuickS2: case QuickS3: + case QuickC3: + case QuickC5: + case QuickC6: submenu_set_header(submenu, "Choose ESP32 Type:"); submenu_add_item( submenu, @@ -89,13 +125,21 @@ void esp_flasher_scene_quick_on_enter(void* context) { submenu, "Other ESP32-S2", QuickS2, esp_flasher_scene_quick_submenu_callback, app); submenu_add_item( submenu, "Other ESP32-S3", QuickS3, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, "Other ESP32-C3", QuickC3, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, "Other ESP32-C5", QuickC5, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, "Other ESP32-C6", QuickC6, esp_flasher_scene_quick_submenu_callback, app); break; case QuickS2Boot_Marauder: case QuickS2Boot_Flipperhttp: case QuickS2Boot_Blackmagic: + case QuickS2Boot_GhostESP: case QuickS2_Marauder: case QuickS2_Flipperhttp: case QuickS2_Blackmagic: + case QuickS2_GhostESP: submenu_set_header(submenu, "Choose Firmware:"); submenu_add_item( submenu, @@ -115,11 +159,19 @@ void esp_flasher_scene_quick_on_enter(void* context) { state > QuickS2 ? QuickS2_Blackmagic : QuickS2Boot_Blackmagic, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, + "Ghost ESP (WiFi)", + state > QuickS2 ? QuickS2_GhostESP : QuickS2Boot_GhostESP, + esp_flasher_scene_quick_submenu_callback, + app); break; case QuickWROOMBoot_Marauder: case QuickWROOMBoot_Wardriver: + case QuickWROOMBoot_GhostESP: case QuickWROOM_Marauder: case QuickWROOM_Wardriver: + case QuickWROOM_GhostESP: submenu_set_header(submenu, "Choose Firmware:"); submenu_add_item( submenu, @@ -133,11 +185,19 @@ void esp_flasher_scene_quick_on_enter(void* context) { state > QuickWROOM ? QuickWROOM_Wardriver : QuickWROOMBoot_Wardriver, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, + "GhostESP (WiFi)", + state > QuickWROOM ? QuickWROOM_GhostESP : QuickWROOMBoot_GhostESP, + esp_flasher_scene_quick_submenu_callback, + app); break; case QuickS3Boot_Marauder: case QuickS3Boot_Wardriver: + case QuickS3Boot_GhostESP: case QuickS3_Marauder: case QuickS3_Wardriver: + case QuickS3_GhostESP: submenu_set_header(submenu, "Choose Firmware:"); submenu_add_item( submenu, @@ -151,6 +211,90 @@ void esp_flasher_scene_quick_on_enter(void* context) { state > QuickS3 ? QuickS3_Wardriver : QuickS3Boot_Wardriver, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, + "GhostESP (WiFi)", + state > QuickS3 ? QuickS3_GhostESP : QuickS3Boot_GhostESP, + esp_flasher_scene_quick_submenu_callback, + app); + break; + case QuickC3Boot_Marauder: + case QuickC3Boot_Flipperhttp: + case QuickC3Boot_GhostESP: + case QuickC3_Marauder: + case QuickC3_Flipperhttp: + case QuickC3_GhostESP: + submenu_set_header(submenu, "Choose Firmware:"); + submenu_add_item( + submenu, + "Marauder (has Evil Portal)", + state > QuickC3 ? QuickC3_Marauder : QuickC3Boot_Marauder, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "FlipperHTTP (web access)", + state > QuickC3 ? QuickC3_Flipperhttp : QuickC3_Flipperhttp, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "GhostESP (WiFi)", + state > QuickC3 ? QuickC3_GhostESP : QuickC3Boot_GhostESP, + esp_flasher_scene_quick_submenu_callback, + app); + break; + case QuickC5Boot_Marauder: + case QuickC5Boot_Flipperhttp: + case QuickC5Boot_GhostESP: + case QuickC5_Marauder: + case QuickC5_Flipperhttp: + case QuickC5_GhostESP: + submenu_set_header(submenu, "Choose Firmware:"); + submenu_add_item( + submenu, + "Marauder (has Evil Portal)", + state > QuickC5 ? QuickC5_Marauder : QuickC5Boot_Marauder, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "FlipperHTTP (web access)", + state > QuickC5 ? QuickC5_Flipperhttp : QuickC5Boot_Flipperhttp, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "GhostESP (WiFi)", + state > QuickC5 ? QuickC5_GhostESP : QuickC5Boot_GhostESP, + esp_flasher_scene_quick_submenu_callback, + app); + break; + case QuickC6Boot_Marauder: + case QuickC6Boot_Flipperhttp: + case QuickC6Boot_GhostESP: + case QuickC6_Marauder: + case QuickC6_Flipperhttp: + case QuickC6_GhostESP: + submenu_set_header(submenu, "Choose Firmware:"); + submenu_add_item( + submenu, + "Marauder (has Evil Portal)", + state > QuickC6 ? QuickC6_Marauder : QuickC6Boot_Marauder, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "FlipperHTTP (web access)", + state > QuickC6 ? QuickC6_Flipperhttp : QuickC6Boot_Flipperhttp, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "GhostESP (WiFi)", + state > QuickC6 ? QuickC6_GhostESP : QuickC6Boot_GhostESP, + esp_flasher_scene_quick_submenu_callback, + app); break; default: break; @@ -171,7 +315,8 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { bool enter_bootloader = false; bool s3 = false; - const char* boot = NULL; // 0x1000 (or 0x0 on S3) + bool c5 = false; + const char* boot = NULL; // 0x1000 (or 0x0 on S3, C3, C6 and or 0x2000 on C5) const char* part = NULL; // 0x8000 const char* app0 = NULL; // 0xE000 const char* firm = NULL; // 0x10000 @@ -180,9 +325,15 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { case QuickS2Boot: case QuickWROOMBoot: case QuickS3Boot: - case QuickWROOM: + case QuickC3Boot: + case QuickC5Boot: + case QuickC6Boot: + case QuickWROOM: case QuickS2: - case QuickS3: + case QuickS3: + case QuickC3: + case QuickC5: + case QuickC6: // Select first item of submenu scene_manager_set_scene_state( app->scene_manager, EspFlasherSceneQuick, event.event + 1); @@ -217,6 +368,15 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { firm = APP_DATA_PATH("assets/blackmagic/s2/blackmagic.bin"); break; + case QuickS2Boot_GhostESP: + enter_bootloader = true; + /* fallthrough */ + case QuickS2_GhostESP: + boot = APP_DATA_PATH("assets/ghostesp/s2/bootloader.bin"); + part = APP_DATA_PATH("assets/ghostesp/s2/partition-table.bin"); + firm = APP_DATA_PATH("assets/ghostesp/s2/Ghost_ESP_IDF.bin"); + break; + case QuickWROOMBoot_Marauder: enter_bootloader = true; /* fallthrough */ @@ -234,6 +394,15 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { boot = APP_DATA_PATH("assets/wardriver/f0-wardrive-wroom.bin"); break; + case QuickWROOMBoot_GhostESP: + enter_bootloader = true; + /* fallthrough */ + case QuickWROOM_GhostESP: + boot = APP_DATA_PATH("assets/ghostesp/wroom/bootloader.bin"); + part = APP_DATA_PATH("assets/ghostesp/wroom/partition-table.bin"); + firm = APP_DATA_PATH("assets/ghostesp/wroom/Ghost_ESP_IDF.bin"); + break; + case QuickS3Boot_Marauder: enter_bootloader = true; /* fallthrough */ @@ -253,6 +422,108 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { boot = APP_DATA_PATH("assets/wardriver/f0-wardrive-s3.bin"); break; + case QuickS3Boot_GhostESP: + enter_bootloader = true; + /* fallthrough */ + case QuickS3_GhostESP: + s3 = true; + boot = APP_DATA_PATH("assets/ghostesp/s3/bootloader.bin"); + part = APP_DATA_PATH("assets/ghostesp/s3/partition-table.bin"); + firm = APP_DATA_PATH("assets/ghostesp/s3/Ghost_ESP_IDF.bin"); + break; + + case QuickC3Boot_Marauder: + enter_bootloader = true; + /* fallthrough */ + case QuickC3_Marauder: + s3 = true; + boot = APP_DATA_PATH("assets/marauder/c3/esp32_marauder.ino.bootloader.bin"); + part = APP_DATA_PATH("assets/marauder/esp32_marauder.ino.partitions.bin"); + app0 = APP_DATA_PATH("assets/marauder/boot_app0.bin"); + firm = APP_DATA_PATH("assets/marauder/c3/esp32_marauder.multiboardS3.bin"); + break; + + case QuickC3Boot_Flipperhttp: + enter_bootloader = true; + /* fallthrough */ + case QuickC3_Flipperhttp: + s3 = true; + boot = APP_DATA_PATH("assets/flipperhttp/c3/flipper_http_bootloader.bin"); + part = APP_DATA_PATH("assets/flipperhttp/c3/flipper_http_firmware_a.bin"); + firm = APP_DATA_PATH("assets/flipperhttp/c3/flipper_http_partitions.bin"); + break; + + case QuickC3Boot_GhostESP: + enter_bootloader = true; + /* fallthrough */ + case QuickC3_GhostESP: + s3 = true; + boot = APP_DATA_PATH("assets/ghostesp/c3/bootloader.bin"); + part = APP_DATA_PATH("assets/ghostesp/c3/partition-table.bin"); + firm = APP_DATA_PATH("assets/ghostesp/c3/Ghost_ESP_IDF.bin"); + break; + + case QuickC5Boot_Marauder: + enter_bootloader = true; + /* fallthrough */ + case QuickC5_Marauder: + c5 = true; + boot = APP_DATA_PATH("assets/marauder/c5/esp32_marauder.ino.bootloader.bin"); + part = APP_DATA_PATH("assets/marauder/esp32_marauder.ino.partitions.bin"); + app0 = APP_DATA_PATH("assets/marauder/boot_app0.bin"); + firm = APP_DATA_PATH("assets/marauder/c5/esp32_marauder.multiboardS3.bin"); + break; + + case QuickC5Boot_Flipperhttp: + enter_bootloader = true; + /* fallthrough */ + case QuickC5_Flipperhttp: + c5 = true; + boot = APP_DATA_PATH("assets/flipperhttp/c5/flipper_http_bootloader.bin"); + part = APP_DATA_PATH("assets/flipperhttp/c5/flipper_http_firmware_a.bin"); + firm = APP_DATA_PATH("assets/flipperhttp/c5/flipper_http_partitions.bin"); + break; + + case QuickC5Boot_GhostESP: + enter_bootloader = true; + /* fallthrough */ + case QuickC5_GhostESP: + c5 = true; + boot = APP_DATA_PATH("assets/ghostesp/c5/bootloader.bin"); + part = APP_DATA_PATH("assets/ghostesp/c5/partition-table.bin"); + firm = APP_DATA_PATH("assets/ghostesp/c5/Ghost_ESP_IDF.bin"); + break; + + case QuickC6Boot_Marauder: + enter_bootloader = true; + /* fallthrough */ + case QuickC6_Marauder: + s3 = true; + boot = APP_DATA_PATH("assets/marauder/c6/esp32_marauder.ino.bootloader.bin"); + part = APP_DATA_PATH("assets/marauder/esp32_marauder.ino.partitions.bin"); + app0 = APP_DATA_PATH("assets/marauder/boot_app0.bin"); + firm = APP_DATA_PATH("assets/marauder/c6/esp32_marauder.multiboardS3.bin"); + break; + + case QuickC6Boot_Flipperhttp: + enter_bootloader = true; + /* fallthrough */ + case QuickC6_Flipperhttp: + s3 = true; + boot = APP_DATA_PATH("assets/flipperhttp/c6/flipper_http_bootloader.bin"); + part = APP_DATA_PATH("assets/flipperhttp/c6/flipper_http_firmware_a.bin"); + firm = APP_DATA_PATH("assets/flipperhttp/c6/flipper_http_partitions.bin"); + break; + + case QuickC6Boot_GhostESP: + enter_bootloader = true; + /* fallthrough */ + case QuickC6_GhostESP: + s3 = true; + boot = APP_DATA_PATH("assets/ghostesp/c6/bootloader.bin"); + part = APP_DATA_PATH("assets/ghostesp/c6/partition-table.bin"); + firm = APP_DATA_PATH("assets/ghostesp/c6/Ghost_ESP_IDF.bin"); + break; default: consumed = false; return consumed; @@ -286,6 +557,25 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { strncpy(app->bin_file_path_app_a, firm, sizeof(app->bin_file_path_app_a)); } + app->selected_flash_options[SelectedFlashC5Mode] = c5; + if(boot) { + app->selected_flash_options[SelectedFlashBoot] = true; + strncpy(app->bin_file_path_boot, boot, sizeof(app->bin_file_path_boot)); + } + if(part) { + app->selected_flash_options[SelectedFlashPart] = true; + strncpy(app->bin_file_path_part, part, sizeof(app->bin_file_path_part)); + } + if(app0) { + app->selected_flash_options[SelectedFlashBootApp0] = true; + strncpy(app->bin_file_path_boot_app0, app0, sizeof(app->bin_file_path_boot_app0)); + } + if(firm) { + app->selected_flash_options[SelectedFlashAppA] = true; + strncpy(app->bin_file_path_app_a, firm, sizeof(app->bin_file_path_app_a)); + } + + app->reset = false; app->quickflash = true; app->turbospeed = true; @@ -306,6 +596,12 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { state = QuickWROOMBoot; else if(state > QuickS2Boot) state = QuickS2Boot; + else if(state > QuickC3Boot) + state = QuickC3Boot; + else if(state > QuickC5Boot) + state = QuickC5Boot; + else if(state > QuickC6Boot) + state = QuickC6Boot; // If pressing back from quick flash menu (not submenu), state will not matter scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneQuick, state); } From 9b7383355c88a75ae2bb4b68cca1a077d3720ead Mon Sep 17 00:00:00 2001 From: Play2BReal Date: Mon, 30 Jun 2025 15:34:12 -0400 Subject: [PATCH 2/2] Update esp_flasher_scene_browse.c --- esp_flasher/scenes/esp_flasher_scene_browse.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esp_flasher/scenes/esp_flasher_scene_browse.c b/esp_flasher/scenes/esp_flasher_scene_browse.c index 5cab851933..593bd7d1d7 100644 --- a/esp_flasher/scenes/esp_flasher_scene_browse.c +++ b/esp_flasher/scenes/esp_flasher_scene_browse.c @@ -211,8 +211,8 @@ static void _refresh_submenu(EspFlasherApp* app) { submenu_add_item( submenu, - app->selected_flash_options[SelectedFlashC5Mode] ? "[x] Using ESP32-C5" : - "[ ] Select for ESP32-C5", + app->selected_flash_options[SelectedFlashC5Mode] ? "[x] Using C5" : + "[ ] Select for C5", SubmenuIndexC5Mode, esp_flasher_scene_browse_callback, app); @@ -220,9 +220,9 @@ static void _refresh_submenu(EspFlasherApp* app) { const char* strSelectBootloader = STR_UNSELECT " " STR_BOOT; if(app->selected_flash_options[SelectedFlashC5Mode]) { if(app->selected_flash_options[SelectedFlashBoot]) { - strSelectBootloader = STR_SELECT " Bootloader (C5 @ 0x2000)"; + strSelectBootloader = STR_SELECT " Bootloader (0x2000)"; } else { - strSelectBootloader = STR_UNSELECT " Bootloader (C5 @ 0x2000)"; + strSelectBootloader = STR_UNSELECT " Bootloader (0x2000)"; } } else if(app->selected_flash_options[SelectedFlashS3Mode]) { if(app->selected_flash_options[SelectedFlashBoot]) {

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